Gast
#2419818
Hey zusammen ich suche einen Algorythmus mit dem ich eine BCD Zahl in Assembler in eine binäre Zahl wandeln kann. Hat jemand eine Idee? Über Pseudocode wäre ich sehr dankbar. Gruß Feldi
|
Anzeige
|
BCD in Binär wandeln (Assembler)
Gast
#2419818
Hey zusammen ich suche einen Algorythmus mit dem ich eine BCD Zahl in Assembler in eine binäre Zahl wandeln kann. Hat jemand eine Idee? Über Pseudocode wäre ich sehr dankbar. Gruß Feldi (Oberes Nibble um 4 Stellen nach rechts geschoben )* 10 + Unteres Nibble Feldi schrieb: > Über Pseudocode wäre ich sehr dankbar. Bittesehr:
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
>>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
lineare Konvertierung von 1 Byte für AVR
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 )
Gast
#2419880
>>Bittesehr: >>summe = einer*10; >>summe = summe+zehner*10; >>summe = summe+hunderter*100; Könntest du mir noch bitte ein zahlenbeispiel nennen? ich benötiges für 16 Bit (1Word) Gruß Feldi 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 Feldi schrieb: > C167 -->Leider kennen sich hier damit nur sehr wenige aus! Der kann doch MUL und DIV, einfach mal ins Manual schauen. Peter Lothar Miller schrieb: > Bittesehr:summe = einer*10; > summe = summe+zehner*10; > summe = summe+hunderter*100; Anders herum wird ein Schuh 'draus :-) summe = hunderter summe = 10*summe + zehner summe = 10*summe + einer mare_crisium Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|