Forum: Mikrocontroller und Digitale Elektronik 3 BCDs subtrahieren - asm


von Jemand (Gast)


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

von Thomas Burkhardt (Gast)


Lesenswert?

Schriftlich subtrahieren mit Übertrag?! Das ganze in Assembler zu Fuß zu
machen, wo ist da das konkrete Problem?

von Jornbyte (Gast)


Lesenswert?

Na ja, "Jemand" will das mit BCD-Zahlen machen. Ich würde die Zahl in
Hex konvertieren, berechnen und danach wieder BCD draus machen.

von Thomas Burkhardt (Gast)


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.

von Edgar Renner (Gast)


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

von Jemand (Gast)


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

von Jemand (Gast)


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

von dave (Gast)


Lesenswert?

Übertrags-Bit ist das C-Bit.

dave

von Jemand (Gast)


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

von Andi (Gast)


Lesenswert?

Vielleicht hilft Dir das hier weiter:
http://home.in.tum.de/~doychev/mikropr/index.html

Hier noch was über die 'Borgetechnik':
http://www.rechenschwaeche.de/pdf/02_schriftl_sub.pdf

Ehrlich gesagt ist das gar nicht so einfach und ich habe, dank
Taschenrechner, alles vergessen.

Gruß
Andi

von Jemand (Gast)


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

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.