blob: fe38fe542b1dc97724d3c7f1764ea47e28ebaf2e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
; 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
|