Я новичок ie с мипсом Это часть домашнего задания, поэтому я думаю, вместо того, чтобы давать прямой ответ, указание на то, где что-то не так, может лучше всего понять для меня
Цель это преобразовать этот код C ++ в язык ассемблера mips
#fib(int n)
#{
# if(n == 0)
# return 0
# else if ( n == 1)
# return 1
# else
# return fib(n-1) +fib(n-2)
#n will be stored in a0 since it is the argument
#there will be two results, fib(n-1) and fib(n-2), store in the s0 and s1, so in the stack
#return the final value in $v0
addi $s2, $zero, 10
move $a0, $s2 #move the value of n to a0 to pass the argument
jal fib
beq $zero, $zero, END
fib: #fib code
addi $sp, $sp, -12 #reserve stack space for three variable needed to store in the stack
sw $ra, 0($sp) #for return address store in stack
sw $s0, 4($sp) #for results store in stack
sw $a0, 8($sp) #for first result of fib(n-1) store in the stack
beq $a0, $zero, if0
beq $a0, 1, if1
#else if case
addi $a0, $a0, -1
jal fib
move $s0, $v0
lw $a0, 8($sp)
addi $a0, $a0, -2
jal fib
add $v0, $v0, $s0
lw $s0, 8($sp)
lw $ra, 0($sp)
addiu $sp, $sp, 12
jr $ra
if0:
lw $s0, 4($sp)
lw $ra, 0($sp)
addiu $sp, $sp, 12
li $v0, 0
jr $ra
if1:
lw $s0, 4($sp)
lw $ra, 0($sp)
addiu $sp, $sp, 12
li $v0, 1
jr $ra
END:
nop
, однако результат не дает мне 55, когда n = 10 текущий результат, сохраненный в v0, дает мне значение 21. Может кто-нибудь помочь мне где я сделал точно не так? Заранее спасибо.