具体来说,有一个比较声明说:
cmp %eax, 0xc(%esp, %esi, 4)
然后跳转如果不等于它之后的声明。我想知道语句0xc(%esp,%esi,4)
的后半部分是指什么。
谢谢!
答案 0 :(得分:1)
在AT& T语法中,内存操作数的格式为
displacement(base register, offset register, scalar multiplier)
在英特尔语法中,cmp %eax,0xc(%esp,%esi,4)
(顺便说一下,cmpl
不应该写成?)会写成cmp [esp + esi * 4 + 12], eax
,使其可见所有部分扮演的角色。< / p>
答案 1 :(得分:1)
cmp %eax,0xc(%esp,%esi,4)
与此相同:
cmp [esp + 12 + 4*esi], eax
括号中的公式计算地址。保存在该地址的值与eax
进行比较。