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。