-1
我试图在MIPS汇编语言中实现斐波那契函数。我在下面写了一些代码,它在运行时执行时没有任何错误,我可以在每次迭代中正确地看到$ a0中的n值。然而,摆在$ V0结果从未设置直到最后一次迭代,它返回2MIPS汇编中的斐波那契不会返回正确的答案
代码:
data:
addi $a0, $zero, 10
fib:
slti $t0, $a0, 2 # check n <= 1
beq $t0, $zero, body # if previous statement was false, continue procedure
addi $v0, $zero, 1 # else return 1
jr $ra # return to body
body:
addi $sp, $sp, -16 # make room for 4 registers in stack
sw $a0, 0($sp) # save $a0 = n, to stack
sw $ra, 4($sp) # save return address to stack
addi $a0, $a0, -1 # $a0 = n - 1
jal fib # invoke fib(n-1) and save return address
sw $v0, 8($sp) # $v0 = fib(n-1), save to stack
addi $a0, $a0, -1 # $a0 = n - 2
jal fib # invoke fib(n-2) and save return address
sw $v0, 12($sp) # $v0 = fib(n-2), save to stack
lw $t0, 8($sp) # $t0 = fib(n-1)
lw $t1, 12($sp) # $t1 = fib(n-2)
addi $sp, $sp, 16 # pop from stack
add $v0, $t0, $t1 # $v0 = fib(n-1) + fib(n-2)
syscall # return
什么是你的问题?哪一行没有做你期望的? – 2014-09-13 15:26:26
问题是,对于所有输入> 2,终止时存储在$ v0中的结果是2,并且我不确定确切的线 – Tarlen 2014-09-13 15:29:29
那么您需要调试更多。当你发现某条线路没有达到你期望的水平时,请回来,我们可以提供帮助。 – 2014-09-13 15:31:50