rendered paste body#include <iregdef.h>
.data
format: .asciiz "%d \n"
.text
.globl start
.ent start
start:
addi sp, sp, -4 # push return address on stack
sw ra, 0(sp)
li a0,5
jal fact
la a0,format
lw v0,0(v0)
jal printf
lw ra, 0(sp) # pop return address
addi sp, sp, 4
break
done: jr ra
fact:
addi sp, sp, -4 # pusha returadressen
sw ra, 0(sp)
beqz a0, basfall # n == 0?
addi sp, sp, -4 # pusha $s0
sw s0, 0(sp)
move s0, a0 # spara n i $s0
addi a0, a0, -1 # n-1
jal fact # rekursivt anrop ==> $v0 = fact(n)
mul v0, s0, v0 # fact(n) = n*fact(n-1)
lw s0, 0(sp) # poppa $s0
addi sp, sp, 4
j return
basfall:
addi v0, zero, 1
return:
lw ra, 0(sp) # popa returadressen
addi sp, sp, 4
jr ra # Hoppa tillbaka till anroparen