硬件03:二进制减法器
在减法中没有进位,而有借位,这是一种完全不同的机制。
要完成的减法器控制面板如下:
当总开关向下的时候代表执行减法,开关代表数据,灯泡带结果,如果最左边的第9个灯泡发光代表结果是负数。
消除借位
借位很复杂,但是我们可以避免出现借位。
以十进制为例,如计算253-176,可以将计算简化为:
$$
253+(999-176)+1-1000
$$
这样就不会产生任何的借位了。
如果是减数大于被减数的情况,如176-253,可以将计算结果简化为:
$$
(999-253)+176-999
$$
这里的最后一步922-999本质上也没有出现借位,只是结果是负数而已。
二进制的减法的技巧与十进制的相同。
完成减法
在简化计算方法中一个常见的运算是用全1的二进制数减去减数,结果相当于对减数每位都取反。取反可以简单的给每个位加上一个反向器来解决,但是新的机器要求既能做加法又能做减法,所以需要一个灵活切换的机制,下列电路可以实现:
在这个电路中,取反的信号会被传递到每一个异或门中,然后输出。当取反的信号是0,输入是01100001,那么输出就不变,还是01100001,因为0和任何数异或结果都是那个数。如果取反的信号是1,那么输出则会被反置为10011110.
这个电路可以被简化为如下符号,它被称为求补器:
再进一步,就可以组成新的能做减法的机器:
这个电路是由一个8位二进制加法器和一个异或门连接起来的,SUB信号代表加减法转换开关,当SUB为0时代表加法,为1代表减法。在减法中,首先通过求补电路将减数取反,而且进位输入1使得结果加1,如果加1后产生进位,此时说明A-B等于正数,不产生下溢。
上面这个部件还不能表示结果是负数,只能在正数时出现正确结果,因为如果是负数的话,还需要在输出端再经过一次取反才行。