24bit Multiplikation

Gast #525889
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
Gast #525909
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.
Gast #525922
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren