您的位置:首页 > 理论基础

深入理解计算机系统homework3 3.55 3.56 3.58 3.59 3.60

2013-10-03 21:14 288 查看
习题
3.55
X是int类型,Y是longlong类型,Y可以表示成为Y=Yh*
2^32 + Yl
X可以表示成X=
- Xsign * 2^32 +(unsigned)X。最后的T=X*Y结果T也是longlong类型的。同理可以写成T=
Th * 2^32 +Tl 。
T= X*Y=( Yh * 2^32 + Yl) * (- Xsign * 2^32+(unsigned)X)因为我们只关心最后64位的值,因此T=((unsigned)X*
Yh - Xsign * Yl)*2^32 +

(Yl*
(unsigned)X)
显然 Th=
(unsigned)X*
Yh - Xsign * Yl
Tl= Yl *
(unsigned)X
最后考虑一下Tl向Th进位即可。

1movl 16(%ebp),%esi get Yl
2movl 12(%ebp),%eax get X
3movl %eax,%edx move X
4sarl $31,%edx get -Xsign
5movl 20(%ebp),%ecx move Yh
6imull %eax,%ecx computer Th = Yh * X
7movl %edx,%ebx move -Xsign
8imull %esi,%ebx
computer n = -Xsign * Yl
9addl %ebx,%ecx
add n to Th, Th = Yh * X -Xsign*Yl
10mull %esi computer m = Y1 * X ->%eax,%edx
11lead (%ecx,%edx),%edx add m's high 32 bit part to Th
12movl 8(%ebp),%ecx get dest
13movl %eax,(%ecx) store Tl

14movl %edx,4(%ecx) store T

习题3.56
A
x:%esi n:%ebx result:%edi mask:%eax
B
result= -1
mask= 1
C
mask!= 0
D
mask右移
n的低8位
Eresult
去异或 (x& mask)

F1)-1 2)1 3)!=0 4)mask >>(n&0xff) 5)x&mak

习题3.58
intswitch3(int *p1, ing *p2 ,mode_t action)
{
int result = 0;
switch(action){
caseMODE_A:
result= *p1;*p1 = *p2;break;
caseMODE_B:
result= *p2;*p2 = result;break;
caseMODE_C:
*p2= 15; result = *p1;break;
caseMODE_D:
*p2= *p1; result = 17;
caseMODE_E:

result = 17; break;
default:
result= -1;
}
return result;
}
习题3.59
intswitch_prob(int x,int n)
{
intresult = x;
Switch(n){
case 50:
case 52:
result= result << 2;

break;
case 51:
result+= 10;

break;

case 53:
result = result >> 2;

break;
case 54:
result*=3; result = result * result;

result+= 10;
break;
case 55:
result= result * result;
result+= 10;

break;
default:
result+=10;break;
}
returnresult;
}

习题3.60
A
&A[i][j][k]= XA+L( T ( S * i + j ) + k )

B
因为地址为XA+4(9j+63i+k)
T= 9
9s= 63 -> S = 7
又因为sizeof(A)*4=R*S*T
*4 =2772 -> R = 2772/63/4=11
即 R= 11 S=7 T = 9

Problem4
1、c
2、a
3、

1

4 4
4 8
4 8
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: