【发布时间】:2011-02-12 03:15:22
【问题描述】:
我需要在 8086 Assembly 中编写一个程序,它接收来自用户的数据,进行一些数学计算并在屏幕上打印答案,我已经编写了程序的所有部分并且一切正常,但我不知道如何将数字打印到屏幕上。
在我所有的计算结束时,答案是 AX,它被视为一个无符号的 16 位整数。如何打印 AX 寄存器的十进制(无符号)值?
【问题讨论】:
标签: assembly x86 cpu-registers
我需要在 8086 Assembly 中编写一个程序,它接收来自用户的数据,进行一些数学计算并在屏幕上打印答案,我已经编写了程序的所有部分并且一切正常,但我不知道如何将数字打印到屏幕上。
在我所有的计算结束时,答案是 AX,它被视为一个无符号的 16 位整数。如何打印 AX 寄存器的十进制(无符号)值?
【问题讨论】:
标签: assembly x86 cpu-registers
您可以使用 C 库函数 itoa, 实现它并不难,基本上,你做到了:
while (x){
buff[n]==x % 10;
x/=10;
n++;
}
然后反转缓冲区(或按字符向后打印)
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
【讨论】: