【问题标题】:Confusing add command in x86 assemblyx86 程序集中令人困惑的添加命令
【发布时间】:2012-04-15 03:24:16
【问题描述】:

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

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

我习惯了标准的add src,dstcmp x1,x2,我不太确定这些行实际上在做什么。

相信是用GCC编译的

【问题讨论】:

  • 如果您编辑问题以包含有关您正在使用的特定汇编程序的更多详细信息,这将有所帮助。我不认识这种语法,但我必须补充一下,我已经有一段时间没有摆弄汇编程序了。

标签: assembly syntax x86 add cmp


【解决方案1】:

这是使用 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 示例中,这相当于将 totala[i] 进行比较。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
  • 2022-01-21
  • 2022-01-17
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
相关资源
最近更新 更多