Pointers MIPS斐波那契递归程序,我理解正确吗? 菲波纳奇 ##使用的寄存器: ##$a0-最初为n。 ##$t0-参数n。 ##$t1-fib(n-1)。 ##$t2-fib(n-2)。 .文本 小谎: bgt$a0,1,fib#u递归#如果n
以下是我的问题:当在main中调用jal fib时,函数operate是否知道在a0上操作,如果我在a1、a2中调用fib之前输入一些值会怎么样。。。这有什么影响吗Pointers MIPS斐波那契递归程序,我理解正确吗? 菲波纳奇 ##使用的寄存器: ##$a0-最初为n。 ##$t0-参数n。 ##$t1-fib(n-1)。 ##$t2-fib(n-2)。 .文本 小谎: bgt$a0,1,fib#u递归#如果n,pointers,recursion,assembly,stack,mips,Pointers,Recursion,Assembly,Stack,Mips,以下是我的问题:当在main中调用jal fib时,函数operate是否知道在a0上操作,如果我在a1、a2中调用fib之前输入一些值会怎么样。。。这有什么影响吗 我在添加输出消息时也遇到了问题:“输入n以计算fib(n):”,然后当我收到“n”并将其放入$a0时,查找fib需要花费相当多的时间,并不断返回1或0。。wierd.哈哈,谢谢你的意见:我可以提到我关于斐波那契x86问题的答案,但这没有帮助,因为它不是递归的。 ## fibonaci ## Registers used: ## $
我在添加输出消息时也遇到了问题:“输入n以计算fib(n):”,然后当我收到“n”并将其放入$a0时,查找fib需要花费相当多的时间,并不断返回1或0。。wierd.哈哈,谢谢你的意见:我可以提到我关于斐波那契x86问题的答案,但这没有帮助,因为它不是递归的。
## fibonaci
## Registers used:
## $a0 - initially n.
## $t0 - parameter n.
## $t1 - fib (n - 1).
## $t2 - fib (n - 2).
.text
fib:
bgt $a0, 1, fib_recurse # if n < 2, then just return a 1,
li $v0, 1 # don't bother to build a stack frame.
jr $ra
# otherwise, set things up to handle
fib_recurse: # the recursive case:
subu $sp, $sp, 32 # frame size = 32, just because...
sw $ra, 28($sp) # preserve the Return Address.
sw $fp, 24($sp) # preserve the Frame Pointer.
addu $fp, $sp, 32 # move Frame Pointer to base of frame.
move $t0, $a0 # get n from caller.
# compute fib (n - 1):
sw $t0, 20($sp) # preserve n.
sub $a0, $t0, 1 # compute fib (n - 1)
jal fib
move $t1, $v0 # t1 = fib (n - 1)
lw $t0, 20($sp) # restore n.
# compute fib (n - 2):
sw $t1, 16($sp) # preserve $t1.
sub $a0, $t0, 2 # compute fib (n - 2)
jal fib
move $t2, $v0 # t2 = fib (n - 2)
lw $t1, 16($sp) # restore $t1.
add $v0, $t1, $t2 # $v0 = fib (n - 1) + fib (n - 2)
lw $ra, 28($sp) # restore Return Address.
lw $fp, 24($sp) # restore Frame Pointer.
addu $sp, $sp, 32 # restore Stack Pointer.
jr $ra # return.
main:
li $a0, 5 # fib (5) is what we are trying to find.
jal fib
move $a0, $v0
li $v0, 1
syscall
li $v0, 10
syscall