二进制乘法运算
1.定点数一位乘法
1.1定点原码一位乘法
原码相乘,积符号同号得正、异号得负,数值为两数绝对值之积。
例:X=0.1101,Y=0.1011,求两数之积
解:取双符号位
部分积右移时,乘数寄存器同时右移一位。计算用两位符号,结果保留一位符号。
X*Y=0.10001111
Cd是乘数位数的补码值,每计算一次减一次。
Cn是C寄存器中Y的最低位,为1则部分积加X,为0则部分积加0。
1.2定点补码一位乘法
被乘数 [X]补=X0.X1X2...Xn,乘数 [Y]补=Y0.Y1Y2...Yn
[X* Y]补=[X]补(0.Y1Y2...Yn)-[X]补* Y0
Y0=1即Y为负数时,需要补充-[X]补* Y0这一项,Y0=0即Y为正数时,不用这一项。剩下步骤和定点一位乘法一样,右移带符号。
布斯公式
[X * Y]补=[X]补 * (-Y0+Y12-1+Y22-2+...+Yn2-n)=[X]补*$\sum_{i=1}^n (Yi+1-Yi)2^i$
Yi+1与Yi为相邻两位,(Yi+1-Yi)有0,1和-1三种情况,其运算规则如下:
-
(1) Yi+1-Yi=0(Yi+1Yi=00或11),部分积加0,右移1位。
-
(2) Yi+1-Yi=1(Yi+1Yi=10),部分积加[X]补,右移1位。
-
(3) Yi+1-Yi=-1(Yi+1Yi=01),部分积加[-X]补,右移1位.
-
最后一步(i=n+1)不移位。
1.3定点原码二位乘法
乘数都用原码,两位乘数有四种组合:
00:0*X。部分积PI右移两位。
01:1*X。部分积Pi+X,右移两位。
10:2*X。部分积Pi+2X,右移两位。
11:3*X。部分积Pi-X+4X,右移两位。
原码两位乘法规则表
YI-1 | YI | C | 操作 | 操作 |
---|---|---|---|---|
0 | 0 | 0 | (PI+0)2-2 | 0->C |
0 | 0 | 1 | (PI+X)2-2 | 0->C |
0 | 1 | 0 | (PI+X)2-2 | 0->C |
0 | 1 | 1 | (PI+2X)2-2 | 0->C |
1 | 0 | 0 | (PI+2X)2-2 | 0->C |
1 | 0 | 1 | (PI-X)2-2 | 1->C |
1 | 1 | 0 | (PI-X)2-2 | 1->C |
1 | 1 | 1 | (PI+0)2-2 | 1->C |
若最后一次操作欠下+4X,则最后一次右移两位后还应补充+X操作,且不再移位。
1.4定点补码二位乘法
Yn-i-1 | Yn-i | Yn-i+1 | 组合值 | [pi+2]补 |
---|---|---|---|---|
0 | 0 | 0 | 0 | ([PI]补+0)2-2 |
0 | 0 | 1 | 1 | ([PI]补+[X]补)2-2 |
0 | 1 | 0 | 1 | ([PI]补+[X]补)2-2 |
0 | 1 | 1 | 2 | ([PI]补+2[X]补)2-2 |
1 | 0 | 0 | -2 | ([PI]补+2[X]补)2-2 |
1 | 0 | 1 | -1 | ([PI]补-[X]补)2-2 |
1 | 1 | 0 | -1 | ([PI]补-[X]补)2-2 |
1 | 1 | 1 | 0 | ([PI]补+0)2-2 |
2.浮点数加减法运算
X=MX2Ex, Y=MY2Ey,均为规格化数。
- 对阶
求出$$delta(E)$$=EX-EY,保留大的那个,将小的那个的尾数右移delta(E)位,使X和Y阶码相等,过程中原码表示的符号位不移位,补0;补码表示的尾数保持符号位不变。
- 尾数加减
对阶后,尾数进行运算。
- 规格化
使尾数绝对值以最大值形式出现。
双符号原码规格化尾数:00.1xxxxx或11.1xxxxx
双符号补码规格化尾数:00.1xxxxx或11.0xxxxx
规则:
- 若结果的两符号位不同,表示溢出,尾数右移1位,阶码加1,“右规”。
- 若结果两符号位相同,表示不溢出,若最高数值位和符号位同,尾数连续左移,until不同,阶码减去移位数,“左规”。
- 舍入
右规或对阶时,尾数低位的数值会失去,为提高精度,采取0舍1入。
- 检查阶码是否溢出
阶码溢出表示浮点数溢出。在三四步都可能溢出。
若正常,end;
若下溢,置机器零;
若上溢,则OF=1。