Zorbing

[TGI] Fibonacci iterativ - HATmega16

Jun 13th, 2013
294
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   PREV, 1
  15.     ldi   PREPREV, 0
  16.     ldi   CNT, 8
  17.     call  fibon_iter        ;Unterprogramm wird aufgerufen (Rueckgabe: PREPREV)
  18. END:
  19.     rjmp  END
  20.  
  21.  
  22. ; Teilaufgabe 10.2 c)
  23. ; ==========================
  24. ;
  25. ;SUBROUTINE fib_iter
  26. ; Errechnet die Fibonacci-Zahl
  27. .def    PREV    = R16       ;Parameter prev
  28. .def    PREPREV = R17       ;Parameter preprev (spaeter auch Rueckgabewert)
  29. .def    CNT     = R18       ;Parameter count
  30. .def    TEMP    = R19       ;Zwischenspeicher
  31. fibon_iter:
  32.     tst   CNT               ;falls count = 0, ...
  33.     breq  fib_end           ; ... gehe zu "zero"
  34.     mov   TEMP, PREV        ;prev zwischenspeichern
  35.     add   PREV, PREPREV     ;prev = prev + preprev
  36.     mov   PREPREV, TEMP     ;preprev auf zwischengespeicherten Wert von prev setzen
  37.     dec   CNT               ;count-1
  38.     rjmp  fibon_iter        ;fib_iter(prev+preprev, prev, count-1)
  39. fib_end:
  40.     ret
  41.  
  42.  
  43. ; - - - - - - - - - - - - - - - - - -
  44. ; \/ \/ \/  NICHT GEFORDERT  \/ \/ \/
  45. init:
  46.     ldi   R16,LOW(RAMEND)
  47.     out   SPL,R16
  48.     ldi   R17,HIGH(RAMEND)
  49.     out   SPH,R17
  50.     jmp   init_data
  51. ; /\ /\ /\  NICHT GEFORDERT  /\ /\ /\
  52. ; - - - - - - - - - - - - - - - - - -
Advertisement
Add Comment
Please, Sign In to add comment