我还是汇编新手,我还不知道汇编中的许多命令代码。我想在 16 位寄存器中进行除法。我想打印它的内容。我知道我需要将寄存器的内容转换为 ASCII 进行打印,但同样,我的问题是除法。请帮我。
比如cx的内容是2012(整数)。我该怎么办?
mov ax, cx
mov bx, 1000
idiv bx
上面的代码是错误的,对吧?
查看此参考资料(搜索 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 从每个寄存器中删除,它是完全相同的
编辑:我注意到这是已签名的部门idiv
,相应地编辑了答案。
上面的代码在一方面是错误的:ax
没有符号扩展为dx:ax
.
只需cwd
在 前面加上 (convert word to doubleword) 即可idiv bx
。商将在 内ax
,余数将在 内dx
。