2012-04-15 102 views
-1

我一直在寻找通过一些代码,发现2号线是困惑着我:混淆add命令

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

我习惯了标准add src,dstcmp x1,x2,我真的不知道是什么这些线实际上在做。

我相信,它与GCC

+0

如果您编辑问题以包含您正在使用的特定汇编程序的更多详细信息,将会有所帮助。我不认识这个语法,但我必须补充一点,从我用汇编语言开始就已经有一段时间了。 – 2012-04-15 03:38:25

回答

2

这是使用Base +(索引*比例)+位移寻址模式编译。至少,我认为是。我不熟悉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] 

比较指令测试,看看结果(eax)等于数组中的下一个值。在C示例中,这相当于比较totala[i]

+1

你是对的。 AT&T语法基础:http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html – DCoder 2012-04-15 05:24:02