二进制乘法运算

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,均为规格化数。

  1. 对阶

求出$$delta(E)$$=EX-EY,保留大的那个,将小的那个的尾数右移delta(E)位,使X和Y阶码相等,过程中原码表示的符号位不移位,补0;补码表示的尾数保持符号位不变。

  1. 尾数加减

对阶后,尾数进行运算。

  1. 规格化

使尾数绝对值以最大值形式出现。

双符号原码规格化尾数:00.1xxxxx或11.1xxxxx

双符号补码规格化尾数:00.1xxxxx或11.0xxxxx

规则:

  1. 若结果的两符号位不同,表示溢出,尾数右移1位,阶码加1,“右规”。
  2. 若结果两符号位相同,表示不溢出,若最高数值位和符号位同,尾数连续左移,until不同,阶码减去移位数,“左规”。
  1. 舍入

右规或对阶时,尾数低位的数值会失去,为提高精度,采取0舍1入

  1. 检查阶码是否溢出

阶码溢出表示浮点数溢出。在三四步都可能溢出。

若正常,end;

若下溢,置机器零;

若上溢,则OF=1。

posted @ 2020-11-21 16:26  鱼大鹿  阅读(2541)  评论(0编辑  收藏  举报