Assembly 在x86程序集中混淆add命令

Assembly 在x86程序集中混淆add命令,assembly,syntax,x86,add,cmp,Assembly,Syntax,X86,Add,Cmp,我浏览了一些代码,发现有两行代码让我感到困惑: add -0x4(%esi,%ebx,4),%eax cmp %eax,(%esi,%ebx,4) 我习惯于标准的addsrc、dst和cmpx1、x2,我不确定这些行实际上在做什么 我相信它是用GCC编译的,GCC使用Base+Index*Scale+Displacement寻址模式。至少,我认为是这样。我不太熟悉AT&T的语法。我认为英特尔的语法应该是: add eax,[esi + ebx*4 - 4] cmp [esi + e

我浏览了一些代码,发现有两行代码让我感到困惑:

add    -0x4(%esi,%ebx,4),%eax
cmp    %eax,(%esi,%ebx,4)
我习惯于标准的addsrc、dst和cmpx1、x2,我不确定这些行实际上在做什么


我相信它是用GCC编译的,GCC使用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]

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

如果您编辑问题以包含有关您正在使用的特定汇编程序的更多详细信息,这将有所帮助。我不认识这种语法,尽管我必须补充一点,我已经有一段时间没有摆弄汇编程序了。你们说得对。AT&T语法基础: