beginner_de
beginner_de
beginner_de
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