两个数字的idivl,其中第一个小于第二个(在汇编中)

时间:2013-05-19 02:56:04

标签: assembly x86 division

根据我的理解,C程序集中的idivl命令采用由%edx(更重要的一半)和%eax(不太重要)表示的64位数字,将其除以参数,并将结果存储在% edx:%eax再次。

a / b和a>时的行为b正如我所料:10/2在%edx中产生全0,在%eax中产生5。

然而,我不确定为什么a / b时b> a产生它的功能。例如,当我将这两个切换为2/10时(即%edx全部为0且%eax为2,并且赋予idivl的'参数'为10),结果为:

%edx有2个; %eax全部为0

为什么会这样?如果我们将%edx和%eax混合在一起,则表示二进制的2/10 = 00000000000000000000000000000010000000000000000000000000000000000000,十进制为2 ^ 33,而不是2/10附近。

谢谢!

1 个答案:

答案 0 :(得分:7)

你是对的,它将EDX:EAX除以其操作数,但它不会将其结果存储在那里。
相反,它将商在EAX和其余部分放在EDX中。