beginner_de
beginner_de
beginner_de
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Avr-Asm-Tutorial S. 106<br />
Die Multiplikation hat 19 Taktzyklen gebraucht, das ist<br />
sehr viel schneller als die Software-Multiplikation.<br />
Ein weiterer Vorteil: die benötigte Zeit ist IMMER genau<br />
19 Taktzyklen lang, nicht abhängig von <strong>de</strong>n Zahlenwerten<br />
(wie es bei <strong>de</strong>r Software-Multiplikation <strong>de</strong>r Fall ist) und<br />
vom Auftreten von Überläufen (<strong>de</strong>shalb <strong>de</strong>r Trick mit <strong>de</strong>r<br />
Addition von Null mit Carry). Darauf kann man sich verlassen<br />
...<br />
Hardware Multiplikation einer 16- mit einer 24-Bit-Binärzahl<br />
Die Multiplikation einer 16-Bit-Binärzahl<br />
"a" mit einer 24-Bit-Binärzahl "b" führt im<br />
Ergebnis zu einem maximal 40 Bit breiten<br />
Ergebnis. Das Multiplizier-Schema erfor<strong>de</strong>rt<br />
sechs 8-mit-8-Bit-Multiplikationen und das<br />
Addieren <strong>de</strong>r Ergebnisse an <strong>de</strong>r richtigen Position<br />
zum Gesamtergebnis. Der Assembler-<br />
Co<strong>de</strong> dafür:<br />
; Hardware Multiplikation 16 mit 24 Bit<br />
.inclu<strong>de</strong> "m8<strong>de</strong>f.inc"<br />
;<br />
; Register Definitionen<br />
.<strong>de</strong>f a1 = R2 ; <strong>de</strong>finiere 16-bit Register<br />
.<strong>de</strong>f a2 = R3<br />
.<strong>de</strong>f b1 = R4 ; <strong>de</strong>finiere 24-bit Register<br />
.<strong>de</strong>f b2 = R5<br />
.<strong>de</strong>f b3 = R6<br />
.<strong>de</strong>f e1 = R7 ; <strong>de</strong>finiere 40-bit Ergebnisregister<br />
.<strong>de</strong>f e2 = R8<br />
.<strong>de</strong>f e3 = R9<br />
.<strong>de</strong>f e4 = R10<br />
.<strong>de</strong>f e5 = R11<br />
.<strong>de</strong>f c0 = R12 ; Hilfsregister fuer Additionen<br />
.<strong>de</strong>f rl = R16 ; La<strong>de</strong>register<br />
;<br />
; Load constants<br />
.equ a = 10000 ; Multiplikator a, hex 2710<br />
.equ b = 1000000 ; Multiplikator b, hex 0F4240<br />
ldi rl,BYTE1(a) ; la<strong>de</strong> a<br />
mov a1,rl<br />
ldi rl,BYTE2(a)<br />
mov a2,rl<br />
ldi rl,BYTE1(b) ; la<strong>de</strong> b<br />
mov b1,rl<br />
ldi rl,BYTE2(b)<br />
mov b2,rl<br />
ldi rl,BYTE3(b)<br />
mov b3,rl<br />
;<br />
; Loesche Registers<br />
clr e1 ; Loesche Ergebnisregister<br />
clr e2<br />
clr e3