blob: 5b9030be698fe0eb57d3655742f01df64918d826 (
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
33
|
@include %bootstrap
@data iters 51
@label main
ldi iters RA
ldr RA RA
calli fibo ; call fibo subroutine with parameter 1000
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
|