组装中的IDIV操作(了解)

use*_*712 2 x86 assembly

当我进行手术时

IDIV ecx
Run Code Online (Sandbox Code Playgroud)

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

所以edx:eax中的值到底是什么?

有人可以向我解释吗?

编辑:尽管我已经阅读了一些有关此内容的页面,但我也不理解总是在IDIV操作之前进行“ cdq”操作的原因。

Mic*_*ael 5

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

EDX:EAX在此上下文中,是指由寄存器EDX和组成的64位值EAX,其中EDX解释为包含最高有效位和EAX最低有效位。

CDQ通过将符号扩展为将双字EAX转换为四字(即的每一位都填充的最高有效位)。例如,如果包含你会得到的,因为最显著位是明确的。但是,如果有的话,您会得到,因为设置了最高位。 的要点是在除以32位操作数之前设置,因为被除数为。EDX:EAXEAXEDXEDXEAXEAX0x7FFFFFFF0EDXEAXEAX = 0x80000000EDX = 0xFFFFFFFFEAX
CDQEDXEDX:EAX


hob*_*bbs 1

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

CDQ 指令获取 EAX 中的 32 位值,并将其转换为 EDX:EAX 中的 64 位值(通过将 EAX 的符号位复制到 EDX 的每一位)。如果(通常)您要除的值一开始就是 32 位,则可以使用它。