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

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.