www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 3 BCDs subtrahieren - asm


Autor: Jemand (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas Burkhardt (Gast)
Datum:

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

Autor: Jornbyte (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas Burkhardt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Edgar Renner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jemand (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jemand (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Übertrags-Bit ist das C-Bit.

dave

Autor: Jemand (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jemand (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.