   0 ;;  example of recursive function call
   0 ;;  fib n
   0 ;;    if n < 2 return n
   0 ;;    else return fib(n - 1) + fib(n - 2)
   0 
   0 ;;  many local variables are required
   0 ;;  t3 = n
   0 ;;  t1 = fib t3 - 1
   0 ;;  retv = fib t3 - 2
   0 ;;  retv = retv + t1
   0 
   0 ;;  r1 = input n, r2 = output retv,
   0 ;;  r3 = link, r4 = sp,
   0 ;;  r5 = t1, r6 = t3, 
   0 
   0 ;;  main() { b = fib(6) }
   0 
   0 .s
   0 	b 100
   0 	sp r4
   0 	link r3
   0 	n r1
   0 	retv r2
   0 	t1 r5
   0 	t3 r6
   0 
   0 .a 0
   0 .c
   0 :main	ld sp #200  ;; init sp
   1 	ld n #6
   2 	jal link fib  ;; call fib 3
   3 	st b retv
   4 	trap stop r0
   5 
   5 :fib	st @1 sp link  ;; push link
   6 	st @2 sp t1  ;; push t1
   7 	st @3 sp t3  ;; push t3
   8 	add sp sp #3
   9 
   9 	sub r0 n #2 ;; n < 2
  10 	jmp GE else
  11 :then	or retv n r0 ;; retv = n
  12 	jmp always ret
  13 :else	or t3 n r0 ;; t3 = n
  14 	sub n t3 #1 ;; n - 1
  15 	jal link fib
  16 	or t1 retv r0 ;; t1 = fib n - 1
  17 	sub n t3 #2 ;; n - 2
  18 	jal link fib  ;; retv = fib n - 2
  19 	add retv retv t1
  20 	
  20 	;; restore locals
  20 :ret	ld t3 @0 sp
  21 	ld t1 @-1 sp
  22 	ld link @-2 sp
  23 	sub sp sp #3
  24 	jr link
  25 .e
