start
;; data
load $2, 8
;; compare-vars
load $4, 2
;; kode
call fib
jmp slutt
fib
jeq $2, $0, fib_zero ; == 0
jle $2, $4, fib_two ; <= 2
mov $9, $2 ; save input
call push
sub $2, $2, 1 ; input -= 1
call fib
call pop ; reload input; it might have been destroyed by call
mov $2, $9
mov $9, $3
call push ; save result
sub $2, $2, 2 ; input -= 2
call fib
call pop ; reload last result
mov $5, $9
add $3, $3, $5 ; add results
ret
fib_zero
load $3, 0
ret
fib_two
load $3, 1
ret
push
dec sp
store $9, sp, 0
ret
pop
load $9, sp, 0
inc sp
ret
slutt
end start