Zorbing

[TGI] Fibonacci - HATmega16

Jun 13th, 2013
320
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; - - - - - - - - - - - - - - - - - -
  2. ; \/ \/ \/  NICHT GEFORDERT  \/ \/ \/
  3. .include    "m16def.inc"
  4. .cseg
  5. .org    $000
  6.     JMP   init
  7. ; /\ /\ /\  NICHT GEFORDERT  /\ /\ /\
  8. ; - - - - - - - - - - - - - - - - - -
  9.  
  10. .cseg                       ;Codesegment
  11. .org    $002                ;Code beginnt bei Adresse $002
  12.     JMP   init
  13. init_data:
  14.     LDI   K, 12             ;Parameter k wird auf 7 gesetzt
  15.     CALL  FIBON             ;Unterprogramm wird aufgerufen
  16. END:
  17.     RJMP  END
  18.  
  19.  
  20. ; Teilaufgabe 10.2 a)
  21. ; ==========================
  22. ;
  23. ;SUBROUTINE fibonacci
  24. ; Errechnet die Fibonacci-Zahl fuer K und legt es in RUECK ab
  25. .def    K     = R16         ;Parameter k
  26. .def    RUECK = R17         ;Rueckgabewert
  27. .def    TEMP  = R18         ;temporaer fuer Rueckgabewert
  28. FIBON:
  29.     PUSH  K                 ;Rettet die Wale!!
  30.     CLR   RUECK             ;Rueckgabewert auf 0 setzen
  31.     TST   K                 ;falls k = 0, ...
  32.     BREQ  FIBEND            ;... Ende
  33.     DEC   K                 ;k dekrementieren
  34.     BREQ  ONE               ;falls das urspruengliche k = 1, zu ONE springen
  35.     CALL  FIBON             ;fibonacci(k-1)
  36.     DEC   K                 ;k dekrementieren
  37.     PUSH  RUECK             ;auf den Stack: Rueckgabewert von fibonacci(k-1)
  38.     CALL  FIBON             ;fibonacci(k-2)
  39.     MOV   TEMP, RUECK       ;Rueckgabewert von fibonacci(k-2) zwischenspeichern
  40.     POP   RUECK             ;vom Stack holen: Rueckgabewert von fibonacci(k-1)
  41.     ADD   RUECK, TEMP       ;fibonacci(k-1) + fibonacci(k-2)
  42.     RJMP  FIBEND            ;Ende
  43. ONE:
  44.     LDI   RUECK, 1          ;Rueckgabewert auf 1 setzen
  45. FIBEND:
  46.     POP   K                 ;k wieder auf den urspruenglichen Wert vor Programmaufruf setzen
  47.     RET
  48.  
  49.  
  50. ; - - - - - - - - - - - - - - - - - -
  51. ; \/ \/ \/  NICHT GEFORDERT  \/ \/ \/
  52. init:
  53.     ldi     R16,LOW(RAMEND)
  54.     out     SPL,R16
  55.     ldi     R17,HIGH(RAMEND)
  56.     out     SPH,R17
  57.     jmp     init_data
  58. ; /\ /\ /\  NICHT GEFORDERT  /\ /\ /\
  59. ; - - - - - - - - - - - - - - - - - -
Advertisement
Add Comment
Please, Sign In to add comment