我一直在寻找通过一些代码,发现2号线是困惑着我:混淆add命令
add -0x4(%esi,%ebx,4),%eax
cmp %eax,(%esi,%ebx,4)
我习惯了标准add src,dst
和cmp x1,x2
,我真的不知道是什么这些线实际上在做。
我相信,它与GCC
我一直在寻找通过一些代码,发现2号线是困惑着我:混淆add命令
add -0x4(%esi,%ebx,4),%eax
cmp %eax,(%esi,%ebx,4)
我习惯了标准add src,dst
和cmp x1,x2
,我真的不知道是什么这些线实际上在做。
我相信,它与GCC
这是使用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示例中,这相当于比较total
到a[i]
。
你是对的。 AT&T语法基础:http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html – DCoder 2012-04-15 05:24:02
如果您编辑问题以包含您正在使用的特定汇编程序的更多详细信息,将会有所帮助。我不认识这个语法,但我必须补充一点,从我用汇编语言开始就已经有一段时间了。 – 2012-04-15 03:38:25