3 BCDs subtrahieren - asm

Gast #147118
Lesenswert?

hi,
ich hab 3 BCD ziffern die von 3 andren BCD ziffern abgezogen werden.
beispielsweise 243-197.
somit wäre 2 die 1.bcd 4. die 2. usw..
die liegen alle ungepackt in registern rum.
wie ist das prinzip dafür, dass da das richtige rauskommt?
ich las bereits die applicationnotes aber die enthalten nicht das
richtige und sind sowieso äußerst fehlerübersäht.
gegoogelt hab ich auch schon und nichts gefunden.
ich würde es ja in C machen aber mein assembler-programm ist fast
fertig und da möcht ich nicht alles in C nochmal schreiben...
achja: controller=atmega8
Danke schonmal im vorraus

mfg
Jemand
Gast #147121
Lesenswert?

Ja, eben BCD, das ist so einfach wie schriftliches Subtrahieren, immer
schön Stelle für Stelle, Übertrag beachten, fertig.

Man kanns natürlich auch in Binär umwandeln, aber es muss nicht sein.
Gast #147122
Lesenswert?

Genau wie schriftliches Subtrahieren. Das Programm wird nicht komplex,
sollte also in max. einer Stunde Programmiert sein.

btw: Git's bei atmega auch wie bei 8051 ein DA A?

Bei der Konverteirung von BCD nach Binär, hast Du hinterher das Problem
der Rückkonvertierung (Teilen duch 10 usw..) Das ist bestimmt
schwieriger zu programmieren.

alt-f4
Gast #147123
Lesenswert?

Oke, danke für die Ratschläge.
Ich bin bloß mit dem übertrag verwirrt.
Also beim schriftlichen tu ich ja:
Bsp: 12-8
1.: 2-8 = -6 ;;dann steht im Register 6 und dann noch der übertrag
oder?? aber wo find ich den???
2.: 1-0=1 ;;also noch zehn überig
3.: -6+10=4 ;hier dann endeergebniss

so da war jetzt natürlich nur mit übertrag
ich muss dann quasi nach 1 prüfen ob der da ist(geht aber nicht weil
ich nicht weiß wo) und dann 3 nur bei übertrag sonst immer die zahlen
in den registern normal also muss ich sonst nichts mehr machen
iss meine logik richtig??

Jemand
Gast #147124
Lesenswert?

oke ich hab mittlerweile gemerkt dass sie es nicht ist:
1.:2-8 ;;da minus rauskommen würde geht nicht also übertragen: 12-8
2.:1-0-übertrag(hier 1)

so passts dann
aber: wie geht das mit dem übertrag? hab ich da flags in
statusregister?
dass ich sub r1, r2 machen muss und dannach noch die branchanweisung
obs minus iss iss mir klar aber wie mach ich dann das mit dem 12?
soll ich dann einfach binär 10 zur eigentlichen 1.stelle addieren und
dann minus 8 oder wie jetzt??

Jemand
Gast #147126
Lesenswert?

auch bei minus oder wie jetzt??
ich dachte wenn was negatives rasukommt wird das n-bit gesetzt?
oke jetzt hab ich mein datenblatt grad wieer gefunden.
ich werd jetzt mal versuchen das prog zu schreiben
danke schonmal
cu
Jemand
Gast #147128
Lesenswert?

Ja ich hatte gestern abend das skript dann doch nach ner dreiviertel
stunde zusammen, was aber ohne den anstoß an die 2.Klasse
zurückzudenken nicht gelungen wäre...
nun denn habe ich halt das zweite verfahren das ich beschrieben hab
angewendet und bald festgestellt, dass ich wenn ich 2Zeilen Code pro
ziffer lösche zum selben Ergebnis komme und das war dann wieder das
erste Verfahren. komischer zufall
Danke nochmal
Jemand

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