带有括号和地址的x86中的CMP

时间:2014-10-09 23:17:37

标签: assembly x86 att

我在x86汇编语言中有以下行,我不知道它的作用......

cmp %eax,0x80498d4(,%ebx,4)

我知道它正在比较声明的两半,但我不知道地址在其中做了什么以及括号做了什么。非常感谢一些澄清!

2 个答案:

答案 0 :(得分:4)

在AT& T语法中,此表单代表

OFFSET(基本寄存器,索引寄存器,索引规模)

所以表示的地址是BASE REGISTER(如果存在)+ INDEX * SCALE(如果存在)+ OFFSET的值,所以

EBX * 4 + 0x80498d4。

答案 1 :(得分:1)

这是AT& T语法:

cmp %eax,0x80498d4(,%ebx,4)

Intel语法中的等价物是:

cmp [080498D4H + EBX*4],EAX

这意味着它将地址[0x80498D4 + 4*EBX]的DWORD内容与EAX寄存器的内容进行比较,并将处理器标志 设置为 这两个值相互减去。之后,您可以使用这些标志来执行条件跳转。