在x86程序集中打印寄存器值的简单方法

时间:2010-04-25 17:01:27

标签: assembly x86 cpu-registers

我需要在8086汇编中编写一个程序,从用户接收数据,进行一些数学计算并在屏幕上打印答案,我已经编写了程序的所有部分,所有工作正常但我不知道如何将号码打印到屏幕上。

在我的所有计算结束时,答案是AX,它被视为无符号16位整数。如何打印AX寄存器的十进制(无符号)值?

1 个答案:

答案 0 :(得分:1)

你可以使用C-library函数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