我正在gdb上运行一些代码,我不知道这两条指令实际上是做什么的。如果有人能帮助我,我真的很感激。
add -0x2c(%ebp, %ebx, 4), %eax
cmp %eax, -0x28(%ebp, %ebx, 4)
答案 0 :(得分:5)
在英特尔语法中,它将是:
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]
,OF
,SF
,ZF
,AF
,PF
),但不保存结果。 CF
与cmp
完全相同,唯一的区别在于sub
结果已保存,sub
没有。
比较类型通常以条件跳转的形式创建。在x86程序集中,有很多条件跳转,它们是否分支取决于标志的值。
答案 1 :(得分:1)
该AT& T汇编语法。那些寻址模式看起来有点奇怪,但在伪代码中,它们意味着:
eax = *(ebp + ebx*4 - 0x2c)
和
compare eax to *(ebp + ebx*4 - 0x28)
这是与complete explanation的链接。