迪斯廷凯官方旗舰店:原码乘法----位乘
来源:百度文库 编辑:九乡新闻网 时间:2024/05/22 01:05:47
好多同学在学习计算机组成原理时在原码乘法时感觉很吃力,下面我介绍一种思路,故事是这样的,有些漫长,但也需要些耐心:
其实质是模仿手工乘法过程,例如手工计算二进制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 | 1. 加入 0011 * 1
-----------|-------|---------
0011|0101 | 得到第一次部分积累加和
00011|010 | 1 将部分积右移一位对起加法器
+ 0000 |010 | 1 2. 加入 0011 * 0
----------- |------|---------
00011|010 | 1 得到第二次部分积累加和
000011|01 | 01 将部分积右移一位对起加法器
+ 0011 |01 | 01 3. 加入 0011 * 1
----------- |-----|---------
001111|01 | 01 得到第三次部分积累加和
0001111|0 | 101 将部分积右移一位对起加法器
+ 0000 |01 | 101 4. 加入 0011 * 0
----------- |----|---------
0001111|0 | 101 得到第四次部分积累加和
00001111| | 0101 将部分积右移一位对起加法器
最后结果
00001111 (十进值15)
实际上就本例而言,在做原码一位乘时已经知道了结果有8位,而且将手工乘时的乘数左移,改为部分积右移,再加乘数,实质上与手工乘完全一样,只不过,这个算法方便计算机去运算而已。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/loverszhaokai/archive/2010/10/01/5917562.aspx
其实质是模仿手工乘法过程,例如手工计算二进制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 | 1. 加入 0011 * 1
-----------|-------|---------
0011|0101 | 得到第一次部分积累加和
00011|010 | 1 将部分积右移一位对起加法器
+ 0000 |010 | 1 2. 加入 0011 * 0
----------- |------|---------
00011|010 | 1 得到第二次部分积累加和
000011|01 | 01 将部分积右移一位对起加法器
+ 0011 |01 | 01 3. 加入 0011 * 1
----------- |-----|---------
001111|01 | 01 得到第三次部分积累加和
0001111|0 | 101 将部分积右移一位对起加法器
+ 0000 |01 | 101 4. 加入 0011 * 0
----------- |----|---------
0001111|0 | 101 得到第四次部分积累加和
00001111| | 0101 将部分积右移一位对起加法器
最后结果
00001111 (十进值15)
实际上就本例而言,在做原码一位乘时已经知道了结果有8位,而且将手工乘时的乘数左移,改为部分积右移,再加乘数,实质上与手工乘完全一样,只不过,这个算法方便计算机去运算而已。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/loverszhaokai/archive/2010/10/01/5917562.aspx