Una manera sencilla de imprimir valor de un registro en el montaje x86
-
01-10-2019 - |
Pregunta
Tengo que escribir un programa en 8086 Asamblea que recibe los datos del usuario, hace algunos cálculos matemáticos e imprime la respuesta en la pantalla, he escrito todas las partes del programa y todos funcionan bien, pero no sé cómo para imprimir el número en la pantalla.
Al final de todo mi cálculo de la respuesta es AX y se trata como un entero sin signo de 16 bits. ¿Cómo se imprime el valor decimal (sin firmar) del registro AX?
Solución
se puede utilizar la función de itoa C-biblioteca, implementando no es tan difícil, basicamente, lo hace:
while (x){
buff[n]==x % 10;
x/=10;
n++;
}
y luego invertir el tampón (o al revés caracteres de impresión inteligente)
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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow