3

据我了解,C 汇编中的 idivl 命令采用由 %edx(较高的一半)和 %eax(较低的重要)表示的 64 位数字,将其除以参数,并将结果存储在 %edx:%再说一遍。

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 = 00000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 二进制是 2^33,而不是 2/10。

谢谢!

4

1 回答 1

7

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

于 2013-05-19T02:58:29.417 回答