当我进行手术时
IDIV ecx
Run Code Online (Sandbox Code Playgroud)
在汇编中,然后我已阅读到edx:eax中的值除以操作数ecx。我也知道商存储在eax中,余数存储在edx中。
所以edx:eax中的值到底是什么?
有人可以向我解释吗?
编辑:尽管我已经阅读了一些有关此内容的页面,但我也不理解总是在IDIV操作之前进行“ cdq”操作的原因。
我已经读过edx:eax中的值除以操作数...但是edx:eax中的值到底是什么?
EDX:EAX在此上下文中,是指由寄存器EDX和组成的64位值EAX,其中EDX解释为包含最高有效位和EAX最低有效位。
CDQ通过将符号扩展为将双字EAX转换为四字(即的每一位都填充的最高有效位)。例如,如果包含你会得到的,因为最显著位是明确的。但是,如果有的话,您会得到,因为设置了最高位。
的要点是在除以32位操作数之前设置,因为被除数为。EDX:EAXEAXEDXEDXEAXEAX0x7FFFFFFF0EDXEAXEAX = 0x80000000EDX = 0xFFFFFFFFEAXCDQEDXEDX:EAX
它是什么?这是你放在那里的值,因为你想分割它......
CDQ 指令获取 EAX 中的 32 位值,并将其转换为 EDX:EAX 中的 64 位值(通过将 EAX 的符号位复制到 EDX 的每一位)。如果(通常)您要除的值一开始就是 32 位,则可以使用它。
| 归档时间: |
|
| 查看次数: |
1500 次 |
| 最近记录: |