![](/img/trans.png)
[英]What exactly does the 3 operand imul instruction do in ia-32 assembly?
[英]imul assembly instruction - one operand?
當imul
的單操作數形式傳遞32位參數時(如在EDX
的情況下),它實際上意味着EAX * EDX
,其中EAX
和EDX
都是32位寄存器。
兩個32位值的乘積不一定適合32位:完全乘法結果最多可能需要64位。 應答的高32位將寫入EDX
寄存器,低32位寫入EAX
寄存器; 這用EDX:EAX
表示EDX:EAX
表示法。
如果您只想要結果的低32位,請使用imul
的2操作數形式; 它運行得更快,並且沒有任何隱式操作數(因此您可以使用最方便的寄存器)。
imul ecx, esi
做ecx *= esi
就像你期望的那樣,沒有觸及EAX
或EDX
。 它就像C,其中unsigned x=...;
x *= y;
結果的寬度與輸入相同。
imul
也有一個直接的形式: imul ecx, ebx, 1234
做ecx = ebx * 1234
。 許多裝配工將接受imul ecx, 1234
作為imul ecx, ecx, 1234
。
這些32x32 => 32位形式的imul
可以正確地用於有符號或無符號; 單操作數mul
和imul
僅在上半部分(在EDX
)不同,而不是低半部分EAX
輸出。
有關imul
請參閱英特爾的說明參考手冊 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.