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. 101<br />
Die Register R0 (LSB) und R1 (MSB) enthalten das Ergebnis hex 61A8 o<strong>de</strong>r <strong>de</strong>zimal 25,000.<br />
Und: ja, die Multiplikation braucht bloß zwei Zyklen, o<strong>de</strong>r 2 Mikrosekun<strong>de</strong>n bei einem Takt von einem<br />
MHz.<br />
Hardware Multiplikation von 16- mit 8-Bit-Zahl<br />
Sind größere Zahlen zu multiplizieren? Die Hardware ist auf 8 Bit beschränkt, also müssen wir ersatzweise<br />
einige geniale I<strong>de</strong>en anwen<strong>de</strong>n. Das ist an diesem Beispiel 16 mal 8 gezeigt. Verstehen<br />
<strong>de</strong>s Konzepts hilft bei <strong>de</strong>r Anwendung <strong>de</strong>r Metho<strong>de</strong> und es ist ein leichtes, das später auf die 32- mit<br />
64-Bit-Multiplikation zu übertragen.<br />
Zuerst die Mathematik: eine 16-Bit-Zahl lässt<br />
sich in zwei 8-Bit-Zahlen auftrennen, wobei die<br />
höherwertige <strong>de</strong>r bei<strong>de</strong>n Zahlen mit <strong>de</strong>zimal<br />
256 o<strong>de</strong>r hex 100 mal genommen wird. Für die,<br />
die eine Erinnerung brauchen: die Dezimalzahl<br />
1234 kann man auch als die Summe aus<br />
(12*100) und 34 betrachten, o<strong>de</strong>r auch als die<br />
Summe aus (1*1000), (2*100), (2*10) und 4. Die 16-Bit-Binärzahl m1 ist also gleich 256*m1M<br />
plus m1L, wobei m1M das MSB und m1L das LSB ist.<br />
Multiplikation dieser Zahl mit <strong>de</strong>r 8-Bit-Zahl m2 ist also mathematisch ausgedrückt:<br />
m1 * m2 = (256*m1M + m1L) * m2 = 256*m1M*m2 + m1L*m2<br />
Wir müssen also lediglich zwei Multiplikationen durchführen und die Ergebnisse addieren. Zwei<br />
Multiplikationen? Es sind doch drei * zu sehen! Für die Multiplikation mit 256 braucht man in <strong>de</strong>r<br />
Binärwelt keinen Hardware-Multiplikator, weil es ausreicht, die Zahl einfach um ein Byte nach<br />
links zu rücken. Genauso wie in <strong>de</strong>r Dezimalwelt eine Multiplikation mit 10 einfach ein Linksrücken<br />
um eine Stelle ist und die frei wer<strong>de</strong>n<strong>de</strong> leere Ziffer mit Null gefüllt wird. Beginnen wir mit<br />
einem praktischen Beispiel. Zuerst brauchen wir einige Register, um<br />
1. die Zahlen m1 und m2 zu la<strong>de</strong>n,<br />
2. für das Ergebnis Raum zu haben, das bis zu 24 Bit lang wer<strong>de</strong>n kann.<br />
;<br />
; Testet Hardware Multiplikation 16-mit-8-Bit<br />
;<br />
; Register Definitionen:<br />
;<br />
.<strong>de</strong>f Res1 = R2 ; Byte 1 <strong>de</strong>s Ergebnisses<br />
.<strong>de</strong>f Res2 = R3 ; Byte 2 <strong>de</strong>s Ergebnisses