- 白中英《计算机组成原理》(第5版)笔记和课后习题详解
- 圣才电子书
- 4307字
- 2021-06-08 15:16:11
2.2 课后习题详解
1写出下列各整数的原码、反码、补码表示(用8位二进制数)。其中MSB是最高位(符号位),LSB是最低位。
(1)-35
(2)127
(3)-127
(4)-1
答:根据原码、反码、补码之间的转换关系可得:
(1)[-35]原=1010 0011
[-35]反=1101 1100
[-35]补=1101 1101
(2)[127]原=0111 1111
[127]反=0111 1111
[127]补=0111 1111
(3)[-127]原=1111 1111
[-127]反=1000 0000
[-127]补=1000 0001
(4)[-1]原=1000 0001
[-1]反=1111 1110
[-1]补=1111 1111
2设[x]补=a7.a6a5…a0,其中ai取0或1,若要x>-0.5,求a0,a1,a2,…,a6的取值。
答:[x]补=a7.a6a5…a0
①若a7=0,则x>0,满足x>-0.5,此时a0到a6可任意取值;
②若a7=1,则x≤0,要满足x>-0.5,需a6=1,即a7=1,a6=1,a0到a5不全为0。
3有一个字长为32位的浮点数,符号位1位;阶码8位,用移码表示;尾数23位,用补码表示;基数为2。请写出:
(1)最大数的二进制表示;
(2)最小数的二进制表示;
(3)规格化数所能表示的数的范围。
答:该浮点数的格式如图2-10所示。
图2-10 该浮点数的格式
由于S是数符,已表示了尾数的符号,所以为了提高表示精度,M(23位)不必存储符号位,只需要存小数点后面的有效数值即可。
(1)最大数的二进制表示为:0 11111111 11111111111111111111111(23个1);
(2)最小数的二进制表示为:1 11111111 00000000000000000000000(23个0);
(3)非IEEE754标准的补码表示的规格化数是指其最高位有效位与符号位相反,故有:
①最大正数为:0 11111111 11111111111111111111111(23个1)=+(1-2-23)×2127
②最小正数为:0 00000000 10000000000000000000000(22个0)=+2-1×2-128
③最大负数为:1 00000000 01111111111111111111111(22个1)=-(2-1+2-23)×2-128
④最小负数为:1 11111111 00000000000000000000000(23个0)=-1×2127
所以其表示数的范围是:-1×2127~-(2-1+2-23)×2-128以及+2-1×2-128~+(1-2-23)×2127。
4将下列十进制数表示成IEEE754标准的32位浮点规格化数。
(1)27/64
(2)-27/64
答:27/64=0.011011=(1.1011)2×2-2
(1)27/64的32位浮点规格化数的表示为0 01111101 10110000000000000000000
(2)-27/64的32位浮点规格化数的表示为1 01111101 10110000000000000000000
5已知x和y,用变形补码计算x+y,同时指出结果是否溢出。
(1)x=11011,y=00011
(2)x=11011,y=-10101
(3)x=-10110,y=-00001
答:采用双符号位判断是否溢出。
(1)[x]补=00 11011,[y]补=00 00011,故有
x+y=11110,结果未溢出。
(2)[x]补=00 11011,[y]补=11 01011,故有
x+y=00110,结果未溢出。
(3)[x]补=11 01010,[y]补=11 11111,故有
x+y=-10111,结果未溢出。
6已知x和y,用变形补码计算x-y,同时指出运算结果是否溢出。
(1)x=11011,y=-11111
(2)x=10111,y=11011
(3)x=11011,y=-10011
答:[x-y]补=[x]补-[y]补=[x]补+[-y]补,采用双符号位判断是否溢出。
(1)[x]补=00 11011,[-y]补=00 11111,故有
符号位为01,结果正溢出。
(2)[x]补=00 10111,[-y]补=11 00101,故有
x-y=-00100,结果未溢出。
(3)[x]补=00 11011,[-y]补=00 10011
符号位为01,结果正溢出。
7用原码阵列乘法器、补码阵列乘法器分别计算x×y。
(1)x=11011,y=-11111
(2)x=-11111,y=-11011
答:(1)①原码阵列乘法
x=11011,y=-11111;
[x]原=0 11011,[y]原=1 11111;
符号位:x0⊕y0=0⊕1=1,故有
则[x×y]原=1 1101000101,x×y=-11 0100 0101。
②直接补码阵列乘法
[x]补=0 11011,[y]补=1 00001,故有
[x×y]补=1 0010111011,x×y=-11 0100 0101
(2)①原码阵列乘法
[x]原=1 11111,[y]原=1 11011;
符号位单独运算:x0⊕y0=1⊕1=0,故有
[x×y]原=0 1101000101,x×y=11 0100 0101。
②直接补码阵列乘法
[x]补=1 00001,[y]补=1 00101,故有
[x×y]补=0 11010 00101,x×y=11 0100 0101
8用原码阵列除法器计算x÷y(注:先乘1个比例因子变成小数)。
(1)x=11000,y=-11111
(2)x=-01011,y=-11001
答:(1)用原码阵列除法器计算,符号位单独计算,Sf=0⊕1=1;
设a=|x|×2-5,b=|y|×2-5,则a,b均为正的纯小数,且x÷y的数值为a÷b,余数等于a÷b的余数乘以25,则[a]补=[|x|×2-5]补=0.11000,[b]补=[|y|×2-5]补=0.11111,[-b]补=1.00001,故有
即a÷b的商为0.11000;余数为1.11001×2-5;因为1.11001为负数,加b处理为正数得1.11001+b=1.11001+0.11111=0.11000,所以a÷b的余数为0.11000×2-5。
所以,x÷y的商为-0.11000,余数为0.11000。
(2)商的符号位Sf=1⊕0=1
设a=|x|×2-5,b=|y|×2-5,则a,b均为正的纯小数,且x÷y的数值等于a÷b;余数等于a÷b的余数乘以25,[a]补=[|x|×2-5]补=0.01011,[b]补=[|y|×2-5]补=0.11001,[-b]补=1.00111,故有
即a÷b的商为0.01110,余数为1.01001×2-5,因为1.01001位负数,加b处理为正数,即1.01001+b=1.01001+0.11001=0.00010,所以a÷b的余数为0.00010×2-5。
所以,x÷y的商为-0.01110,余数为0.00010。
9设阶码3位,尾数6位,按浮点运算方法,完成下列取值的[x+y],[x-y]运算:
(1)x=2-011×0.100101,y=2-010×(-0.011110)
(2)x=2-101×(-0.010110),y=2-100×(-0.010110)
答:(1)设阶码和尾数均以补码表示,阶码采用双符号位,尾数采用单符号位,则它们的浮点表示分别为:
[x]浮=11,101;0.100101,[y]浮=11,110;1.100010,则[x+y]浮的计算过程如下:
①求阶差并对阶
ΔE=Ex-Ey=[Ex]补-[Ey]补=[Ex]补+[-Ey]补=11101+00010=11111
即ΔE为-1,x阶码小,根据小阶向大阶看齐的原则,应使Mx右移1位,Ex加1,则
[x]浮=11,110;0.010010(1)
②尾数求和
③规格化:尾数运算结果的符号位与最高有效位的数据相同,应该执行左规格化处理,尾数每左移一次,相应阶码减1,所以结果尾数为1.010010,阶码为11100;
④舍入处理:本题不需要进行舍入操作;
⑤判断溢出:阶码两符号位为11,结果未溢出。
故最后结果为:
[x+y]浮=11,100;1.010010,真值为2-100×(-0.101110)。
求[x-y]浮的计算过程与[x+y]浮的计算过程的差别在于尾数求差这一步,如下所示:
上述结果已经规格化,采用0舍1入进行舍入处理,则[x-y]浮=11,110;0.110001,真值为2-010×0.110001。
(2)设阶码和尾数均以补码表示,阶码采用双符号位,尾数采用单符号位,则它们的浮点表示分别为:
[x]浮=11,011;1.101010,[y]浮=11,100;0.010110
①求阶差并对阶
ΔE=Ex-Ey=[Ex]补-[Ey]补=[Ex]补+[-Ey]补=11,011+00,100=11,111
即ΔE为-1,x阶码小,根据小阶向大阶看齐的原则,应使Mx右移1位,Ex加1,则
[x]浮=11,100;1.110101(0)
②尾数求和
③规格化
可见尾数运算结果的符号位与最高有效位的数据相同,应执行左规格化处理,每左移尾数一次,相应阶码减1,所以结果尾数为0.101100,阶码为11010;
④舍入处理:本题不需要;
⑤判断溢出:阶码两符号位为11,没有溢出。
故最后结果为[x]浮+[y]浮=11,010;0.10110,真值为2-110×(0.10110)。
而求[x-y]浮的计算过程与[x+y]浮的计算过程的差别在于尾数求差这一步,如下所示:
[x-y]浮=11,100;1.011111,真值为2-100×(-0.100001)。
10设数的阶码3位,尾数6位,用浮点运算方法,计算下列各式:
(1)
(2)
答:(1)假设阶码采用补码表示,尾数采用原码表示,阶码和尾数均采用单符号位,阶码为3位,尾数为6位,则[x]浮=0,011;0.110100,[y]浮=0,100;1.100100。
①尾数符号位:符号位Sf=0⊕1=1,去掉尾数符号位后,得到
Ex=0011,Mx=0.110100
Ey=0100,My=0.100100
②阶码相加:Ez=Ex+Ey=0111;
③尾数相乘:Mz=Mx×My
得到Mz=0.01110101;
④规格化:执行左规格化,尾数每左移一位阶码减1,得到Ez=0110,Mz=0.1110101;
⑤舍入处理:采用四舍五入,得到Mz=0.111011,最后加上符号,得
(2)假设阶码与尾码采用补码表示,且均用单符号位,阶码为3位,尾数为6位,则
[x]浮=1,110;0.011010,Ex=1110,Mx=0.011010
[y]浮=0,011;0.111100,Ey=0011,My=0.111100
①尾数符号位:符号位Sf=0⊕0=0;
②阶码相减:Ez=Ex-Ey=1 110-0011=1011;
③尾数相除:Mz=Mx÷My
Mx÷My的商为0.0110111,余数为0.011100×2-7,则x÷y余数为0.111000×2-10。最后可得x÷y的商为0.0110111×21011,规格化处理后为0.110111×2-6,余数为0.111000×2-10。
11某加法器进位链小组信号为C4C3C2C1,低位来的进位信号为C0,请分别按下述两种方式写出C4C3C2C1的逻辑表达式:
(1)串行进位方式
(2)并行进位方式
答:4位加法器如图2-11所示。
图2-11 4位加法器
其进位逻辑表达式为
(1)串行进位方式的逻辑表达式
C1=G1+P1C0,其中G1=A1B1,P1=A1⊕B1;
C2=G2+P2C1,其中G2=A2B2,P2=A2⊕B2;
C3=G3+P3C2,其中G3=A3B3,P3=A3⊕B3;
C4=G4+P4C3,其中G4=A4B4,P4=A4⊕B4。
(2)并行进位方式的逻辑表达式
C1=G1+P1C0;
C2=G2+P2G1+P2P1C0;
C3=G3+P3G2+P3P2G1+P3P2P1C0;
C4=G4+P4G3+P4P3G2+P4P3P2G1+P4P3P2P1C0。
12用IEEE 32位浮点格式表示如下的数:
(1)-5
(2)-1.5
(3)384
(4)1/16
(5)-1/32
答:IEEE浮点格式的阶码减去127为真值指数。
(1)-5=-(101)2=-(1.01)2×22,故浮点格式为:
1 10000001 01000000000000000000000
(2)-1.5=-(1.1)2=-(1.1)2×20,故浮点格式为:
1 01111111 10000000000000000000000
(3)384=(180)16=(1 1000 0000)2=(1.1)2×28,故浮点格式为:
0 10000111 10000000000000000000000
(4)1/16=(1.0)2×2-4,故浮点格式为:
0 01111011 00000000000000000000000
(5)-1/32=-(1.0)2×2-5,故浮点格式为:
1 01111010 00000000000000000000000
13下列各数使用了IEEE 32位浮点格式,相等的十进制是什么?
(1)1 10000011 110 00000000000000000000
(2)0 01111110 101 00000000000000000000
答:(1)(-1.11×24)2=(-11100)2=(-28)10
(2)(1.101×2-1)2=(0.1101)2=(0.8125)10
1432位格式最多能表示232个不同的数,用IEEE 32位浮点格式最多能表示多少不同的数?为什么?
答:IEEE754标准中,32位二进制数仍然有232种不同组合,但是由于在IEEE754中,阶码为全1且尾数为非0的情况不表示一个数。尾数23位,尾数非0有223-1种组合,再配合符号位,共有2×(223-1)种组合不表示一个数,所以该格式最多能表示不同的数的个数为232-2×(223-1)。
15设计一个带有原码阵列乘法器(使用芯片)和原码阵列除法器(使用芯片)的定点运算器。
答:设输入的数据为X和Y,则会把数据驱动到原码乘法器和原码除法器芯片上,并且它是通过操作控制信号选通相应的芯片进行指定运算的,因此设计如图2-12所示。
图2-12 带原码阵列乘法及除法器的定点运算器
16设计一个ALU(4位),完成加、减、取反、取补、逻辑乘、逻辑加、传送、加1等8种运算功能。
答:8种功能运算,需要采取的控制端个数为3个,通过对控制端信号的逻辑组成产生相应运算功能的逻辑编码,其对应关系如表2-2所示。
表2-2 8种功能运算的编码组成
如图2-13所示。
图2-13 完成8种功能的ALU
17改进74181ALU芯片设计,操作控制信号只有8种。
答:74181ALU可以简化为4种逻辑运算和4种算数运算,通过S2、S1、S0的逻辑组合,可以表示8种状态,这时通过控制相应状态逻辑的开或关,即可构成一种操作控制。
18设计一个余3码编码的十进制加法器单元电路。
答:余3码编码的十进制加法规则是:两个1位十进制数的余3码相加,如结果无进位,则从和数中减去3(即加上1101);如结果有进位,则和数中加上3(加上0011),即得和数的余3码。
设参加运算的两个一位的十进制数分别为Ai和Bi,它们的余3码分别为Ai0~Ai3和Bi0~Bi3,其二进制加法的和的编码为Si0~Si3,进位为Ci+1,修正之后,和对应的余3码为Fi0~Fi3,进位为CYi+1,则根据余3码的运算规则有:
当Ci+1=0时,Fi3Fi2Fi1Fi0=Si3Si2Si1Si0+1101;当Ci+1=1时,Fi3Fi2Fi1Fi0=Si3Si2Si1Si0+0011,由此可画出逻辑电路图如图2-14所示。
图2-14 余3码编码的十进制加法器