02.05.2013 Aufrufe

beginner_de

beginner_de

beginner_de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Avr-Asm-Tutorial S. 121<br />

; +----+<br />

; | R1 | Eingabezahl, im Beispiel $FF<br />

; | FF |<br />

; +----+<br />

; +----+----+----+<br />

; | R4 | R3 | R2 | Multiplikant 502 = $00 01 F6<br />

; | 00 | 01 | F6 |<br />

; +----+----+----+<br />

;<br />

;<br />

; +----+----+----+<br />

; | R7 | R6 | R5 | Resultat, im Beispiel 128.010<br />

; | 01 | F4 | 0A |<br />

; +----+----+----+<br />

fpconv8m:<br />

clr R4 ; Setze <strong>de</strong>n Multiplikant auf 502<br />

ldi rmp,$01<br />

mov R3,rmp<br />

ldi rmp,$F6<br />

mov R2,rmp<br />

clr R7 ; leere Ergebnisregister<br />

clr R6<br />

clr R5<br />

fpconv8m1:<br />

or r1,R1 ; Prüfe ob noch Bits 1 sind<br />

brne fpconv8m2 ; Noch Einsen, mach weiter<br />

ret ; fertig, kehre zurück<br />

fpconv8m2:<br />

lsr R1 ; Schiebe Zahl nach rechts (teilen durch 2)<br />

brcc fpconv8m3 ; Wenn das niedrigste Bit eine 0 war, dann überspringe <strong>de</strong>n<br />

Additionsschritt<br />

add R5,R2 ; Addiere die Zahl in R4:R3:R2 zum Ergebnis<br />

adc R6,R3<br />

adc R7,R4<br />

fpconv8m3:<br />

lsl R2 ; Multipliziere R4:R3:R2 mit 2<br />

rol R3<br />

rol R4<br />

rjmp fpconv8m1 ; Wie<strong>de</strong>rhole für das nächste Bit<br />

; Run<strong>de</strong> die Zahl in R7:R6 mit <strong>de</strong>m Wert von Bit 7 von R5<br />

fpconv8r:<br />

clr rmp ; Null nach rmp<br />

lsl R5 ; Rotiere Bit 7 ins Carry<br />

adc R6,rmp ; Addiere LSB mit Übertrag<br />

adc R7,rmp ; Addiere MSB mit Übertrag<br />

mov R2,R7 ; Kopiere <strong>de</strong>n Wert nach R2:R1 (durch 256 teilen)<br />

mov R1,R6<br />

ret<br />

; Wandle das Wort in R2:R1 in einen ASCII-Text in R5:R6:R7:R8<br />

; +----+----+<br />

; + R2 | R1 | Eingangswert 0..500<br />

; +----+----+<br />

; +----+----+<br />

; | R4 | R3 | Dezimalteiler<br />

; +----+----+<br />

; +----+----+----+----+<br />

; | R5 | R6 | R7 | R8 | Ergebnistext (für Eingangswert 500)<br />

; | '5'| '.'| '0'| '0'|<br />

; +----+----+----+----+<br />

fpconv8a:<br />

clr R4 ; Setze Dezimalteiler auf 100<br />

ldi rmp,100<br />

mov R3,rmp<br />

rcall fpconv8d ; Hole ASCII-Ziffer durch wie<strong>de</strong>rholtes Abziehen<br />

mov R5,rmp ; Setze Hun<strong>de</strong>rter Zeichen<br />

ldi rmp,10 ; Setze Dezimalteiler auf 10

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!