主题:原码一位乘法的问题
sonata
[专家分:110] 发布于 2006-04-10 10:46:00
原码一位乘法中乘数在右移后,为什么在空位补“1”,而不是空位补“0”?
回复列表 (共3个回复)
沙发
sonata [专家分:110] 发布于 2006-04-11 08:10:00
怎么没人理我,高手都去哪了?
静候解惑之人。
板凳
禾易 [专家分:40] 发布于 2006-04-13 14:23:00
例:0.1101*0.1011
初始条件部份积为0.0000,看乘数的末位是“1”,故部份积0.0000加上被乘数0.1101为0.1101,右移1位(同时乘数也右移1位)得新的部份积0.0110,其末位的1移到了乘数空出的高位,此时乘数的末位又是“1”,则加上新的部份积,以后以此类推。总之,乘数的末位为“1”,则加上新的部份积,为“0”则不加新的部份积。
我用的教材是高等教育出版的《计算机组成原理》(唐朔飞 主编),这个例题在本书的P244页。请详细看书上解说。
3 楼
xabcxyz [专家分:940] 发布于 2006-04-15 12:44:00
首先我没有搞懂你问什么,只好把原码一位乘法作一详细介绍:
其实质是模仿手工乘法过程,例如手工计算二进制3*5过程为:
0011
× 0101
-------------- 被乘数 乘数自低位到高位
0011 0011 * 1
0000 0011 * 0
0011 0011 * 1
+ 0000 0011 * 0
--------------- 四个加数属于乘积的一部分,故称为"部分积"
0001111 最终得到"积"
由于计算机运算过程中运算器每次只能对一对数据进行算数逻辑运算,所以将部分积求和得到"积"的过程分解成四次加运算:
00000000 最初的部分积累加数,还没有开始累加,为0
+ 0011 0011 * 1
----------------
00000011 一次位乘后的部分积累加和
+ 0000 0011 * 0
----------------
00000011 二次位乘后的部分积累加和
+ 0011 0011 * 1
----------------
00001111 三次位乘后的部分积累加和
+ 0000 0011 * 0
----------------
00001111 四次位乘后的部分积累加和
因为计算机在部分积累加过程中实现位对齐比较复杂,仔细分析累加后,发现每作一次乘法累加,得到一位最终乘积,而乘数的一位作废不再使用.将左移部分积改为右移操作是的加法器直接对起,将一位原码乘法过程改变为:
部分积 乘数 作废的乘数 注释
0000|0101 | 初始化乘法算法
+ 0011|0101 | 加入 0011 * 1
-----------|-------|---------
0011|0101 | 得到第一次部分积累加和
00011|010 | 1 将部分积右移一位对起加法器
+ 0000 |010 | 1 加入 0011 * 0
----------- |------|---------
00011|010 | 1 得到第二次部分积累加和
000011|01 | 01 将部分积右移一位对起加法器
+ 0011 |01 | 01 加入 0011 * 1
----------- |-----|---------
001111|01 | 01 得到第三次部分积累加和
0001111|0 | 101 将部分积右移一位对起加法器
+ 0000 |01 | 101 加入 0011 * 0
----------- |----|---------
0001111|0 | 101 得到第四次部分积累加和
00001111| | 0101 将部分积右移一位对起加法器
最后结果
00001111 (十进值15)
一位原码乘法算法完.
我来回复