#include .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