1

以下 cmp 指令让我感到困惑:

%eax,0x18(%esp,%ebx,4)

我知道它将 arg1 与 arg2 进行比较,但是 arg2 中到底发生了什么以及括号中的内容?

谢谢

4

2 回答 2

0

它根据 esp 和 ebx 的值计算内存位置的地址。您没有指定使用的汇编符号,所以我只能猜测它是 esp + 4*ebx + 0x18。

于 2014-03-23T23:58:36.090 回答
0

这是 at&t 语法中的有效地址。一般形式是displacement(base, index, scale)wheredisplacement是数字(地址),base并且index是寄存器,并且是 、scale1的因数。结果地址计算为。可以省略组件。248displacement + base + index * scale

顺便说一句,如果你更喜欢的话,你可以将 gnu 工具切换到 intel 语法模式。

于 2014-03-23T23:59:51.813 回答