Zorbing icon

[TGI] Fibonacci - HATmega16

Zorbing | PRO | 06/13/13 11:19:37 PM UTC | 0 ⭐ | 287 👁️ | 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   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