装配中的IDIV操作(理解)

时间:2014-08-25 15:21:13

标签: assembly x86

当我进行操作时

IDIV ecx

在汇编中,然后我读到edx:eax中的值除以操作数ecx。我也知道商是存储在eax中,余数存储在edx中。

那么edx中的值究竟是什么:eax ??

有人可以向我解释一下吗?

编辑:我也不明白" cdq"虽然我已经阅读了一些关于这一点的网页,但是在IDIV操作之前总是会有这样的操作。

2 个答案:

答案 0 :(得分:4)

  

我已经读过edx:eax中的值除以操作数...但是edx中的值究竟是什么:eax?

此上下文中的

EDX:EAX表示寄存器EDXEAX形成的64位值,其中EDX被解释为包含最高有效位,{ {1}}最不重要的位。

EAXCDQ中的双字转换为EAX中的四字,将EDX:EAX符号扩展为EAX(即EDX的每一位}填充了EDX的最高位。例如,如果EAX包含EAX,则0x7FFFFFFF中会0,因为EDX的最高位是明确的。但是,如果您EAX EAX = 0x80000000,那么EDX = 0xFFFFFFFF就会得到EAX,因为设置了CDQ的最高位。 EDX的要点是在除以32位操作数之前设置EDX:EAX,因为被除数为{{1}}。

答案 1 :(得分:1)

这是什么?这是你放在那里的价值,因为你想把它分开......

CDQ指令在EAX中采用32位值并在EDX中将其转换为64位值:EAX(通过将EAX的符号位复制到EDX的每一位)。如果(通常情况下)你想要除以的值是32位,那么你可以使用它。