2010-10-04 62 views

回答

7

Hooray for AT & T assembly base/index syntax!它根本不是一個3操作數乘法。這與你所知道和喜歡的2操作數是一樣的,只是第一個有點複雜。這意味着:

​​

或者:

%ebp + (4 * %ebx) - 44 

是有點更清晰(並且在基座10)。在AT & T鹼基/ index語法分解爲:

offset(base, index, multiplier) 
+1

+1,並且該指令將'eax'中的值乘以本地數組中的(可能)整數。 – Zooba 2010-10-05 00:04:32

+0

+1 @Zooba - 這是最可能的解釋。 – 2010-10-05 00:05:20

9

(我知道和喜歡的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位寄存器)中。

+2

(我已經回答了通過標題搜索來到這裏的人的兩個問題。) – Zooba 2010-10-05 00:16:32