3.7用补码一位乘法计算x×y=? (1) x=0.10110,y=-0.00011 (2) x=-0.011010,y=-0.011101 解:(1)
[x]补=0.10110, [-x]补=1.01010, [y]补=1.11101
部分积 乘数 ynyn+1 说明 ??
00.00000 1.111010 yn+1=0
11.01010
11.11011
所以 +11.01010 yn+1yn=01,加[-x]补
→ 11.10101 0 1.11101 右移一位,得P1
+00.10110 yn+1yn=10,加[x]补
00.01011 →00.00101 10 1.1110 右移一位,得P2 +11.01010 yn+1yn=01,加[-x]补
11.01111
→11.10111 110 1.111 右移一位,得P3 +00.00000 yn+1yn=11,加0
11.10111 →11.11011 1110 1.11 右移一位,得P4
+00.00000 yn+1yn=11,加0
→11.11101 11110 1.1 右移一位,得P5 +00.00000 yn+1yn=11,加0
11.11101 11110 最后一步数据不移位
[x·y]补=1.1110111110
(2) [x]补=1.100110, [-x]补=0.011010, [y]补=1.100011
部分积 乘数 ynyn+1 说明 ??
00.000000 1.1000110 yn+1=0
+00.011010 yn+1yn=01,加[-x]补
00.011010
→00.001101 0 1.100011 右移一位,得P1
+00.000000 yn+1yn=11,加0
11.110110 11.111011
所以
00.001101
→00.000110 10 1.10001 右移一位,得P2 +11.100110 yn+1yn=10,加[x]补
11.101100
→11.110110 010 1.1000 右移一位,得P3 +00.000000 yn+1yn=00,加0
→11.111011 0010 1.100 右移一位,得P4
+00.000000 yn+1yn=00,加0 →11.111101 10010 1.10 右移一位,得P5
+00.011010 yn+1yn=01,加[-x]补
00.010111 →00.001011 110010 1.1 右移一位,得P6 +00.000000 yn+1yn=00,加0 00.001011 110010 最后一步数据不移位
[x·y]补=0.001011110010
3.8用原码不恢复余数法和补码不恢复余数法计算x÷y =? (1) x=0.10101,y=0.11011 (2) x=-0.10101,y=0.11011
解:(1)[y]补=0.11011,[-y]补=1.00101
源码不恢复余数法:
被除数/余数 商寄存器 上商位 说明
00.10101 +[-y]补 11.00101 (x-y)比较 11.11010 0 r0<0,商上0 ← 11.10100 0 左移一位
+1 余数为负,加y比较 00.11011 00.01111 1 r1>0,商上1 ← 00.11110 0.1 左移一位
+[-y]补 11.00101 余数为正,减y比较
1 00.00011 1 r2>0,商上1 ← 00.00110 0.11 左移一位
+[-y]补 11.00101 余数为正,减y比较
0 11.01011 0 r3<0,商上0 ← 11.10110 0.110 左移一位
+ 00.11011 余数为负,加y比较 1 00.00001 0.1101 1 r4>0,商上1,左移一位
即
← 00.00010 +[-y]补 11.00101 11.00111 0.11010
余数为正,减y比较 r5<0,商上0,只移商
-101
[x]原÷[y]原=[Q]原=0.11010,余数[r]原=1.00111。
补码不恢复余数法:
[y]补=0.11011,[-y]补=1.00101
被除数/余数 商 上商位 说明 00.10101 +[-y]补 11.00101 被除数与除数同号,减除数比较 11.11010 0 余数r0与除数异号,商上0
← 11.10100 0 左移一位,商从上商位移入商寄存器 +[y]衬 00.11011 加除数比较
00.01111 1 余数r1与除数同号,商上1 ← 00.11110 0.1 左移一位 +[-y]补 11.00101 减除数
00.00011 1 余数r2与除数同号,商上1 ← 00.00110 0.11 左移一位 +[-y]补 11.00101 减除数比较
11.01011 0 余r3与除数异号,商上0 ← 11.10110 0.110 左移一位 +[y]衬 00.11011 加除数比较
00.10001 1 余r4与除数同号,商上1
← 11.10110 0.1101 +[-y]补 11.00101 11.11011 0.11010
故[x÷y]衬= 0.11010,余数[r]补=1.0000011011 因未除尽,商为正,因此商不需要校正。
商为正,余数与被除数异号,则应将余数加上除数进行修正才能获得正确的余数,为: (1.11011+0.11011)*0.00001=0.0000010110
左移一位 减除数比较
余r3与除数异号,商上0
(2)[y]补=0.11011,[-y]补=1.00101 源码不恢复余数法:
被除数/余数 商寄存器 上商位 说明 00.10101 +[-y]补 11.00101 (x-y)比较 11.11010 0 r0<0,商上0
← 11.10100 0 左移一位
+ 00.11011 余数为负,加y比较 00.01111 1 r1>0,商上1 ← 00.11110 0.1 左移一位
+[-y]补 11.00101 余数为正,减y比较
1 00.00011 1 r2>0,商上1 ← 00.00110 0.11 左移一位
+[-y]补 11.00101 余数为正,减y比较
0 11.01011 0 r3<0,商上0 ← 11.10110 0.110 左移一位
+ 00.11011 余数为负,加y比较 1 00.00001 0.1101 1 r4>0,商上1,左移一位
即
← 00.00010 +[-y]补 11.00101 11.00111 0.11010
余数为正,减y比较 r5<0,商上0,只移商
-101
[x]原÷[y]原=[Q]原=-0.11010,余数[r]原=1.00111。