以下 cmp 指令让我感到困惑:
%eax,0x18(%esp,%ebx,4)
我知道它将 arg1 与 arg2 进行比较,但是 arg2 中到底发生了什么以及括号中的内容?
谢谢
它根据 esp 和 ebx 的值计算内存位置的地址。您没有指定使用的汇编符号,所以我只能猜测它是 esp + 4*ebx + 0x18。
这是 at&t 语法中的有效地址。一般形式是displacement(base, index, scale)
wheredisplacement
是数字(地址),base
并且index
是寄存器,并且是 、scale
或1
的因数。结果地址计算为。可以省略组件。2
4
8
displacement + base + index * scale
顺便说一句,如果你更喜欢的话,你可以将 gnu 工具切换到 intel 语法模式。