2016-10-18 76 views
1
0x7f52379dc42c: mov 0xc(%r12,%r11,8),%r11d 
    0x7f52379dc431: mov %r11d,0xc(%rsp) 
    0x7f52379dc436: mov 0xc(%r12,%r10,8),%r14d 
    0x7f52379dc43b: cmp %r11d,%r14d 

我明白MOV%r11d,位于0xC(%RSP)指*(RSP +位于0xC)=位于0xC什么逗号分开托架mov指令意味着

什么MOV 0xc(%r12,%r11,8),%r11d是什么意思?

+0

可能的重复[括号中逗号的含义是什么意思](http://stackoverflow.com/questions/18650093/what-does-a-comma-in-a-parenthesis-mean-in-assembly ) –

回答

0

在AT &Ť在x86/x64助记符的存储器操作数(解引用)的一般语法offset(base, index, scale),这是与在Intel语法[base + index * scale + offset](这几乎是一样的,你使用的伪C语法)。

具体地,第一个指令

mov 0xc(%r12,%r11,8), %r11d 

相同

mov r11d, DWORD PTR [r12+r11*8+0xc] 
在英特尔助记符

,和大致相同

r11d = *(r12 + r11 * 8 + 0xc) 
在伪C语法

请注意,缩放在指令中仅使用2位编码,并且始终是2的幂,所以只允许1,2,4和8的值。