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. 102<br />

.<strong>de</strong>f Res3 = R4 ; Byte 3 <strong>de</strong>s Ergebnisses<br />

.<strong>de</strong>f m1L = R16 ; LSB <strong>de</strong>r Zahl m1<br />

.<strong>de</strong>f m1M = R17 ; MSB <strong>de</strong>r Zahl m1<br />

.<strong>de</strong>f m2 = R18 ; die Zahl m2<br />

Zuerst wer<strong>de</strong>n die Zahlen in die Register gela<strong>de</strong>n:<br />

;<br />

; La<strong>de</strong> Register<br />

;<br />

.equ m1 = 10000<br />

;<br />

ldi m1M,HIGH(m1) ; obere 8 Bits von m1 in m1M<br />

ldi m1L,LOW(m1) ; niedrigere 8 Bits von m1 in m1L<br />

ldi m2,250 ; 8-Bit Konstante in m2<br />

Dann multiplizieren wir zuerst das niedrigerwertige Byte:<br />

;<br />

; Multiplikation<br />

;<br />

mul m1L,m2 ; Multipliziere LSB<br />

mov Res1,R0 ; kopiere Ergebnis in Ergebnisregister<br />

mov Res2,R1<br />

Die bei<strong>de</strong>n Zahlen sind in R17:R16 (<strong>de</strong>z 10000 = hex<br />

2710) und R18 (<strong>de</strong>z 250 = hex FA) gela<strong>de</strong>n.<br />

Die LSB-Multiplikation von hex 27 mit hex FA ergibt hex 0F0A, das in die Register R0 (LSB, hex<br />

A0) und R1 (MSB, hex 0F) geschrieben wur<strong>de</strong>. Das Ergebnis wird in die bei<strong>de</strong>n untersten Bytes <strong>de</strong>r<br />

Ergebnisregister, R3:R2, kopiert.<br />

Nun folgt die Multiplikation <strong>de</strong>s MSB mit m2:<br />

mul m1M,m2 ; Multipliziere MSB<br />

Die Multiplikation <strong>de</strong>s MSB von m1, hex 10, mit m2, hex<br />

FA, ergibt hex 2616 in R1:R0.<br />

Nun wer<strong>de</strong>n zwei Schritte auf einmal gemacht: die Multiplikation<br />

mit 256 und die Addition <strong>de</strong>s Ergebnisses zum<br />

bisherigen Ergebnis. Das wird erledigt durch Addition von<br />

R1:R0 zu Res3:Res2 anstelle von Res2:Res1. R1 wird zunächst<br />

schlicht nach Res3 kopiert. Dann wird R0 zu Res2<br />

addiert. Falls dabei das Übertragsflag Carry nach <strong>de</strong>r Addition<br />

gesetzt ist, muss noch das nächsthöhere Byte Res3<br />

um Eins erhöht wer<strong>de</strong>n.<br />

mov Res3,R1 ; Kopiere MSB Ergebnis zum Byte 3<br />

add Res2,R0 ; Addiere LSB Ergebnis zum Byte 2

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!