4

我还是汇编新手,我还不知道汇编中的许多命令代码。我想在 16 位寄存器中进行除法。我想打印它的内容。我知道我需要将寄存器的内容转换为 ASCII 进行打印,但同样,我的问题是除法。请帮我。

比如cx的内容是2012(整数)。我该怎么办?

 mov ax, cx
 mov bx, 1000
 idiv bx

上面的代码是错误的,对吧?

4

2 回答 2

4

查看此参考资料(搜索 idiv)

idiv 指令将 64 位整数 EDX:EAX(通过将 EDX 视为最高有效四个字节,将 EAX 视为最低有效四个字节来构造)的内容除以指定的操作数值。除法的商结果存入 EAX,余数存入 EDX。语法 idiv idiv

例子

idiv ebx — 将 EDX:EAX 的内容除以 EBX 的内容。将商放在 EAX 中,将余数放在 EDX 中。idiv DWORD PTR [var] — 将 EDX:EAS 的内容除以存储在内存位置 var 的 32 位值。将商放在 EAX 中,将余数放在 EDX 中。

当然,由于您使用的是 16 位,因此将所有指定的位值减半并将 E 从每个寄存器中删除,它是完全相同的

于 2012-09-12T13:45:31.690 回答
4

编辑:我注意到这是已签名的部门idiv,相应地编辑了答案。

上面的代码在一方面是错误的:ax没有符号扩展为dx:ax.

只需cwd在 前面加上 (convert word to doubleword) 即可idiv bx。商将在 内ax,余数将在 内dx

于 2012-09-12T13:49:14.077 回答