根据我的理解,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 回答
你're right that it divides EDX:EAX by its operand, but it doesn'将其结果存回那里 .
相反,它将商在EAX和其余部分放在EDX中 .