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 字节。