3.4 补码一位乘法
一、补码一位乘法
设[X]补=X0X1X2…Xn,[Y]补=Y0Y1Y2…Yn
可以证明: (证明以后补QAQ)
[X∗Y]补=[X]补∗(0.Y1Y2…Yn)−Y0∗[X]补
展开合并后有:
[X∗Y]补=[X]补∗∑(Yn+1−Yn)∗2−n (对补码乘法来说,符号位参加运算,这区别于原码一位乘法)
看求和中的括号部分,也就是说我们到底是加上X补还是减又或者是0,就看相邻两位的差值;
因为乘数寄存器每一次操作也会右移(将相邻的两位变为倒数第一位和倒数第二位),这样也就是看倒数第二位的值于倒数第一位的差值。
也就是说:
在遵循原码乘法的规则上,对部分积的加减做处理
1、Yn=Yn+1 ,那么部分积加上零(0∗[X]补当然是零啦),再右移一位
2、Yn<Yn+1(01),部分积加上[x]补,再右移一位
3、Yn>Yn+1(10),部分积加上[−x]补,再右移一位
可以发现,补码乘法涉及对0、[x]补、[−x]补三个数的运算
注意事项:
1、对于第一次运算i=n时,Yn+1=0
2、由于会有Yn+1,所以在乘数寄存器Y后需要增加一位
3、每次计算乘数寄存器和部分积均右移(在乘数寄存器中是逻辑右移,而在部分积中是算术右移, 注意区分算术右移和逻辑右移的区别)
例如:
图中的部分积使用双符号位表示,部分积的结果会移动到乘数寄存器中;
学长加油!!!!!!!!!!!!
谢学弟❤️
高产啊大佬😻
东西好多,被迫高产QAQ
皮特佬牛逼
谢谢蓬蒿人❤️