(2) 部分积 乘数(y) 判断位 说明 ↑
yf. 01011 P0=0 +
→ 0 右移一位,得P1
+
→ 10 +
→ 110 + → 1110 +
→ 11110 y
由于 Pf=xf?yf=1?1=0 所以 x·y =
右移一位,得P2
右移一位,得P3
右移一位,得P4 f 右移一位,得P5=|x|·|y|
用补码一位乘法计算x×y=? (1) x=,y=- (2) x=-,y=- 解:(1)
[x]补=, [-x]补=, [y]补=
部分积 乘数 ynyn+1 说明
yn+1=0
所以 [x+ yn+1yn=01,加[-x]补
→ 0 右移一位,得P1
+ yn+1yn=10,加[x]补
→ 10 右移一位,得P2
+ yn+1yn=01,加[-x]补
→ 110 右移一位,得P3 + yn+1yn=11,加0
→ 1110 右移一位,得P4
+ yn+1yn=11,加0
→ 11110 右移一位,得P5 + yn+1yn=11,加0
11110 最后一步数据不移位
·y]补=
(2) [x]补=, [-x]补=, [y]补=
部分积 乘数 ynyn+1 说明
yn+1=0
+ yn+1yn=01,加[-x]补
→ 0 右移一位,得P1
+ yn+1yn=11,加0
所以 [x
→ 10 + y
→ 010 + y→ 0010 + y → 10010 +
→ 110010 + 110010
·y]补= 右移一位,得P2
n+1yn=10,加[x]补
右移一位,得P3 n+1yn=00,加0
右移一位,得P4
n+1yn=00,加0
右移一位,得P5
yn+1yn=01,加[-x]补
右移一位,得P6 yn+1yn=00,加0 最后一步数据不移位
用原码不恢复余数法和补码不恢复余数法计算x÷y =? (1) x=,y= (2) x=-,y=
解:(1)[y]补=,[-y]补=
源码不恢复余数法:
被除数/余数 商寄存器 上商位 说明
+[-y]补 (x-y)比较 0 r0<0,商上0 ← 0 左移一位
+1 余数为负,加y比较 1 r1>0,商上1 ← 左移一位
+[-y]补 余数为正,减y比较
1 1 r2>0,商上1 ← 左移一位
+[-y]补 余数为正,减y比较
0 0 r3<0,商上0 ← 左移一位
+ 余数为负,加y比较 1 1 r4>0,商上1,左移一位
即
← +[-y]补 余数为正,减y比较 r5<0,商上0,只移商
-101
[x]原÷[y]原=[Q]原=,余数[r]原=。
补码不恢复余数法: [y]补=,[-y]补=
被除数/余数 商 上商位 说明 +[-y]补 被除数与除数同号,减除数比较 0 余数r0与除数异号,商上0
← 0 左移一位,商从上商位移入商寄存器 +[y]衬 加除数比较
1 余数r1与除数同号,商上1 ← 左移一位 +[-y]补 减除数
1 余数r2与除数同号,商上1 ← 左移一位
+[-y]补 减除数比较
0 余r3与除数异号,商上0 ← 左移一位
+[y]衬 加除数比较
1 余r4与除数同号,商上1
← +[-y]补
故[x÷y]衬= ,余数[r]补=
因未除尽,商为正,因此商不需要校正。
商为正,余数与被除数异号,则应将余数加上除数进行修正才能获得正确的余数,为: (+)*=
左移一位 减除数比较
余r3与除数异号,商上0