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的值,并设置标志(OFSF, ZF, AF, PF, CF) 相应地但不会将结果保存在任何地方。 cmpsub 完全相同,唯一的区别是sub 中保存了结果,cmp 中没有。

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

【讨论】:

对不起 >. Intel and AT&T syntaxes cmp 之后的条件跳转如果条件满足则跳转到代码中的其他位置。如果不是,则继续执行下一条指令(无跳转)。还有其他可能的方法(以标志作为键的哈希表),但条件跳转解决了所有情况。请注意,在 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 程序集中的浮点异常 [重复]

X86中mov和movl指令的区别?我在阅读汇编时遇到了一些麻烦[重复]

2.4-复杂的x86指令举例

3.4 复杂的x86指令举例

GCC优化内存访问[重复]

x86汇编-句子中字符的频率[重复]