计算机组成原理唐朔飞第6章部分答案下.docx
《计算机组成原理唐朔飞第6章部分答案下.docx》由会员分享,可在线阅读,更多相关《计算机组成原理唐朔飞第6章部分答案下.docx(17页珍藏版)》请在冰豆网上搜索。
计算机组成原理唐朔飞第6章部分答案下
第六章计算机的运算方法
6.20用原码一位乘、两位乘和补码一位乘(Booth算法)、两位乘计算x·y。
(1)x=0.110111,y=-0.101110;
(2)x=-0.010111,y=-0.010101;
(3)x=19,y=35;
(4)x=0.11011,y=-0.11101。
答:
(1)
原码一位乘:
[x]原=0.110111,[y]原=1.101110,x*=0.110111,y*=0.101110
部分积
乘数y*
说明
0.000000
+0.000000
101110
部分积初值为0,
乘数为0加0
0.000000
0.000000
+0.110111
010111
右移一位,乘数同时移一位
乘数为1,加上x*
0.110111
0.011011
+0.110111
0
101011
右移一位,乘数同时移一位
乘数为1,加上x*
1.010010
0.101001
+0.110111
10
010101
右移一位,乘数同时移一位
乘数为1,加上x*
1.100000
0.110000
+0.000000
010
001010
右移一位,乘数同时移一位
乘数为0,加上0
0.110000
0.011000
+0.110111
0010
000101
右移一位,乘数同时移一位
乘数为1,加上x*
1.001111
0.100111
10010
100010
右移一位,乘数同时移一位
即x*×y*=0.100111100010,
z0=x0y0=01=1,
[x×y]原=1.100111100010,x·y=-0.100111100010
原码两位乘:
[-x*]补=1.001001,2x*=1.101110
部分积
乘数y*
Cj
说明
000.000000
+001.101110
00101110
0
部分积初值为0,Cj=0
根据yn-1ynCj=100,加2x*,保持Cj=0
001.101110
000.011011
+111.001001
10001011
0
右移2位,乘数同时右移2位
根据yn-1ynCj=110,加[-x*]补,置Cj=1
111.100100
111.111001
+111.001001
10
00100010
1
右移2位,乘数同时右移2位
根据yn-1ynCj=101,加[-x*]补,置Cj=1
111.000010
111.110000
+000.110111
0010
10001000
1
右移2位,乘数同时右移2位
根据yn-1ynCj=001,加x*,保持Cj=0
000.100111
100010
即x*×y*=0.100111100010,z0=x0y0=01=1,
[x×y]原=1.100111100010,x·y=-0.100111100010
补码一位乘:
[x]补=0.110111,[-x]补=1.001001,[y]补=1.010010
部分积
乘数
Yn+1
说明
00.000000
+00.000000
1010010
0
初值为0,
Ynyn+1=00,部分积不变
00.000000
00.000000
+11.001001
0101001
0
右移1位
Ynyn+1=10,部分积加[-x]补
11.001001
11.100100
+00.110111
1010100
1
右移1位
Ynyn+1=01,部分积加[x]补
00.011011
00.001101
00.000110
+11.001001
1101010
1110101
0
0
右移1位
Ynyn+1=00,部分积右移1位
Ynyn+1=10,部分积加[-x]补
11.001111
11.100111
+00.110111
1111010
1
右移1位
Ynyn+1=01,部分积加[x]补
00.011110
00.001111
+11.001001
0111101
0
右移1位
Ynyn+1=10,部分积加[-x]补
11.011000
011110
即[x×y]补=1.011000011110,x·y=-0.100111100010
补码两位乘:
2[x]补=01.101110,2[-x]补=10.010010
部分积
乘数
说明
000.000000
+110.010010
110100100
判断位为100,加2[-x]补
110.010010
111.100100
+000.110111
101101001
右移2位
判断位为001,加[x]补
111.011011
111.110110
+000.110111
10
111011010
右移2位
判断位为010,加[x]补
111.101101
111.111011
+111.001001
1110
011110110
右移2位
判断位为110,加[-x]补
111.000100
011110
[x×y]补=1.011000011110,x·y=-0.100111100010
(2)
原码一位乘:
[x]原=1.010111,[y]原=1.010101,x*=0.010111,y*=0.010101
部分积
乘数y*
说明
0.000000
+0.010101
010101
部分积初值为0,
乘数为1加被乘数
0.010101
0.001010
+0.010111
101010
右移一位,乘数同时移一位
乘数为1,加上x*
0.100001
0.010000
+0.010111
1
110101
右移一位,乘数同时移一位
乘数为1,加上x*
0.100111
0.010011
+0.000000
11
111010
右移一位,乘数同时移一位
乘数为0,加上0
0.010011
0.001001
+0.010101
111
111101
右移一位,乘数同时移一位
乘数为1,加上x*
0.011110
0.001111
+0.000000
1111
011110
右移一位,乘数同时移一位
乘数为0,加上0
0.001111
0.000111
01111
101111
右移一位,乘数同时移一位
即x*×y*=0.000111101111,
z0=x0y0=11=0,
[x×y]原=0.000111101111,x·y=0.000111101111
原码两位乘:
[-x*]补=1.101001,2x*=0.101110
部分积
乘数y*
Cj
说明
000.000000
+000.010101
00010101
0
部分积初值为0,Cj=0
根据yn-1ynCj=010,加x*,保持Cj=0
000.010101
000.000101
+000.010101
01000101
0
右移2位,乘数同时右移2位
根据yn-1ynCj=010,加x*,保持Cj=0
000.011010
000.001110
+000.010101
01
01010001
0
右移2位,乘数同时右移2位
根据yn-1ynCj=010,加x*,保持Cj=0
000.100011
000.001100
+000.000000
0101
11010100
0
右移2位,乘数同时右移2位
根据yn-1ynCj=001,加0,保持Cj=0
000.001100
000.000011
110101
即x*×y*=0.000011110101,z0=x0y0=11=0,
[x×y]原=0.000011110101,x·y=0.000011110101
补码一位乘:
[x]补=1.101001,[-x]补=0.010111,[y]补=1.101011
部分积
乘数
Yn+1
说明
00.000000
+00.010111
1101011
0
初值为0,
Ynyn+1=10,部分积加[-x]补
00.010111
00.001011
00.000101
+11.101001
1110101
1111010
1
1
右移1位
Ynyn+1=11,部分积右移一位
Ynyn+1=01,部分积加[x]补
11.101110
11.110111
+00.010111
11
0111101
0
右移1位
Ynyn+1=10,部分积加[-x]补
00.001110
00.000111
+11.101001
011
0011110
1
右移1位
Ynyn+1=01,部分积加[x]补
11.110000
11.111000
+00.010111
0011
0001111
0
右移1位
Ynyn+1=10,部分积加[-x]补
00.001111
00.000111
1000111
1
右移1位
Ynyn+1=11,部分积不变
00.000111
100011
即[x×y]补=0.000111100011,x·y=0.000111100011
补码两位乘:
2[x]补=11.010010,2[-x]补=0.101110
部分积
乘数
说明
000.000000
+000.010111
11.1010110
判断位为110,加[-x]补
000.010111
000.000101
+000.010111
111110101
右移2位
判断位为101,加[-x]补
000.011100
000.000111
+000.010111
11
001111101
右移2位
判断位为101,加[-x]补
000.011110
000.000111
0011
100011111
右移2位
判断位为111,不变
000.000111
100011
[x×y]补=0.000111100011,x·y=0.000111100011
(3)原码一位乘
[x]原=0,010011[y]原=0,100011
部分积
乘数
说明
0,000000
+0,010011
100011
初始条件,部分积为0
乘数为1,加被乘数
0,010011
0,001001
+0,010011
110001
右移1位
乘数为1,加被乘数
0,011100
0,001110
+0,000000
1
011000
右移1位
乘数为0,加上0
0,001110
0,000111
+0,000000
01
001100
右移1位
乘数为0,加上0
0,000111
0,000011
+0,000000
001
100110
右移1位
乘数为0,加上0
0,000011
0,000001
+0,010011
1001
110011
右移1位
乘数为1,加上被乘数
0,010100
0,001010
11001
011001
右移1为,形成最终结果
[x·y]原=0,001010011001
原码二位乘
[x]原=0,010011[y]原=0,1000112x*=0,100110[-x*]补=1,101101
部分积
乘数
Cj
说明
000,000000
+111,101101
00100011
0
开始,部分积为0,Cj=0
根据110,减x*,Cj置1
111,101101
111,111011
+000,010011
01001000
1
右移2位
根据001,加x*,Cj置0
000,001110
000,000011
+000,100110
01
10010010
0
右移2位
根据100,加2x*,Cj保持0
000,101001
000,001010
+000,000000
1001
01100100
0
右移2位
根据000,Cj保持0
000,001010
011001
形成最终结果
[x·y]原=0,001010011001
补码一位乘
[x]补=0,010011[y]补=0,100011[-x]补=1,101101
部分积
乘数
附加位
说明
00,000000
+11,101101
0100011
0
10,部分积加[-x]补
11,101101
11,110110
11,111011
+00,010011
1010001
0101000
1
1
右移1位
11右移1位
01,部分积加[x]补
00,001110
00,000111
00,000011
00,000001
+11,101101
01
0010100
1001010
1100101
0
0
0
右移1位
00右移1位
00右移1位
10,部分积加[-x]补
11,101110
11,110111
+00,010011
11001
0110010
1
右移1位
01,部分积加[x]补
00,001010
011001
[x·y]原=0,001010011001
补码两位乘
[x]补=0,010011[y]补=0,100011[-x]补=1,1011012[x]补=0,100110
部分积
乘数
说明
000,000000
+000,100110
000100011
011,+2[x]补
000,100110
000,001001
+000,000000
100001000
000,加0
000,001001
000,000010
+000,010011
10
011000010
010,+[x]补
000,010101
000,000101
+000,000000
0110
010110000
000,加0
000,001010
011001
[x·y]原=0,001010011001
(4)原码一位乘
[x]原=0.11011[y]原=1.11101
部分积
乘数
说明
0.00000
+0.11011
11101
初始条件,部分积为0
乘数为1,加被乘数
0.11011
0.01101
+0.00000
11110
右移1位
乘数为0,加0
0.01101
0.00110
+0.11011
1
11111
右移1位
乘数位1,加被乘数
1.00001
0.10000
+0.11011
11
11111
右移1位
乘数位1,加被乘数
1.01011
0.10101
+0.11011
111
11111
右移1位
乘数位1,加被乘数
1.10000
0.11000
1111
01111
右移1位,形成最终结果
[x·y]原=1.1100001111
原码两位乘
[x]原=0.110110[y]原=1.1110102x*=1.101100[-x*]补=1.001010
部分积
乘数
Cj
说明
000.000000
+111.101100
00111010
0
开始,部分积为0,Cj=0
根据100,加2x*,Cj保持0
111.101100
111.111011
+111.101100
00001110
0
右移2位
根据100,加2x*,Cj保持0
111.100111
111.111001
+111.001010
00
11000011
0
右移2位
根据110,减x*,Cj置1
111.000011
111.110000
+000.110110
1100
11110000
1
右移2位
根据001,加x*,Cj置0
000.100110
111100
[x·y]原=1.1100001111
补码一位乘
[x]原=0.11011[y]原=1.111012x*=1.10110[-x]补=1.00101
部分积
乘数
附加位
说明
00.00000
+11.00101
100011
0
10,加[-x]补
11.00101
11.10010
11.11001
+00.11011
110001
011000
1
1
01,加[x]补
00.10100
00.01010
00.00101
00.00010
+11.00101
01
001100
000110
100011
0
0
0
10,加[-x]补
11.00111
10001
[x·y]原=1.1100001111
补码两位乘
[x]补=0.11011[y]补=1.00011[-x]补=1.001012[-x]补=0.01010
部分积
乘数
说明
000.00000
+111.00101
11000110
110,加[-x]补
111.00101
111.11001
+000.11011
01110001
001,加[x]补
000.10100
000.00101
+000.01010
01
00011100
100,加2[-x]补
000.01111
000.00011
+000.00000
0001
11000111
111,加0
000.00011
110001
[x·y]原=1.1100001111
6.22设机器字长为16位(含1位符号位),若一次移位需1us,一次加法需1us,试问原码一位乘、补码一位乘、原码加减交替除和补码加减交替法最多各需多少时间?
答:
原码一位乘:
15+15=30us
补码一位乘:
15+16=31us
原码加减交替除:
15+16=31us
补码加减交替法:
15+15=30us
6.26按机器补码浮点运算步骤,计算[x±y]补.
(1)x=2-011×0.101100,y=2-010×(-0.011100);
(2)x=2-011×(-0.100010),y=2-010×(-0.011111);
(3)x=2101×(-0.100101),y=2100×(-0.001111)。
答:
(1)[x]补=11,101;00.101100,[y]补=11,110;11.100100
[Ex]补=11,101,[y]补=11,110,[Mx]补=00.101100,[My]补=11.100100
1)对阶:
[E]补=[Ex]补+[-Ey]补=11,101+00,010=11,111<0,
应Ex向Ey对齐,则:
[x]补=11,110;00.010110
2)求和:
[Mx]补+[My]补=00.010110+11.100100=11.111010
[Mx]补+[-My]补=00.010110+00.011100=00.110010
3)结果规格化:
[x+y]补=11,110;11.111010=11,011;11.010000(尾数左规3次,阶码减3)
[x-y]补=11,110;00.110010,已是规格化数。
4)舍入:
无
5)溢出:
无
则:
x+y=2-101×(-0.110000)
x-y=2-010×0.110010
(2)[x]补=11,101;11.011110,[y]补=11,110;11.100001
[Ex]补=11,101,[y]补=11,110,[Mx]补=11.011110,[My]补=11.100001
1)对阶:
[E]补=[Ex]补+[-Ey]补=11,101+00,010=11,111<0,
应Ex向Ey对齐,则:
[x]补=11,110;11.101111
2)求和:
[Mx]补+[My]补=11.101111+11.100001=11.010000
[Mx]补+[-My]补=11.101111+00.011111=00.001110
3)结果规格化:
[x+y]补=11,110;11.010000已是规格化数
[x-y]补=11,100;00.111000,(尾数左规2次,阶码减2)。
4)舍入:
无
5)溢出:
无
则:
x+y=2-010×(-0.010000)
x-y=2-100×0.111000
(3)[x]补=00,101;11.100101,[y]补=00,100;11.110001
[Ex]补=00,101,[y]补=00,100,[Mx]补=11.100101,[My]补=11.110001
1)对阶:
[E]补=[Ex]补+[-Ey]补=00,101+11,100=00,001>0,
应Ey向Ex对齐,则:
[y]补=00,101;11.111000
2)求和:
[Mx]补+[My]补=11.100101+11.111000=11.011101
[Mx]补+[-My]补=11.100101+00.001000=11.101101
3)结果规格化:
[x+y]补=00,101;11.011101已是规格化数
[x-y]补=00,100;11.