.text
main:
ldi r1, 9;
- ldil r10, list@lo
+ ldil r10, list@lo ; global pointer
ldih r10, list@hi
- call+ fibmem;
+ call+ fibcall;
br+ main;
- ; if (list[n] == true) {
- ; return list[n]
+ ; fib(n) {
+ ; if (list[n] > 0) {
+ ; return list[n]
+ ; }
+ ; erg = list[n] = fib(n-1) + (n-2)
+ ; return erg
; }
- ; erg = list[n] = fib(n-1) + (n-2)
- ; return erg
+fibcall:
+ lls r1, r1, 2 ; *4
fibmem:
- lls r2, r1, 2 ; * 4
- add r2, r10, r2
+ add r2, r10, r1
ldw r0, 0(r2)
cmpi r0, 0
retnz-
push r2 ; addr pushen
push r1 ; param pushen
- subi r1, r1, 1
+ subi r1, r1, 4
call+ fibmem
pop r1 ; param poppen
push r0 ; zwischenerg pushen
- subi r1, r1, 2
+ subi r1, r1, 8
call+ fibmem
pop r2 ; zwischenerg poppen
add r0, r2, r0