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.
A.E=4,B=4,S=8
所以C=E*B*S=128
B.

由题6.31可得:
块偏移位数量b=2 ==>CO
组索引位数量s=3 ==>CI
标记位数量t=8 ==>CT
接着把0x0718化成二进制得到0000011100011000,然后按顺序填入地址中:
索引位为6,高速缓存示记为38,所以可以看6.31的图索引位为6的那一行,有两个38的标记位,所以缓存示命中的。但是第一个的状态是0所以命中的是后面的FA


读总数为2912
不命中的读总数为728
不命中率为25%
原文:http://www.cnblogs.com/javablack/p/4982693.html