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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.