汇编:16位分区

时间:2012-09-12 13:42:08

标签: assembly x86 division

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

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

 mov ax, cx
 mov bx, 1000
 idiv bx

以上代码错了,对吧?

2 个答案:

答案 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