我不明白这个汇编指令是做什么的。它的作用是什么,为什么?
imull $16, (%eax, %edx,4)
寄存器的初始值为
%eax= 0x100x
%edx= 0x3
我假设您正在尝试了解如何解释 AT&T 风格的汇编指令,特别是寻址部分。我相信你不需要帮助来理解这imull $16
部分的作用——它只是执行一个有符号的乘法,最后一个l
代表long
单词。
(%eax, %edx, 4)
是一种寻址形式,其中您有一个基地址、一定数量元素的偏移量以及一个用于将元素数量乘以每个元素的大小的比例/乘数:(base, offset, offset scale/multiplier)
.
你最终得到的是(base + (offset * multiplier)
,所以在这种情况下它将是:
(%eax + (%edx * 4))
(0x100 + (0x3 * 4))
(0x100 + 0xC)
(0x10C)
因此,该指令imull $16, (%eax, %edx,4)
执行16
与地址处长字的值的有符号乘法0x10C
。
该指令的结果将dword
是存储在地址中的任何内容0x10c
乘以 16(或者,如果您愿意,可以向左移动 4 位)。结果也将写入该地址。