-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