定点运算——乘法
分析笔算乘法
- 对于定点数的乘法,分为两部分
- 将乘数和被乘数的符号位提出,单独进行异或运算
- 将将乘数和被乘数的数值部分取绝对值们,进行移位加法运算
- 通过下述对笔算的分析,得到对于二进制的乘法数值部分而言,只有两种运算过程
- 乘数对应的位数为0,不加被乘数
- 乘数对应的位数为1,那就进行相应的移位之后,加上对应的被乘数
- 得到最终对应的结果
为了减少运算的过程,对其进行如下化简
- 在原来的乘法中,乘数的各个数位不变,然后由乘数的位数逐次往前推进,然后将被乘数进行相应的移位运算,再与结果进行累加。
- 改进,为了不移动被乘数,我们移动乘数,每一次只要根据乘数的最后一位进行判定就行了。同时移动每一次的部分积,做到位数与位数相关。
看不懂,就看图 - 图示
- 最低位是1,将被乘数加到部分积中。
- 将乘数中已经判定过的1,移除,丢弃已经没用。乘数整体右移,这样乘数最左边就多出来一个数位。除此之外,将部分积整体右移,左边拿0补,右边移出的数不能丢保存到乘数寄存器的第一位。
- 以乘数新的最后一位进行判定,然后与部分积进行相加
- 再次进行移位操作,将乘数的最后一位右移删除,空出的最高位由部分积的移出的最低位补充
- 乘数的最后一位是0,不用再加上被乘数,所以结果直接为部分寄存器中的值
- 注意:这里虽然加上的是0,但是在实际操作中,是没有这一步的,但是控制移位是必修要进行的
- 将乘数最后一位进行判定,加上被乘数
- 进行移位运算,最终结果是部分积寄存器中的高位和乘数寄存器中的低位组合,就是最终的结果
总结
- 通过分析发现,乘数有n位,就会进行n次判定和移位运算,判定的截至条件是乘数寄存器中的所有位数都被移出,最终里面全是结果的低位部分
- 遇到0可以不想加,但是一定要进行移位运算,即最终是以移位的次数来决定最后的运算流程
- 被乘数仅仅是与部分积的高位相加,低位全部被转移到加数寄存器
- 上述流程总共用到了三个寄存器和一个加法器。加法器是核心,用来提供被加数和部分积的加法运算。两个寄存器具有移位运算功能,分别用来保存加数和部分积;一个是普通寄存器,用来保存被加数。
硬件配置
- A为移位寄存器,用来保存部分积
- Q为移位寄存器,用来保存乘数和部分积的低位部分
- X为通用寄存器,用来保存被加数
- C为计数器,用来控制整个乘法的运行步骤和循环次数
原码乘法运算
运算规则
递推公式
举例
特点
- 绝对值运算
- 用移位的次数判定乘法是否结束
- 逻辑移位,注意在乘数运算中是逻辑运算,全体移位,因为已经移位完了。