考虑下面的源代码,这里NR和NC是用#define声明的宏表达式,计算用参数表示的矩阵A的维度。这段代码计算矩阵的第i列的元素之和。
1 long sum_col(long n, long A[NR(n)][NC(n)], long j) {
2 long i;
3 long result = 0;
4 for (i = 0; i<NR(n); i++)
5 result += A[i] [j];
6 return result;
7 } 编译这个程序,GCC产生下面的汇编代码:
sum_col: leaq 1(,%rdi,4),%r8 leaq (%rdi,%rdi,2),%rax movq %rax,%rdi testq %rax,%rax jle .L4 salq $3,%r8 leaq (%rsi,%rdx,8),%rcx movl $0,%eax movl $0,%eax .L3: addq (%rcx),%rax addq $1,%rdx addq %r8,%rcx cmpq %rdi,%rdx jne .L3 rep;ret .L4: movl $0,%eax ret
运用你的逆向工程技术,确定NR和NC的定义。
