www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 32bit Zahlen multiplizieren mit MSP430 16bit Multiplizierer


Autor: Jakob Broja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen. Ein wichtige Frage, da sehr, SEHR bald Klausuren
anstehen.

Ich hab einen MSP430F449 und möchte mit diesem in Assembler 2 Zahlen
multiplizieren.
2 x 16bit Zahlen sind absolut kein Problem, da der eingebaute Hardware
Multiplizierer ja 16x16 bit beherrscht.

Aber was mach ich bei 2 x 32 bit Zahlen??  Diese stehen im RAM an einer
beliebigen Adresse. Ich kann sie ohne weiteres auf je 2 Register
verteilen. Und dann? Mir persönlich fällt nichts mehr ein was ich noch
probieren könnte.

Was wäre zudem noch der Unterschied wenn diese Zahlen
vorzeichenbehaftet sind ?
Was mach ich bei „32bit x 16bit“?

Vielen Dank schon mal für die Mühe. Ihr tut mir ein GROßEN Gefallen!!!

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Schreib's doch in C und schau dir den generierten Assembler-Code an.

Gruss

Tom

Autor: Jakob Broja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das wär ne Sache, aber ich soll den 16bit Hardware Multiplizierer
benutzen. Ich kann also auch in C nicht die Zahlen in die
entsprechenden Register reinkopieren. Ich hab die leise Ahnung, dass
ich mit dem SUM EXTENSION REGISTER arbeiten muß......aber ne ganz leise
nur....

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So eine Multiplikation funktioniert wie eine schriftliche
Multiplikation, bloß daß Du statt Ziffern eben 16Bit-Werte hast.

AB*CD
-----
 EFG
  HIJ
-----
 KLMN

AB*C=EFG
AB*D=HIJ
und dann das Ganze halt passend zusammenzählen.

Markus

Autor: Jakob Broja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, ich weiß jetzt wo mein Fehler lag.
Ich hatt das auch schon ausprobiert, mehrmals, und es schließlich
aufgegeben... Ich dachte schon, dass das so nicht klappt...
Vielen Dank.... :-)

Autor: Jakob Broja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber noch eins....

Hier darauf zurück:

AB*C=EFG
AB*D=HIJ

"AB" ist dennoch eine 32 Bit Zahl, die ich nicht so ohne weiteres in
den OP2,MPY... schieben kann. Gibts da auch noch einen Kniff?

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Distributivgesetz? Wäre zumindest der einfachste Ansatz.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Überleg Dir mal, wie man z.B. 57*8 von Hand rechnet und was dabei mit
Überträgen passiert.

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal ein Auszug einer umgewandelten Atmel-Apnote für die Mega-AVR´s
für 16 x 16 = 32 Bit:

.def MulWLAL=r16
.def MulWLAH=r17
.def MulWLBL=r18
.def MulWLBH=r19
.def MulWLResA=r12
.def MulWLResB=r13
.def MulWLResC=r14
.def MulWLResD=r15

MulWL:  mul  MulWLAH,MulWLBH    ; ah * bh
  movw  MulWLResC,r0
  mul  MulWLAL,MulWLBL    ; al * bl
  movw  MulWLResA,r0
  mul  MulWLAH,MulWLBL    ; ah * bl
  add  MulWLResB,r0
  adc  MulWLResC,r1
  adc  MulWLResD,null
  mul  MulWLBH,MulWLAL    ; bh * al
  add  MulWLResB,r0
  adc  MulWLResC,r1
  adc  MulWLResD,null
  ret

Mußt Dir nur vorstellen, dass das nicht 8-Bit-Register sind, sondern
16-Bit.
mul, add und adc dürften klar sein, movw transferriert 2 8-Bit-Register
in 2 andere, dafür gibs vielleicht movl beim MSP430 oder eben 2 mal
mov.
Ist ohne Vorzeichen da ich es nicht benötigt habe, es geht natürlich
auch mit Vorzeichen wenn man es anpasst.

Vielleicht hilft es Dir weiter.

MfG
Andi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.