当前位置:
文档之家› 第3章习题答案 计算机组成原理课后答案(清华大学出版社 袁春风主编)
第3章习题答案 计算机组成原理课后答案(清华大学出版社 袁春风主编)
模式 机器数 无符号数 二进制补码 无符号数 二进制补码 无符号数 二进制补码 110 110 001 001 111 111 x 值 6 –2 1 +1 7 –1 机器数 010 010 111 111 111 111 y 值 2 +2 7 –1 7 –1 x×y(截断前) 机器数 001100 111100 000111 111111 110001 000001 值 12 –4 7 –1 49 +1 x×y(截断后) 机器数 100 100 111 111 001 001 值 4 –4 7 –1 1 +1
• 64 •
10100 10101 +0 0 1 1 0 11010 10101 10101 01011 +00110 11011 01011 10110 10111 +00110 11100 10111 11001 01111 +00110 11111 01111 11110 11111 +00110 00100 11110 +00000 + 1 00100 11111 所以,[X/Y] 补=11111,余数为 00100。
商的数值部分为:00001。所以,[X/Y]原=00001 (最高位为符号位),余数为 0100。 (5) 将 10 和–6 分别表示成补码形式为:[10] 余数寄存器 R 余数/商寄存器 Q 00000 01010 +11010 11010 01010
补 补
先对被除数进行符号扩展,[10] 补=00000 01010,[6] 补 = 0 0110 说 明 开始 R0 = [X] R1=[X] +[Y] R1 与[Y]同号,则 q5 =1
6.设 A4A1 和 B4B1 分别是四位加法器的两组输入,C0 为低位来的进位。当加法器分别采用串行进位和先 行进位时,写出四个进位 C4 C1 的逻辑表达式。 参考答案: 串行进位: C1 = X1C0+Y1C0 + X1 Y1 C2 = X2C1+Y2C1 + X2 Y2 C3 = X3C2+Y3C2 + X3 Y3 C4 = X4C3+Y4C3 + X4 Y4 并行进位: C1 = X1Y1 + (X1+Y1)C0 C2 = X2Y2 + (X2 +Y2) X1Y1 + (X2+Y2) (X1+Y1)C0 C3 = X3Y3 + (X3 + Y3) X2Y2 + (X3 + Y3) (X2 + Y2) X1Y1 + (X3 + Y3) (X2 + Y2)(X1 + Y1)C0 C4=X4Y4+(X4+Y4)X3Y3+(X4+Y4)(X3+Y3)X2Y2+(X4+Y4)(X3+Y3)(X2+Y2)X1Y1+(X4+Y4)(X3+Y3) (X2+Y2)(X1+Y1)C0 7.用 SN74181 和 SN74182 器件设计一个 16 位先行进位补码加/减运算器,画出运算器的逻辑框图,并给出 零标志、进位标志、溢出标志、符号标志的生成电路。 参考答案(图略) :
5.以下是两段 C 语言代码,函数 arith( )是直接用 C 语言写的,而 optarith( )是对 arith( )函数以某个确定的 M 和 N 编译生成的机器代码反编译生成的。 根据 optarith( ), 可以推断函数 arith( ) 中 M 和 N 的值各是 多少?
• 61 •
#define M #define N int arith (int x, int y) { int result = 0 ; result = x*M + y/N; return result; } int optarith ( int x, int y) { int t = x; x << = 4; x - = t; if ( y < 0 ) y += 3; y>>2; return x+y; 参考答案: 可以看出 x*M 和“int t = x; x << = 4; x-=t;”三句对应,这些语句实现了 x 乘 15 的功能(左移 4 位 相当于乘以 16,然后再减 1) ,因此,M 等于 15; y/N 与“if ( y < 0 ) y += 3; y>>2;”两句对应,功能主要由第二句“y 右移 2 位”实现,它实现了 y 除 以 4 的功能,因此 N 是 4。而第一句“if ( y < 0 ) y += 3;”主要用于对 y=–1 时进行调整,若不调整,则 –1>>2=–1 而–1/4=0,两者不等;调整后 –1+3=2,2>>2=0,两者相等。 思考:能否把 if ( y < 0 ) y += 3; 改成 if ( y < 0 ) y += 2; ? 不能!因为 y = - 4 时不正确。
• 62 •
逻辑框图参见教材中的图 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.已知 x = 10,y = – 6,采用 6 位机器数表示。请按如下要求计算,并把结果还原成真值。 (1) 求[x+y]补,[x–y]补。 (2) 用原码一位乘法计算[x×y]原。 (3) 用 MBA(基 4 布斯)乘法计算[x×y]补。 (4) 用不恢复余数法计算[x/y]原的商和余数。 (5) 用不恢复余数法计算[x/y]补的商和余数。 参考答案: [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 0 0 0 0 0 0 0 0 0 P 0000 +0000 0000 0000 +1010 1010 0101 +1010 1111 0111 +0000 0111 0011 Y 0110 说明 P0 = 0 y4 = 0,+0 C, P 和 Y 同时右移一位 得 P1 y3 = 1,+X C, P 和 Y 同时右移一位 得 P2 y2 = 1,+X C, P 和 Y 同时右移一位 得 P3 y1 = 0,+0 C, P 和 Y 同时右移一位 得 P4
函数 func1 的功能是把无符号数高 24 位清零 (左移 24 位再逻辑右移 24 位) , 结果一定是正的有符号数; 而函数 func2 的功能是把无符号数的高 24 位都变成和第 25 位一样,因为左移 24 位后进行算术右移,高 24 位补符号位(即第 25 位) 。
4.填写下表,注意对比无符号数和带符号整数的乘法结果,以及截断操作前、后的结果。
0011
0001 0000 1000
1100
若两个 6 位数相乘的话,则还要右移两次,得 000000 111100 符号位为:0 1 = 1,因此,[X×Y]原 = 1000 0011 1100
• 63 •
即 X × Y = –11 1100B = – 60 (3) [–10]补 = 110110,布斯乘法过程如下: P 000000 000000 +110110 110110 111011 +001010 000101 000010 +110110 111000 111100 +000000 111100 111110 +000000 111110 111111 Y 111010 y-1 0 说明 设 y-1 = 0,[P0]补 = 0 y0 y-1 = 00,P、Y 直接右移一位 得[P1]补 y1 y0 =10,+[–X]补 P、Y 同时右移一位 得[P2]补 y2 y1 =01,+[X]补 P、Y 同时右移一位 得[P3]补 y3 y2 = 10,+[–X]补 P、Y 同时右移一位 得[P4]补 y4 y3 = 11,+0 P、Y 同时右移一位 得[P5]补 y5 y4 = 11,+0 P、Y 同时右移一位 得[P6]补