汇编语言整数寄存器

时间:2012-02-27 00:03:27

标签: assembly i386

我不明白这个汇编指令的作用。它的作用是什么?为什么?

imull $16, (%eax, %edx,4)

寄存器的初始值是

%eax= 0x100x
%edx= 0x3

2 个答案:

答案 0 :(得分:9)

我假设您正在尝试理解如何解释AT& T样式汇编指令,尤其是寻址部分。我确信你不需要帮助理解imull $16部分的作用 - 它只是执行有符号的乘法,l代表long字的最后{​​{1}}。

(%eax, %edx, 4)是一种寻址形式,你有一个基地址,一定数量元素的偏移量,以及一个比例/乘数,用于将元素数乘以每个元素的大小:{{ 1}}。

你最终得到的是(base, offset, offset scale/multiplier),所以在这种情况下它将是:

(base + (offset * multiplier)

因此,指令(%eax + (%edx * 4)) (0x100 + (0x3 * 4)) (0x100 + 0xC) (0x10C) 执行imull $16, (%eax, %edx,4)的有符号乘法乘以地址16处长字的值。

答案 1 :(得分:1)

此指令的结果将是dword存储在地址0x10c乘以16的任何值(或者,如果您愿意,则向左移动4位)。结果也将写入该地址。