原碼一位乘法
- 乘積的符號由兩個數的符號位異或而成。(不參與運算)
- 被乘數和乘數均取絕對值參與運算,看作無符號數。
- 乘數的最低位為Yn:
- 若Yn=1,則部分積加上被乘數|x|,然后邏輯右移一位;
- 若Yn=0,則部分積加上0,然后邏輯右移一位;
補碼一位乘法(Booth算法)
- 符號位參與運算,且運算中的數均以補碼表示。
- 被乘數取雙符號位,乘數取單符號位。
- 乘數末位增設附加位,初值為0。
- 根據最低位和次低位的取值來確定操作,其中右移為算術右移。
最低位 | 次低位 | 操作 |
---|---|---|
0 | 0 | 部分積+0,右移一位 |
0 | 1 | 部分積+[X]補,右移一位 |
1 | 0 | 部分積+[-X]補,右移一位 |
1 | 1 | 部分積+0,右移一位 |
原碼除法運算(不恢復余數法)
- 商的符號由兩個數的符號位異或而成。(不參與運算)
- 先用被除數減去除數:
- 當余數為正時,商上1,余數和商左移1位,再減去除數;
- 當余數為負時,商上0,余數和商左移1位,再加上余數。(撤銷操作)
- 當等第n+1步(機器字長為n+1)余數為負時,需加上|y|得到正確的余數。
余正商1左移減除,余負商0左移加除
注:最后一步要把商上完
補碼除法運算(加減交替法)
- 符號位參與運算,除數,被除數,商和余數都是用補碼表示。(雙符號位)
- 被除數與除數同號,則被除數-除數;
- 被除數與除數異號,則被除數+除數;
- 若余數與除數同號,則商上1,余數和商左移1位,減去除數;
- 若余數與除數異號,則商上0,余數和商左移1位,加上除數;
- 重復執行上兩步操作n次(機器字長為n+1)
被除除同號相減,異號相加
余、除同號商1左移減除,異號商0左移加除
小結
機器字長為n+1時
- 原碼乘法:加減n次,移位n次
- 補碼乘法:加減n+1次,移位n次
- 原碼除法:加減n+1/n+2次,移位n次
- 補碼除法:加減n+1次,移位n次