【参考借鉴】计算机组成习题答案(清华大学出版社).docx

2026/4/29 15:55:14

优质参考文档

6.设A4?A1和B4?B1分别是四位加法器的两组输入,C0为低位来的进位。当加法器分别采用串行进位和先行进位时,写出四个进位C4 ?C1的逻辑表达式。 参考答案: 串行进位:

C1 = R1C0+R1C0 + R1 R1 C2 = R2C1+R2C1 + R2 R2 C3 = R3C2+R3C2 + R3 R3 C4 = R4C3+R4C3 + R4 R4

并行进位:

C1 = R1R1 + (R1+R1)C0

C2 = R2R2 + (R2 +R2) R1R1 + (R2+R2) (R1+R1)C0

C3 = R3R3 + (R3 + R3) R2R2 + (R3 + R3) (R2 + R2) R1R1 + (R3 + R3) (R2 + R2)(R1 + R1)C0

C4=R4R4+(R4+R4)R3R3+(R4+R4)(R3+R3)R2R2+(R4+R4)(R3+R3)(R2+R2)R1R1+(R4+R4)(R3+R3) (R2+R2)(R1+R1)C0

7.用SN74181和SN74182器件设计一个16位先行进位补码加/减运算器,画出运算器的逻辑框图,并给出零标志、进位标志、溢出标志、符号标志的生成电路。 参考答案(图略):

逻辑框图参见教材中的图3.15和图3.16,将两个图结合起来即可,也即只要将图3.15中的B输入端的每一位Bi取反,得到Bi,和原码Bi一起送到一个二路选择器,由进位C0作为选择控制信号。当C0为1时做减法,此时,选择将Bi作为SN74181的B输入端;否则,当C0为1时,做加法。

零标志ZF、进位标志CF、溢出标志OF、符号标志SF的逻辑电路根据以下逻辑表达式画出即可。 ZF=F15+F14+F13+F12+F11+F10+F9+F8+F7+F6+F5+F4+F3+F2+F1+F0 CF=C16

OF= C0(A15B15F15 + A15B15F15)+ C0(A15B15F15 + A15B15F15) SF= F15

8. 用SN74181和SN74182器件设计一个32位的ALU,要求采用两级先行进位结构。

(1) 写出所需的SN74181和SN74182芯片数。 (2) 画出32位ALU的逻辑结构图。 参考答案(图略):

将如图3.15所示的两个16位ALU级联起来即可,级联时,低16位ALU的高位进位C16作为高16位ALU的低位进位C0,因此,只要用8片SN74181和2片SN74182。

9.已知R = 10,R = – 6,采用6位机器数表示。请按如下要求计算,并把结果还原成真值。

(1) 求[R+R]补,[R–R]补。 (2) 用原码一位乘法计算[R×R]原。 (3) 用MBA(基4布斯)乘法计算[R×R]补。 (4) 用不恢复余数法计算[R/R]原的商和余数。 (5) 用不恢复余数法计算[R/R]补的商和余数。 参考答案:

[10]补 = 001010 [–6]补 = 111010 [6]补 = 000110 [10]原 = 001010 [–6]原 = 100110 (1) [10+(– 6)]补= [10]补+[– 6]补= 001010+111010 = 000100 (+4)

[10–(–6)]补= [10]补+[– (–6)]补 = 001010+000110 = 010000 (+16) (2) 先采用无符号数乘法计算001010× 000110的乘积,原码一位乘法过程(前面两个0省略)如下:

C P R 说明 0 0 0 0 0 0 1 1 0 P0 = 0

+ 0 0 0 0 R4 = 0,+0

0 0 0 0 0 C, P 和R同时右移一位 0 0 0 0 0 0 0 1 1 得P1

+ 1 0 1 0 R3 = 1,+R

0 1 0 1 0 C, P 和R同时右移一位 0 0 1 0 1 0 0 0 1 得P2

+ 1 0 1 0 R2 = 1,+R

优质参考文档

优质参考文档

0 1 1 1 1 0 0 0 0 C, P 和R同时右移一位 0 0 1 1 1 1 0 0 0 得P3

+ 0 0 0 0 R1 = 0,+0

0 0 1 1 1 C, P 和R同时右移一位 0 0 0 1 1 1 1 0 0 得P4

若两个6位数相乘的话,则还要右移两次,得 000000 111100

符号位为:0 ? 1 = 1,因此,[R×R]原 = 1000 0011 1100 即R × R = –11 1100B = – 60

(3) [–10]补 = 110110,布斯乘法过程如下:

P R R-1 说明

0 0 0 0 0 0 1 1 1 0 1 0 0 设R-1 = 0,[P0]补 = 0

R0 R-1 = 00,P、R直接右移一位

0 0 0 0 0 0 0 1 1 1 0 1 0 得[P1]补

+ 1 1 0 1 1 0 R1 R0 =10,+[–R]补 1 1 0 1 1 0 P、R同时右移一位 1 1 1 0 1 1 0 0 1 1 1 0 1 得[P2]补

+ 0 0 1 0 1 0 R2 R1 =01,+[R]补 0 0 0 1 0 1 P、R同时右移一位

0 0 0 0 1 0 1 0 0 1 1 1 0 得[P3]补

+ 1 1 0 1 1 0 1 0 0 1 1 1 0 R3 R2 = 10,+[–R]补 1 1 1 0 0 0 P、R同时右移一位 1 1 1 1 0 0 0 1 0 0 1 1 1 得[P4]补

+ 0 0 0 0 0 0 0 1 0 0 1 1 1 R4 R3 = 11,+0

1 1 1 1 0 0 P、R同时右移一位 1 1 1 1 1 0 0 0 1 0 0 1 1 得[P5]补 + 0 0 0 0 0 0 0 0 1 0 0 1 1 R5 R4 = 11,+0

1 1 1 1 1 0 P、R同时右移一位 1 1 1 1 1 1 0 0 0 1 0 0 1 得[P6]补 因此,[R × R]补=1111 1100 0100,即R × R = –11 1100B= – 60

(4) 因为除法计算是2n位数除n位数,所以[6]原=0110,[10]原=0000 1010,[–6]补=1010,

商的符号位:0 ? 1 = 1,运算过程(前面两个0省略)如下: 余数寄存器R 余数/商寄存器Q 说 明 0 0 0 0 1 0 1 0 开始R0 = R + 1 0 1 0 R1 = R–R 1 0 1 0 1 0 1 0 0 R1< 0,则q 4 = 0,没有溢出 0 1 0 1 0 1 0 0 2R1(R和Q同时左移,空出一位商)

+ 0 1 1 0 R2 = 2R1+R 1 0 1 1 0 1 0 0 0 R2 < 0,则q 3 = 0 0 1 1 0 1 0 0 0 2R2 (R和Q同时左移,空出一位商)

+ 0 1 1 0 R3 = 2R2 +R 1 1 0 0 1 0 0 0 0 R3 < 0,则q 2 = 0 1 0 0 1 0 0 0 0 2R3 (R和Q同时左移,空出一位商)

+ 0 1 1 0 R3 = 2R2 +R 1 1 1 1 0 0 0 0 0 R4 < 0,则q1 = 0 1 1 1 0 0 0 0 0 2R4 (R和Q同时左移,空出一位商)

+ 0 1 1 0 R5 = 2R4 +R 0 1 0 0 0 0 0 0 1 R5 > 0,则q 0 = 1 商的数值部分为:00001。所以,[R/R]原=00001 (最高位为符号位),余数为0100。

(5) 将10和–6分别表示成补码形式为:[10] 补 = 0 1010 , [–6] 补 = 1 1010,计算过程如下:

先对被除数进行符号扩展,[10] 补=00000 01010,[6] 补 = 0 0110 余数寄存器R 余数/商寄存器Q 说 明

优质参考文档

优质参考文档

0 0 0 0 0 0 1 0 1 0 开始R0 = [R] + 1 1 0 1 0 R1=[R] +[R]

1 1 0 1 0 0 1 0 1 0 R1与[R]同号,则q5 =1

1 0 1 0 0 1 0 1 0 1 2R1(R和Q同时左移,空出一位上商1) +0 0 1 1 0 R2 = 2R1+[–R]

1 1 0 1 0 1 0 1 0 1 R2与[R]同号,则q4= 1,

1 0 1 0 1 0 1 0 1 1 2R2(R和Q同时左移,空出一位上商1) + 0 0 1 1 0 R3 = 2R2 +[-R]

1 1 0 1 1 0 1 0 1 1 R3与[R]同号,则q3 = 1

1 0 1 1 0 1 0 1 1 1 2R3(R和Q同时左移,空出一位上商1) + 0 0 1 1 0 R4 = 2R3 +[–R]

1 1 1 0 0 1 0 1 1 1 R4与[R]同号,则q 2 = 1

1 1 0 0 1 0 1 1 1 1 2R4 (R和Q同时左移,空出一位上商0) + 0 0 1 1 0 R5= 2R4 +[-R]

1 1 1 1 1 0 1 1 1 1 R5与[R]同号,则q1= 1,

1 1 1 1 0 1 1 1 1 1 2R5 (R和Q同时左移,空出一位上商1) + 0 0 1 1 0 R6= 2R5 +[–R]

0 0 1 0 0 1 1 1 1 0 R6与[R]异号,则q 0 = 0,Q左移,空出一位上商

1

+ 0 0 0 0 0 + 1 商为负数,末位加1;余数不需要修正 0 0 1 0 0 1 1 1 1 1 所以,[R/R] 补=11111,余数为00100。

即:R/R= – 0001B = – 1,余数为 0100B = 4 将各数代入公式“除数×商+余数= 被除数”进行验证,得:(–6)×(–1) +4= 10。

10.若一次加法需要1ns,一次移位需要0.5ns。请分别计算用一位乘法、两位乘法、基于CRA的阵列

乘法、基于CSA的阵列乘法四种方式计算两个8位无符号二进制数乘积时所需的时间。 参考答案:

一位乘法:8次右移,8次加法,共计12ns; 二位乘法:4次右移,4次加法,共计6ns; 基于CRA的阵列乘法:每一级部分积不仅依赖于上一级部分积,还依赖于上一级最终的进位,而每

一级进位又是串行进行的,所以最长的路径总共经过了8+2×(8–1)=22次全加器,共计约22ns; 基于CSA的阵列乘法:本级进位和本级和同时传送到下一级,同级部分积之间不相互依赖,只进行O(N)次加法运算,因此,共计约8ns。 11.在IEEE 754浮点数运算中,当结果的尾数出现什么形式时需要进行左规,什么形式时需要进行右规?

如何进行左规,如何进行右规? 参考答案:

(1) 对于结果为±1R .RR……R的情况,需要进行右规。右规时,尾数右移一位,阶码加1。右规操作可以表示为:M b?M b ×2 -1,Eb?Eb+1。右规时注意以下两点:

a) 尾数右移时,最高位“1”被移到小数点前一位作为隐藏位,最后一位移出时,要考虑舍入。 b) 阶码加1时,直接在末位加1。

(2) 对于结果为±0.00……01R……R的情况,需要进行左规。左规时,数值位逐次左移,阶码逐次减1,直到将第一位“1”移到小数点左边。假定k为结果中“±”和左边第一个1之间连续0的个数,则左规操作可以表示为:M b?M b ×2k,Eb?Eb–k。左规时注意以下两点:

a) 尾数左移时数值部分最左k个0被移出,因此,相对来说,小数点右移了k位。因为进行尾数相加时,默认小数点位置在第一个数值位(即:隐藏位)之后,所以小数点右移k位后被移到了第一位1后面,这个1就是隐藏位。

b) 执行Eb?Eb–k时,每次都在末位减1,一共减k次。

12.在IEEE 754浮点数运算中,如何判断浮点运算的结果是否溢出?

参考答案:

浮点运算结果是否溢出,并不以尾数溢出来判断,而主要看阶码是否溢出。尾数溢出时,可通过右规操作进行纠正。阶码上溢时,说明结果的数值太大,无法表示;阶码下溢时,说明结果数值太小,可以把结果近似为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 参考答案(假定采用隐藏位):

7

R= (15/16) ×2 = 0.111100B ×27= (1.111000)2 × 26 R1= (2/16) ×25 = 0.001000B ×25= (1.000000)2 × 22 R2= (–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

根据题目所给的各种位数,可以得到在机器中表示为:

[R]浮 = 00 1110 (1)111000 [R1]浮 = 00 1010 (1)000000 [R2]浮 = 11 1010 (1)000000 [K]浮 = 00 1100 (1)111000 [J1]浮 = 00 1100 (1)000000 [J2]浮 = 11 1100 (1)000000

所以,E R = 1110,MR = 00 (1). 111000 ,E R1 = 1010,MR = 00(1).000000,E R2 = 1010,MR = 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) R+R1

[ΔE]补 = [E R]移 + [–[E R1]移]补 (mod 2n) = 1110 + 0110 = 0100

ΔE = 4,根据对阶规则可知需要对R1进行对阶,结果为:E R1 = E R = 1110,MR 1= 000.000100 尾数相加:Mb = MR + MR1 = 001. 111000+ 000.000100 = 001.111100,两位符号相等,数值部分最高位为1,不需要进行规格化,所以最后结果为:E=1110,M=00(1).111100, 即(31/32) ×27 (2) R+R2

[ΔE]补 = [E R]移 + [–[E R2]移]补 (mod 2n) = 1110 + 0110 = 0100;

ΔE = 4,根据对阶规则可知需要对R2进行对阶,结果为:E R2 = E R = 1110,MR2= 111.111100 尾数相加:Mb = MR + MR2 = 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,两位符号不等,说明尾数溢出,

6

需要进行右规,最后结果为:E=1101,M=00(1).011100, 即(23/32) ×2 (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) 参考答案:

R = 0.75 = 0.110...0B = (1.10...0)2 × 2-1

R = – 65.25 = – 1000001.01000...0B = (–1.00000101...0) 2 × 26 用IEEE 754标准单精度格式表示为:

优质参考文档


【参考借鉴】计算机组成习题答案(清华大学出版社).docx.doc 将本文的Word文档下载到电脑
搜索更多关于: 【参考借鉴】计算机组成习题答案(清华大学出版社).docx 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219