Forum: Mikrocontroller und Digitale Elektronik Multiplikation mit dezimal 10


von Franz Gründer (Gast)


Lesenswert?

Hallo,

seit ein paar Stunden versuche ich eine 16 Bit Zahl mit der dezimalen
10 in Assembler zu multiplizieren. Als Ergebnis erhalte ich folgendes:

- bin_high x 10 = h_high und h_low

- bin_low  x 10 = l_high und l_low

Wie kann ich jetzt die 4 x 8 Bit Ergebnisse verkuppeln?

Hat einer eine simple Idee, wofür ich mich im Voraus bedanke möchte.

MFG

Franz

von Karl H. (kbuchegg)


Lesenswert?

* Kannst du eine 16 Bit Zahl um 1 Bit nach links verschieben?
  ( = identisch zu: Multiplikation *2)
* Kannst du 16 Bit addieren?

Dann ist eine Multiplikation * 10:

  nach links schieben        ( = *2 )
  nach links schieben        ( = *4 )
  Original Zahl addieren     ( = *5 )
  nach links schieben        ( = *10 )

von Detlev Tietjen (Gast)


Lesenswert?

Hi,

wenn es nur um die Multiplikation mit 10 geht, würde ich es eher mit
Bit-Shift und Addition lösen. Also um 1 und 3 Bit shiften und
addieren.

Gruß, Detlev

von Roland P. (pram)


Lesenswert?

Sofern der verwendete Prozessor keinen Hardwaremultiplizierer hat musst
wohl einmal mit 8 und einmal mit 2 multiplizieren (bzw shiften) und die
beiden Ergebnisse aufaddieren.

Ansonsten schau dir mal ein paar AN's über Multiplikationsroutinen an.
(google z.B. nach "avr asm multiplication AN")Gruß
Roland

von Dietmar (Gast)


Lesenswert?

@Franz:

Erklär doch bitte mal genau, was du verwendest (Controller, Typ,
Bitbreite) und was du haben möchtest.

Gruß

Dietmar

von Franz Gründer (Gast)


Lesenswert?

Hallo,

Controller ist ATMEGA8515, 8Bit.

Ausgangslage: 12 bit Zahl
Multiplaktion mit dezimal 10

Haben möchte ich eine Zahl, dass sich in zwei Registern findet.

Gruß

Franz

von Franz Gründer (Gast)


Lesenswert?

@Karl Heinz,

vielen Dank für den Tip. Das war genau richtig, einfach und simpel.

Gruß

Franz

von Profi (Gast)


Lesenswert?

Beispiel:
dez:
4077*10=40770
hex:
0FED*0A=9F42

Rechnung mit 2 MULs und 2 ADDs (16x8 --> 24 Bit)
  ED*0A=  0942
0F  *0A=0096
       ========
        009F42

wenn Du nur 12x4->16 Bit rechnest, reicht ein ADD.

Siehe Threads
Rechnen mit AVR
http://www.mikrocontroller.net/forum/read-1-343046.html
und Multiplikation
http://www.mikrocontroller.net/forum/read-1-288423.html

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.