【问题标题】:Simple way to print value of a register in x86 assembly在 x86 程序集中打印寄存器值的简单方法
【发布时间】:2011-02-12 03:15:22
【问题描述】:

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

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

【问题讨论】:

标签: assembly x86 cpu-registers


【解决方案1】:

您可以使用 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

【讨论】:

  • itoa 不是标准的,它是微软的扩展。
  • 我知道,但是在网上搜索会发现一些开源实现。
  • 如果我可以使用 c 代码,我不会有问题。但我必须用 8086 汇编代码编写所有内容。
  • 我希望这会更好,虽然我可能犯了一些语法错误,自从我上次组装以来已经有一段时间了......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
相关资源
最近更新 更多