.
参考答案:
浮点运算结果是否溢出,并不以尾数溢出来判断,而主要看阶码是否溢出。尾数溢出时,可通过右规操作进行纠正。阶码上溢时,说明结果的数值太大,无法表示;阶码下溢时,说明结果数值太小,可以把结果近似为0。
在进行对阶、规格化、舍入和浮点数的乘/除运算等过程中,都需要对阶码进行加、减运算,可能会发生阶码上溢或阶码下溢,因此,必须对阶码进行溢出判断。 (有关对阶码进行溢出判断的方法可参见教材中相关章节。)
13.假设浮点数格式为:阶码是4位移码,偏置常数为8,尾数是6位补码(采用双符号位),用浮点运
算规则分别计算在不采用任何附加位和采用2位附加位(保护位、舍入位)两种情况下的值。(假定对阶和右规时采用就近舍入到偶数方式) (1)(15/16) ×27 +(2/16) ×25 (2)(15/16) ×27–(2/16) ×25 (3)(15/16) ×25 +(2/16) ×27 (4)(15/16) ×25–(2/16) ×27 参考答案(假定采用隐藏位):
X= (15/16) ×27 = 0.111100B ×27= (1.111000)2 × 26 Y1= (2/16) ×25 = 0.001000B ×25= (1.000000)2 × 22
Y2= (–2/16) ×25 = –0.001000B ×25= (–1.000000)2 × 22 K= (15/16) ×25 = 0.111100B ×25= (1.111000)2 × 24
J1= (2/16) ×27 = 0.001000B ×27= (1.000000)2 × 24
J2= (–2/16) ×27 = –0.001000B ×27= (–1.000000)2 × 24 根据题目所给的各种位数,可以得到在机器中表示为:
[X]浮 = 00 1110 (1)111000 [Y1]浮 = 00 1010 (1)000000 [Y2]浮 = 11 1010 (1)000000 [K]浮 = 00 1100 (1)111000 [J1]浮 = 00 1100 (1)000000 [J2]浮 = 11 1100 (1)000000
所以,E x = 1110,Mx = 00 (1). 111000 ,E y1 = 1010,My = 00(1).000000,E y2 = 1010,My = 11(1).000000
Ek = 1100,MK = 00 (1). 111000 ,E J1 = 1100,MJ1 = 00(1).000000,E J2 = 1100,MJ2 = 11(1).000000
尾数M中小数点前面有三位,前两位为数符,表示双符号,第三位加了括号,是隐藏位“1”。 没有附加位时的计算: (1) X+Y1
[ΔE]补 = [E x]移 + [–[E y1]移]补 (mod 2n) = 1110 + 0110 = 0100
ΔE = 4,根据对阶规则可知需要对y1进行对阶,结果为:E y1 = E x = 1110,My 1= 000.000100 尾数相加:Mb = Mx + My1 = 001. 111000+ 000.000100 = 001.111100,两位符号相等,数值部分最高位为1,不需要进行规格化,所以最后结果为:E=1110,M=00(1).111100, 即(31/32) ×27 (2) X+Y2
[ΔE]补 = [E x]移 + [–[E y2]移]补 (mod 2n) = 1110 + 0110 = 0100;
ΔE = 4,根据对阶规则可知需要对y2进行对阶,结果为:E y2 = E x = 1110,My2= 111.111100 尾数相加:Mb = Mx + My2 = 001. 111000+ 111.111100=001.110100,两位符号相等,数值部分最高为1,不需要进行规格化,所以最后结果为:E=1110,M=00(1).110100, 即(29/32) ×27 (3) K+J1
[ΔE]补 = [E K]移 + [–[E J1]移]补 (mod 2n) = 1100 + 0100 = 0000; ΔE = 0,根据对阶规则可知不需要进行对阶。
尾数相加:Mb = MK + MJ1 = 001. 111000+ 001.000000= 010.111000,两位符号不等,说明尾数溢出,需要进行右规,最后结果为:E=1101,M=00(1).011100, 即(23/32) ×26
精品
.
(4) K+J2
[ΔE]补 = [E K]移 + [–[E J2]移]补 (mod 2n) = 1100 + 0100 = 0000; ΔE = 0,根据对阶规则可知不需要进行对阶。
尾数相加:Mb = MK + MJ2 = 00 1. 111000+ 111.000000 = 000.111000,两位符号相等,数值部分最高位为0,需要进行左规,所以最后结果为:E=1011,M=00(1).110000, 即(7/8) ×24
如果有两位附加位精度上会有提高,在对阶的时候要注意小数点后就不是6位,而是8位,最后两位为保护位和舍入位。但是由于本题6位尾数已经足够,再加2位附加位,其结果是一样的。
14.采用IEEE 754单精度浮点数格式计算下列表达式的值。
(1)0.75+(– 65.25) (2)0.75–(– 65.25) 参考答案:
x = 0.75 = 0.110...0B = (1.10...0)2 × 2-1
y = – 65.25 = – 1000001.01000...0B = (–1.00000101...0) 2 × 26 用IEEE 754标准单精度格式表示为:
[x]浮 = 0 01111110 10...0 [y]浮 = 1 10000101 000001010...0
所以,E x = 01111110,Mx = 0 (1). 1...0 ,E y = 10000101,My = 1(1).000001010...0
尾数Mx和My中小数点前面有两位,第一位为数符,第二位加了括号,是隐藏位“1”。 以下是计算机中进行浮点数加减运算的过程(假定保留2位附加位:保护位和舍入位) (1)0.75+ (– 65.25)
① 对阶: [ΔE]补 = [E x]移 + [–[E y]移]补 (mod 2n) = 0111 1110 + 0111 1011 = 1111 1001
ΔE = –7,根据对阶规则可知需要对x进行对阶,结果为:Ex = E y = 10000101,Mx =
00.000000110...000
x的尾数Mx右移7位,符号不变,数值高位补0,隐藏位右移到小数点后面,最后移出的2位保
留
② 尾数相加:Mb = Mx + My = 00.000000110...000+ 11.000001010 ...000 (注意小数点在隐藏位后) 根据原码加/减法运算规则,得:00.000000110...000+ 11.000001010...000 = 11.000000100…000 上式尾数中最左边第一位是符号位,其余都是数值部分,尾数后面两位是附加位(加粗)。 ③ 规格化:根据所得尾数的形式,数值部分最高位为1,所以不需要进行规格化。
④ 舍入:把结果的尾数Mb中最后两位附加位舍入掉,从本例来看,不管采用什么舍入法,结果
都一样,都是把最后两个0去掉,得:Mb = 11.000000100…0
⑤ 溢出判断:在上述阶码计算和调整过程中,没有发生“阶码上溢”和“阶码下溢”的问题。
因此,阶码Eb = 10000101。
最后结果为Eb = 10000101,Mb = 1(1).00000010…0,即:– 64.5。
(2) 0.75–(– 65.25)
① 对阶: [ΔE]补 = [E x]移 + [–[E y]移]补 (mod 2n) = 0111 1110 + 0111 1011 = 1111 1001 ΔE = -7,根据对阶规则可知需要对x进行对阶,结果为:Ex = E y = 10000110,Mx = 00.000000110...000 x的尾数Mx右移一位,符号不变,数值高位补0,隐藏位右移到小数点后面,最后移出的位保留 ② 尾数相加:Mb = Mx – My = 00.000000110...000 – 11.000001010...000 (注意小数点在隐藏位后) 根据原码加/减法运算规则,得:00.000000110...000 – 11.000001010...000=01.00001000…000 上式尾数中最左边第一位是符号位,其余都是数值部分,尾数后面两位是附加位(加粗)。 ③ 规格化:根据所得尾数的形式,数值部分最高位为1,不需要进行规格化。
精品
.
④ 舍入:把结果的尾数Mb中最后两位附加位舍入掉,从本例来看,不管采用什么舍入法,结果
都一样,都是把最后两个0去掉,得:Mb = 01.00001000…0
⑤ 溢出判断:在上述阶码计算和调整过程中,没有发生“阶码上溢”和“阶码下溢”的问题。
因此,阶码Eb = 10000101。
最后结果为Eb = 10000101,Mb = 0(1).00001000…0,即:+66。
思考题:对阶时发生什么情况,就可以不再继续进行计算?
15.假定十进制数用8421 NBCD码表示,采用十进制加法运算计算下列表达式的值,并讨论在十进制BCD
码加法运算中如何判断溢出。 (1)234+567 (2)548+729 参考答案: (1)234+567 0010 0011 0100
+ 0101 0110 0111
0111 1001 1011 + 0110 0111 1010 0001 + 0110 0000 1000 0000 0001 结果为: (801)10
(2)548+729 0000 0101 0100 1000
+ 0000 0111 0010 1001
0000 1100 0111 0001 + 0000 0110 0000 0110 0001 0010 0111 0111 结果为: (1277)10
在第(2)题中,如果是采用12位数表示加数548和729,则能看出最后得到的答案是1100 0111 0111,这时就是BCD码加法溢出了。所以我们在判断的时候不能仅仅看BCD码最高位是不是丢失,而要看结果的最高4位是不是大于9,如果大于9,就可以认为是溢出了。
16.假定十进制数用8421 NBCD码表示,十进制运算673–356可以采用673加上(–356)的模10补码实
现。画出实现上述操作的3位十进制数的BCD码减法运算线路,列出线路中所有的输入变量和输出变量。
参考答案:
[– (356) 10]补 = 0110 0100 0100
0110 0111 0011
+ 0110 0100 0100
1100 1011 0111 + 0110 0110 0000 0011 0001 0111
最高位产生进位,因此,结果为正数:0011 0001 0111,故结果为:(+317)10
电路图分为两部分,一个是求出模10补码,另一个是计算以及判断输出结果的电路图(参见教材图3.33)。
精品
.
求模10补码的电路图(RTL级)如下:
Add0jianshu[11..0]11' h333 --A[10..0]B[10..0]+ADDER12' h001 --Add1A[11..0]B[11..0]+ADDERtemp[11..0]计算电路图(RTL级)如下: 1' h0 -- Add2A[4..0]B[4..0]Add13A[3..0]result~[71..48]Add14A[4..0]jianshu[11..0]1' h0 --+ADDERtemp[11..0]4' h3 --B[3..0]+Add8ADDER5' h01 --SELB[4..0]+DATAAADDERresult~[83..72]SELOUT0DATAADATABOUT0A[3..0]4' h3 --B[3..0]+ADDERDATAB1' h0 --A[4..0]B[4..0]Add1result[11..0]1' h0 --+A[3..0]Add124' h3 --B[3..0]result~[47..36]Add11A[3..0]MUX21ADDER+ADDER4' h3 --B[3..0]SELMUX211' h0 --A[4..0]B[4..0]Add0+ADDERDATAA1' h0 --+ADDERA[4..0]OUT0Add9DATAB5' h01 --B[4..0]+LessThan4ADDERA[3..0]Add104' h3 --B[3..0]5' h09 --A[4..0]B[4..0]+LessThan3ADDERA[4..0] 第 4 章 习 题 答 案 3. 已知某机主存空间大小为64KB,按字节编址。要求: (1)若用1K×4位的SRAM芯片构成该主存储器,需要多少个芯片? (2)主存地址共多少位?几位用于选片?几位用于片内选址? (3)画出该存储器的逻辑框图。 参考答案: (1)64KB / 1K×4位 = 64×2 = 128片。 (2)因为是按字节编址,所以主存地址共16位,6位选片,10位片内选址。 (3)显然,位方向上扩展了2倍,字方向扩展了64倍。下图中片选信号CS为高电平有效。 精品 . Y0A15………A10A9…Y63A0…1K*4SRAMCSWR1K*4SRAMCSWR……1K*4SRAMCSWR1K*4SRAMCSWRD7…D0WE 4. 用64K×1位的DRAM芯片构成256K×8位的存储器。要求: (1) 计算所需芯片数,并画出该存储器的逻辑框图。 (2) 若采用异步刷新方式,每单元刷新间隔不超过2ms,则产生刷新信号的间隔是多少时间?若采 用集中刷新方式,则存储器刷新一遍最少用多少读写周期? 参考答案: (1)256KB / 64K×1位 = 4×8 = 32片。存储器逻辑框图见下页(图中片选信号CS为高电平有效)。 (2)因为每个单元的刷新间隔为2ms,所以,采用异步刷新时,在2ms内每行必须被刷新一次,且 仅被刷新一次。因为DRAM芯片存储阵列为64K=256×256,所以一共有256行。因此,存储器控制器必须每隔2ms/256=7.8μs产生一次刷新信号。采用集中刷新方式时,整个存储器刷新一遍需要256个存储(读写)周期,在这个过程中,存储器不能进行读写操作。 A17Y0……A16A15……Y3A0CSCSCSCSCSCSDRAM64K*1DRAM64K*1DRAM64K*1DRAM64K*1CSDRAM64K*1DRAM64K*1DRAM64K*1DRAM64K*1CSCSCSCSCSCSCSCSCS……DRAM64K*1DRAM64K*1DRAM64K*1DRAM64K*1DRAM64K*1DRAM64K*1DRAM64K*1DRAM64K*1D7…D0 5. 用8K×8位的EPROM芯片组成32K×16位的只读存储器,试问: (1)数据寄存器最少应有多少位? (2) 地址寄存器最少应有多少位? 精品