我读指令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