Einfache Art und Weise Wert eines Registers in x86 zu drucken Montage
-
01-10-2019 - |
Frage
Ich brauche ein Programm in 8086 Assembly zu schreiben, die Daten aus dem Benutzer empfängt, hat einige mathematischen Berechnungen und druckt die Antwort auf dem Bildschirm, habe ich alle Teile des Programms geschrieben und alle Arbeiten gut, aber ich weiß nicht, wie die Zahl auf dem Bildschirm zu drucken.
Am Ende aller meiner Berechnung ist die Antwort AX und es wird als ein unsigned 16-Bit-Integer behandelt. Wie kann ich das Dezimalsystem (unsigned) Wert des AX-Registers drucken?
Lösung
Sie die C-Library-Funktion itoa nutzen könnten, Umsetzung es nicht so schwer, basicaly ist, was Sie tun:
while (x){
buff[n]==x % 10;
x/=10;
n++;
}
und dann invertieren die Puffer (oder Druckzeichenweise rückwärts)
void print_number (int x);
print_number:
buff db 15 dup(0)
mov ax,[esp+4]
mov bx,0
itoa_w1:
mov cx, ax
mod cx,10
add cx,30h;'0'
div ax,10
mov buff[bx],cl
cmp ax,0
jnz itoa_w1
itoa_w2:
push buff[bx]
call putchar
pop ax
cmp bx,0
jnz itoa_w2
ret
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow