[英]IDIV operation in assembly (understanding)
當我進行手術時
IDIV ecx
在匯編中,然后我已閱讀到edx:eax中的值除以操作數ecx。 我也知道商存儲在eax中,余數存儲在edx中。
所以edx:eax中的值到底是什么?
有人可以向我解釋嗎?
編輯:盡管我已經閱讀了一些有關此內容的頁面,但我也不理解總是在IDIV操作之前進行“ cdq”操作的原因。
我已經讀過edx:eax中的值除以操作數...但是edx:eax中的值到底是什么?
在此上下文中, EDX:EAX
表示由寄存器EDX
和EAX
形成的64位值,其中EDX
被解釋為包含最高有效位,而EAX
包含最低有效位。
CDQ
轉換在雙字EAX
到一個四字EDX:EAX
通過符號擴展EAX
到EDX
(即每個比特EDX
填充的最顯著位EAX
)。 例如,如果EAX
包含0x7FFFFFFF
,則EDX
0
,因為EAX
的最高有效位已清除。 但是,如果您的EAX = 0x80000000
則會得到EDX = 0xFFFFFFFF
因為設置了EAX
的最高有效位。
CDQ
是在除以32位操作數之前設置EDX
,因為被除數為EDX:EAX
。
它是什么? 這是您放置在那里的價值,因為您想對其進行划分...
CDQ指令在EAX中采用32位值,並在EDX:EAX中將其轉換為64位值(通過將EAX的符號位復制到EDX的每一位中)。 如果(通常)要除以的值以32位開頭,則可以使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.