首页 > 试题广场 >

考虑下面的源代码,这里NR和NC是用#define声明的宏表

[问答题]

考虑下面的源代码,这里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的定义。

这道题你会答吗?花几分钟告诉大家答案吧!