; - - - - - - - - - - - - - - - - - -
; \/ \/ \/ NICHT GEFORDERT \/ \/ \/
.include "m16def.inc"
.cseg
.org $000
jmp init
; /\ /\ /\ NICHT GEFORDERT /\ /\ /\
; - - - - - - - - - - - - - - - - - -
.cseg ;Codesegment
.org $002 ;Code beginnt bei Adresse $002
jmp init
init_data:
ldi PREV, 1
ldi PREPREV, 0
ldi CNT, 8
call fibon_iter ;Unterprogramm wird aufgerufen (Rueckgabe: PREPREV)
END:
rjmp END
; Teilaufgabe 10.2 b)
; ==========================
;
;SUBROUTINE fib_iter
; Errechnet die Fibonacci-Zahl
.def PREV = R16 ;Parameter prev
.def PREPREV = R17 ;Parameter preprev (spaeter auch Rueckgabewert)
.def CNT = R18 ;Parameter count
.def TEMP = R19 ;Zwischenspeicher
fibon_iter:
tst CNT ;falls count = 0, ...
breq fib_end ; ... gehe zu "zero"
mov TEMP, PREV ;prev zwischenspeichern
add PREV, PREPREV ;prev = prev + preprev
mov PREPREV, TEMP ;preprev auf zwischengespeicherten Wert von prev setzen
dec CNT ;count-1
call fibon_iter ;fib_iter(prev+preprev, prev, count-1)
rjmp fib_end ; Ende
fib_end:
ret
; - - - - - - - - - - - - - - - - - -
; \/ \/ \/ NICHT GEFORDERT \/ \/ \/
init:
ldi R16,LOW(RAMEND)
out SPL,R16
ldi R17,HIGH(RAMEND)
out SPH,R17
jmp init_data
; /\ /\ /\ NICHT GEFORDERT /\ /\ /\
; - - - - - - - - - - - - - - - - - -
Comments