www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Umwandlung von Byte oder Int nach String in ASM??


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie kann man möglichst kompakt den byte-wert eines registers in die
entsprechenden ASCII zeichen umwandeln??

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du müsstest einfach nur zählen, wieviel mal du 100 abziehen kannst ohne
"Unterlauf", dann wieviel mal du 10 abziehen kannst ohne
"Unterlauf" und der Rest sind die Einer. Jetzt hast du die Bytezahl
in die max. drei Ziffern zerlegt und musst nur noch zu jeder den ASCII-
Offset (32 glaub ich) dazuaddieren.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vorher kannst du noch vergleichen ob du eine Zahl mit einer, zwei oder
drei Ziffern hast, um dann einiges zu überspringen.

Autor: Gerhard Gunzelmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

eine Ascii Umwandlung kann man so durchführen:

1. Aufsplitten in low-nibble und high-nibble
2. ist der low-nibble < 10, dann hex30 addieren, sonst hex37 addieren
3. high-nibble 4 Bit rechtsschieben, dann wie 2.

Gerhard

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
also über das Auteilen in Low- und High Nibble ließe sich das sicher
kürzer schreiben, aber ich habe das mal so gemacht:

; *** Binär nach ASCII-Wandlung -> Hunderter: R0, Zehner: R1, Einer:
R2
bin_ascii:
  mov   r0, #0      ; Rücksetzen der Register
  mov   r1, #0
  mov  r2, #0
  mov   a, r5
        jz  fertig      ; Wert im Akku = 0 -> Fertig
  mov  b, #10      ; Divisor 10 in das B-Register
  div   ab
  mov   r2, b      ; Rest in R2 ablegen (Einer)
  jz  fertig      ; Wert im Akku = 0 -> Fertig
  mov  b, #10      ; Divisor 10 in das B-Register
  div   ab
  mov  r1, b      ; Rest in R1 ablegen (Zehner)
  jz  fertig      ; Wert im Akku = 0 -> Fertig
  mov  b, #10
  div  ab
  mov  r0, b      ; Rest in R0 ablegen (Hunderter)
fertig:
  mov   a, r0      ; generieren
  add  a, #30H      ; der ASCII-Zeichen
  mov  r0, a      ; 0 = ASCII 48, 1 = ASCII 49 usw.
  mov   a, r1
  add  a, #30H
  mov  r1, a
  mov   a, r2
  add  a, #30H
  mov  r2, a
  ret

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.