Forum: Projekte & Code MULTIPLIKATION 16 x 16 = 32BIT Beispiel (Assembler) ATmega8


von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Ein Beispiel einer Multiplikation zweier 16 Bit Zahlen,

das Ergebnis liegt als 32 Bit -Wert vor.



Bernhard

von yalu (Gast)


Lesenswert?

Hmm, geht das nicht einfacher? Gerade der Mega8 hat doch (wie alle
anderen Megas auch) einen Multiplizierer für 8-Bit-Operanden und
16-Bit-Ergebnis. Ohne jetzt gleich den Assemblercode vorzustellen (bin
eh nicht so arg fit darin), kann man doch theoretisch eine
16x16->32-Multiplikation durch vier 8x8->16-Multiplikationen
darstellen:

Es sei
OP1 = 256 * H1 + L1
OP2 = 256 * H2 + L2

Dann ist
ERG = OP1 * OP2 = 65536  H1  H2 + 256 * (H1 * L2 + L1 * H2) + L1 *
L2

Dies sollte mit vier 8-Bit-Multiplikationen, ca. acht 8-Bit-Additionen
und einigen MOV-Befehlen zu erschlagen sein. Bei deiner bitweisen
Methode brauchst du, wenn ich richtig gezählt habe, 64 Additionen und
etliche Shift- und MOV-Befehle.

yalu

von Benedikt (Gast)


Lesenswert?

Es gibt übrigends die ganzen Div/Mul Routinen in verschiedensten
Varianten (signed/unsigned, Speed/Size optimiert usw) als AppNote bei
Atmel...

von Bernhard S. (bernhard)


Lesenswert?

@Bendikt

@yalu

> geht das nicht einfacher?

>Es gibt übrigends die ganzen Div/Mul Routinen in verschiedensten
>Varianten (signed/unsigned, Speed/Size optimiert usw) als AppNote bei
>Atmel...

http://www.atmel.com/dyn/resources/prod_documents/DOC0936.PDF

Bernhard

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.