MIPS中的延迟循环

时间:2014-11-30 07:44:27

标签: loops assembly count mips pic32

我在编写一个返回常量0x80000的延迟循环时遇到问题。输出应该像Hello,world! 0 你好,世界! 1 你好,世界! 2 ... 但是当我运行我的程序时,终端并没有显示任何内容,即使我相信一个Hello,world!应该出现。我试图通过调试代码找出问题所在,但这似乎并没有帮助我。有关如何解决此问题的任何建议吗?

.ent getDelay
.text
.global getDelay

getDelay:
addi $sp, $sp, -1
sw $ra, 0($sp)
la $a0, helloStr
lw $a1, counter 
jal printf
nop
lw $ra, 0($sp)
addi $sp, $sp, -1
lw $t0, ($a1)
addiu $t0, $t0,1
la $t1, counter
sw $t1, ($a1) 
$v0 = 0x80000
jr $ra

.end getDelay

.data
helloStr: .asciiz "Hello, world %d\n"
counter: .word 100

1 个答案:

答案 0 :(得分:0)

  1. 您应该只调整$sp的倍数为4(字数)。 您应该使用addiu $sp, $sp, -4addiu $sp, $sp, 4
  2. 您正在递增$t0,但随后存储$t1。你不需要 我应该使用la $t1, counter而不是sw $t1, ($a1) sw $t0, ($a1)
  3. $v0 = 0x80000不是指令,您可能需要li $v0, 0x80000
  4. 如果这个函数本身应该是一些延迟,那么你需要 一个循环。