新编计算机组成原理习题与解析精编资料Word下载.docx
《新编计算机组成原理习题与解析精编资料Word下载.docx》由会员分享,可在线阅读,更多相关《新编计算机组成原理习题与解析精编资料Word下载.docx(7页珍藏版)》请在冰豆网上搜索。
【例4】两个浮点数相加,阶码用原码表示,一个数的阶码为7,另一个数的阶码为10,则需要将阶码较小的浮点数的小数点
A.左移2位
B.左移3位
C.右移2位
D.右移3位
在对阶时总是让小阶码向大阶码看齐,这里将小阶码变为10,对应的尾数相应减小,即将小阶码的尾数右移3位,相当于它的小数点左移3位。
【例5】两个浮点数相加,阶码为5位(含1位符号位),阶码用二进制移码表示,x的阶码为11010(10),y的阶码为11000(8),则需要将阶码较小的浮点数的尾数
x的阶码为11010,即x=01010,对应十进制数10,y的阶码为11000,即y=01000,对应十进制数8,两者相差2,所以需要将阶码较小的浮点数y的尾数右移2位。
本题答案为C。
也可以这样来求解,因为[x]移=11010,[y]移=11000,所以有[x-y]移=[x]移-[y]移+2n=11010-11000+10000=10010+10000=10010,则x-y=00010,为十进制数2。
【例6】若浮点数采用补码表示,判断加/减运算的结果是否为规格化数的方法是
A.阶符和数符相同
B.阶符和数符相异
C.数符和尾数最高位相同
D.数符和尾数最高位相异
一个浮点数用二进制补码表示,若符号位与尾数最高位相异,则该数是规格化表示。
2.填空题
【例7】在浮点加减法运算中,当运算结果的尾数的绝对值大于1时,需要对结果进行
①,其操作是
②
本题答案是:
①向右规格化②尾数右移一位,右边补一个0,阶码减1,直到尾数绝对值≥0.5。
【例8】设两个浮点数为x=201×
0.1101,y=211×
(-0.1010)。
假设尾数在计算机中以补码表示(4位尾数,另有2位符号位),阶码(2位阶码)以原码表示(另有2位阶符位),求x+y的结果是
将x、y转换成浮点数据格式,[x]浮=0001,00.1101,[y]浮=0011,11.0110,相加运算的步骤如下。
对阶:
求得阶差为11-01=10,即2,因此将x的尾数右移两位,得[x]浮=0011,00.001101。
对尾数求和,得[x+y]浮=0011,11.100101。
规格化:
由于符号位和第一位数相等,不是规格化数,故向左规格化,得[x+y]浮=0010,11.001010。
舍入:
采用0舍1入法,得[x+y]浮=0010,11.0011。
判溢:
数据无溢出,因此结果为x+y=2010×
(-0.1101)。
本题答案为:
2010×
3.问答题
【例9】什么是浮点数的溢出?
什么情况下会发生上溢出?
什么情况下会发生下溢出?
浮点数的运算结果可能出现以下几种情况。
l
阶码上溢出:
当一个正指数超过了最大允许值,此时,浮点数发生上溢出(即向∞方向溢出)。
如果结果是正数,则发生正上溢出(有的机器把值置为+∞);
如果是负数,则发生负上溢出(有的机器把值置为-∞)。
这种情况为软件故障,通常要引入溢出故障处理程序来处理。
阶码下溢出:
当一个负指数比最小允许值还小,此时,浮点数发生下溢出。
一般机器把下溢出时的值置为0(+0或-0)。
尾数溢出:
当尾数最高有效位有进位时,发生尾数溢出。
此时,进行“右规”操作:
尾数右移一位,阶码加1,直到尾数不溢出为止。
此时,只要阶码不发生上溢出,则浮点数不会溢出。
非规格化尾数:
当数值部分高位出现0时,尾数为非规格化形式。
此时,进行“左规”操作,即尾数左移一位,阶码减1,直到尾数为规格化形式为止。
【例10】已知两个实数x=-68,y=-8.25,它们在C语言中定义为float型变量,分别存放在寄存器A和B中。
另外,还有两个寄存器C和D。
A、B、C、D都是32位的寄存器。
请回答下列问题(要求用十六进制表示二进制序列):
(1)寄存器A和B中的内容分别是什么?
(2)x和y相加后的结果存放在C寄存器中,寄存器C中的内容是什么?
(3)x和y相减后的结果存放在D寄存器中,寄存器D中的内容是什么?
(1)在计算机中,float型的变量都被表示成IEEE754单精度格式。
x=-68=-(1000100)2=-1.0001×
26,符号位为1,阶码为127+6=128+5=(10000101)2,尾数为1.0001,所以小数部分为:
00010000000000000000000,合起来后整个浮点数表示为:
11000010100010000000000000000000,写成十六进制为:
C2880000H。
y=-8.25=-(1000.01)2=-1.00001×
23,符号位为1,阶码为127+3=128+2=(10000010)2,尾数为1.00001,所以小数部分为:
00001000000000000000000,合起来后整个浮点数表示为:
11000001000001000000000000000000,写成十六进制为C1040000H。
因此,寄存器A和B中的内容分别是C2880000H、C1040000H。
(2)两个浮点数相加的步骤如下。
Ex=10000101,Ey=10000010,则[Ex-Ey]补=[Ex]补+[-Ey]补=10000101+01111110=00000011。
Ex大于Ey,所以对y进行对阶。
对阶后,y=-0.00100001×
26。
尾数相加:
x的尾数为-1.00010000000000000000000,y的尾数为-0.00100001000000000000000,用原码加法运算实现,两数符号相同,做加法,结果为-1.00110001000000000000000,即x加y的结果为-1.00110001×
26,所以符号位为1,尾数为:
00110001000000000000000,阶码为127+6=128+5,即:
10000101。
合起来为:
11000010100110001000000000000000,转换为十六进制形式为:
C2988000H。
所以,寄存器C中的内容是C2988000H。
(3)两个浮点数相减的步骤同加法,对阶的结果也相同,只是尾数相减。
x的尾数为-1.00010000000000000000000,y的尾数为-0.00100001000000000000000。
用原码减法运算实现,两数符号相同做减法时,符号位取大数的符号,即为负数,所以为1。
数值部分是大数加小数负数的补码:
1.000
1000
0000
0000
+
1.110
1111
0.111
0111
x减y的结果为-0.11101111×
26=-1.1101111×
25,所以:
符号位为1,尾数为11011110000000000000000,阶码为127+5=128+4,即10000100。
11000010011011110000000000000000,转换为十六进制形式为:
C26F0000H,所以寄存器D中的内容是C26F0000H。
【例11】两个规格化浮点数求和、差,最后对结果规格化时,能否确定需要右规的次数?
能否确定需要左规的次数?
两个n位数相加、减,其和、差最多为n+1位,因此有可能需要右规,但右规最多一次。
由于异号数相加,或同号数相减,其和、差的最少位数无法确定,因此左规的次数也无法确定,但次数最多不会超过尾数的字长,即n次。
【例12】两个规格化浮点数相乘时,是否可能需要右规?
为什么?
是否可能需要左规?
若需要,能否确定左规的次数?
规格化浮点数相乘时,只有当两个浮点乘数的尾数均为-1时才需要右规。
因为(-1)×
(-1)=1,-1为规格化数,而+1不是,所以需要右规,使尾数成为+1/2。
规格化浮点数相乘时需要左规。
规格化尾数的范围为:
1/2≤|M|≤1,其积的范围为:
1/4≤|积|<
1,因此最多左规一次。
【例13】两个规格化浮点数相除,是否可能需要左规?
是否可能需要右规?
若需要,能否确定右规的次数?
规格化浮点数相除时,只有一种情况需要左规,即当被除数的尾数为1/2、除数的尾数为-1时,需要左规。
因为(1/2)/(-1)=-1/2,1/2和-1均为规格化数,而-1/2不是,所以需要左规一次,使尾数成为-1。
规格化浮点数相除时,被除数、除数均为规格化数,规格化尾数的范围均为:
1/2≤|M|≤1,所以商的绝对值范围为:
1/2≤|商|<
2。
因此需要右规,但最多右规一次。
【例14】设阶码为5位(包括2位阶符),尾数为8位(包括2位数符),阶码、尾数均用补码表示,请完成下列取值的[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)将y规格化后得:
y=2-011×
(-0.111100),[x]浮=1101,00.100101,[y]浮=1101,11.000100,[-y]浮=1101,00.111100。
①对阶
[ΔE]补=[Ex]补+[-Ey]补=1101+0011=0000,所以Ex=Ey。
②尾数相加
相加
相减
00.100101
00.100101
11.000100
+
00.111100
11.101001
01.100001
[x+y]浮=1101,11.101001,左规后[x+y]浮=1100,11.010010,所以x+y=2-100×
(-0.101110)。
[x-y]浮=1101,01.100001,右规后[x-y]浮=1110,00.1100001,舍入处理得[x-y]浮=1110,00.110001,所以x-y=2-110×
0.110001。
(2)[x]浮=1011,11.101010,[y]浮=1100,00.010110,[-y]浮=1100,11.101010。
[ΔE]补=[Ex]补+[-Ey]补=1011+0100=1111,所以△E=-1,[x]浮=1100,11.110101(0)。
11.110101(0)
11.110101(0)
00.010110
11.101010
00.001011(0)
11.011111(0)
[x+y]浮=1100,00.001011(0),左规后[x+y]浮=1110,00.1011000,所以x+y=2-110×
0.1011B。
[x-y]浮=1100,11.011111(0),所以x-y=2-100×
(-0.100001B)。
【例15】已知两个浮点数:
A=(-0.010011)×
2-010,B=(+0.110111)×
2+001。
假定阶码和尾数都用补码表示,阶码4位(含1位符号位),尾数7位(含1位符号位)。
试按规格化补码加法规则和步骤,采用0舍1入法,求[A+B]补是多少?
求[A+B]补的步骤如下。
①求运算中所需的数据
[A]补=([EA]补,[MA]补)=(1.110,1.101101)。
[B]补=([EB]补,[MB]补)=(0.001,0.110111)。
[-EB]补=1.111。
②求阶差
[△E]补=[EA]补-[EB]补=[EA]补+[-EB]补=1.110+1.111=1.101。
③对阶
[A]补变为[A'
]补,[A'
]补=([E'
A]补,[M'
A]补)=(0.001,1.111101)。
④尾数求和
[MA]补+[M’B]补=11.111101+00.110111=00.110100。
[A+B]补=(0.001,00.110100)。
⑤规格化
已是规格化数。
⑥舍入
需要舍入。
采用0舍1入法,所以有[A+B]补=0.001,0.110101。
【例16】用浮点数运算步骤对56+5进行二进制运算,浮点数格式为1位符号位、5位阶码、10位尾码,基数为2。
(56)10=(111000)2=0.111000×
(5)10=(101)2=0.101×
23。
①对阶:
0.101×
23=0.000101×
②尾数相加:
0.111000+0.000101=0.111101。
③规格化结果:
0.111101×
④舍入:
数据已适合存储,不必舍入。
⑤检查溢出:
数据无溢出。
【例17】设有两个浮点数X和Y,阶码和尾数均以补码表示,已知X的阶码为0010,尾数为0.1001,Y的阶码为1101,尾数为0.0111。
求X×
Y和X÷
Y。
(1)求X×
Y的步骤如下。
①阶码相加:
0010+1101=1111。
②尾数相乘:
[MX×
MY]补=0.1001×
0.0111=1.10101111,或MX×
MY=-0.01010001。
③向左规格化:
左移一位,阶码为-1,乘积的阶码=1111-1=1111+1111=1110(补码),乘积的尾数=1.01011110(补码)。
取4位结果,因1.01011110中小数点后第5位为1,所以尾数舍入后为1.0101+0.0001=1.0110(补码)。
X×
Y的补码表示为:
阶码为1110,尾数为1.0110。
(2)求X÷
Y的步骤如下:
①阶码相减:
0010-1101=0010+0011=0101。
②尾数相除:
[MX÷
MY]补=1.0000。
③结果不需要规格化。
因此X÷
阶码为0101,尾数为1.0000。