计算机组成原理课后答案(唐朔飞第二版) 下载本文

.

[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

6.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 x0=0,y0=1,z0=x0 ? y0=0 ? 1=1 x*×y*=0.100 111 100 010 [x×y]原=1.100 111 100 010 x·y= -0. 100 111 100 010 原码一位乘:

部分积 乘数y*

0 . 0 0 0 0 0 0 . 1 0 1 1 1 0 —— +0 ?1 0 . 0 0 0 0 0 0 0 . 1 0 1 1 1 —— +x* + 0 . 1 1 0 1 1 1 0 . 1 1 0 1 1 1

?1 0 . 0 1 1 0 1 1 1 0 . 1 0 1 1 —— +x* + 0 . 1 1 0 1 1 1 1 . 0 1 0 0 1 0

?1 0 . 1 0 1 0 0 1 0 1 0 . 1 0 1 —— +x* + 0 . 1 1 0 1 1 1 1 . 1 0 0 0 0 0

?1 0 . 1 1 0 0 0 0 0 0 1 0 . 1 0 —— +0 ?1 0 . 0 1 1 0 0 0 0 0 0 1 0 . 1 —— x* + 0 . 1 1 0 1 1 1 1 . 0 0 1 1 1 1

?1 0 . 1 0 0 1 1 1 1 0 0 0 1 0 2x*=01.101110,[-x*]补=[-x]补=1.001001 原码两位乘:

部分积 乘数 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 1 0 ?2 0 0 0 . 0 1 1 0 1 1 1 0 0 0 .1 0 1 1 + 1 1 1 . 0 0 1 0 0 1 +[-x*]补

1 1 1 . 1 0 0 1 0 0 可编辑范本

Cj 0 1

.

?2 1 1 1 . 1 1 1 0 0 1 0 0 1 0 0 0 .1 0 + 1 1 1 . 0 0 1 0 0 1 +[-x*]补

1 1 1 . 0 0 0 0 1 0 1 ?2 1 1 1 . 1 1 0 0 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 . 0 0 0 0 0 0 1 . 0 1 0 0 1 0 0 —— +0 ?1 0 0 . 0 0 0 0 0 0 0 1 . 0 1 0 0 1 0 + 1 1 . 0 0 1 0 0 1 +[-x]补 1 1 . 0 0 1 0 0 1

?1 1 1 . 1 0 0 1 0 0 1 0 1 . 0 1 0 0 1 + 0 0 . 1 1 0 1 1 1 +[x]补 0 0 . 0 1 1 0 1 1

?1 0 0 . 0 0 1 1 0 1 1 1 0 1 . 0 1 0 0 —— +0 ?1 0 0 . 0 0 0 1 1 0 1 1 1 0 1 . 0 1 0 + 1 1 . 0 0 1 0 0 1 +[-x]补 1 1 . 0 0 1 1 1 1

?1 1 1 . 1 0 0 1 1 1 1 1 1 1 0 1 . 0 1 + 0 0 . 1 1 0 1 1 1 +[x]补 0 0 . 0 1 1 1 1 0

?1 0 0 . 0 0 1 1 1 1 0 1 1 1 1 0 1 . 0 + 1 1 . 0 0 1 0 0 1 +[-x]补 1 1 . 0 1 1 0 0 0 0 1 1 1 1 0 0 —— 清0 (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 [-2x*]补=1.010010

x0=1,y0=1,z0=x0 ? y0=1 ? 1=0 [x]补=1.101001, [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* + 0 . 0 1 0 1 1 1 0 . 0 1 0 1 1 1

?1 0 . 0 0 1 0 1 1 1 . 0 1 0 1 0 —— +0 ?1 0 . 0 0 0 1 0 1 1 1 . 0 1 0 1 —— +x* + 0 . 0 1 0 1 1 1 0 . 0 1 1 1 0 0

?1 0 . 0 0 1 1 1 0 0 1 1 . 0 1 0 —— +0 ?1 0 . 0 0 0 1 1 1 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 1 1 1 1 0 0 0 1 1 . 0 —— +0 ?1 0 . 0 0 0 1 1 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 0 ?2 0 0 0 . 0 0 0 1 0 1 1 1 0 0 .0 1 0 1 + 0 0 0 . 0 1 0 1 1 1 +x*

0 0 0 . 0 1 1 1 0 0 0 ?2 0 0 0 . 0 0 0 1 1 1 0 0 1 1 0 0 .0 1 + 0 0 0 . 0 1 0 1 1 1 +x*

0 0 0 . 0 1 1 1 1 0 0 ?2 0 0 0 . 0 0 0 1 1 1 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 +[-x]补 0 0 . 0 1 0 1 1 1

?1 0 0 . 0 0 1 0 1 1 1 1 . 1 0 1 0 1 1 —— +0 ?1 0 0 . 0 0 0 1 0 1 1 1 1 . 1 0 1 0 1 + 1 1 . 1 0 1 0 0 1 +[x]补 1 1 . 1 0 1 1 1 0

?1 1 1 . 1 1 0 1 1 1 0 1 1 1 . 1 0 1 0

+ 0 0 . 0 1 0 1 1 1 +[-x]补 0 0 . 0 0 1 1 1 0

?1 0 0 . 0 0 0 1 1 1 0 0 1 1 1 . 1 0 1

可编辑范本

.

+ 1 1 . 1 0 1 0 0 1 +[x]补 1 1 . 1 1 0 0 0 0

?1 1 1 . 1 1 1 0 0 0 0 0 0 1 1 1 . 1 0 + 0 0 . 0 1 0 1 1 1 +[-x]补 0 0 . 0 0 1 1 1 1

?1 0 0 . 0 0 0 1 1 1 1 0 0 0 1 1 1 . 1 —— +0 (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 [-2x*]补= [-2x]补= 1,011 010 x0=0,y0=0,z0=x0 ? y0=0 ? 0=0 x·y= x*×y*= [x×y]原= [x×y]补 = 0,001 010 011 001 = (665)10 运算过程如下: 原码一位乘:

部分积 乘数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 0,0 1 1 1 0 0

?1 0,0 0 1 1 1 0 0 1 1 0 0 0 —— +0 ?1 0,0 0 0 1 1 1 0 0 1 1 0 0 —— +0 ?1 0,0 0 0 0 1 1 1 0 0 1 1 0 —— +0 ?1 0,0 0 0 0 0 1 1 1 0 0 1 1 —— +x* + 0,0 1 0 0 1 1 0,0 1 0 1 0 0

?1 0,0 0 1 0 1 0 0 1 1 0 0 1 原码两位乘:

部分积 乘数y* 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 + 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,1 0 + 0 0 0,1 0 0 1 1 0 +2x*

0 0 0,1 0 1 0 0 1 可编辑范本

Cj 1 0 0

.

?2 0 0 0,0 0 1 0 1 0 0 1 1 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 +[-x]补 1 1,1 0 1 1 0 1

?1 1 1,1 1 0 1 1 0 1 0,1 0 0 0 1 1 —— +0 ?1 1 1,1 1 1 0 1 1 0 1 0,1 0 0 0 1 + 0 0,0 1 0 0 1 1 +[x]补 0 0,0 0 1 1 1 0

?1 0 0,0 0 0 1 1 1 0 0 1 0, 1 0 0 0 —— +0 ?1 0 0,0 0 0 0 1 1 1 0 0 1 0,1 0 0 —— +0 ?1 0 0,0 0 0 0 0 1 1 1 0 0 1 0,1 0

+ 1 1,1 0 1 1 0 1 +[-x]补 1 1,1 0 1 1 1 0

?1 1 1,1 1 0 1 1 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

注:整数乘此位要省。 (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*]补= [-2x]补= 10.010 10 x0=0,y0=1,z0=x0 ? y0=0 ? 1=1 x*×y*=0.110 000 111 1 [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 0 1 —— +x* + 0 . 1 1 0 1 1 0 . 1 1 0 1 1

?1 0 . 0 1 1 0 1 1 . 1 1 1 0 —— +0 ?1 0 . 0 0 1 1 0 1 1 . 1 1 1 —— +x* + 0 . 1 1 0 1 1 1 . 0 0 0 0 1

?1 0 . 1 0 0 0 0 1 1 1 . 1 1 —— +x* + 0 . 1 1 0 1 1 1 . 0 1 0 1 1

可编辑范本