1
ysc3839 2018-12-11 19:58:13 +08:00 via Android
“寄存器偏移寻址指令”是什么?
|
3
hx1997 2018-12-11 20:42:10 +08:00
是的,这是常见的实现方法之一,但也不是所有情况都这么实现。
例 1. char ch[5] = "abcd"; for (int i = 0; i < 5; i++) printf("%c", ch[i]); 在我这里,编译出来后 ch[i] 对应的汇编是: 0x0000000000401556 <+38>: movzx eax,BYTE PTR [rbp+rax*1-0x10] rax 就相当于 i,rbp-0x10 相当于 ch 的首地址,*1 是因为 char 型占 1 字节。 例 2. int num[5] = {1, 2, 3, 4, 5}; for (int i = 0; i < 5; i++) printf("%d", num[i]); 在我这里,编译出来后 num[i] 对应的汇编是: 0x00000000004015a0 <+112>: mov eax,DWORD PTR [rbp+rax*4-0x30] rax 还是 i,rbp-0x30 是 num 首地址,*4 是因为 int 型在我的机器上占 4 字节。 |
4
hx1997 2018-12-11 20:49:24 +08:00
Oops, 我这个是相对基址变址比例寻址,和你那个有点不同(加了变址和比例因子),不过原理差不多的。
|