第三章家庭作业
选题:3.63
分值:两分
作业过程:
int sum_col(int n,int A[E1(n)][E2(n)],int j) { int i; int result = 0; for(i=0;i<E1(n);i++) result += A[i][j]; return result; }
上面是原来的代码
汇编代码
movl 8(%ebp),%edx ;edx:n leal (%edx,%edx),%eax ;eax:2n leal -1(%eax),%ecx ;ecx:2n-1 leal (%eax,%edx),%esi ;esi:3n,(E1(n)) movl $0,%eax ;eax: 0(result) testl %esi,%esi ;检验esi(正\负\0) jle .L3 ;若esi中E1(n)≤0的话,跳转 leal 0(,%ecx,4),%ebx ;ebx:0+4*ecx=4(2n-1) movl 16(%ebp),%eax ;eax:ebp+16(j的地址) movl 12(%ebp),%edx ;edx:ebp+12(A[i]的地址) leal (%edx,%eax,4),%ecx ;ecx:edx+4*eax(A[i][j]) movl $0,%edx ;edx:0 movl $0,%eax ;eax: 0 .L4 ;loop addl (%ecx),%eax ;eax+=ecx((A[i][j]的地址) addl $1,%edx ;edx:edx+1(i) addl %ebx,%ecx ;ecx:ecx+ebx(ecx:A[i+1][j]) cmpl %esi,%edx ;比较esi与edx(E1(n)与i的比较) jl .L4 ;如果i<E1(n),跳转,回到循环 .L3 ;
E1(n)存储在esi中,E1(n)=3n;
E2(n)存储在ebx中,ebx=4*E2(n),所以E2(n)=2n-1.