下面的代码转置一个MXM矩阵的元素,这里M是一个用#define定义的常数:
1 void transpose(long A[M][M]) { 2 long i, j; 、 3 for (i = 0; i < M; i++) 4 for (j = 0; j < i; j++) { 5 long t = A[i] [j]; 6 A[i][j] = A[j][i]; 7 A[j] [i] = t; 8 } 9 }
当用优化等级-O1编译时,GCC为这个函数的内循环产生下面的代码:
.L6: movq (%rdx),%rcx movq (%rax),%rsi movq %rsi,(%rdx) movq %rcx,(%rax) addq $8,%rdx addq $120,%rax cmpq %rdi,%rax jne .L6
我们可以看到GCC把数组索引转换成了指针代码。
A. 哪个寄存器保存着指向数组元素A[i][j]的指针?
B. 哪个寄存器保存着指向数组元素A[j][i]的指针?
C.M的值是多少?