0

我在编写将返回常量 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
4

1 回答 1

0
  1. 您应该只调整$sp4 的倍数(字长)。您应该使用addiu $sp, $sp, -4addiu $sp, $sp, 4
  2. 您正在递增$t0但随后存储$t1. 你不需要la $t1, counterand 而不是sw $t1, ($a1)你应该使用 sw $t0, ($a1).
  3. $v0 = 0x80000不是指令,您可能想要li $v0, 0x80000.
  4. 如果这个函数本身应该有一些延迟,那么你需要一个循环。
于 2014-11-30T13:31:01.747 回答