MIPS-Rekursive Fibonacci-Folge

Ich habe Probleme beim Umgang mit stacks rekursiv in MIPS. Ich einen Begriff davon bekommen, aber mein Programm nicht reagiert wie ich meine es zu.

Mein Ziel ist es, Benutzereingaben als n, und drucken Sie die Fibonacci-Zahl zu n ist. Was ich habe, so weit unten ist.

(Ich bin mir ziemlich sicher, dass das problem in der tatsächlichen Berechnung der Anzahl der fib-Funktion.) Vielen Dank für jede Hilfe!!! 🙂

.text
main:
# Prompt user to input non-negative number
la $a0,prompt
li $v0,4
syscall
li $v0,5
syscall
move $t2,$v0


# Call function to get fibonnacci #n
move $a0,$t2
move $v0,$t2
jal fib
move $t3,$v0

# Output message and n
la $a0,result
li $v0,4
syscall
move $a0,$t2
li $v0,1
syscall
la $a0,result2
li $v0,4
syscall
move $a0,$t3
li $v0,1
syscall
la $a0,endl
li $v0,4
syscall

# End program
li $v0,10
syscall

fib:
# Compute and return fibonacci number
beqz $a0,zero
beq $a0,1,one
sub $sp,$sp,4
sw $ra,0($sp)
sub $a0,$a0,1

jal fib

lw $ra,0($sp)
add $sp,$sp,4
sub $t8,$v0,2 # n - 2
sub $t9,$v0,1 # n - 1
add $v0,$t8,$t9 # add n-2,n-1
jr $ra # decrement/next in stack

zero:
li $v0,0
jr $ra
one:
li $v0,1
jr $ra

.data
prompt: .asciiz "Enter a non-negative number: "
result: .asciiz "F_"
result2: .asciiz " = "
endl: .asciiz "\n"

Beispiel läuft:

Enter a non-negative number: 5
F_5 = -29

Enter a non-negative number: 6
F_6 = -61

Richtig läuft:

Enter a non-negative number: 5
F_5 = 5

Enter a non-negative number: 6
F_6 = 8
  • 5 gibt -29. 6 gibt -61. etc.
InformationsquelleAutor Ethan | 2014-04-10
Schreibe einen Kommentar