3操作数imul指令究竟在ia-32汇编中做了什么?

时间:2010-10-04 23:57:39

标签: assembly opcode instruction-set ia-32

我正在阅读指令

imul 0xffffffd4(%ebp, %ebx, 4), %eax

我对它正在做的事情感到困惑。我明白imul会增加,但我无法弄清楚语法。

2 个答案:

答案 0 :(得分:10)

(我知道并且更喜欢Intel / MASM语法,所以我会使用它。请注意,操作数的顺序与AT& T不同。)

您的指令实际上是一个双操作数imul,在Intel语法中是:

imul eax, DWORD PTR [ebp + ebx*4 + 0FFFFFFD4h]

其中eax是目标操作数,内存位置是源操作数。双操作数imul执行源操作数和目标操作数的有符号(二进制补码)乘法,并将结果存储在目标中。

该指令将寄存器乘以数组中的整数。很可能这出现在循环中,数组是局部变量。


三操作数imul指令是:

imul dest, source1, source2

source1操作数(存储器位置或寄存器)乘以source2操作数(8位或16/32位整数),结果存储在dest操作数(16,32或64位寄存器)。

答案 1 :(得分:7)

Hooray for AT& T汇编基础/索引语法!它根本不是一个3操作数。这是你熟悉和喜爱的2操作数,只是第一个操作数有点复杂。这意味着:

%ebp + (4 * %ebx) + 0xffffffd4

或者:

%ebp + (4 * %ebx) - 44

要更清楚一点(在基数10)。 AT& T基本/索引语法分解为:

offset(base, index, multiplier)