第13章:减法器的实现

无符号的减法

减法可以通过加法实现。考虑8位二进制的减法 aba - b,其还能被表示为

(255b)+1+a256(255 - b) + 1 + a - 256

即先对b取1的补数,再将结果与aa11分别相加。对于最后的-256,

  1. 如果ab0a - b \geq 0,那么(255b)+1+a(255 - b) + 1 + a的结果会大于256,即最高位的进位输出为1。

  2. 如果ab<0a - b < 0,此时的结果为负数,对于无符号整数减法来说发生了下溢,此时(255b)+1+a(255 - b) + 1 + a的结果就小于256,即最高位的进位输出为0。

我们依照上述逻辑将第12章的加法器改造成加/减法器。

(1) 我们首先增加加/减法的选择开关,对于减法的情况,加/减法器的一输入端需要进行取补操作,我们采用异或门来实现:

异或门实现取反器

(2) 对于减法操作,(255b)+1+a(255 - b) + 1 + a只需要将最低位的接地线改为进位输入即可。

(3) 我们还需要一个操作来判断最高位的进位输出,对于加法进位输出为1时发生上溢错误,对于减法输出为0时发生下溢错误。

改进后的加/减法器的实现如下:

改进后的加/减法器

有符号的减法

在有符号的8位二进制数中,我们的表示范围不再是02550 \sim 255,而应该是128127-128 \sim 127。我们仍旧采用取反加1的方式来表示负数,即用255a+1255 - a + 1的方式表示a-a。举个例子,对于1-1,我们对00000001Two00000001_{Two}取反再+1+1,即为11111111Two11111111_{Two}。注意到取补运算是可逆的。

注:

  1. 有符号整数的第8位实际为符号位,00表示正数,11表示负数。

  2. 有符号的减法实质是就是两个有符号整数的加法。

  3. 如果两个输入数字符号相同,而结果符号与之相反,则发生了上溢/下溢,其结果非法。

Last updated