02.05.2013 Aufrufe

beginner_de

beginner_de

beginner_de

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!