; - - - - - - - - - - - - - - - - - - ; \/ \/ \/ 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 K, 12 ;Parameter k wird auf 7 gesetzt CALL FIBON ;Unterprogramm wird aufgerufen END: RJMP END ; Teilaufgabe 10.2 a) ; ========================== ; ;SUBROUTINE fibonacci ; Errechnet die Fibonacci-Zahl fuer K und legt es in RUECK ab .def K = R16 ;Parameter k .def RUECK = R17 ;Rueckgabewert .def TEMP = R18 ;temporaer fuer Rueckgabewert FIBON: PUSH K ;Rettet die Wale!! CLR RUECK ;Rueckgabewert auf 0 setzen TST K ;falls k = 0, ... BREQ FIBEND ;... Ende DEC K ;k dekrementieren BREQ ONE ;falls das urspruengliche k = 1, zu ONE springen CALL FIBON ;fibonacci(k-1) DEC K ;k dekrementieren PUSH RUECK ;auf den Stack: Rueckgabewert von fibonacci(k-1) CALL FIBON ;fibonacci(k-2) MOV TEMP, RUECK ;Rueckgabewert von fibonacci(k-2) zwischenspeichern POP RUECK ;vom Stack holen: Rueckgabewert von fibonacci(k-1) ADD RUECK, TEMP ;fibonacci(k-1) + fibonacci(k-2) RJMP FIBEND ;Ende ONE: LDI RUECK, 1 ;Rueckgabewert auf 1 setzen FIBEND: POP K ;k wieder auf den urspruenglichen Wert vor Programmaufruf setzen RET ; - - - - - - - - - - - - - - - - - - ; \/ \/ \/ NICHT GEFORDERT \/ \/ \/ init: ldi R16,LOW(RAMEND) out SPL,R16 ldi R17,HIGH(RAMEND) out SPH,R17 jmp init_data ; /\ /\ /\ NICHT GEFORDERT /\ /\ /\ ; - - - - - - - - - - - - - - - - - -
Comments