使用全加器实现补码的加减运算
引言:
我们都知道,在计算机中的加减运算都是由补码来实现的,那么,计算机是如何运用电路来实现补码的加减的呢?在计算机中,所有的加减运算其实都变成了加法后来参与运算的,那么仅需要一个加法器就可以实现了。请看下面内容。
(一)全加器的构成
1.什么是全加器
全加器英语名称为full-adder,是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器。一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。
(1)一位全加器逻辑电路图如下
该一位全加器的求和部分Si由两个异或门组成,进位部分Ci+1由与非门组成。
(2)简单的直观表示
全加器由两个二进制数字Ai,Bi和一个进位输入Ci相加,产生一个和输出Si,以及一个进位输出Ci+1。
下表中列出一位全加器进行加法运算的输入输出真值表。
(3)逻辑表达式
根据所示的真值表,三个输入端和两个输入端可按如下逻辑方程进行联系:
Si=Ai⊕Bi⊕Ci
Ci+1=AiBi+BiCi+CiAi
看到这里你想起了什么?是不是补码运算的相加、进位、判断溢出?
(二)补码运算的二进制加法/减法器的逻辑结构
1.补码加减运算法则
(1)对于定点数的加法
定点小数:[X]补+[Y]补=[X+Y]补 (mod 2)
定点整数:[X]补+[Y]补=[X+Y]补 (mod 2^n+1)
(2)对于定点数的减法
定点小数: [X-Y]补=[X]补+[-Y]补 (mod 2)
定点整数: [X-Y]补=[X]补+[-Y]补 (mod 2^n+1)
可以看出,在补码运算中,减法都变成了了加上该补码负数的形式。
(3)补码取负数:
即[X]补包括符号位在内的各位取反,末位加一后变成[-X]补
那么如何使用电路实现?如下
2.多位全加器实现补码加减运算
(1)图中字母代表含义
字母 | 含义 |
---|---|
M | 方向控制 (即控制做加\减法运算) |
An | 输入的 [X]补 |
Bn | 输入的 [Y]补 |
Cn | 进位输入\输出 |
Sn | 结果输出 |
(2)实现加减
1.加法运算
当时加法运算时,我们的控制输入M就会起到相应的作用,当M=0时,他与Bn相连,做异或处理,此时可见结果就等于Bn本身,此时Bn输入到一位的全加器中,与An输入相加,在n=0处还加上了M的0,对结果无影响。
2.减法运算
而当M=1时,进行减法运算,此时的Bn与M=1进行异或,得到的就是Bn的反码,而最低位的M=1做一个加数进入到运算中就是:An+(Bn+1),此时的1在最低位。那么就可以看到,其实这时的M作用一就是将[Y]补转换成[-Y]补,使整个电路做补码的减法运算。
(三)判断溢出
而在这里,就是采用的单符号位法来判断是否溢出
(1)单符号位判断法
1.当最高数值位产生进位而符号位不产生进位时,产生上溢;
2. 当最高数值位不产生进位而符号位产生进位时,产生下溢。
简单来讲也就是:
总:只要最高数值位与符号位 “都产生进位或都不产生进位(同号)” 时不溢出,否则溢出。
那么我们从电路图中就可以看出:
1.若Cn与Cn-1同号,则经过异或门结果为0,不溢出;
1.若Cn与Cn-1异号,则经过异或门结果为1,溢出;
Cn我们在前面说过,就是输出的进位。
(2)实例图
如图所示,这次做的为:(+8) + (+12) = 20 即 001000 + 001100 = 010100 没有溢出