当我进行操作时
IDIV ecx
在汇编中,然后我读到edx:eax中的值除以操作数ecx。我也知道商是存储在eax中,余数存储在edx中。
那么edx中的值究竟是什么:eax ??
有人可以向我解释一下吗?
编辑:我也不明白" cdq"虽然我已经阅读了一些关于这一点的网页,但是在IDIV操作之前总是会有这样的操作。
答案 0 :(得分:4)
此上下文中的我已经读过edx:eax中的值除以操作数...但是edx中的值究竟是什么:eax?
EDX:EAX
表示寄存器EDX
和EAX
形成的64位值,其中EDX
被解释为包含最高有效位,{ {1}}最不重要的位。
EAX
将CDQ
中的双字转换为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位,那么你可以使用它。