Zorbing icon

[TGI] Fibonacci itersiv - HATmega16

Zorbing | PRO | 06/14/13 12:44:47 AM UTC | 0 ⭐ | 281 👁️ | Never ⏰ | []
ASM (NASM) |

0 B

|

None

|

0 👍

/

0 👎

; - - - - - - - - - - - - - - - - - -
; \/ \/ \/  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