《计算机组成原理课后习题答案,第二版课后答案第一章(二)》是由大铁棍娱乐网(www.datiegun.com)编辑为你整理收集在【教育学习】栏目,于2016-03-14 22:24:41整理发布,希望对你有所帮助,可及时向我们反馈。
17. 设机器数字长为8位(包括一位符号位),对下列各机器数进行算术左移一位、两位,算术右移一位、两位,讨论结果是否正确。 [x1]原=0.001 1010; [x2]原=1.110 1000; [x3]原=1.001 1001; [y1]补=0.101 0100; [y2]补=1.110 1000; [y3]补=1.001 1001; [z1]反=1.010 1111; [z2]反=1.110 1000; [z3]反=1.001 1001。
解:算术左移一位: [x1]原=0.011 0100;正确 [x2]原=1.101 0000;溢出(丢1)出错 [x3]原=1. 011 0010;正确 [y1]补=0. 010 1000;溢出(丢1)出错 [y2]补=1.101 0000;正确 [y3]补=1.011 0010;溢出(丢0)出错 [z1]反=1. 101 1111;溢出(丢0)出错 [z2]反=1. 101 0001;正确 [z3]反=1.011 0011;溢出(丢0)出错 算术左移两位: [x1]原=0.110 1000;正确 [x2]原=1.010 0000;溢出(丢11)出错 [x3]原=1. 110 0100;正确
算术左移两位: [y1]补=0. 101 0000;溢出(丢10)出错 [y2]补=1.010 0000;正确 [y3]补=1.110 0100;溢出(丢00)出错 [z1]反=1. 011 1111;溢出(丢01)出错 [z2]反=1. 010 0011;正确 [z3]反=1.110 0111;溢出(丢00)出错 算术右移一位: [x1]原=0.000 1101;正确 [x2]原=1.011 0100;正确 [x3]原=1.000 1100(1);丢1,产生误差 [y1]补=0.010 1010;正确 [y2]补=1.111 0100;正确 [y3]补=1.100 1100(1);丢1,产生误差
算术右移一位: [z1]反=1.101 0111;正确 [z2]反=1.111 0100(0);丢0,产生误差 [z3]反=1.100 1100;正确 算术右移两位: [x1]原=0.000 0110(10);产生误差 [x2]原=1.001 1010;正确 [x3]原=1.000 0110(01);产生误差 [y1]补=0.001 0101;正确 [y2]补=1.111 1010;正确 [y3]补=1.110 0110(01);产生误差 [z1]反=1.110 1011;正确 [z2]反=1.111 1010(00);产生误差 [z3]反=1.110 0110(01);产生误差
18. 试比较逻辑移位和算术移位。
解:逻辑移位和算术移位的区别: 逻辑移位是对逻辑数或无符号数进行的移位,其特点是不论左移还是右移,空出位均补0,移位时不考虑符号位。 算术移位是对带符号数进行的移位操作,其关键规则是移位时符号位保持不变,空出位的补入值与数的正负、移位方向、采用的码制等有关。补码或反码右移时具有符号延伸特性。左移时可能产生溢出错误,右移时可能丢失精度。
19. 设机器数字长为8位(含1位符号位),用补码运算规则计算下列各题。 (1)A=9/64, B=-13/32, 求A+B; (2)A=19/32,B=-17/128,求A-B; (3)A=-3/16,B=9/32, 求A+B; (4)A=-87, B=53, 求A-B; (5)A=115, B=-24, 求A+B。
解: (1)A=9/64=(0.001 0010)2 B= -13/32=(-0.011 0100)2 [A]补=0.001 0010 [B]补=1.100 1100
[A+B]补= 0. 0 0 1 0 0 1 0 + 1. 1 0 0 1 1 0 0 1. 1 0 1 1 1 1 0 ——无溢出 A+B=( -0.010 0010)2 = -17/64 (2)A=19/32=(0.100 1100)2 B= -17/128=(-0.001 0001)2 [A]补=0.100 1100 [B]补=1.110 1111 [-B]补=0.001 0001 [A-B]补= 0. 1 0 0 1 1 0 0 + 0. 0 0 1 0 0 0 1 0. 1 0 1 1 1 0 1 ——无溢出 A-B=(0.101 1101)2 = 93/128
(3)A= -3/16=(-0.001 1000)2 B=9/32=(0.010 0100)2 [A]补=1.110 1000 [B]补= 0.010 0100 [A+B]补= 1. 1 1 0 1 0 0 0 + 0. 0 1 0 0 1 0 0 0. 0 0 0 1 1 0 0 —— 无溢出 A+B=(0.000 1100)2 = 3/32 (4)A= -87=(-101 0111)2 B=53=(110 101)2 [A]补=1,010 1001 [B]补=0,011 0101 [-B]补=1,100 1011
[A-B]补= 1,0 1 0 1 0 0 1 + 1,1 0 0 1 0 1 1 0,1 1 1 0 1 0 0 —— 溢出 A-B=(-1,000 1100)2 = -140 (5)A=115=(111 0011)2 B= -24=(-11 000)2 [A]补=0,111 0011 [B]补=1,110 1000 [A+B]补= 0,1 1 1 0 0 1 1 + 1,1 1 0 1 0 0 0 0,1 0 1 1 0 1 1——无溢出 A+B=(101 1011)2 = 91
20. 用原码一位乘、两位乘和补码一位乘(Booth算法)、两位乘计算x·y。 (1)x= 0.110 111,y= -0.101 110; (2)x= -0.010 111,y= -0.010 101; (3)x= 19, y= 35; (4)x= 0.110 11, y= -0.111 01。
解:先将数据转换成所需的机器数,然后计算,最后结果转换成真值。 (1)[x]原=x=0.110111,[y]原=1.101110 x*=0.110111, y*=0.101110 1=1 x*×y*=0.100 111 100 010 [x×y]原=1.100Å y0=0 Åx0=0,y0=1,z0=x0 111 100 010 x·y= -0. 100 111 100 010
原码一位乘: 部分积 1 0 . 0® 乘数y* 0 . 0 0 0 0 0 0 . 1 0 1 1 1 0 —— +0 0 0 0 0 0 0 . 1 0 1 1 1 —— +x* + 0 . 1 1 0 1 1 1 0 1 0 . 0 1 1 0 1 1 1 0 . 1 0 1 1 —— +x* +®. 1 1 0 1 1 1 1 0 . 1 0 1 0 0 1 0 1 ® 0 . 1 1 0 1 1 1 1 . 0 1 0 0 1 0 1 0 .®0 . 1 0 1 —— +x* + 0 . 1 1 0 1 1 1 1 . 1 0 0 0 0 0 1 0 . 0 1 1 0 0 0 0®1 1 0 0 0 0 0 0 1 0 . 1 0 —— +0 1 ® 0 0 1 0 . 1 —— x* + 0 . 1 1 0 1 1 1 1 . 0 0 1 1 1 1 0 . 1 0 0 1 1 1 1 0 0 0 1 0
2x*=01.101110,[-x*]补=[-x]补=1.001001 原码两位乘: 部分积 乘数 Cj 0 0 0 . 0 0 0 0 0 0 0 0 . 1 0 1 1 1 0 0 + 0 0 1 . 1 0 1 1 1 0 +2x* 0 0 1 . 1 0 1 1 2 0 0 0 . 0 1 1 0 1 1 1 0 0 0®1 0 0 .1 0 1 1 + 1 1 1 . 0 0 1 0 0 1 +[-x*]补 1 1 1 . 2 1 1 1 . 1 1 1 0 0 1 ®1 0 0 1 0 0 1 0 0 1 0 0 0 .1 0 + 1 1 1 . 0 0 1 0 0 1 +[-x*]补 2 1 1 1 . 1 1 0 0® 1 1 1 . 0 0 0 0 1 0 1 0 0 1 0 0 0 1 0 0 0 . + 0 0 0 . 1 1 0 1 1 1 +x* 0 0 0 . 1 0 0 1 1 1 1 0 0 0 1 0 0 结果同一位乘,x·y= -0. 100 111 100 010
[x]补=x=0.110111 [y]补=1.010010 [-x]补=1.001001 [2x]补=01.101110 [-2x]补=10.010010 [x×y]补=1.011 000 011 110 0 x·y= -0.100 111 100 010 0 补码一位乘、两位乘运算过程如下:
补码一位乘:部分积 乘数[y]补 yn+1 0 0 1 0 0 . 0 0 0 0®. 0 0 0 0 0 0 1 . 0 1 0 0 1 0 0 —— +0 0 0 0 1 . 0 1 0 0 1 0 + 1 1 . 0 0 1 0 0 1 1 1 1 . 1 0 0 1 0 0 1® +[-x]补 1 1 . 0 0 1 0 0 1 0 1 . 0 1 0 0 1 + 0 0 . 1 1 0 1 1 1 1 0 0 . 0 0 1 1 0 1 1 1 0 1® +[x]补 0 0 . 0 1 1 0 1 1 1 0 0 . 0 0 0 1 1 0 1 1 1 0 1 . 0 ® . 0 1 0 0 —— +0 1 0 + 1 1 . 0 0 1 0 0 1 +[-x]补 1 1 1 1 . 1 0 0 1 1 1 1 1 1 1 0 1 . 0 1®1 . 0 0 1 1 1 1 + 0 0 . 1 1 0 1 1 1 +[x]补 0 0 . 0 1 1 1 0 0 . 0 0 1 1 1 1 0 1 1 1 1 0 1 . 0 + 1 1®1 1 0 . 0 0 1 0 0 1 +[-x]补 1 1 . 0 1 1 0 0 0 0 1 1 1 1 0 0 —— 清0
补码两位乘: 部分积 乘数 yn+1 0 0 0 . 0 0 0 0 0 0 1 1 . 0 1 0 0 1 0 0 + 1 1 0 . 0 1 0 0 1 0 +[-2x]补 1 1 0 . 0 2 1 1 1 . 1 0 0 1 0 0 1 0®1 0 0 1 0 1 1 .0 1 0 0 1 + 0 0 0 . 1 1 0 1 1 1 2 0 0 0 . 0®+[x]补 0 0 0 . 0 1 1 0 1 1 0 0 1 1 0 1 1 1 0 1 1 .0 1 0 + 0 0 0 . 1 1 0 1 1 1 +[x]补 0 0 0 . 1 1 1 1 0 1 2 0 0 0 . 0 0 1 1 1 1 0 1 1 1 1 0 1 1 . 0 + 1 1 1 .® 0 0 1 0 0 1 +[-x]补 1 1 1 . 0 1 1 0 0 0 0 1 1 1 1 0 0 0 . 结果同补码一位乘, x·y= -0. 100 111 100 010 00
(2) x= -0.010111, y= -0.010101 [x]原=1.010111, [y]原=1.010101 x*=0. 010111 , y*=0. 010101 [-x*]补=1.101001,2x*=0.101110 1=0 [x]补=1.101001,Å y0=1 Å[-2x*]补=1.010010 x0=1,y0=1,z0=x0 [y]补=1.101011 [-x]补=0.010111,[2x]补=1.010010 [-2x]补=0.101110 x*×y*=0.000 111 100 011 [x×y]原=0.000 111 100 011 [x×y]补=0.000 111 100 011 0 x·y= 0. 000 111 100 011 运算过程如下:
原码一位乘: 部分积 乘数y* 0 . 0 0 0 0 0 0 . 0 1 0 1 0 1 —— +x* 1 0 . 0 0 1 0 1 1 1 .®+ 0 . 0 1 0 1 1 1 0 . 0 1 0 1 1 1 1 0 . 0 0 0 1 0 1 1 1 . 0 1 0 1®0 1 0 1 0 —— +0 1 0 . 0 0 1 1 1 0 ®—— +x* + 0 . 0 1 0 1 1 1 0 . 0 1 1 1 0 0 1 0 . 0 0 0 1 1 1 0 0 1 1 .® 0 1 1 . 0 1 0 —— +0 1 0 . 0 0 1 1®0 1 —— +x* + 0 . 0 1 0 1 1 1 0 . 0 1 1 1 1 0 1 0 . 0 0 0 1 1 1 1 0 0 ®1 1 0 0 0 1 1 . 0 —— +0 0 1 1
原码两位乘: 部分积 乘数y* Cj 0 0 0 . 0 0 0 0 0 0 0 0 . 0 1 0 1 0 1 0 + 0 0 0 . 0 1 0 1 1 1 +x* 0 0 0 . 0 1 0 1 1 1 2 0 0 0 . 0 0 0 1 0 1 1 1 0 0 .0 1 0 1 + 0 0 0 .® 0 0 1 0 1 1 1 +x* 0 0 0 . 0 1 1 1 0 0 2 0 0 0 . 0 0 0 1 1 1 0 0 1 1 0 0 .0 1 ® 0 + 0 0 0 . 0 1 0 1 1 1 +x* 0 0 0 . 0 1 1 1 1 0 2 0 0 0 . 0 0 0 1 1 1 ® 0 1 0 0 0 1 1 0 0 . +0 结果同一位乘, x·y= 0. 000 111 100 011
补码一位乘:部分积 乘数[y]补 yn+1 0 0 . 0 0 0 0 0 0 1 . 1 0 1 0 1 1 0 + 0 0 . 0 1 0 1 1 1 1 0 0 . 0 0 1 0 1 1 ® +[-x]补 0 0 . 0 1 0 1 1 1 1 0 0 . 0 0 0 1 0 1 1 1 ® 1 1 . 1 0 1 0 1 1 —— +0 1 . 1 0 1 0 1 + 1 1 . 1 0 1 0 0 1 1 1 1 . 1 1 0 1 1 1 0 1 1 1 . 1®+[x]补 1 1 . 1 0 1 1 1 0 0 1 0 + 0 0 . 0 1 0 1 1 1 +[-x]补 1 0 0 . 0 0 0 1 1 1 0 0 1 1 1 . 1 0® 0 0 . 0 0 1 1 1 0 1 + 1 1 . 1 0 1 0 0 1 +[x]补 1 1 . 1 1 1 1 . 1 1 1 0 0 0 0 0 0 1 1 1 . 1 0 + ®1 0 0 0 0 0 0 . 0 1 0 1 1 1 +[-x]补 0 0 . 0 0 1 1 1 1 0 0 . 0 0 0 1 1 1 1 0 0 0 1 1 1 . 1 ——®1 +0
补码两位乘: 部分积 乘数 yn+1 0 0 0 . 0 0 0 0 0 0 1 1 . 1 0 1 0 1 1 0 + 0 0 0 . 0 1 0 1 1 1 2 0 0 0 . 0 0 0® +[-x]补 0 0 0 . 0 1 0 1 1 1 1 0 1 1 1 1 1 .1 0 1 0 1 + 0 0 0 . 0 1 0 1 1 1 +[-x]补 0 0 0 . 0 1 1 1 0 0 2 0 0 0 . 0 0 0 1 1 1 0 0 1 1 1 1 . 1 0 1 + 0 0 0 .® 0 1 0 1 1 1 +[-x]补 0 0 0 . 0 1 1 1 1 0 2 0 0 0 . 0 0 0 1 1 1 1 0 0 0 1 1 ® 1 1 . 1 清0 +0 结果同补码一位乘, x·y= 0. 000 111 100 011 00
(3) x= 19, y= 35 x=(10 011)2,y=(100 011)2 x*= [x]原= [x]补= 0,010 011 y*= [y]原= [y]补= 0,100 011 [-x*]补= [-x]补= 1,101 101 2x*= [2x]补= 0,100 110 0=0 x*×y*=Å y0=0 Å[-2x*]补= [-2x]补= 1,011 010 x0=0,y0=0,z0=x0 [x×y]原= [x×y]补 = 0,001 010 011 001 x·y =665 运算过程如下:
原码一位乘: 部分积 乘数y* 0,0 0 0 0 0 0 1 0 0 0 1 1 —— +x* + 0,0 1 0 0 1 1 0,0 1 0 0 1 1 1 0,0 0 1 0 0 1 1 1 0 0 0 1 —— +x* + 0,0 1 0 0 1 1® 1 0,0 0 1 1 1 0 0 1 1 0 0 0 —— +0® 0,0 1 1 1 0 0 1 0,0 0 0 0 1 1 ®1 0,0 0 0 1 1 1 0 0 1 1 0 0 —— +0 ® 1 0,0 0 0 0 0 1 1 1 0 0 1® 1 0 0 1 1 0 —— +0 1 0,0 0 1 0 1 0 ® 1 —— +x* + 0,0 1 0 0 1 1 0,0 1 0 1 0 0 0 1 1 0 0 1
原码两位乘: 部分积 乘数y* Cj 0 0 0,0 0 0 0 0 0 0 0,1 0 0 0 1 1 0 + 1 1 1,1 0 1 1 0 1 +[-x*]补 1 1 1,1 0 1 1 0 1 2 1 1 1,1 1 1 0 1 1 0 1 0 0,1 0 0 0 ® 1 + 0 0 0,0 1 0 0 1 1 +x* 0 0 0,0 0 1 1 1 0 2 0 0 0,0 0 0 0 1 1 1 0 0 1 0 ® 0 0,1 0 + 0 0 0,1 0 0 1 1 0 +2x* 0 0 0,1 0 2 0 0 0,0 0 1 0 1 0 0 1 1®1 0 0 1 0 0 0 1 0 0, +0 结果同一位乘, x·y= 0,001 010 011 001
补码一位乘:部分积 乘数[y]补 yn+1 0 0,0 0 0 0 0 0 0,1 0 0 0 1 1 0 + 1 1,1 0 1 1 0 1 1 1 1,1 1 0 1 1® +[-x]补 1 1,1 0 1 1 0 1 1 1 1,1 1 1 0 1 1 0 1 ®0 1 0,1 0 0 0 1 1 —— +0 0,1 0 0 0 1 + 0 0,0 1 0 0 1 1 +[x]补 1 0 0,0 0 0 1 1 1 0 0 1 0, 1 0 0 ® 0 0,0 0 1 1 1 0 1 0®1 0 0,0 0 0 0 1 1 1 0 0 1 0,1 0 0 —— +0 ®0 —— +0 0,0 0 0 0 0 1 1 1 0 0 1 0,1 0 + 1 1,1 0 1 1 0 1 1 1 1,1 1 0 1 1® +[-x]补 1 1,1 0 1 1 1 0 1 0 1 1 0 0 1 0, 1 + 0 0,0 1 0 0 1 1 +[x]补 0 0,0 0 1 0 1 0 0 1 1 0 0 1 0
补码两位乘: 部分积 乘数 yn+1 0 0 0,0 0 0 0 0 0 0 0,1 0 0 0 1 1 0 + 1 1 1,1 0 1 1 0 1 2 1 1 1,1 1 1 0 1 1 0 1 0 0,1 0® +[-x]补 1 1 1,1 0 1 1 0 1 0 0 1 + 0 0 0,0 1 0 0 1 1 +[x]补 0 0 2 0 0 0,0 0 0 0 1 1 1 0®0,0 0 1 1 1 0 0 1 0 0,1 0 0 + 1 1 1,0 1 1 0 1 0 2 1 1 1,1®+[-2x]补 1 1 1,0 1 1 1 0 1 1 0 1 1 1 0 1 1 0 0 1 0 0,1 + 0 0 0,0 1 0 0 1 1 +0 0 0 0,0 0 1 0 1 0 0 1 1 0 0 1 0 0 结果同补码一位乘, x·y= 0, 001 010 011 001 00
(4) x= 0. 110 11, y= -0.111 01 x*= [x]原= [x]补= 0. 110 11 [y]原=1.111 01,y*=0. 111 01 [y]补=1.000 11 [-x*]补= [-x]补= 1.001 01 2x*= [2x]补= 01.101 10 [-2x*]补= 1=1 x*×y*=0.110 000 111 1Å y0=0 Å[-2x]补= 10.010 10 x0=0,y0=1,z0=x0 [x×y]原=1.110 000 111 1 [x×y]补=1.001 111 000 10 x·y= -0. 110 000 111 1 运算过程如下:
原码一位乘:部分积 乘数y* 0 . 0 0 0 0 0 1 ®. 1 1 1 0 1 —— +x* + 0 . 1 1 0 1 1 0 . 1 1 0 1 1 1 0 . 0 0 1 1 0 1 1®0 . 0 1 1 0 1 1 . 1 1 1 0 —— +0 1 0 . 1 0 0®. 1 1 1 —— +x* + 0 . 1 1 0 1 1 1 . 0 0 0 0 1 0 0 1 1 1 . 1 1 —— +x* + 0 . 1 1 0 1 1 1 . 0 1 0 1 1 0 . 1 0 1 0 1 1 1 1 1 . 1 —— +x* + 0 . 1 1 0 1 1 ®1 1 0 . 1 1 0 0 0 0 1 1 1 1 ® 1 . 1 0 0 0 0
原码两位乘: 部分积 乘数y* Cj 0 0 0 . 0 0 0 0 0 0 . 1 1 1 0 1 0 + 0 0 0 . 1 1 0 1 1 +x* 2 0 0 0 . 0 0 1 1® 0 0 0 . 1 1 0 1 1 0 0 1 1 0 . 1 1 1 + 1 1 1 . 0 0 1 0 1 +[-x*]补 2 1 1 1 . 1 1 0 1® 1 1 1 . 0 1 0 1 1 1 0 1 1 1 1 . 0 1 + 0 0 1 . 1 0 1 1 0 +2x* 1 0 0 0 . 1 1 0 0 0® 0 0 1 . 1 0 0 0 0 0 0 1 1 1 1 0 . +0 结果同一位乘, x·y= -0. 110 000 111 1
补码一位乘: 部分积 乘数[y]补 yn+1 0 0 . 0 0 0 0 0 1 . 0 0 0 1 1 0 + 1 1 . 1 1 1 . 1 0®0 0 1 0 1 +[-x]补 1 1 . 0 0 1 0 1 1 1 1 . 1 1 0 0 1 0 ®0 1 0 1 1 . 0 0 0 1 1 —— +0 1 1 . 0 0 0 1 + 0 0 . 1 1 0 1 1 +[x]补 1 0 0 . 0 1 0 1 0 0 0 1 1 . 0 0 0® 0 0 . 1 0 1 0 0 1 0 0 .®1 0 0 . 0 0 1 0 1 0 0 0 1 1 . 0 0 —— +0 ®—— +0 0 0 0 1 0 1 0 0 0 1 1 . 0 + 1 1 . 0 0 1 0 1 +[-x]补 1 1 . 0 0 1 1 1 1 0 0 0 1 0 —— 清0
补码两位乘: 部分积 乘数 yn+1 0 0 0 . 0 0 0 0 0 1 . 0 0 0 1 1 0 + 1 1 1 . 0 0 1 0 1 2 1 1 1 . 1 1 0 0 1 0 ® +[-x]补 1 1 1 . 0 0 1 0 1 1 1 . 0 0 0 1 + 0 0 0 . 1 1 0 1 1 +[x]补 2 0 0 0 . 0 0 1 0® 0 0 0 . 1 0 1 0 0 1 0 0 0 1 1 . 0 0 + 1 1 0 . 0 1 0 1 0 1 1® +[-2x]补 1 1 0 . 0 1 1 1 1 1 1 . 0 0 1 1 1 1 0 0 0 1 0 . —— 清0 结果同补码一位乘, x·y= -0. 110 000 111 10
21. 用原码加减交替法和补码加减交替法计算x÷y。 (1)x=0.100111,y=0.101011; (2)x=-0.10101, y=0.11011; (3)x=0.10100, y= -0.10001; (4)x=13/32, y= -27/32。 解: (1)x*=[x]原=[x]补=x= 0.100 111 y*=[y]原=[y]补=y= 0=0 Åy0=0 Å0.101 011 [-y*]补=[-y]补=1.010 101 q0=x0 y]原=0.111 010 r*=0.000 010×2-6=0.000 000 000 010 ¸y*=[x¸y=x*¸x 计算过程如下:
原码加减交替除法: 被除数(余数) 商 0 . 1 0 0 1 1 1 0 . 0 0 0 0 0 0 + 1 . 0 1 0 1 0 1 试减,+[-y*]补 1 . 1 1 1 1 0 1 . 1 1 1 0 0 0 0 . + 0 . 1 0 1 0 1 1 ¬0 1 r< 1 . 0 0 0 1 1 0 ¬0,+y* 0 . 1 0 0 0 1 1 1 0.1 + 1 . 0 1 0 1 0 1 r>¬0, +[-y*]补 0 . 0 1 1 0 1 1 1 0 . 1 1 0 1 1 0 0.1 1 + 1 . 0 1 0 1 0 1 r>0, +[-y*]补 0 . 0 0 1 0 1 1
0 .¬续: 被除数(余数) 商 1 0 1 0 1 1 0 0 . 1 1 1 + 1 . 0 1 0 1 0 1 r>0, 1 . 0 1 0 1 1 0 0.1 1 1 0 ¬+[-y*]补 1 . 1 0 1 0 1 1 1 + 0 . 1 0 1 0 1 1 r< 0 . 0 0¬0,+y* 0 . 0 0 0 0 0 1 1 0 0 1 0 0.1 1 1 0 1 + 1 . 0 1 0 1 0 1 r>0, 0.1 1 1 0 1 0 + 0 . 1 0 1 0 1 1 ¬+[-y*]补 1 . 0 1 0 1 1 1 1 r<0,+y*(恢复余数) 0 . 0 0 0 0 1 0
补码加减交替除法: 被除数(余数) 商 0 0 . 1 0 0 1 1 1 0 . 0 0 0 0 0 0 + 1 1 . 0 1 0 1 0 1 1 . 1 1 1 0 0 0 ¬1 试减,x、y同号,+[-y]补 1 1 . 1 1 1 1 0 0 1 0 . + 0 0 . 1 0 1 0 1 1 r、y异号,+[y]补 0 0 0 1 . 0 0 0 1 1 0 0.1 + 1 1 . 0 1¬. 1 0 0 0 1 1 1 0 0 . 1 1 0¬0 1 0 1 r、y同号, +[-y]补 0 0 . 0 1 1 0 1 1 1 1 1 0 0.1 1 + 1 1 . 0 1 0 1 0 1 r、y同号, +[-y]补 0 0 . 0 0 1 0 1 1
0 0 . 0 1 0 ¬续: 被除数(余数) 商 1 1 1 0 0 . 1 1 1 + 1 1 . 0 1 0 1 0 1 r、y同号, +[-y]补 1 1 . 0 1 0 1 1 0 0.1 1 1 0 + ¬ 1 1 . 1 0 1 0 1 1 1 0 0 . 0¬0 0 . 1 0 1 0 1 1 r、y异号,+[y]补 0 0 . 0 0 0 0 0 1 1 0 0 0 1 0 0.1 1 1 0 1 + 1 1 . 0 1 0 1 0 1 r、y同号, 0.1 1 1 0 1 1 —— 恒置1 + 0 0 . 1 0 1 ¬+[-y]补 1 1 . 0 1 0 1 1 1 1 0 1 1 r、x异号,(恢复余数) 0 0 . 0 0 0 0 1 0 且r、y异号, +[y]补 y]补= 0.111 011 [r6]补=0.000 010,r=r*=0.000 000 000 010¸y=[x¸注:恒置1引入误差。 x
(2)x= -0.101 01,y=0.110 11 [x]原=1.101 01 x*= 0.101 01 y* = [y]原 = [y]补= y = 0.110 11 [-y*]补= [-y]补= 1.001 01 [x]补= 1.010 11 y¸y]原=1.110 00 x¸y*= 0.110 00 [x¸ 0 = 1 x*Å y0 = 1 Å q0 = x0 = -0.110 00 r*=0.110 00×2-5 =0.000 001 100 0 计算过程如下:
原码加减交替除法: 被除数(余数) 商 0 . 1 0 1 0 1 0 . 0 ¬0 0 0 0 + 1 . 0 0 1 0 1 试减,+[-y*]补 1 . 1 1 0 1 0 1 1 . 1 0 1 0 0 0 . + 0 . 1 1 0 1 1 r< 0 . 1 1 1 1 0 0.1 ¬0,+y* 0 . 0 1 1 1 1 1 + 1 . 0 0 1 0 1 r> 0 . 0 0¬0, +[-y*]补 0 . 0 0 0 1 1 1 1 1 0 0.1 1 + 1 . 0 0 1 0 1 r>0, +[-y*]补 1 . 0 1 0 1 1
0 . 1 0 1 1 0 ¬续: 被除数(余数) 商 1 0 . 1 1 0 + 0 . 1 1 0 1 1 r<0, +y* 1 . 1 0 0 0 1 . 0 0 0 1 0 0.1 1 0 0 + 0 . 1 1 0 1 1 ¬1 1 r< 0.1 1 0 0 0 + 0 . 1 1 0 1 1 ¬0,+y* 1 . 1 1 1 0 1 1 r<0, +y*(恢复余数) 0 . 1 1 0 0 0
补码加减交替除法: 被除数(余数) 商 1 1 . 0 1 0 1 1 0 . 0 0 0 0 0 + 0 0 . 1 1 0 1 1 0 0 . 0 1 1 0 0 ¬ 试减,x、y异号,+[y]补 0 0 . 0 0 1 1 0 1 1 . + 1 1 . 0 0 1 0 1 r、y同号,+[-y]补 1 1 . 1 0 0 0 1 1 . 0 0 0 1 0 1.0 + 0 0 . 1 1 0 1 1 ¬1 1 1 1 . 1 1 0 1 0 ¬ r、y异号, +[y]补 1 1 . 1 1 1 0 1 1 1.0 0 + 0 0 . 1 1 0 1 1 r、y异号, +[y]补 0 0 . 1 0 1 0 1
0 1 . 0 1 0 1 0 1 . 0 0 1¬续: 被除数(余数) 商 1 0 0¬ + 1 1 . 0 0 1 0 1 r、y同号, +[-y]补 0 0 . 0 1 1 1 1 1 . 1 1 1 1 0 1.0 0 1 1 + 1 1 . 0 0 1 0 1 1.0 0 1 1 1 —— 恒置1 + 1 1 . 0 0¬r、y同号,+[-y]补 0 0 . 0 0 0 1 1 1 1 0 1 r、x异号,(恢复余数) 1 1 . 0 1 0 0 0 且r、y同号,+[-y]补 y=¸y]补=1.001 11,x¸注:恒置1引入误差。 [r5]补=1.010 00, r= -0.000 001 100 0 [x -0.110 01
(3)x= 0.101 00,y= -0.100 01 x*= [x]原= [x]补= x=0.101 00 [y]原 = 1.100 01 y* = 0.100 01 [-y*]补=1.011 11 [y]补= 1.011 11 y*= 1.001 01 —— 溢出 ¸ 1 = 1 x*Å y0 = 0 Å [-y]补= 0.100 01 q0 = x0 y = -1.001 01 r*=0.010 11×2-5 =0.000¸y]原:无定义 x¸ [x 000 101 1 计算过程如下:
原码加减交替除法: 被除数(余数) 商 0 . 1 0 1 0 0 0 . 0 0 0 0 0 + 1 . 0 1 1 1 1 试减,+[-y*]补 0 . 0 0 0 . 0 0 1 1 0 1¬0 1 1 1 . + 1 . 0 1 1 1 1 r>0, +[-y*]补 1 . 1 0 1 0 1 1 . 0 1 0 1 0 1.0 + 0 . 1 0¬ 1 0 0 1 r< 1 . 1 0 1 1 0 ¬0, +y* 1 . 1 1 0 1 1 1 1.0 0 + 0 . 1 0 0 0 1 r<0, +y* 0 . 0 0 1 1 1
0 . 0 1 1 1 0 1 . 0 0 1 ¬续: 被除数(余数) 商 1 + 1 . 0 1 1 1 1 r> 1 . 1 1¬0, +[-y*]补 1 . 1 1 1 0 1 1 0 1 0 1.0 0 1 0 + 0 . 1 0 0 0 1 r<0,+y* 1.0 0 1 0 1 r¬0 . 0 1 0 1 1 1>0, 结束 注:当x*>y*时产生溢出,这种情况在第一步运算后判断r的正负时就可发现。此时数值位占领小数点左边的1位,原码无定义,但算法本身仍可正常运行。
补码加减交替除法: 被除数(余数) 商 0 0 . 1 0 1 0 0 0 . 0 0 0 0 0 + 1 0 0 . 0 0 1 ¬1 . 0 1 1 1 1 试减,x、y异号,+[y]补 0 0 . 0 0 0 1 1 1 1 0 0 . + 1 1 . 0 1 1 1 1 r、y异号,+[y]补 1 1 . 0 1 0 1 0 0.1 + 0 0 .¬ 1 1 . 1 0 1 0 1 1 1 1 . 1 0 1¬1 0 0 0 1 r、y同号, +[-y]补 1 1 . 1 1 0 1 1 1 1 0 0.1 1 + 0 0 . 1 0 0 0 1 r、y同号, +[-y]补 0 0 . 0 0 1 1 1
0 0 . 0 1 1 1 0 ¬续: 被除数(余数) 商 1 0 . 1 1 0 + 1 1 . 0 1 1 1 1 r、y异号, +[y]补 1 1 . 1 1 . 1 1 0 1 0 0.1 1 0 1 + 0 0 . 1 0 0 0¬1 1 1 0 1 1 0.1 1 0 1 1 —— 恒置1 ¬1 r、y同号,+[-y]补 0 0 . 0 1 0 1 1 1 r、x同号,结束 [r5]补=0.010 11,r=r*=0.000 000 101 1 Åy= -1.001 01 判溢出:qf ¸y]补=10.110 11,x¸ 1 = 1 [xÅ y0 = 0 Å真符位的产生:qf = x0 0 = 1,溢出Åq0 = 1
注:由于本题中x*>y*,有溢出。除法运算时一般在运算前判断是否x* >y*,如果该条件成立则停止运算,转溢出处理。但此算法本身在溢出情况下仍可正常运行,此时数值位占领小数点左边的1位,商需设双符号位(变形补码),以判溢出。采用这种方法时运算前可不判溢出,直接进行运算,运算完后再判溢出。
(4)x=13/32=(0.011 01)2 y= -27/32=(-0.110 11)2 x*= [x]原= [x]补= x=0. 011 01 [y]原 = 1.110 11 y* = 0.110 11 [-y*]补=1.001 01 [y]补= 1.001 01 y*= 0.011 11 ¸ 1 = 1 x*Å y0 = 0 Å[-y]补= 0.110 11 q0 = x0 y =(-0.011 11)2 = -15/32 r*=0.010 11×2-5 ¸y]原=1.011 11 x¸[x =0.000 000 101 1
原码加减交替除法: 被除数(余数) 商 0 . 0 1 1 0 1 0 . 0 0 0 0 0 + 1 . 0 0 1 0 1 试减,+[-y*]补 1 . 1 0 0 1 . 0 0 1 0 0 0 .¬ 1 0 1 + 0 . 1 1 0 1 1 r<0, +y* 1 . 1 1 1 1 1 1 . 1 1 1 1 0 0.0 + 0 . 1 1 0 1¬ 1 1 r< 1 . 1 0 0 1 0 ¬0, +y* 0 . 1 1 0 0 1 1 0.0 1 + 1 . 0 0 1 0 1 r>0, +[-y*]补 0 . 1 0 1 1 1
1 . 0 1 1 1 0 0 . 0 1 1 ¬续: 被除数(余数) 商 1 + 1 . 0 0 1 0 1 r> 1 . 0 0¬0, +[-y*]补 0 . 1 0 0 1 1 1 1 1 0 0.0 1 1 1 + 1 . 0 0 1 0 1 r>0, +[-y*]补 0.0 1 1 1 1 r¬ 0 . 0 1 0 1 1 1>0, 结束
补码加减交替除法: 被除数(余数) 商 0 0 . 0 1 1 0 1 0 . 0 0 ¬0 0 0 + 1 1 . 0 0 1 0 1 试减,x、y异号,+[y]补 1 1 . 1 0 0 1 0 1 1 1 . 0 0 1 0 0 1 . + 0 0 . 1 1 0 1 1 1 1 . 1 1 1 1 0 ¬ r、y同号,+[-y]补 1 1 . 1 1 1 1 1 1 1.1 + 0 0 . 1 1 0 1 1 r、y同号,+[-y]补 0 0 . 1 1 0 0 1 0 1 . 1 0 0 1 0 1.1 0 + 1 1 . 0 0 1 0 1 ¬1 r、y异号, +[y]补 0 0 . 1 0 1 1 1
0 1¬续: 被除数(余数) 商 1 . 0 1 1 1 0 1 . 1 0 0 + 1 1 . 0 0 1 0 1 r、y异号, 0 1 . 0 0 1 1 0 1.1 0 0 0 +¬+[y]补 0 0 . 1 0 0 1 1 1 1.1 0¬ 1 1 . 0 0 1 0 1 r、y异号,+[y]补 0 0 . 0 1 0 1 1 1 0 0 1 —— 恒置1 r、x同号,结束 [r]补=0.010 y=(-0.011 11)2 = -15/32¸y]补=1.100 01,x¸11,r=r*=0.000 000 101 1 [x
22. 设机器字长为16位(含1位符号位),若一次移位需1μs,一次加法需1 μs,试问原码一位乘、补码一位乘、原码加减交替除法和补码加减交替除法各最多需多少时间? 解:原码一位乘最多需时 1μs×15(加)+ 1μs×15(移位)=30μs 补码一位乘最多需时 1μs×16+1μs×15 = 31μs 原码加减交替除最多需时 1μs×(16+1)+1μs×15=32μs (或33μs) 补码加减交替除最多需时 1μs×(16+1) +1μs×15=32μs (或33μs) (包括最后恢复余数!)
23. 对于尾数为40位的浮点数(不包括符号位在内),若采用不同的机器数表示,试问当尾数左规或右规时,最多移位次数各为多少? 解:对于尾数为40位的浮点数,若采用原码表示,当尾数左规时,最多移位39次;反码表示时情况同原码;若采用补码表示,当尾数左规时,正数最多移位39次,同原码;负数最多移位40次。当尾数右规时,不论采用何种码制,均只需右移1次。
24. 按机器补码浮点运算步骤,计算[x±y]补 (1)x=2-011× 0.101 100, y=2-010×(-0.011 100); (2)x=2-011×(-0.100 010), y=2-010×(-0.011 111); (3)x=2101×(-0.100 101), y=2100×(-0.001 111)。 解:先将x、y转换成机器数形式: (1)[x]补=1,101;0.101 100 [y]补=1,110;1.100 100 注:为简单起见,源操作数可直接写成浮点格式,不必规格化。
E]补=[Ex]补+[-Ey]补 D1)对阶: [ E]补D=11,101+00,010=11,111 [<0,应Ex向Ey对齐,则: [Ex]补+1=11,101+00,001 E]补+1=11,111+00,001 =00,000=0 至此,D =11,110 [ Ex=Ey,对毕。 [x]补=1,110;0.010 110 2)尾数运算: [Mx]补+[My]补= 0 0 . 0 1 0 1 1 0 + 1 1 . 1 0 0 1 0 0 1 1 . 1 1 1 0 1 0
[Mx]补+[-My]补= 0 0 . 0 1 0 1 1 0 + 0 0 . 0 1 1 1 0 0 0 0 . 1 1 0 0 1 0 3)结果规格化: [x+y]补=11,110;11.111 010 =11,011;11.010 000 (左规3次,阶码减3,尾数左移3位) [x-y]补=11,110;00.110 010 已是规格化数。 4)舍入:无 5)溢出:无 则:x+y=2-101×(-0.110 000) x-y =2-010×0.110 010
(2)x=2-011×(-0.100010) y=2-010×(-0.011111) [x]补=1,101;1.011 110 [y]补=1,110;1.100 001 1)对阶: 过程同1),则 [x]补=1,110;1.101 111 2)尾数运算: [Mx]补+[My]补= 1 1 . 1 0 1 1 1 1 + 1 1 . 1 0 0 0 0 1 1 1 . 0 1 0 0 0 0 [Mx]补+[-My]补= 1 1 . 1 0 1 1 1 1 + 0 0 . 0 1 1 1 1 1 0 0 . 0 0 1 1 1 0
3)结果规格化: [x+y]补=11,110;11.010 000 已是规格化数。 [x-y]补=11,110;00.001 110 =11,100;00.111 000 (左规2次,阶码减2,尾数左移2位) 4)舍入:无 5)溢出:无 则:x+y=2-010×(-0.110 000) x-y =2-100× 0.111 000
(3)x=2101×(-0.100 101) y=2100×(-0.001 111) [x]补=0,101;1.011 E]补=[Ex]补+[-Ey]补 D011 [y]补=0,100;1.110 001 1)对阶: [ E]补D=00,101+11,100=00,001 [>0,应Ey向Ex对齐,则: [Ey]补+1=00,100+00,001 E]补+[-1]补=00,001+11,111 =00,000=0 至此,D =00,101 [ Ey=Ex,对毕。 [y]补=0,101;1.111 000(1)
2)尾数运算: [Mx]补+[My]补= 1 1 . 0 1 1 0 1 1 + 1 1 . 1 1 1 0 0 0(1) 1 1 . 0 1 0 0 1 1(1) [Mx]补+[-My]补= 1 1 . 0 1 1 0 1 1 + 0 0 . 0 0 0 1 1 1(1) 1 1 . 1 0 0 0 1 0(1) 3)结果规格化: [x+y]补=00,101;11.010 011(1) 已是规格化数。 [x-y]补=00,101;11.100 010(1) =00,100;11.000 101 (左规1次,阶码减1,尾数左移1位)
4)舍入: [x+y]补=00,101;11.010 011(舍) [x-y]补不变。 5)溢出:无 则:x+y=2101×(-0.101 101) x-y =2100×(-0.111 011)
27. 设浮点数阶码取3位,尾数取6位(均不包括符号位),要求阶码用移码运算,尾数用补码运算,计算x·y,且结果保留1倍字长。 (1)x=2-100× 0.101101, y=2-011×(-0.110101); (2)x=2-011×(-0.100111), y=2101×(-0.101011)。 解:先将x、y转换成机器数形式: (1)[x]阶移尾补=0,100;0.101 101 [y]阶移尾补=0,101;1.001 011 1)阶码相加: [Ex]移+[Ey]补=00,100+11,101 =00,001(无溢出)
2)尾数相乘: (补码两位乘比较法) 部分积 乘数 yn+1 0 0 0 . 0 0 0 0 0 0 1 1 . 0 0 1 0 1 1 0 + 1 1 1 . 0 1 0 0 1 1 +[-x]补 1 1 1 . 0 1 0 0 1 2 1 1 1 . 1 1 0 1 0 0 1 1 1 1 .0 0 1 0 1 + 1 1 1 .®1 0 1 0 0 1 1 +[-x]补 1 1 1 . 0 0 0 1 1 1 2 1 1 1 . 1 1 0 0 0 1 1 1 1 1 1 1 . 0® 0 1 + 0 0 0 . 1 0 1 1 0 1 +[x]补 0 0 0 2 0 0 0 . 0 0 0 1 1 1 ®. 0 1 1 1 1 0 1 0 1 1 1 1 1 1 . 0 + 1 1 1 . 0 1 0 0 1 1 +[-x]补 1 1 1 . 0 1 1 0 1 0 1 0 1 1 1 1 0 0(清0)
[Mx × My]补=1.011 010(101 111 00) 3)结果规格化:已是规格化数。 4)舍入:设采用0舍1入法,应入: [x×y]阶移尾补=0,001;1.011 011 5)溢出:无 x×y=2-111×(-0.100 101) 方案二:采用阶补尾原格式计算: [x]阶补尾原=1,100;0.101 101 [y]阶补尾原=1,101;1.110 101 1)阶码相加: [Ex]补+[Ey]补=11,100+11,101 =11,001(无溢出)
原码一位乘: 部分积 乘数y* 0 . 0 0 0 0 0 0 . 1 1® 1 0 1 0 1 —— +x* + 0 . 1 0 1 1 0 1 0 . 1 0 1 1 0 1 1 0 . 0 0 1 0 1 1 ® 0 . 0 1 0 1 1 0 1 . 1 1 0 1 0 —— +0 0 1 . 1 1 0 1 —— +x* + 0 . 1 0 1 1 0 1 0 . 1 1 1 0 0 1 0 . 0 0 1 1®1 0 . 0 1 1 1 0 0 0 0 1 . 1 1 0 —— +0 ®0 1 0 0 0 0 1 . 1 1 —— +x* + 0 . 1 0 1 1 0 1 0 . 1 1 1 1 0 . 0 1 1 1 0 1 1 0 0 0 1 . 1 —— +x* + 0 . 1® 0 1 1 1 0 . 1 0 0 1 0 1 0 1 0 0®0 1 1 0 1 1 . 0 0 1 0 1 0 0 1
[Mx × My]原=1.100 101(010 001) 3)结果规格化:已是规格化数。 4)舍入:设采用0舍1入法,应舍: [x×y]阶补尾原=1,001;1.100 101 5)溢出:无 x×y=2-111×(-0.100 101) (2)x=2-011×(-0.100 111) y=2101×(-0.101 011) [x]阶移尾补=0,101;1.011 001 [y]阶移尾补=1,101;1.010 101 1)阶码相加: [Ex]移+[Ey]补=00,101+00,101 =01,010(无溢出)
2)尾数相乘: (补码两位乘比较法) 部分积 乘数 yn+1 0 0 0 . 0 0 0 0 0 0 1 1 . 0 1 0 1 0 1 0 + 1 1 1 . 0 1 1 0 0 1 +[x]补 1 1 1 . 0 1 1 2 1 1 1 . 1 1 0 1 1 0 0 1 1 1 .0 1 0 1 0 + 1® 0 0 1 1 1 . 0 1 1 0 0 1 +[x]补 1 1 1 . 0 0 1 1 1 1 2 1 1 1 . 1 1 0 0 1 1 1 1 0 1 1 ® 1 . 0 1 0 + 1 1 1 . 0 1 1 0 0 1 +[x]补 2 1 1 1 . 1 1 0 0 1®1 1 1 . 0 0 1 1 0 0 1 0 0 1 1 0 1 1 1 . 0 + 0 0 0 . 1 0 0 1 1 1 +[-x]补 0 0 0 . 0 1 1 0 1 0 0 0 1 1 0 1 0 0(清0) [Mx × My]补=0.011 010(001 101 00)
3)结果规格化: [x×y]阶移尾补= = 1,010;0.011 010(001 101 00) = 1,001;0.110 100(011 010 0) 4)舍入:设采用0舍1入法,应舍: [x×y]阶移尾补=1,001;0. 110 100 5)溢出:无 x×y=2001×0.110 100 方案二:采用阶补尾原格式计算: [x]阶补尾原=1,101;1.100 111 [y]阶补尾原=0,101;1.101 011 1)阶码相加: [Ex]补+[Ey]补=11,101+ 00,101 =00,010(无溢出)
原码一位乘: 部分积 乘数y* 0 . 0 0 0 0 0 0 . 1 0 1 0 1 1 1 0 . 0 1 0 0 1 1 ®—— +x* + 0 . 1 0 0 1 1 1 0 . 1 0 0 1 1 1 1 . 1 0 1 0 1 —— +x* + 0 . 1 0 0 1 1 1 0 . 1 1 1 0 1 1 0 . 0 0 1 1®1 0 . 0 1 1 1 0 1 0 1 . 1 0 1 0 —— +0 ®0 1 0 1 0 1 . 1 0 1 —— +x* + 0 . 1 0 0 1 1 1 0 . 1 1 0 1 0 . 0 0®1 0 . 0 1 1 0 1 0 1 1 0 1 . 1 0 —— +0 ® 1 0 1 1 1 0 1 0 1 1 0 1 . 1 —— +x* + 0 . 1 0 0 1 1 1 0 . 1 0 . 0 1 1 0 1 0 0 0 1 1 0 1®1 1 0 1 0 0
[Mx × My]原=0.011 010(001 101) 3)结果规格化: [x×y]阶补尾原= = 0,010;0.011 010(001 101) = 0,001;0.110 100(011 01) 4)舍入:设采用0舍1入法,应舍: [x×y]阶补尾原=0,001;0. 110 100 5)溢出:无 x×y=2001×0.110 100
28. 机器数格式同上题,要求阶码用移码运算,尾数用补码运算,计算x÷y。 (1)x=2101× 0.100111, y=2011×(-0.101011); (2)x=2110×(-0.101101), y=2011×(-0.111100)。
解:先将x、y转换成机器数形式: (1)[x]阶移尾补=1,101;0.100 111 [y]阶移尾补=1,011;1.010 101 1)阶码相减: [Ex]移+[-Ey]补=01,101+11,101 =01,010(无溢出)
2)尾数相除: (补码加减交替除法) 被除数(余数) 商 0 0 . 1 0 0 1 1 1 0 . 0 0 0 0 0 0 试减, + 1 1 . 0 1 0 1 0 1 Mx、My异号,+[My]补 1 1 . 1 1 1 1 . 1 1 1 0 0 0 1 . + 0 0 . 1 0 1 0¬1 1 0 0 1 0 1 . 0 0 0 1 1¬1 1 r、My同号,+[-My]补 0 0 . 1 0 0 0 1 1 1 0 1.0 + 1 1 . 0 1 0 1 0 1 r、My异号, +[My]补 0 0 . 1 1 0 1 1 0 1.0 0 + 1 1 . 0¬0 0 . 0 1 1 0 1 1 1 1 0 1 0 1 r、My异号, +[My]补 0 0 . 0 0 1 0 1 1
续: 被除数(余数) 0 0 . 0 1 0 1 1 0 1 . 0 0 0 + 1 1 . 0 1 0¬ 商 1 1 1 . 0 1 0 1 1¬ 1 0 1 r、My异号, +[My]补 1 1 . 1 0 1 0 1 1 1 0 1.0 0 0 1 + 0 0 . 1 0 1 0 1 1 r、My同号,+[-My]补 0 0 . 0 0 0 0 1 0 1.0 0 0 1 0 + 1 1 .¬0 0 . 0 0 0 0 0 1 1 1.0 0 0 1¬0 1 0 1 0 1 r、My异号, +[My]补 1 1 . 0 1 0 1 1 1 1 0 1 —— 恒置1 + 0 0 . 1 0 1 0 1 1 r、Mx异号,(恢复余数) 0 0 . 0 0 0 0 1 My]补= 1.000 101, [r]补=0.000 010 r= 0 .000¸0 且r、My同号, +[-My]补 [Mx 2-6 =0.000 000 000 010′010
3)结果规格化:已是规格化数。 4)舍入:已恒置1舍入。 5)溢出:无 y=2010×(-0.111 011) 方案二:采用阶补尾原形式: ¸y]阶移尾补=1,010;1.000 101 x ¸[x [x]阶补尾原=0,101;0.100 111 [y]阶补尾原=0,011;1.101 011 1)阶码相减: [Ex]补+[-Ey]补=00,101+11,101 =00,010(无溢出)
2)尾数相除: (原码加减交替除法) 被除数(余数) 商 0 0 . 1 0 0 1 1 1 0 . 0 0 0 0 0 0 试减, + 1 1 . 0 1 0 1 0 1 +[-My*]补 1 1 . 1 1 1 0 0 0 0 . + 0 0 .¬1 1 . 1 1 1 1 0 0 1 0¬0,+My* 0 0 . 1 0 0 0 1 1 1<1 0 1 0 1 1 r 1 . 0 0 0 1 1 0 0.1 + 1 1 . 0 1 0 1 0 1 0 0 . 1 1 0 1 1 0 ¬0, +[-My*]补 0 0 . 0 1 1 0 1 1 1> r 0, +[-My*]补 0 0 . 0 0> 0.1 1 + 1 1 . 0 1 0 1 0 1 r 1 0 1 1
0 0 . 0 1 0 1 1 0 ¬续: 被除数(余数) 商 1 0, +[-My*]补 1 1 . 1>0 . 1 1 1 + 1 1 . 0 1 0 1 0 1 r 1 1 . 0 1 0 1 1 0 0.1 1 1 0 + 0 0 . 1 0 1 ¬0 1 0 1 1 1 0 0 . 0 0 0 0¬0,+My* 0 0 . 0 0 0 0 0 1 1<0 1 1 r 0,>1 0 0.1 1 1 0 1 + 1 1 . 0 1 0 1 0 1 r 0.1 1 1 0 1 0 + 0 0 . 1 0 1 0 1¬+[-My*]补 1 1 . 0 1 0 1 1 1 1 0 ,恢复余数,+My* 0 0 . 0 0 0 0 1 0 <1 r 2-6 =0.000 000 000 010′My]原= 1.111 010 r*= 0 .000 010 ¸[Mx
¸y]阶补尾原=0,010;1.111 010 x ¸3)结果规格化:已是规格化数。 4)舍入:无 5)溢出:无 [x y=2010×(-0.111 010) (2)x=2110×(-0.101 101) y=2011×(-0.111 100) [x]阶移尾补=1,110;1.010 011 [y]阶移尾补=1,011;1.000 100 1)阶码相减: [Ex]移+[-Ey]补=01,110+11,101 =01,011(无溢出)
2)尾数相除: (补码加减交替除法) 被除数(余数) 商 1 1 . 0 1 0 0 1 1 0 . 0 0 0 0 0 0 试减, + 0 0 . 1 1 1 1 0 0 Mx、My同号,+[-My]补 0 0 . 0 0 0 . 0 1 1 1 1 0 0 . + 1 1 . 0 0 0 ¬0 1 1 1 1 1 1 1 . 0 0 0 1 0¬1 0 0 r、My异号,+[My]补 1 1 . 1 0 0 0 1 0 1 0 0.1 + 0 0 . 1 1 1 1 0 0 r、My同号, +[-My]补 0 0 . 0 0 0 0 0 0 0.1 0 + 1 1 .¬ 0 0 . 0 0 0 0 0 0 1 0 0 0 1 0 0 r、My异号, +[My]补 1 1 . 0 0 0 1 0 0
续: 被除数(余数) 1 0 . 0 0 1 0 0 0 0 . 1 0 1 + 0 0 . 1 1¬ 商 1 1 0 . 0 0 1 0¬1 1 0 0 r、My同号, +[-My]补 1 1 . 0 0 0 1 0 0 1 0 0 0.1 0 1 1 + 0 0 . 1 1 1 1 0 0 r、My同号,+[-My]补 1 0 . 0 0 1 0 0 0 0.1 0 1 1 1 + 0 0¬ 1 1 . 0 0 0 1 0 0 1 0.1 0 1 ¬. 1 1 1 1 0 0 r、My同号, +[-My]补 1 1 . 0 0 0 1 0 0 1 My]补= 0.101 111,¸1 1 1 —— 恒置1 r、Mx同号,结束。 [Mx 2-6 = -0.000 000 111 100′[r]补=1.000 100=[My]补 r= -0.111 100
注:由于补码加减交替除法算法中缺少对部分余数判“0”的步骤,因此算法运行中的某一步已除尽时,算法不会自动停止,而是继续按既定步数运行完。此时商由算法本身的这一缺陷引入了一个误差,而余数的误差正好等于除数。 商的误差引入的原因:当r、My同号时,此题中表示够减(r、Mx同号);当r、My异号时,此题中表示不够减(r、Mx异号);因此,当r=0时,被判为不够减(实际上应为够减),商0(实际上应商1),由此引入了误差。
3)结果规格化:已是规格化数。 y=2011× 0.101 111¸y]阶移尾补=1,011;0.101 111 x ¸4)舍入:已恒置1舍入。 5)溢出:无 [x 方案二:采用阶补尾原形式: [x]阶补尾原=0,110;1.101 101 [y]阶补尾原=0,011;1.111 100 1)阶码相减: [Ex]补+[-Ey]补=00,110+11,101 =00,011(无溢出)
2)尾数相除: (原码加减交替除法) 被除数(余数) 商 0 0 . 1 0 1 1 0 1 0 . 0 0 0 0 0 0 试减, + 1 1 . 0 0 0 1 0 0 1 1 . 1 0 0 0 1 0 ¬ +[-My*]补 1 1 . 1 1 0 0 0 1 1 0,+My* 0 0< 0 . + 0 0 . 1 1 1 1 0 0 r 0 0 . 1 1 1 1 0 0 0.1 + 1 1 . 0 0 0¬. 0 1 1 1 1 0 1 0 0 . 0 0¬0, +[-My*]补 0 0 . 0 0 0 0 0 0 1> 1 0 0 r 0,>0 0 0 0 0.1 1 + 1 1 . 0 0 0 1 0 0 r +[-My*]补 1 1 . 0 0 0 1 0 0
1 0 .¬续: 被除数(余数) 商 1 0 0 1 0 0 0 0 . 1 1 0 + 0 0 . 1 1 1 1 0 0 1 0 . 0 0 1 0 0 0 0.1¬0,+My* 1 1 . 0 0 0 1 0 0 1< r 0,+My* 1 1 . 0 0< 1 0 0 + 0 0 . 1 1 1 1 0 0 r 1 0 . 0 0 1 0 0 0 0.1 1 0 0 0 + 0 0 . 1 1 1 1¬0 1 0 0 1 0.1 1 0 0 0 0¬0,+My* 1 1 . 0 0 0 1 0 0 1<0 0 r 0,恢复余数,+My* 0 0 . 0 0 0 0 0 0< + 0 0 . 1 1 1 1 0 0 r 2-6 = -0.000 000 000 000′My]原= 0.110 000, r= -0.000 000¸[Mx
3)结果规格化:已是规格化数。 y=2011× 0.110 000 29.¸y]阶补尾原=0,011;0.110 000 x ¸4)舍入:无 5)溢出:无 [x 设机器字长为32位,用与非门和与或非门设计一个并行加法器(假设与非门的延迟时间为30ns,与或非门的延迟时间为45ns),要求完成32位加法时间不得超过0.6μs。画出进位链及加法器逻辑框图。
解:首先根据题意要求选择进位方案: 1)若采用串行进位链(行波进位),则在di、ti函数的基础上,实现32位进位需要的时间为: 30=1920ns 不满足0.6μs的加法时间限制,不能用。(设1ty=30ns) ′32=64ty=64′T=2ty 30=600ns ′8组=20ty=20′2)若采用单重分组跳跃进位(级连方式),则在di、ti的基础上,4位一组分组,32位进位需: T=2.5ty 刚好满足0.6 μs加法时间的限制,
考虑到一次加法除进位时间外,还需di、ti函数的产生时间、和的产生时间(最高位和)等因素,故此进位方案仍不适用。 30=450ns ′6组=15ty=15′结论:若采用单重分组跳跃进位,小组规模需在6位以上较为合适。即: T=2.5ty 除进位外还有150ns(约5ty)左右的时间供加法开销,较充裕。 3)若采用双重分组跳跃进位(二级先行—级联进位),4位一小组,4小组为一大组分组,则32位进位需: 30=300ns 完全满足0.6μs的加法时间限制,可以使用。′4级=10ty=10′T=2.5ty
32位双重分组跳跃进位的进位链框图见教材287页图6.23。 6位一组单重分组跳跃进位的进位链框图如下:
加法器逻辑框图如下。图中,进位链电路可选上述两种方案之一。
30. 设机器字长为16位,分别按4、4、4、4和5、5、3、3分组, (1)画出按两种分组方案的单重分组并行进位链框图,并比较哪种方案运算速度快。 (2)画出按两种分组方案的双重分组并行进位链框图,并对这两种方案进行比较。 (3)用74181和74182画出单重和双重分组的并行进位链框图。 解: (1)4—4—4—4分组的16位单重分组并行进位链框图见教材286页图6.22。
5—5—3—3分组的16位单重分组并行进位链框图如下:
(2)4—4—4—4分组的16位双重分组并行进位链框图见教材289页图6.26。 5—5—3—3分组的16位双重分组并行进位链框图如下:
3=7.5ty; ′3=7.5ty; 5—5—3—3分组的进位时间=2.5ty′ 4—4—4—4分组的进位时间=2.5ty 两种分组方案最长加法时间相同。 结论:双重分组并行进位的最长进位时间只与组数和级数有关,与组内位数无关。
(3)单重分组16位并行加法器逻辑图如下(正逻辑):
注意: 1)181芯片正、负逻辑的引脚表示方法; 2)为强调可比性,5-5-3-3分组时不考虑扇入影响; 3)181芯片只有最高、最低两个进位输入/输出端,组内进位无引脚; 4)181为4位片,无法5-5-3-3分组,只能4-4-4-4分组; 5)单重分组跳跃进位只用到181,使用182的一定是双重以上分组跳跃进位; 6)单重分组跳跃进位是并行进位和串行进位技术的结合;双重分组跳跃进位是二级并行进位技术;特别注意在位数较少时,双重分组跳跃进位可以采用全先行进位技术实现;位数较多时,可采用双重分组跳跃进位和串行进位技术结合实现。
第 七 章
8. 画出先变址再间址及先间址再变址的寻址过程示意图。
解:1)先变址再间址寻址过程简单示意如下: EA=[(IX)+A], IX®(IX)+1
IX®2)先间址再变址寻址过程简单示意如下: EA=(IX)+(A), (IX)+1
注意: 3)寻址后把操作数送回指令操作码,再访存。′1)英文缩写EA表示有效地址,不能乱用。 2)示意图中应标明EA(有效地址)的位置。
12. 16位,且存储字长等于指令字长,若该机指令系统可完成108种操作,操作码位数固定,且具有直接、间接、变址、基址、相对、立即等六种寻址方式,试回答:′某机主存容量为4M (1)画出一地址指令格式并指出各字段的作用; (2)该指令直接寻址的最大范围; (3)一次间址和多次间址的寻址范围; (4)立即数的范围(十进制表示);
(5)相对寻址的位移量(十进制表示); (6)上述六种寻址方式的指令哪一种执行时间最短?哪一种最长?为什么?哪一种便于程序浮动?哪一种最适合处理数组问题? (7)如何修改指令格式,使指令的寻址范围可扩大到4M? (8)为使一条转移指令能转移到主存的任一位置,可采取什么措施?简要说明之。
解: (1)单字长一地址指令格式: 7 3 6
(2)A为6位,该指令直接寻址的最大范围为26=64字; (3)一次间址的寻址范围为216=64K字; 多次间址的寻址范围为215=32K字; (4)立即数的范围:若采用补码表示为1FH~20H;十进制表示为31~ -32;无符号数为0~63; (5)相对寻址的位移量范围在采用补码表示时同立即数范围,为31~ -32;
(6)六种寻址方式中,立即寻址指令执行时间最短,因为此时不需寻址; 间接寻址指令执行时间最长,因为寻址操作需访存一次到多次; 相对寻址便于程序浮动,因为此时操作数位置可随程序存储区的变动而改变,总是相对于程序一段距离; 变址寻址最适合处理数组问题,因为此时变址值可自动修改而不需要修改程序。
(7)为使指令寻址范围可扩大到4M,需要有效地址22位,此时可将单字长一地址指令的格式改为双字长,如下图示: 7 3 6
(8)如使一条转移指令能转移到主存的任一位置,可采用上述双字长一地址指令,通过选用合适的寻址方式完成。(如选用直接寻址就可转移到主存任一位置,但选用相对寻址则只能在±2M范围内转移。) 除此之外,(7)、(8)两题也可通过段寻址方式达到扩大寻址空间的目的。总之,不论采取何种方式,最终得到的实际地址应是22位。
方案二: (7)如果仍采用单字长指令(16位)格式,为使指令寻址范围扩大到4M,可通过段寻址方案实现。安排如下: 硬件设段寄存器DS(16位),用来存放段地址。在完成指令寻址方式所规定的寻址操作后,得有效地址EA(16位),再由硬件自动完成段寻址,最后得22位物理地址。 26 + EA ′ 物理地址=(DS) 注:段寻址方式由硬件隐含实现。在编程指定的寻址过程完成、EA产生之后由硬件自动完成,对用户是透明的。
方案三: (7)在采用单字长指令(16位)格式时,还可通过页面寻址方案使指令寻址范围扩大到4M。安排如下: 硬件设页面寄存器PR(16位),用来存放页面地址。指令寻址方式中增设页面寻址。当需要使指令寻址范围扩大到4M时,编程选择页面寻址方式,则: EA =(PR)‖A (有效地址=页面地址“拼接”6位形式地址) 这样得到22位有效地址。
(5)相对寻址的位移量范围为: ′讨论: (6)基址寻址便于程序浮动;′(PC)-32; (PC内容此时做基地址使用,形式地址给出位移量) ~(PC)+31 (7)采用基址寻址: ′(基址寻址的程序浮动能力没有相对寻址强,在两种寻址方式都给出的情况下,描述程序浮动能力时应选相对寻址) 采用32位指令:(应为双字长指令)′物理地址=段地址+段内位移量A
通过基址寻址与段寻址获得实际地址的区别: 存储器地址位数),位移量比较短(=形式地址位数),相加后得到的有效地址长度=基地址长度。此时主存不分段。 31)基址寻址的基地址一般比较长( 实际地址=有效地址=基地址+位移量 段寻址是基址寻址的一种变种,当基地址短于存储地址时,基址寻址就变成了段寻址,基地址就叫做段地址,此时主存分段。 偏移量+段内位移量(有效地址)′实际地址=段地址
存储字长的机器中,可直接通过寻址计算获得实际地址。 3 2)基址寻址一般在机器字长 存储字长的机器中,由于CPU内部数据通路的限制,编程指定的任何一种寻址计算得到的有效地址长度都等于机器字长,为获得更长的地址字,硬件自动通过段寻址计算出存储器实际地址。£在机器字长 (7)采用变址间接寻址,变址寄存器6位,先变址,再间址, EA=(6位基地址)*(16位间接地址) =26*216=222 ′ (通过乘法运算进行寻址操作太慢且复杂,无机器用过)
(8)如使一条转移指令能转移到主存的任一位置,可采用RS型指令; (′ 两个错:1)RS型只是二地址以上指令的类型,即指令中二个地址场一个给出寄存器号,一个给出面向存储器的地址信息。2)题意的实现与寻址方式和形式地址长度有关,与指令的地址场结构无直接关系。) 16位容量=226位,采用变址间接寻址,变址寄存器10位,210*216构成26位地址;′ 4M′ (两个错:1)存储器地址结构错;2)寻址计算方法错,见前面的讨论)
′ (8)A需22位,采用(7)的双字长指令格式,令PC=0,当PC取不同值时指明当前位置不同; (把转移指令(指令的跳跃寻址)与数据的相对寻址混淆。转移指令可重置PC值,相对寻址时只是用PC的值,而不能对其修改) 相关问题: * 一般:机器字长=存储字长; * CPU中所有寄存器(包括基址寄存器)的位数=机器字长;
* 通常:指令字长不一定等于机器字长。早期的小型机由于字长较短,指令常以机器字长为单位变化(几字长指令,如PDP-11机),目前以字节长为单位变化(几字节指令)的较多。习题中指令字长=机器字长的假设只是为简单起见; * 当设指令字长=存储字长(=机器字长)时,如用立即寻址,由于立即数由形式地址直接给出,而形式地址的位数肯定不足一个字长,因此立即寻址非常适用于编程给出短常数的场合。如果非要把立即数存入存储器,那就只好高位补0了。干吗这样用呢? 提示:寻址方式的正确选择与编程技巧有关。
15. 某CPU内有32个32位的通用寄存器,设计一种能容纳64种操作的指令系统。假设指令字长等于机器字长,试回答: (1)如果主存可直接或间接寻址,采用“寄存器—存储器”型指令,能直接寻址的最大存储空间是多少?画出指令格式并说明各字段的含义。 (2)如果采用通用寄存器作基址寄存器,则上述“寄存器—存储器”型指令的指令格式有何特点?画出指令格式并指出这类指令可访问多大的存储空间?
解: (1)如采用RS型指令,则此指令一定是二地址以上的地址格式,指令格式如下: 6 5 1 20
(2)如采用基址寻址,则指令格式中应给出基址寄存器号,以指定哪一个通用寄存器用作基址寄存器。指令格式变为: 6 5 1 1 5 14
(2)指令格式:′讨论:
16. 某机字长16位,存储器直接寻址空间为128字,变址时的位移量为-64~+63,16个通用寄存器均可作为变址寄存器。采用扩展操作码技术,设计一套指令系统格式,满足下列寻址类型的要求: (1)直接寻址的二地址指令3条; (2)变址寻址的一地址指令6条; (3)寄存器寻址的二地址指令8条; (4)直接寻址的一地址指令12条; (5)零地址指令32条。 试问还有多少种代码未用?若安排寄存器寻址的一地址指令,最多还能容纳多少条?
解:题意分析: 设指令字长=机器字长,128字的直接寻址空间要求形式地址A为7位,-64~+63的位移量也需7位(6位加1位符号位),16个通用寄存器作变址寄存器需4位变址寄存器号,则指令格式为: (1)直接寻址的二地址指令: 2 7 7
(3)寄存器寻址的二地址指令: 8 4 4
(6)若安排寄存器寻址的一地址指令,指令格式应为: 12 4
操作码编码分配: 0 0 0 1 A1,A2; 3条直接寻址的二地址指令。 1 0 1 1 0 0 0 …… …… IX,A;6条变址寻址的一地址指令。 1 1 1 0 1 1 1 1 1 0 0 0 0 …… …… …… Ri,Rj; 1 1 1 1 0 1 1 1 8条寄存器寻址的二地址指令。 1 1 1 1 1 0 0 0 0 …… …… …… A; 1 1 1 1 1 1 0 1 1 12条直接寻址的一地址指令。
续: 1 1 1 1 1 1 1 0 0 0 0 0 …… …… …… …… Ri; 1 1 1 1 1 1 1 1 0 1 1 1 30条寄存器寻址的 1 1 1 1 1 1 1 1 1 0 0 0 一地址指令。 …… …… …… …… (利用30个冗余编码) 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 …… …… …… …… …… 32条0地址 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 指令
不画所设计的指令格式图,只分配指令操作码编码。 ′讨论: 指令格式中安排寻址方式字段,例: 2 3 4 7 ′
评注:这是一道指令格式设计题,本题已给出了各种指令所需的条数,因此,在根据题意画出各种指令的格式后,剩下的工作就是要为每一条指令分配编码。在采用扩展操作码技术分配指令编码时,扩展的基本方法是在所设计的指令系统中,选定一种操作码位数最少的指令格式作为基本格式,然后在这种基本格式的基础上进行操作码编码的扩展。为便于硬件译码结构的实现,编码分配应尽量做到有序、有规律。特别是扩展标志码的选择,应尽量采用特征较强的编码,象全‘1’编码等。另外,应在某类指令的编码全部安排完后,再考虑安排扩展标志码,以避免漏排或重码等不必要的混乱。
17. 某机指令字长16位,每个操作数的地址码为6位,设操作码长度固定,指令分为零地址、一地址和二地址三种格式。若零地址指令有M种,一地址指令有N种,则二地址指令最多有几种?若操作码位数可变,则二地址指令最多允许有几种? 解:1)若采用定长操作码时,二地址指令格式如下: 4 6 6
设二地址指令有K种,则: K=24-M-N 当M=1(最小值),N=1(最小值)时,二地址指令最多有: Kmax=16-1-1=14种 2)若采用变长操作码时,二地址指令格式仍如1)所示,但操作码长度可随地址码的个数而变。此时, K= 24 -(N/26 + M/212 ); 1时,K最大, 则二地址指令最多有: £ (N/26 + M/212 向上取整) 当(N/26 + M/212 ) Kmax=16-1=15种(只留一种编码作扩展标志用。)
讨论:此时,一地址指令条数为: N=(24 - K)×26 - M/26; ( M/26向上取整)。 零地址指令条数为: M = 216 - 212K - 26N; 当K最大时(K=15),一地址指令最多有: Nmax=64 - 1=63种; 零地址指令最多有: Mmax=64种 注意:应首先根据题意画出指令基本格式。
第 八 章
2. 什么是指令周期?指令周期是否有一个固定值?为什么? 解: 指令周期是指一条指令从开始取直到执行完这段时间。 由于计算机中各种指令执行所需的时间差异很大,因此为了提高CPU运行效率,即使在同步控制的机器中,不同指令的指令周期长度都是不一致的,也就是说指令周期对于不同的指令来说不是一个固定值。 讨论:指令周期长度不一致的根本原因在于设计者,为了提高CPU运行效率而这样安排的,与指令功能不同及指令实际执行时间不同没有什么必然关系。
4. 设CPU内有下列部件:PC、IR、SP、AC、MAR、MDR和CU,要求: (1)画出完成间接寻址的取数指令LDA@X(将主存某地址单元X的内容取至AC中)的数据流(从取指令开始)。 (2)画出中断周期的数据流。 解:CPU中的数据流向与所采用的数据通路结构直接相关,不同的数据通路中的数据流是不一样的。常用的数据通路结构方式有直接连线、单总线、双总线、三总线等形式,目前大多采用总线结构,直接连线方式仅适用于结构特别简单的机器中。
为简单起见,本题采用单总线将题意所给部件连接起来,框图如下:
ˉ LDA@X指令周期流程图: 说 明
ˉ LDA
ˉ(2)中断周期流程图如下: 说 明
A 说 明ˉ
讨论:解这道题有两个要素,首先要根据所给部件设计好数据通路,即确定信息流动的载体。其次选择好描述数据流的方法,无论采用什么样的表达方式,其关键都要能清楚地反映数据在通路上流动的顺序,即强调一个“流”字。较好的表达方式是流程图的形式。
13. 在中断系统中INTR、INT、EINT三个触发器各有何作用? 解:INTR——中断请求触发器,用来登记中断源发出的随机性中断请求信号,以便为CPU查询中断及中断排队判优线路提供稳定的中断请求信号; EINT——中断允许触发器,CPU中的中断总开关。当EINT=1时,表示允许中断(开中断),当EINT=0时,表示禁止中断(关中断)。其状态可由开、关中断等指令设置; INT——中断标记触发器,控制器时序系统中周期状态分配电路的一部分,表示中断周期标记。当INT=1时,进入中断周期,执行中断隐指令的操作。
讨论: ′ 当进入中断周期时,INT=1; (INT=1时,进入中断周期) ′ 回答时首先应给出该触发器的中文名称,然后说明其主要作用。 INT与EINT配合使用以实现关中断功能,即INT=1,反相后使EINT=0; (关中断并不是INT的主要功能,进入中断周期后要执行中断隐指令的全部三个功能) INT表示自愿中断,完成系统调用;′ (尽管INT触发器的英文缩写与INT指令助记符完全相同,但它们一个是硬件设置,一个是软中断指令,其作用完全不同)
′ ′ INT表示处于中断状态中; (INT并不是在整个中断过程中都存在) ′INT标记目前是否正在运行中断程序; (INT标记在运行中断程序时已不存在) INT判断中断过程中是否接受其它中断请求,INT=0时,开中断,允许中断嵌套; EINT判断CPU是否响应中断请求;′(INT标记与中断嵌套技术没有任何关系。它不能表示出中断过程中是否接受其它中断请求,INT=0也不表示开中断) (CPU根据EINT状态决定是否响应中断请求)
′ 当CPU响应中断时,EINT置1; (当EINT=1时,允许CPU响应中断) ′ EINT确保CPU响应中断后,不受新的中断干扰; ′(CPU响应中断在先,进入中断周期后才使EINT=0,仅在单重中断时,整个中断过程EINT=0,不接受新的中断请求) INTR=1,判断哪个中断源有请求;′EINT表示中断隐指令,INT起关中断作用; (把EINT和INT的作用搞反了) (INTR对中断源的请求进行登记,当INTR=1时,表示有请求)
20. 现有A、B、C、D四个中断源,其优先级由高向低按A、B、C、D顺序排列。若中断服务程序的执行时间为20μs,请根据下图所示时间轴给出的中断源请求中断的时刻,画出CPU执行程序的轨迹。 解: CPU执行程序的轨迹图如下:
L1®
21. 某机有五个中断源L0、L1、L2、 L3、L4,按中断响应的优先次序由高向低排序为L0 L2,根据下示格式,1)写出各中断源的屏蔽字。®L0 ®L4 ®L3 ®L4,现要求中断处理次序改为L1®L3 ®L2 ® 2)按照修改过的处理次序,当五个中断请求信号同时到来时,请画出CPU中断处理过程。 解:1)各中断源屏蔽状态见下表:
表中:设屏蔽位=1,表示屏蔽;屏蔽位=0,表示中断开放。 为了使所有中断都能得到及时响应,现行程序的中断屏蔽字一般设为全开放(全0)状态。
现行程序(00000)
讨论: 图中括号内为各程序的屏蔽码。 注意:中断屏蔽码的判优作用体现在对低级中断请求的屏蔽上,对于多个同时到来的高级中断请求信号之间则只有开放作用,没有判优作用。此时还需依赖硬件排队线路完成进一步的判优。
C,为改变中断处理次序,将它们的中断屏蔽字分别设为: 设备 >B> 22. 设某机配有A、B、C三台设备,其优先顺序是A 屏蔽字 A 1 1 1 B 0 1 0 C 0 1 1 s。m请按下图所示时间轴给出的设备请求中断的时刻,画出CPU执行程序的轨迹。设A、B、C中断服务程序的执行时间均为20
解: CPU执行程序的轨迹图如下:
讨论:当从B中断转到C中断时,不返回现行程序,下述程序运行轨迹是错误的:
第 九 章
3. 什么是指令周期、机器周期和时钟周期?三者有何关系? 解:CPU每取出并执行一条指令所需的全部时间叫指令周期;机器周期是在同步控制的机器中,执行指令周期中一步相对完整的操作(指令步)所需时间,通常安排机器周期长度=主存周期;时钟周期是指计算机主时钟的周期时间,它是计算机运行时最基本的时序单位,对应完成一个微操作所需时间,通常时钟周期=计算机主频的倒数。
4. 能不能说机器的主频越快,机器的速度就越快,为什么? 解:不能说机器的主频越快,机器的速度就越快。因为机器的速度不仅与主频有关,还与数据通路结构、时序分配方案、ALU运算能力、指令功能强弱等多种因素有关,要看综合效果。
5. 设机器A的主频为8MHz,机器周期含4个时钟周期,且该机的平均指令执行速度是0.4MIPS,试求该机的平均指令周期和机器周期,每个指令周期中含几个机器周期?如果机器B的主频为12MHz,且机器周期也含4个时钟周期,试问B机的平均指令执行速度为多少MIPS? 解:先通过A机的平均指令执行速度求出其平均指令周期,再通过主频求出时钟周期,然后进一步求出机器周期。B机参数的算法与A机类似。 计算如下:
A机平均指令周期=1/0.4MIPS=2.5μs A机时钟周期=1/8MHz=125ns A机机器周期=125ns×4=500ns=0.5μs 83ns B机机器周期 =83ns×4 =332ns»A机每个指令周期中含机器周期个数 =2.5μs÷0.5μs=5个 B机时钟周期 =1/12MHz 设B机每个指令周期也含5个机器周期,则: B机平均指令周期=332ns×5=1.66μs B机平均指令执行速度=1/1.66μs =0.6MIPS 结论:主频的提高有利于机器执行速度的提高。
6. 设某机主频为8MHz,每个机器周期平均含2个时钟周期,每条指令平均有2.5个机器周期,试问该机的平均指令执行速度为多少MIPS?若机器主频不变,但每个机器周期平均含4个时钟周期,每条指令平均有5个机器周期,则该机的平均指令执行速度又是多少MIPS?由此可得出什么结论? 解:先通过主频求出时钟周期,再求出机器周期和平均指令周期,最后通过平均指令周期的倒数求出平均指令执行速度。计算如下:
时钟周期=1/8MHz=0.125×10-6 =125ns 机器周期=125ns×2=250ns 平均指令周期=250ns×2.5=625ns 平均指令执行速度=1/625ns=1.6MIPS 当参数改变后: 机器周期= 125ns×4=500ns=0.5μs 平均指令周期=0.5μs×5=2.5μs 平均指令执行速度=1/2.5μs=0.4MIPS 结论:两个主频相同的机器,执行速度不一定一样。
7. 某CPU的主频为8MHz,若已知每个机器周期平均包含4个时钟周期,该机的平均指令执行速度为0.8MIPS,试求该机的平均指令周期及每个指令周期含几个机器周期?若改用时钟周期为0.4μs的CPU芯片,则计算机的平均指令执行速度为多少MIPS?若要得到平均每秒40万次的指令执行速度,则应采用主频为多少的CPU芯片?
解:先通过主频求出时钟周期时间,再进一步求出机器周期和平均指令周期。 时钟周期=1/8MHz=0.125×10-6 =125ns 机器周期=125ns×4=500ns=0.5μs 平均指令周期=1/0.8MIPS =1.25 ×10-6=1.25μs 每个指令周期所含机器周期个数 = 1.25μs/0.5μs=2.5个
当芯片改变后,相应参数变为: 机器周期=0.4μs×4=1.6μs 平均指令周期=1.6μs×2.5=4μs 平均指令执行速度=1/4μs =0.25MIPS 若要得到平均每秒40万次的指令执行速度,则应采用的主频为: 平均指令周期=1/0.4MIPS =2.5 ×10-6=2.5μs 机器周期=2.5μs÷2.5=1μs 时钟周期= 1μs÷4=0.25μs 主频=1/0.25μs=4MHz
8. 某计算机的主频为4MHz,各类指令的平均执行时间和使用频度如下表所示,试计算该机的速度(单位用MIPS表示),若上述CPU芯片升挡为6MHz,则该机的速度又为多少? s ms 0.8m指令类别 存取 加、减、比较、转移 乘除 其他 平均指令 执行时间 0.6 s 使用频度 35% 50% 5% 10%ms 1.4m 10
解: (1)指令平均运行时间 = (0.6×0.35+0.8×0.5+10×0.05+1.4×0.1)μs = 1.25μs 机器平均运行速度 = 1/1.25μs = 0.8MIPS (2) 解法一: 时钟周期 = 1/4MHz = 0.25μs 指令平均运行周期数 = 1.25μs ÷0.25μs = 5CPI 时钟周期 = 1/6MHz ≈ 0.167μs 指令平均运行时间 = 0.167μs×5 ≈ 0.833μs 机器平均运行速度 = 1/0.833μs ≈ 1.2MIPS
11. 设CPU内部结构如图9.4所示,此外还设有B、C、D、E、H、L六个寄存器,它们各自的输入和输出端都与内部总线相通,并分别受控制信号控制(如Bi为寄存器B的输入控制;Bo为B的输出控制)。要求从取指令开始,写出完成下列指令所需的控制信号。 AC) ®B) (2)SUB A,H;((AC)-(H) ®(1)ADD B,C;((B)+(C) 解:先画出相应指令的流程图,然后将图中每一步数据通路操作分解成相应的微操作,再写出同名的微命令即可。
(1) ADD B,C指令流程及微命令序列如下: ˉ
Bo,Yi Co,ALUi,+ Zo,Bi
(2) SUB A,H指令流程及微命令序列如下: ˉ
Ho,Yi ACo,ALUi,– Zo,ACi
第 十 章
1. 假设响应中断时,要求将程序断点存在堆栈内,并且采用软件办法寻找中断服务程序的入口地址,试写出中断隐指令的微操作及节拍安排。 ®MDR,1®MAR T1 PC®EINT,SP®解:设软件查询程序首址为0号内存单元,则中断隐指令的微操作命令及节拍安排如下: T0 0 SP T4 ® W,SP+1®MDR,1®M(MAR) T3 PSW®MAR,MDR®SP T2 SP®W,SP+1 M(MAR) 由于题意中没有给出确切的数据通路结构,故上述节拍分配方案的并行性较低。®PC,MDR®0
2. 写出完成下列指令的微操作及节拍安排(包括取指操作)。 (1)指令ADD R1,X完成将R1寄存器的内容和主存X单元的内容相加,结果存于R1的操作。 (2)指令ISZ X完成将主存X单元的内容增1,并根据其结果若为0,则跳过下一条指令执行。 解:该题题意中没有指定数据通路,因此排序前应先设定一下。在此设采用单总线结构的CPU数据通路,且ALU输入端设两个暂存器C、D(见17题图)。并设采用同步控制,每周期3节拍:
R T1 ®MAR,1® (1)指令ADD R1,X的微操作及节拍安排如下: 取指周期: T0 PC ID 执行周期1: T0 ®IR,OP(IR)®MDR T2 MDR®PC+1,M(MAR) D 执行周期2: ®MDR T2 MDR®C,M(MAR)®R T1 R1®MAR,1®X(IR) R1®T0 T1 T2 +,ALU
(2)指令ISZ X的微操作及节拍安排(取指周期同(1),略): C ®MDR T2 MDR®R T1 M(MAR)®MAR,1®执行周期1: T0 X(IR) M(MAR) ® -W T2 MDR®MDR T1 0®执行周期2: T0 +1,ALU (PC+1)·Z (设Z为结果为0标志) 该指令的操作在一个执行周期做不完,因此安排了两个执行周期。
3. 按序写出下列程序所需的全部微操作命令及节拍安排。
解:由于题意未明确要求采用何种控制器结构,故仍按较简单的组合逻辑时序关系安排节拍(单总线、同步控制,假设同上题): LDA 206 指令: ID ®IR,OP(IR)®MDR T2 MDR®R T1 PC+1,M(MAR)®MAR,1®取指周期: T0 PC AC®MDR T2 MDR®R T1 M(MAR)®MAR,1®执行周期: T0 206(IR)
ADD C ®MDR,AC®R T1 M(MAR)®MAR,1®207 指令:取指周期:同上。 执行周期1: T0 207(IR) AC BAN 204 指令:取指周期:同上。 ®D 执行周期2: T0 T1 T2 +,ALU®T2 MDR PC® 执行周期: (设N为结果为负标志) T0 T1 T2 N·204(IR)
STA 205 指令: -W T2 ®MDR,0®MAR T1 AC® 取指周期:同上。 执行周期: T0 205(IR) G ®M(MAR) STP 指令: 取指周期:同上。 执行周期: T0 T1 T2 0®MDR (G为停机标志。)
4. 已知带返转指令的含义如下图所示,写出机器在完成带返转指令时,取指阶段和执行阶段所需的全部微操作及节拍安排。 主程序 子程序
解:假设同上题,仍按组合逻辑、单总线、同步控制安排,带返转指令的全部微操作及节拍如下: ID ®IR,OP(IR)®MDR T2 MDR®R T1 PC+1,M(MAR)®MAR,1®取指周期: T0 PC M(MAR) ® W T2 MDR®MDR),1®MDR(PC®MAR T1 M+1®执行周期: T0 Ad(IR) PC)®PC (MAR +1® K+1
10. 能否说水平型微指令就是直接编码的微指令,为什么? 解:不能说水平型微指令就是直接编码的微指令,因为符合水平型微指令特征的微指令都属于水平型微指令,常见的有:直接编码、字段直接编码、字段间接编码,及混合编码等。直接编码的微指令只是最典型的一种。
13. 设控制存储器的容量为512×48位,微程序可在整个控存空间实现转移,而控制微程序转移的条件共有4个(采用直接控制),微指令格式如下:
17. 假设机器的主要部件有:程序计数器PC,指令寄存器IR,通用寄存器R0、R1、R2、R3,暂存器C、D,ALU,移位器,存储器地址寄存器MAR,存储器数据寄存器MDR及存储矩阵M。 (1)要求采用单总线结构画出包含上述部件的硬件框图,并注明数据流动方向。 (2)画出ADD(R1),(R2)指令在取指阶段和执行阶段的信息流程图。 R1寄存器存放源操作数地址,R2寄存器存放目的操作数的地址。 (3)写出对应该流程图所需的全部微操作命令。
解: (1)采用单总线结构的CPU硬件框图如下:
(2)ADD(R1),(R2) ˉ(3)对应该流程图所 指令流程图如下: 需的全部微操作命令。
R®R1o,MARi 1 R MDRo,Di®MDRo,Ci R2o,MARi 1
-W 公操作®+,D,MDRi 0
18. 假设机器的主要部件同17题,外加一个控制门G。 (1)要求采用双总线结构(每组总线的数据流动方向是单向的),画出包含上述部件的硬件框图,并注明数据流动方向。 (2)画出SUB R1操作的指令周期信息流程图(假设指令地址已放在PC中),并列出相应的微操作控制信号序列。®R1,R3完成(R1)-(R3)
解: (1)双总线结构的CPU硬件框图如下:
(2) SUB R1,R3指令周期流程图如下:
R1o,G,Ci R2o,G,Di -,D,G,R1i
19. 下表给出8条微指令I1~I8及所包含的微命令控制信号,设计微指令操作控制字段格式,要求所使用的控制位最少,而且保持微指令本身内在的并行性。
解:为使设计出的微指令操作控制字段最短,并且保持微指令本身内在的并行性,应采用混合编码法。首先找出互斥的微命令组,为便于分析,将微命令表重画如下:
由表中微命令的分布情况可看出:a、b、c、d、e微命令的并行性太高,因此不能放在同一字段中。另外,由分析可知,在2、3、4分组的互斥组中,3个一组的微命令互斥组对控制位的压缩作用最明显。因此,应尽可能多的找出3个一组的互斥组。现找出的互斥组有:cfj,dij,efh,fhi,bgj,ehj,efj……等等。 从中找出互不相重的互斥组有两个:dij,efh。则:微指令操作控制字段格式安排如下: 1 1 1 1 2 2
各字段编码分配如下: a —— 0 无操作; b —— 0 无操作; 1 a微命令; 1 b微命令 c —— 0 无操作; g —— 0 无操作; 1 c微命令; 1 g微命令 dij —— 00 无操作; efh —— 00 无操作; 01 d微命令; 01 e 10 i微命令; 10 f 11 j微命令; 11 h 注:每组都应为“无操作”留一种编。 与采用直接控制法比较: 直接控制法:10个微命令需10位操作控制位; 本方案:10个微命令需8位操作控制位,压缩了2位。