基本公式
补码加法
定点整数:[x+y]补=[x]补+ [y]补 (mod 2n+1)
定点小数:[x+y]补=[x]补+ [y]补 (mod 2)
-
判断溢出:符号位产生的进位与最高有效位(“.”后的那位)产生的进位异或,结果为1表示溢出
-
溢出时结果的符号位为0表示下溢
原码一位乘法
乘法可以由加法运算和移位操作完成
被乘数和乘数均取绝对值,符号位另行运算
被乘数取双符号位,部分积的长度和被乘数长度相等,初值为0
具体步骤:
-
若最低位Yn=1,则部分积加上被乘数,然后右移一位
-
若Yn=0,则部分积加上0,然后右移一位
-
重复判断n次
例:|X|=00.1101,|Y|=0,1011
部分积 乘数
00.0000 0. 1 0 1 1
+ 00.1101
-————
00.1101
> 00.0110 1 0. 1 0 1
+ 00.1101
-————
01.0011 1
> 00.1001 1 1 0. 1 0
+ 00.0000
-————
00.1001 1 1
> 00.0100 1 1 1 0. 1
+00.11.01
-————
01.0001 1 1 1
> 00.1000 1 1 1 1 0
[XY]原=1.100001111
原码两位乘法
符号位单独运算
部分积和被乘数均采用三位符号位
乘数末位增加一位C 初值为0
若乘数除符号位外字长n为偶数,最多做n/2+1次加法,n/2次移位,最后一步不移位
若尾数除符号位外字长n为奇数,增加一位符号0最多做n/2+1次加法,n/2+1次移位,最后一步右移一位
Yn-1 | Yn | C | 操作 |
---|---|---|---|
0 | 0 | 0 | 加0,右移两位,C=0 |
0 | 1 | 0 | 加|X|,右移两位,C=0 |
1 | 0 | 0 | 加2|X|,右移两位,C=0 |
1 | 1 | 0 | 减0,右移两位,C=1 |
0 | 0 | 1 | 加|X|,右移两位,C=0 |
0 | 1 | 1 | 加2|X|,右移两位,C=0 |
1 | 0 | 1 | 减|X|,右移两位,C=1 |
1 | 1 | 1 | 加0,右移两位,C=1 |
C=1表示该步操作不准确
补码一位乘法
[xy]补[x]补(0.y1y2…yn)-[x]补*y0
符号位单独运算
部分积和被乘数均采用三位符号位,乘数采用双符号位
末位增加一位Yn+1 初值为0
Yn-1 | Yn | Yn+1 | 操作 |
---|---|---|---|
0 | 0 | 0 | 加0,右移两位 |
0 | 1 | 0 | 加[X]补,右移两位 |
1 | 0 | 0 | 加2[-X]补,右移两位 |
1 | 1 | 0 | 加[-X]补,右移两位 |
0 | 0 | 1 | 加[X]补,右移两位 |
0 | 1 | 1 | 加2[X]补,右移两位 |
1 | 0 | 1 | 加[-X]补,右移两位 |
1 | 1 | 1 | 加0,右移两位 |
阵列乘法器
- 无符号的阵列乘法器
设有两个不带符号的二进制整数A,B
A=am-1…a1a0
B=bn-1…b1b0
数值分别为a,b
逐项遍历进行与操作
- 带符号的阵列乘法器
在无符号的阵列乘法器的基础上添加三个求补器
两个算前求补器(输入为乘数的补码):将乘数真值的绝对值送入运算器 一个算后求补器:将负的乘积的真值求出补码
原码除法
符号位不参与运算,取双符号位
用被除数减去除数:
余数为正时,商1,余数左移一位,减去除数(加上除数负值的补码) 余数为负时,商0,余数左移一位,加上除数(加上除数正值的补码)
最后一步操作后,若余数为负,须加上除数(加上除数正值的补码)