我讀指令3-operand imul指令在ia-32彙編中做了什麼?
imul 0xffffffd4(%ebp, %ebx, 4), %eax
,我用它做什麼確切百思不得其解。我明白,不管怎麼樣,但我無法弄清楚語法。
我讀指令3-operand imul指令在ia-32彙編中做了什麼?
imul 0xffffffd4(%ebp, %ebx, 4), %eax
,我用它做什麼確切百思不得其解。我明白,不管怎麼樣,但我無法弄清楚語法。
Hooray for AT & T assembly base/index syntax!它根本不是一個3操作數乘法。這與你所知道和喜歡的2操作數是一樣的,只是第一個有點複雜。這意味着:
或者:
%ebp + (4 * %ebx) - 44
是有點更清晰(並且在基座10)。在AT & T鹼基/ index語法分解爲:
offset(base, index, multiplier)
(我知道和喜歡的Intel/MASM語法,所以我將使用需要注意的是操作數的順序是不同的AT & T.。)
你的指令,實際上是兩個操作數imul
,這在英特爾的語法是:
imul eax, DWORD PTR [ebp + ebx*4 + 0FFFFFFD4h]
哪裏eax
是目的地操作數和存儲位置是源操作數。雙操作數imul
執行源操作數和目標操作數的帶符號(二進制補碼)乘法並將結果存儲在目標中。
該指令將寄存器乘以數組中的整數。這很可能出現在一個循環中,並且該數組是一個局部變量。
三操作數imul
指令是:
imul dest, source1, source2
的source1
操作數(無論是存儲位置或寄存器)由source2
操作數相乘(可以是8位或16/32位整數),結果存儲在dest
操作數(16,32或64位寄存器)中。
(我已經回答了通過標題搜索來到這裏的人的兩個問題。) – Zooba 2010-10-05 00:16:32
+1,並且該指令將'eax'中的值乘以本地數組中的(可能)整數。 – Zooba 2010-10-05 00:04:32
+1 @Zooba - 這是最可能的解釋。 – 2010-10-05 00:05:20