Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; - - - - - - - - - - - - - - - - - -
- ; \/ \/ \/ 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 /\ /\ /\
- ; - - - - - - - - - - - - - - - - - -
Advertisement
Add Comment
Please, Sign In to add comment