-1

我正在查看一些代码,发现有两行让我感到困惑:

add    -0x4(%esi,%ebx,4),%eax
cmp    %eax,(%esi,%ebx,4)

我已经习惯了这个标准add src,dstcmp x1,x2而且我不确定这些行实际上在做什么。

我相信它是用 GCC 编译的

4

1 回答 1

2

那是使用 Base + (Index * Scale) + Displacement 寻址模式。至少,我是这么认为的。我对 AT&T 语法并不熟悉。我认为英特尔的语法是:

add eax,[esi + ebx*4 - 4]
cmp [esi + ebx*4],eax

这看起来像是在索引一个整数数组(4 字节值)。想象一下,在 C 语言中,您想将某个数组元素的值添加到总数中,如下所示:

int a[100];
int i = 10;
int total = 0;
total += a[i-1];

现在,esi保持数组的地址,ebx保持 的值i,并eax保持值 33。你会得到:

add eax,[esi + ebx*4 - 4]

比较指令正在测试结果 (in eax) 是否等于数组中的下一个值。在 C 示例中,这相当于total比较a[i].

于 2012-04-15T04:00:03.057 回答