3.3 定点乘法运算
乘法运算是计算机中常用的运算,过去的计算机中,没有专门的乘法器。乘法运算要靠软件编程来实现。但现在随着LSI和VLSI应用的普及以及价格的下降,乘法运算已做成了标准部件—乘法器。一般来讲,做乘除法运算,用原码比用补码简单,但有的机器,数据是用补码表示的,为避免码制间的频繁转换,乘除也用补码来做。
一、原码乘法
1.原码一位乘
用原码运算,数据的符号不能同数值位一同参加运算,而需单独处理,两原码表示的数相乘,其结果的符号是两数符号的异或。
规则:
初始部分积设全0,从乘数末位乘起。
乘数位为1,部分积加被乘数,结果右移1位
乘数位为0,部分积加全0,结果右移1位;
重复上述操作,直到乘数位全部乘完为止。
2. 原码二位乘
一、原码乘法
1.原码一位乘
用原码运算,数据的符号不能同数值位一同参加运算,而需单独处理,两原码表示的数相乘,其结果的符号是两数符号的异或。
规则:
初始部分积设全0,从乘数末位乘起。
乘数位为1,部分积加被乘数,结果右移1位
乘数位为0,部分积加全0,结果右移1位;
重复上述操作,直到乘数位全部乘完为止。
2. 原码二位乘
在原码一位乘中,是一位一拍来运算的,两个n位数相乘,需进行n次加法,n位移位。要提高乘法速度,能否进行二位一乘?回答是肯定的。
原码二位乘规则:
yn-1ynCj
0 0 0 ;+全0,部分积右移两位,Cj =0
0 0 1 ;+x, 部分积右移两位,Cj =0
0 1 0 ;+x, 部分积右移两位,Cj =0
0 1 1 ;+2x, 部分积右移两位,Cj =0
1 0 0 ;+2x, 部分积右移两位,Cj =0
1 0 1 ;-x, 部分积右移两位,Cj =1
1 1 0 ; -x, 部分积右移两位,Cj =1
1 1 1 ;+全0, 部分积右移两位,Cj =1
原码二位乘规则:
yn-1ynCj
0 0 0 ;+全0,部分积右移两位,Cj =0
0 0 1 ;+x, 部分积右移两位,Cj =0
0 1 0 ;+x, 部分积右移两位,Cj =0
0 1 1 ;+2x, 部分积右移两位,Cj =0
1 0 0 ;+2x, 部分积右移两位,Cj =0
1 0 1 ;-x, 部分积右移两位,Cj =1
1 1 0 ; -x, 部分积右移两位,Cj =1
1 1 1 ;+全0, 部分积右移两位,Cj =1
二、补码乘法
1.补码一位乘
用补码做加减运算很方便,做乘法(包括除法)却是原码很方便,既然这样为何又有补码
1.补码一位乘
用补码做加减运算很方便,做乘法(包括除法)却是原码很方便,既然这样为何又有补码
乘法呢?主要为了避免频繁的码制转换。
⑴ 相乘时,被乘数取双符号位,乘数取单符号位并参加运算。
⑵ 乘法开始前,部分积置全0,乘数末位增加附加位yn+1=0。
⑶ 比较yi 和yi+1,决定如何运算
booth算法乘法例题讲解2.补码两位乘
补码两位乘时把一位乘中的两步合成一步来做。
⑴ 比较yn,yn+1,按Booth算法操作
⑵ 比较yn-1,yn,按Booth算法操作
以上两步合为一步操作(P121表)
注意:
1、被乘数取三位符号位
2、乘数数值部分为奇数,取一位符号位,最后一步只移一位;乘数数值部分为偶数,取二位符号位,最后一步不移位;(满足二位一移)
3、得积2n+1位,含1位符号位。
⑴ 相乘时,被乘数取双符号位,乘数取单符号位并参加运算。
⑵ 乘法开始前,部分积置全0,乘数末位增加附加位yn+1=0。
⑶ 比较yi 和yi+1,决定如何运算
booth算法乘法例题讲解2.补码两位乘
补码两位乘时把一位乘中的两步合成一步来做。
⑴ 比较yn,yn+1,按Booth算法操作
⑵ 比较yn-1,yn,按Booth算法操作
以上两步合为一步操作(P121表)
注意:
1、被乘数取三位符号位
2、乘数数值部分为奇数,取一位符号位,最后一步只移一位;乘数数值部分为偶数,取二位符号位,最后一步不移位;(满足二位一移)
3、得积2n+1位,含1位符号位。
第四节 定点乘法/除法运算
熟悉原码乘法补码乘法的原理和运算过程,了解提高运算的速度所采用其它算法的原理;在除法运算中,掌握原码不恢复余数除法等实现过程和原理.了解其他运算的规则以及在计算机系统中的应用.
可以这样认为,在具有乘法指令的计算机中,一般具有乘法器, 通常有大规模IC制造阵列乘法模块.
手工实现乘法是一个简单过程。怎样由手工变为机器应解决三个问题 :
1)符号问题
2)多项部分积相加,进位传递问题
3)多个部分积,位权对应以及加法器位数增加问题。
熟悉原码乘法补码乘法的原理和运算过程,了解提高运算的速度所采用其它算法的原理;在除法运算中,掌握原码不恢复余数除法等实现过程和原理.了解其他运算的规则以及在计算机系统中的应用.
可以这样认为,在具有乘法指令的计算机中,一般具有乘法器, 通常有大规模IC制造阵列乘法模块.
手工实现乘法是一个简单过程。怎样由手工变为机器应解决三个问题 :
1)符号问题
2)多项部分积相加,进位传递问题
3)多个部分积,位权对应以及加法器位数增加问题。
一 原码一位乘法
原码一位乘法是从手算演变来的。由操作数的绝对值相乘,符号由操作数符号位的异或值确定。
乘积 : P= X * Y
符号 : S P = S X S Y
算法 : 每次用一位乘数去乘被乘数
1)原码一位乘法
a) 手算
问题:1)加数增多(由乘数位数决定)。
2)加数的位数增多(与被乘数、乘数位数有关)。
改进:将一次相加改为分步累加。
1)分步乘法
设置寄存器:
A: 存放部分积累加和、乘积高位
B: 存放被乘数
原码一位乘法是从手算演变来的。由操作数的绝对值相乘,符号由操作数符号位的异或值确定。
乘积 : P= X * Y
符号 : S P = S X S Y
算法 : 每次用一位乘数去乘被乘数
1)原码一位乘法
a) 手算
问题:1)加数增多(由乘数位数决定)。
2)加数的位数增多(与被乘数、乘数位数有关)。
改进:将一次相加改为分步累加。
1)分步乘法
设置寄存器:
A: 存放部分积累加和、乘积高位
B: 存放被乘数
C: 存放乘数、乘积低位
设置初值:
A = 00.0000 B = X = 00.1101 C = Y = .1011
例:X=0.1101 Y=-0.1011 求:XY=?
设置初值A = 00.0000 B = X = 00.1101 C = Y = .1011
采取的改进措施 运算规则:
① 每将乘数 Y 的一位乘以被乘数得 X*yi 后,就将该结果与前面所得的结果累加,而得到P i ,称之为部分积;这减少了保存每次相乘结果 X*yi 的开销。
② 将部分积 P i 右移一位与 X*yi 相加。加法运算始终对部分积中的高 n 位进行;因此,只需用n位的加法器就可实现二个 n 位数的相乘.
③ 对乘数中 “ 1 ” 的位执行加法和右移运算,对 “ 0 ” 的位只执行右移运算,而不执行加法运算。可以节省部分积的生成时间。
对迭代过程可以归结为:
已知两正小数 X 和 Y , Y=0.y1y2 ?? yn ,则: X*Y=X*(0.y1y2 ?? yn)
1)若 Yn-i 的值为 “ 1 ” ,将上一步迭代的部分积 Pi 与 X 相加。
设置初值:
A = 00.0000 B = X = 00.1101 C = Y = .1011
例:X=0.1101 Y=-0.1011 求:XY=?
设置初值A = 00.0000 B = X = 00.1101 C = Y = .1011
采取的改进措施 运算规则:
① 每将乘数 Y 的一位乘以被乘数得 X*yi 后,就将该结果与前面所得的结果累加,而得到P i ,称之为部分积;这减少了保存每次相乘结果 X*yi 的开销。
② 将部分积 P i 右移一位与 X*yi 相加。加法运算始终对部分积中的高 n 位进行;因此,只需用n位的加法器就可实现二个 n 位数的相乘.
③ 对乘数中 “ 1 ” 的位执行加法和右移运算,对 “ 0 ” 的位只执行右移运算,而不执行加法运算。可以节省部分积的生成时间。
对迭代过程可以归结为:
已知两正小数 X 和 Y , Y=0.y1y2 ?? yn ,则: X*Y=X*(0.y1y2 ?? yn)
1)若 Yn-i 的值为 “ 1 ” ,将上一步迭代的部分积 Pi 与 X 相加。
2)若 Yn-i 的值为 “ 0 ” ,什么也不做。再右移一位,产生本次的迭代部分积 Pi+1 。 3)整个迭代过程以乘数最低位 yn 和 P0=0 开始,经过 n 次 “ 判断 —— 加法 —— 右移 ” 循环直到求出 Pn 为止。
4) Pn 就为乘法结果。
实现这种方法的二个定点小数乘法的逻辑电路框图: 图4-1、二个定点小数
4) Pn 就为乘法结果。
实现这种方法的二个定点小数乘法的逻辑电路框图: 图4-1、二个定点小数
乘法的逻辑电路框图
二个定点小数乘法的逻辑电路框图::
图4-2、二个定点小数乘法的逻辑电路示意图
通过以上的运算,可以总结出机器运算的算法流程和运算规则。
运算规则:
二个定点小数乘法的逻辑电路框图::
图4-2、二个定点小数乘法的逻辑电路示意图
通过以上的运算,可以总结出机器运算的算法流程和运算规则。
运算规则:
(1)操作数、结果用原码表示;
(2)绝对值运算,符号单独处理;
(3)被乘数(B)、累加和(A) 取双符号位;
(4)乘数末位( Cn) 为判断位,其状态决定下步操作;
(5)作 n 次循环(累加、右移)。
(2)绝对值运算,符号单独处理;
(3)被乘数(B)、累加和(A) 取双符号位;
(4)乘数末位( Cn) 为判断位,其状态决定下步操作;
(5)作 n 次循环(累加、右移)。
二 补码一位乘法
实现补码乘法有 2 种方法,一种是先按原码乘法那样直接乘,再根据乘数符号进行校正。下面简述其算法规则:
不管被乘数的符号如何,只要乘数为正,则可象原码乘法一 样进行运算,其结果不需校正 如果乘数为负,则先按原码乘法运算,结果再加一个校正量 - X 补 ,这种算法称为校正法 1) 算法分析 X 补 = X0.X1X2 …… Xn
a) Y为正:Y 补 = 0.Y 1 Y 2 …… Yn (XY) 补 = X 补 (0.Y 1 Y 2 …… Yn)
b) Y为负:Y 补 = 1.Y 1 Y 2 …… Yn (XY) 补 = X 补 (0.Y 1 Y 2 …… Yn)+(-X) 补
c) Y符号任意: (XY) 补 = X 补 (0.Y 1 Y 2 …… Yn)+(-X) 补 Y 0
d) 展开为部分积的累加和形式: (证明略)
(XY) 补 = X 补 (0.Y 1 Y 2 …… Yn)+(-X) 补 Y0
实现补码乘法有 2 种方法,一种是先按原码乘法那样直接乘,再根据乘数符号进行校正。下面简述其算法规则:
不管被乘数的符号如何,只要乘数为正,则可象原码乘法一 样进行运算,其结果不需校正 如果乘数为负,则先按原码乘法运算,结果再加一个校正量 - X 补 ,这种算法称为校正法 1) 算法分析 X 补 = X0.X1X2 …… Xn
a) Y为正:Y 补 = 0.Y 1 Y 2 …… Yn (XY) 补 = X 补 (0.Y 1 Y 2 …… Yn)
b) Y为负:Y 补 = 1.Y 1 Y 2 …… Yn (XY) 补 = X 补 (0.Y 1 Y 2 …… Yn)+(-X) 补
c) Y符号任意: (XY) 补 = X 补 (0.Y 1 Y 2 …… Yn)+(-X) 补 Y 0
d) 展开为部分积的累加和形式: (证明略)
(XY) 补 = X 补 (0.Y 1 Y 2 …… Yn)+(-X) 补 Y0
三 其它乘法运算
在计算机的组成中,为提高乘法的运算速度,还采用了其它的乘法形式,如:
1)原码两位乘法
在计算机的组成中,为提高乘法的运算速度,还采用了其它的乘法形式,如:
1)原码两位乘法
2)补码两位乘法
上述的乘法思路和一位乘法是一样的,既:一次运算只形 成一个部分积,通过多次的移位和累加完成
3)快速乘法以一位或两位乘法为基础,通过形成多个部分积,一次相加完成整个运算。 可以通过多操作数加法网络和阵列乘法器完成。
上述的乘法思路和一位乘法是一样的,既:一次运算只形 成一个部分积,通过多次的移位和累加完成
3)快速乘法以一位或两位乘法为基础,通过形成多个部分积,一次相加完成整个运算。 可以通过多操作数加法网络和阵列乘法器完成。
小结:本节主要介绍了原码一位乘法、补码一位乘法、其它乘法运算三个方面的内容。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论