Tabelle 1: Die schriftliche Multiplikation

Es wird das Produkt '317 * 201' berechnet:

Im Dezimalsystem
317*201
Im Binärsystem
100111101 * 11001001

63400(2*317*100)
0000(0*317*10)
+ 317(1*317*1)

63717
 
1001111010000000
 100111101000000
  00000000000000
   0000000000000
    100111101000
     00000000000
      0000000000
+      100111101
----------------
1111100011100101
-----------------

Algorithmus:

1. Variante ohne Verwendung von MUL-Befehlen der CPU

Ergebnis = 0
für i = 23 bis 0
   teste Bit-Nr. <i> des zweiten Faktors
   falls 'Bit gesetzt' dann addiere ersten Faktor zum Ergebnis
   verschiebe ersten Faktor um 1 Bit nach rechts
nächstes i
Wobei 'Ergebnis' eine Hilfsvariable mit 48-Bit Länge und die Addition eine 48-Bit Addition ist.

2. Variante (Verwendung von MUL-Befehlen der CPU)

Voraussetzung: Die Operanden liegen in folgender Form vor:
0000 0000 ffff ffff ffff ffff ffff ffff
(also auf 32 Bit erweitert mit führenden Nullen)
Multipliziere die höheren 16 Bit des ersten Faktors mit den höheren 16 Bit des zweiten Faktors

(Ergebnis: 0000 0000 0000 0000 ffff ffff ffff ffff)

Multipliziere die niedrigen 16 Bit des ersten Faktors mit den niedrigen 16 Bit des zweiten Faktors

(Ergebnis: gggg gggg gggg gggg gggg gggg gggg gggg)

Konkateniere die beiden Zwischenergebnisse zu einem 48-Bit-Ergebnis:

ffff ffff ffff ffff gggg gggg gggg gggg gggg gggg gggg gggg

Multipliziere die höheren 16 Bit des ersten Faktors mit den niedrigen 16 Bit des zweiten Faktors

(Ergebnis: hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh)

Multipliziere die niedrigen 16 Bit des ersten Faktors mit den höheren 16 Bit des zweiten Faktors

(Ergebnis: iiii iiii iiii iiii iiii iiii iiii iiii)

jetzt addiere die Zwischenergebnisse entsprechend ihrer Wertigkeit:
+ ffff ffff ffff ffff gggg gggg gggg gggg gggg gggg gggg gggg
+ hhhhhhhh hhhh hhhh hhhh hhhh hhhh hhhh (0000 0000 0000 0000)
+ iiii iiii iiii iiii iiii iiii iiii iiii (0000 0000 0000 0000)

= ffff ffff ffff ffff ffff ffff ffff ffff gggg gggg gggg gggg

Liegen als Eingangswerte zwei normalisierte Faktoren vor - also mit führender Eins - so ist spätestens das zweite Bit von links eine Eins. Da (von links gezählt) damit maximal 26 Bit benötigt werden, sind speziell die unteren 16 Bit - hier mit 'g' gekennzeichnet - überflüssig. Dies gilt allerdings nicht für denormalisierte Zahlen. Einzig aus diesem Grund benötigen wir auch diese Stellen.
Bei der Addition der Zwischenergebnisse kann übrigens kein Überlauf auftreten, denn es ist gewährleistet, daß das Produkt zweier 24-Bit-Zahlen insgesamt höchstens 48 Bit ausfüllt.


Scanned by Werner Cirsovius
September 2004
© Franzis' Verlag