我不明白这个汇编指令的作用。它的作用是什么?为什么?
imull $16, (%eax, %edx,4)
寄存器的初始值是
%eax= 0x100x
%edx= 0x3
答案 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位)。结果也将写入该地址。