BCD in Binär wandeln (Assembler)

Moderator (Firma: Titel) Persönliche Seite #2419827
Lesenswert?

Feldi schrieb:
> Über Pseudocode wäre ich sehr dankbar.
Bittesehr:
1
summe = einer*10;
2
summe = summe+zehner*10;
3
summe = summe+hunderter*100;

Und jetzt mußt du nur noch zusehen, dass alles in den gewünschten 
Datentyp passt und dein uC eine passende Multiplikation beherrscht...


BTW: du könntest auch mal sagen, welcher uC/Assembler?
Gast #2419856
Lesenswert?

>>BTW: du könntest auch mal sagen, welcher uC/Assembler?

C167 -->Leider kennen sich hier damit nur sehr wenige aus!
Aber die Antworten helfen mir schon mal weiter..ich hoffe es zumindest!!

Gruß Feldi
#2419877
Lesenswert?

Feldi schrieb:
>>>BTW: du könntest auch mal sagen, welcher uC/Assembler?
>
> C167 -->Leider kennen sich hier damit nur sehr wenige aus!
> Aber die Antworten helfen mir schon mal weiter..ich hoffe es zumindest!!

Dann wird es dich sicher freuen, dass man mit 10 multiplizieren kann, 
ohne tatsächlich multiplizeren zu müssen

   gegeben a              zb 7

   zahl verdoppeln          14
   nochmal verdoppeln       28
   a noch dazuzählen        35
   und nochmals verdoppeln  70

voila: mal 10 gerechnet nur durch addition und verdoppeln (was einem 
linksschieben gleichkommt)

Warum funktioniert das?
Weil

    10 * x   = 2 * 5*x = 2 * ( 4*x + x )  =  2 * ( 2 * 2*x + x )
#2419881
Lesenswert?

Feldi schrieb:
>>>Bittesehr:
>
>>>summe = einer*10;
>>>summe = summe+zehner*10;
>>>summe = summe+hunderter*100;
>
> Könntest du mir noch bitte ein zahlenbeispiel nennen?

Sicher
0x3241   (also Hexadezimalzahl)

Das ist deine BCD Zahl. Jede Ziffer entspricht der korrespondierenden 
Dezimalziffer.

Einer ->  1
Zehner -> 4
Hunderter -> 2
Tausender -> 3


   1 + 4*10 + 2*100 + 3*1000 -> 3241

stimmt auffallend überein

zur tatsächlichen Berechnung wendet man sinnvollerweise ein Hornerschema 
an. D.h. erst mal einen Faktor 10 herausheben

   1 + ( 4 + 2*10 + 3*100 ) * 10

dann noch einmal *10 herausheben


   1 + ( 4 + ( 2 + 3*10 ) * 10 ) * 10

das man dann eben so anwendet, dass man die einzelnen Ziffern von links 
nach rechts sukzessive immer nur mit 10 multipliziert:

   3           3
* 10   ->     30
+  2   ->     32
* 10   ->    320
+  4   ->    324
* 10   ->   3240
+  1   ->   3241


Während also die Hex-Zahl 0x3241 der Dezimalzahl 12865 entspricht, 
entsteht bei der Verwendung als BCD Zahl tatsächlich auch die 
Dezimalzahl 3241

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