.data .org 0x10 list: .fill 0x1 ;1. element = 1 ;0x10 .fill 0x1 ;2. element = 1 ;0x14 .fill 0x100, 0x0 ;nullen.. .text main: ldi r1, 9; ldil r10, list@lo ; global pointer ldih r10, list@hi call+ fibcall; br+ main; ; fib(n) { ; if (list[n] > 0) { ; return list[n] ; } ; erg = list[n] = fib(n-1) + (n-2) ; return erg ; } fibcall: lls r1, r1, 2 ; *4 fibmem: add r2, r10, r1 ldw r0, 0(r2) cmpi r0, 0 retnz- push r2 ; addr pushen subi r1, r1, 4 call+ fibmem push r0 ; zwischenerg pushen subi r1, r1, 4 call+ fibmem pop r2 ; zwischenerg poppen add r0, r2, r0 pop r2 ; addr poppen stw r0, 0(r2) ; ergebnis speichern addi r1, r1, 8 ret+