Umwandlung von Byte oder Int nach String in ASM??

Gast #97188
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.
Gast #97190
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
Gast #97191
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

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