我不明白这个汇编指令的作用.它的作用是什么?为什么?
imull $16, (%eax, %edx,4)
Run Code Online (Sandbox Code Playgroud)
寄存器的初始值是
%eax= 0x100x
%edx= 0x3
Run Code Online (Sandbox Code Playgroud)
我假设您正在尝试理解如何解释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)
Run Code Online (Sandbox Code Playgroud)
因此,指令imull $16, (%eax, %edx,4)执行16地址处长字的值的有符号乘法0x10C.