一位十进制加法运算
1. 8421码加法运算
8421码的加法规则:
⑴两个十进制数的8421码相加时,按“逢二进一”的原则进行;
⑵当和≤9,无需校正;
⑶当和>9,则+6校正;
⑷在做+6校正的同时,将产生向上一位的进位。
1.一位8421码加法器
校正函数=C4’+S4’S3’+S4’S2’
向上一位的进位C4=校正函数
定点乘法运算
一般来讲,做乘除法运算,用原码比用补码简单,但有的机器,数据是用补码表示的,为避免码制间的频繁转换,乘除也用补码来做。
一、原码乘法
1.原码一位乘(原码运算符号位要单独处理)
• 用原码运算,数据的符号不能同数值位一同参加运算,而需单独处理,两原码表示的数相乘,其结果的符号是两数符号的异或。
手算乘法是通过移位和加法来实现的。计算机不能照搬的原因:
① n位乘法,需n个数相加得部分积,而全加器只有三个输入端,故实现不了。
② n位乘法,乘积2n位,要用2n位的寄存器来存放积.
③ 若用加法器做加法,n位乘法,需2n位的加法器,造成硬件浪费.
我们想要:
① n位乘法,只用n位加法器,且只用两数相加的加法器
② n位乘法,只用n位寄存器来存放结果
方法:(n次加法, n次移位)
•参加运算的操作数取其绝对值;
令乘数的最低位为判断位,若为1,则加被乘数,若为0,则加0;
累加后的部分积以及乘数右移一位;
重复上述操作,直到乘数位全部乘完为止。
二、补码乘法
1.补码一位乘
被乘数x, [x]补=xs.x1…xn
乘数y, [y]补=ys.y1…yn
•校正法
⑴ x任意,y>0时,
[X×Y]补 = [X]补× [Y]补
⑵ x任意,y<0时,
[X×Y]补 = [X]补× (0.y1…yn )+[-X]补
•比较法--Booth乘法
补码校正法虽可行,但是在乘数为负时校正控制比较复杂,实用性差。希望能有一个正负数操作一致的算法,这就是比较法(又叫Booth法).
设被乘数 [X]补 = Xs.X1X2…Xn 和乘数 [Y]补 = Ys.Y1Y2…Yn 均为任意符号,
=(Y1-Ys) ×[X]补+2 -1((Y2-Y1) ×[X]补 + 2-1((Y3-Y2) ×[X]补 +
2-1 ( … + 2-1 ((Yn+1-Yn) ×[X]补 +0) )))
将此式展开,得到递推关系:
[Z0]补=0
[Z1]补=2-1{[Z0]补+(yn+1-yn)[x]补}
[Z2]补=2-1{[Z1]补+(yn-yn-1)[x]补}
.
.
[Zn]补=2-1{[Zn-1]补+(y2-y1)[x]补}
从而得到:
[x×y]补=[Zn]补+(y1-ys).[x]补
--------补码一位乘比较法
⑴ 相乘时,参加运算的数用补码表示,符号位参与运算;被乘数取双符号位,乘数取单符号位并参加运算。 ⑵ 乘法开始前,部分积置全0,乘数末位增加附加位yn+1=0。 ⑶ 比较yi 和yi+1,决定如何运算 yi yi+1 0 0 ;+全0,结果右移一位; 0 1 ;+[x]补,结果右移一位; 1 0 ;+[-x]补,结果右移一位; 1 1 ;+全0,结果右移一位。 ⑷ 重复 n+1 次,最后一次不移位 ⑸ 得乘积 2n+2位,其中含两位符号位