; bootstrap code (must be called to setup mandatory data) ; will jump to label main @include bootstrap @label main ldi 10 RA calli fibo ; call fibo subroutine with parameter 10 hlt @label fibo ; fibo(n) subroutine ; arguments: n (RA) ; return: fibo(n) (RA) stack_stash RB RC RD ; store RB, RC on stack subi RA 2 RB bri sign fibo_early ; if n < 2, return n ldi 0 RB ; a = 0 ldi 1 RC ; b = 1 @label fibo_loop add RB RC RD ; v = a + b mov RC RB ; a = b mov RD RC ; b = v dec RA ; n -= 1 bri zero fibo_done jpi fibo_loop ; loop while n > 0 @label fibo_early stack_restore RB RC RD ; restore used registers return ; return from subroutine @label fibo_done mov RD RA ; restore used registers stack_restore RB RC RD ; return from subroutine return