据我了解,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。
谢谢!