main:
LDI r24, 10
LDI r31, hi8(pm(fib))
LDI r30, lo8(pm(fib))
ICALL
MOV r26, r24
LDI r24, 1 ; print "%d\n"
LDI r31, 0x70
LDI r30, 0x00
ICALL
LDI r24, 0 ; exit
LDI r31, 0x70
LDI r30, 0x00
ICALL
fib:
; if (n < 2) return 1;
LDI r16, 1
SUB r16, r24
BRBS 2, L1
LDI r24, 1
RET
L1:
; save n on stack
PUSH r24
; calculate fib(n-1)
LDI r16, 1
SUB r24, r16
LDI r31, hi8(pm(fib))
LDI r30, lo8(pm(fib))
ICALL
; recover n and save fib(n-1) to stack
POP r16
PUSH r24
MOV r24, r16
; calculate fib(n-2)
LDI r16, 2
SUB r24, r16
LDI r31, hi8(pm(fib))
LDI r30, lo8(pm(fib))
ICALL
; recover fib(n-1)
POP r16
ADD r24, r16
; return fib(n-1)+fib(n-2)
RET