.data
n: .word 13
.text
.globl solution
solution:
# Call function with argument n
lw a0, n
addi sp,sp,-4
sw ra, 0(sp)
jal ra, fib3
lw ra, 0(sp)
addi sp,sp,4
# Output restult
li a7, 36
ecall
# Exit program
li a7, 10
ecall
ret
fib3:
blez a0, end #Base-case a0 kleiner gleich 0 gehe ende
addi sp, sp, -8 # Speicher auf dem Stack für a0 und ra sichern (Stackpointer verschieben)
sw ra, 4(sp) # Sicher ra im Stack
sw a0, 0(sp) # Sicher a0 im Stack
addi t0, a0, -3 # Wert für Rekursive Rechnung (zwischenspeicherung in t0)
addi t1, a0, -1 # Wert für Rekursive Rechnung (zwischenspeicherung in t0)
jal ra, fib3 # Rekursion (gehe zum Rekursionsanfang)
lw a0, 0(sp) # lade a0 vom Stack
add a0, t0, t1 # addiere die rekursiven werte
lw ra, 4(sp) # lade Rücksprungadresse
addi sp, sp, 8 # Stackpointer verschieben (zurrücksetzen)
ret # return fertig
end:
ret
Warum? Irgendwo verschiebe ich den sp wohl falsch aber ich weiß nicht wo