x86指令含义[重复]
Posted
技术标签:
【中文标题】x86指令含义[重复]【英文标题】:x86 instruction meaning [duplicate] 【发布时间】:2012-09-08 01:50:56 【问题描述】:我现在正在 gdb 上运行一些代码,但我不知道这两条指令实际上是做什么的。如果有人可以帮助我,我将不胜感激。
add -0x2c(%ebp, %ebx, 4), %eax
cmp %eax, -0x28(%ebp, %ebx, 4)
【问题讨论】:
首先,我会关闭粗俗的 AT&T 语法:set disassembly-flavor intel
另请参阅AT&T syntax tag wiki,了解有关语法的更多详细信息,以及指向更多文档的链接。
【参考方案1】:
当您使用 Intel 语法而不是 AT&T 语法编写 x86 程序集时,它通常更容易理解。
在 Intel 语法中是:
add eax,[ebp+4*ebx-0x2C]
cmp [ebp+4*ebx-0x28],eax
第一条指令(add
)将存储在内存地址[ebp+4*ebx-0x2C]
中的字的值与eax
的值相加,并将和存储在eax
中。
第二条指令(cmp
)比较eax
和[ebp+4*ebx-0x28]
,方法是从内存地址[ebp+4*ebx-0x28]
中存储的字的值中减去eax
的值,并设置标志(OF
, SF
, ZF
, AF
, PF
, CF
) 相应地但不会将结果保存在任何地方。 cmp
与sub
完全相同,唯一的区别是sub
中保存了结果,cmp
中没有。
比较类型通常以条件跳转的形式创建。在 x86 汇编中有很多条件跳转,它们是否分支取决于标志的值。
【讨论】:
对不起 >. Intel and AT&T syntaxescmp
之后的条件跳转如果条件满足则跳转到代码中的其他位置。如果不是,则继续执行下一条指令(无跳转)。还有其他可能的方法(以标志作为键的哈希表),但条件跳转解决了所有情况。请注意,在 Intel 和 AT&T 语法中,操作数的顺序是相反的,在 Intel 中是 dest,src
,而在 AT&T 中是 src,dest
。这也会影响cmp
。见Intel x86 jump quick ref.。【参考方案2】:
这是 AT&T 汇编语法。这些寻址模式看起来有点奇怪,但在伪代码中,它们的意思是:
eax = *(ebp + ebx*4 - 0x2c)
和
compare eax to *(ebp + ebx*4 - 0x28)
这是complete explanation的链接。
【讨论】:
以上是关于x86指令含义[重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 div 指令的 x86 NASM 程序集中的浮点异常 [重复]