我还是装配新手,我还不知道装配中的许多命令代码。我想在16位寄存器中进行除法。我想打印其内容。我知道我需要将寄存器的内容转换为ASCII进行打印,但同样,我的问题就是除法。请帮帮我。
例如,cx的内容是2012(整数)。我该怎么办?
mov ax, cx
mov bx, 1000
idiv bx
以上代码错了,对吧?
答案 0 :(得分:4)
查看this reference(搜索idiv)
idiv指令除以64位整数的内容 EDX:EAX(通过将EDX视为最重要的四个字节构建 由指定的操作数和EAX作为最不重要的四个字节 值。除法的商结果存储在EAX中,而 其余部分放在EDX中。语法idiv idiv
实施例
idiv ebx - 用EBX的内容划分EDX:EAX的内容。 将商放在EAX中,其余的放在EDX中。 idiv DWORD PTR [var] - 将EDX:EAS的内容除以存储在的32位值 记忆位置变量将商置于EAX中,其余部分放入 EDX。
当然,由于您使用的是16位,因此将所有指定的位值切成两半并将每个寄存器的E降低,并且它完全相同
答案 1 :(得分:3)
编辑:我注意到这是已签名的部门idiv
,相应地进行了编辑。
上述代码在某个方面是错误的:ax
未签名扩展为dx:ax
。
只需在cwd
之前添加idiv bx
(将单词转换为双字),然后就可以了。商将在ax
中,余数将在dx
。