;; example of recursive function call ;; fib n ;; if n < 2 return n ;; else return fib(n - 1) + fib(n - 2) ;; many local variables are required ;; t3 = n ;; t1 = fib t3 - 1 ;; retv = fib t3 - 2 ;; retv = retv + t1 ;; r1 = input n, r2 = output retv, ;; r3 = link, r4 = sp, ;; r5 = t1, r6 = t3, ;; main() { b = fib(6) } .s b 100 .a 0 .c :main ld r4 #200 ;; init sp ld r1 #6 jal r3 fib ;; call fib 3 st b r2 trap stop r0 :fib st @1 r4 r3 ;; push link st @2 r4 r5 ;; push t1 st @3 r4 r6 ;; push t3 add r4 r4 #3 sub r0 r1 #2 ;; n < 2 jmp GE else :then or r2 r1 r0 ;; retv = n jmp always ret :else or r6 r1 r0 ;; t3 = n sub r1 r6 #1 ;; n - 1 jal r3 fib or r5 r2 r0 ;; t1 = fib n - 1 sub r1 r6 #2 ;; n - 2 jal r3 fib ;; retv = fib n - 2 add r2 r2 r5 ;; restore locals :ret ld r6 @0 r4 ld r5 @-1 r4 ld r3 @-2 r4 sub r4 r4 #3 jr r3 .e