原码一位乘法
- 乘积的符号由两个数的符号位异或而成。(不参与运算)
- 被乘数和乘数均取绝对值参与运算,看作无符号数。
- 乘数的最低位为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次