2010-10-04 32 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