计算机组成原理-第二版-唐朔飞著-课后习题详解(完整资料).doc 下载本文

内容发布更新时间 : 2024/5/16 4:07:00星期一 下面是文章的全部内容请认真阅读。

则负数表示范围为:-1?231 —— -2-1?2-32

最大正数=0,11 111;0.111 111 111,即 (1-2-9)?231 最小正数=1,00 000;0.100 000 000,即 2-1?2-32 则正数表示范围为:2-1?2-32 ——(1-2-9)?231

17. 设机器数字长为8位(包括一位符号位),对下列各机器数进行算术左移一位、两位,算术右移一位、两位,讨论结果是否正确。

[x1]原=0.001 1010;[y1]补=0.101 0100;[z1]反=1.010 1111; [x2]原=1.110 1000;[y2]补=1.110 1000;[z2]反=1.110 1000; [x3]原=1.001 1001;[y3]补=1.001 1001;[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 0010B, B= -13/32= -0.011 0100B [A]补=0.001 0010, [B]补=1.100 1100

[A+B]补= 0.0010010 + 1.1001100 = 1.1011110 ——无溢

A+B= -0.010 0010B = -17/64

(2)A=19/32= 0.100 1100B, B= -17/128= -0.001 0001B [A]补=0.100 1100, [B]补=1.110 1111 , [-B]补=0.001 0001

[A-B]补= 0.1001100 + 0.0010001= 0.1011101 ——无溢出 A-B= 0.101 1101B = 93/128B

(3)A= -3/16= -0.001 1000B, B=9/32= 0.010 0100B [A]补=1.110 1000, [B]补= 0.010 0100

[A+B]补= 1.1101000 + 0.0100100 = 0.0001100 —— 无溢

A+B= 0.000 1100B = 3/32

(4) A= -87= -101 0111B, B=53=110 101B

[A]补=1 010 1001, [B]补=0 011 0101, [-B]补=1 100 1011

[A-B]补= 1 0101001 + 1 1001011 = 0 1110100 —— 溢出 (5)A=115= 111 0011B, B= -24= -11 000B [A]补=0 1110011, [B]补=1,110 1000

[A+B]补= 0 1110011 + 1 1101000 = 0 1011011——无溢

A+B= 101 1011B = 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]原=0.110111,[y]原=1.101110,x*=0.110111, y*=0.101110 原码一位乘:

部分积 乘数y* 说明 0.000 000 101 110 部分积初值为0,乘数为0+0.000 加0 000 0.000 000 右移一位 0.000 000 010 111 乘数为1,加上x* +0.110 111 0.110 111 右移一位 0.011 011 101 011 乘数为1,加上x* +0.110 111 1.010 010 右移一位 0.101 001 010 101 乘数为1,加上x* +0.110 111 1.100 000 右移一位 0.110 000 001 010 乘数为0,加上0 +0.000 000 0.110 000 右移一位 0.011 000 000 101 乘数为1,加上x* +0.110 111 1.001 111 右移一位 0.100 111 100 010 即x*×y*=0.100 111 100 010,z0=x0? y0=0 ?1=1, [x×y]原=1.100 111 100 010,x·y= -0. 100 111 100 010 原码两位乘:[-x*]补=1.001 001,2x*=1.101 110

部分积 乘数y* Cj 说明 000 . 000 00 101 0 部分积初值为0,Cj=0 000 110 根据yn-1ynCj=100,加2x*,+001 . 保持Cj=0 101 110 001 . 101 0 110 000 . 011 10 001 0 右移2位 011 011 根据yn-1ynCj=110,加[-x*]补,+111 . 001 10 001 置Cj=1 001 011 111 . 100 右移2位 100 00 100 1 111 . 111 010 根据yn-1ynCj=101,加[-x*]补,001 置Cj=1 +111 . 001 001 111 . 000 010 10 001 1 右移2位 111 . 110 000 根据yn-1ynCj=001,加x*,保000 持Cj=0 +000 . 110 111 000 . 100 10 001 0 111