Forum: Mikrocontroller und Digitale Elektronik 24bit Multiplikation


von Andreas (Gast)


Lesenswert?

Hallo,
ich will zwei 24bit werte in einem Atmega16 multiplizieren. Da ja die 
Multiplikation mit 8bit schon vorgesehen ist, kann man die 24bit 
Multiplikation ja darauf zurückführen, genauso wie man es auch für 
16bit-Werte macht.
Ich bin mir jetzt nur etwas unsicher in welcher Reihenfolge ich die 
Bytes multiplizieren und addieren muss, um zum richtigen Ergebnis zu 
kommen. Eigentlich dachte ich, dass es im Prinzip genauso ging wie im 
Dezimalsystem, nur das das Beispiel was ich für die 16bit-Mutiplikation 
gefunden habe meiner Meinung nach davon abweicht (vielleicht liege ich 
da auch falsch).

Es gibt doch bestimmt schon jede Menge Leute die 24bit-Werte 
multipliziert haben, vielleicht kann mir ja einer von denen in Form 
eines Beispiels helfen?!

Grüße
Andreas

von Stef (Gast)


Lesenswert?

Ja, ich wuerde auch mal schauen wie die 8x8 geht, wie die 24x24 gehen 
sollte, wund dann herausfinden wie ich die 8x8 zu 24x24 zusammensetzen 
muesste.

von daniel (Gast)


Lesenswert?

du musst nur jedes Register mit jedem multiplizieren (also 9 mal) und 
das ergebniss in deine Ergebnissregister kopieren bzw addieren (wie das 
Distributivgest). Achtung, mal ohne oder mit Carry wenn ein übertrag 
entstehen könnte. Du brauchst 6 Register für dein Ergebnis. Die 
Reihenfolge ist übrigens egal, da die Addition kommutativ ist.

von daniel (Gast)


Lesenswert?

faktor 1: r2:r4
faktor 2: r5:r7
produkt : r8:r13
r14=0

mul r2,r5
mov r8,r0
mov r9,r1

mul r2,r6
add r9,r0
adc r10,r1
adc r11,r14

mul r2,r7
add r10,r0
adc r11,r1
adc r12,r14

mul r3,r5
add r9,r0
adc r10,r1
adc r11,r14

mul r3,r6
add r10,r0
adc r11,r1
adc r12,r14

mul r3,r7
add r11,r0
adc r12,r1
adc r13,r14

mul r4,r5
add r10,r0
adc r11,r1
adc r12,r14
adc r13,r14

mul r4,r6
add r11,r0
adc r12.r1
adc r13,r14

mul r5,r7
add r12,r0
adc r13,r1


die addition von r14 dient nur zur addition des carry-flags
am anfang kann man das auch manchmal noch weglassen

ich hoffe, ich habe mich nicht verschrieben

von Andreas (Gast)


Lesenswert?

Danke Daniel,
dann geht es ja doch 100%tig genauso wie schriftliches multiplizieren!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.