x86指令含义

时间:2012-09-08 01:50:56

标签: assembly x86 att addressing-mode

我正在gdb上运行一些代码,我不知道这两条指令实际上是做什么的。如果有人能帮助我,我真的很感激。

add  -0x2c(%ebp, %ebx, 4), %eax
cmp  %eax, -0x28(%ebp, %ebx, 4)

2 个答案:

答案 0 :(得分:5)

当您使用英特尔语法而不是AT& T语法编写x86程序集时,通常会更容易理解。

在英特尔语法中,它将是:

add eax,[ebp+4*ebx-0x2C]
cmp [ebp+4*ebx-0x28],eax

第一条指令(add)将存储在地址[ebp+4*ebx-0x2C]中的字的值与eax的值相加,并将总和存储在eax中。 / p>

第二条指令(cmp)将eax[ebp+4*ebx-0x28]进行比较,从存储在内存地址{{1}中的字的值中减去eax的值},并相应地设置标记([ebp+4*ebx-0x28]OFSFZFAFPF),但不保存结果。 CFcmp完全相同,唯一的区别在于sub结果已保存,sub没有。

比较类型通常以条件跳转的形式创建。在x86程序集中,有很多条件跳转,它们是否分支取决于标志的值。

答案 1 :(得分:1)

该AT& T汇编语法。那些寻址模式看起来有点奇怪,但在伪代码中,它们意味着:

eax = *(ebp + ebx*4 - 0x2c)

compare eax to *(ebp + ebx*4 - 0x28)

这是与complete explanation的链接。