7483减法器和BCD加法器
不要单独做一个复杂的减法器,而是用 7483 这个 4 位全加器,通过补码把减法变成加法。
也就是:
A - B = A + (-B)
而在二进制里:
-B = B 的二进制补码 = 反码 + 1
所以真正要做的是:
A - B = A + 反码(B) + 1
1. 减法为什么可以用加法器实现?
以 4 位为例:
A = 1100
B = 0101
十进制就是:
A = 12
B = 5
要算:
A - B = 12 - 5 = 7
在二进制里,不直接减,而是算:
A + B 的补码
B 是:
0101
先取反码:
1010
再加 1,得到补码:
1011
所以:
A - B
= 1100 - 0101
= 1100 + 1011
计算:
1100
+ 1011
------
1 0111
结果低 4 位是:
0111
也就是十进制 7。
最高位多出来的 1 是 Co,在减法里它通常表示:
Co = 1,说明没有借位
2. 关键电路:在 B 输入前面加 XOR 门

bit de sélection de l’opération
运算选择位
设这个选择位叫:
M
然后让 B 的每一位先经过 XOR 门:
B0' = B0 ⊕ M
B1' = B1 ⊕ M
B2' = B2 ⊕ M
B3' = B3 ⊕ M
同时把 7483 的输入进位设成:
Ci = M
于是整个电路实际计算的是:
S = A + (B ⊕ M) + M
当 M = 0:做加法
那么 XOR 的性质是:
B ⊕ 0 = B
所以 B 不变。
同时:
Ci = 0
因此电路变成:
S = A + B + 0
也就是普通加法:
S = A + B
当 M = 1:做减法
如果选择位:
M = 1
那么 XOR 的性质是:
B ⊕ 1 = 反码(B)
所以 B 的每一位都会被取反。
同时:
Ci = 1
于是电路变成:
S = A + 反码(B) + 1
而:
反码(B) + 1 = B 的补码
所以:
S = A - B
因此:
| M | B 输入 | Ci | 功能 |
|---|---|---|---|
| 1 | B 取反 | 1 | A – B |
3. 完整公式总结
这个加减法器的统一公式是:
S = A + (B ⊕ M) + M
所以一个 7483 加上一组 XOR 门,就可以变成:
4 位加法 / 减法共用电路
4. Co 在减法里是什么意思?

这一点很重要。
在普通加法里:
Co = 1
通常表示最高位产生了进位,也就是结果超过了 4 位范围。
例如:
1100
+ 0101
------
1 0001
低 4 位是:
0001
但是 Co = 1,说明真实结果是 17,已经超过 4 位能表示的最大无符号数 15。
在减法里,Co 的含义不一样。
当做:
A - B
时:
| Co | 含义 |
|---|---|
| 1 | 没有借位,A ≥ B |
| 0 | 发生借位,A < B |
所以减法时:
例如:
A = 0101 = 5
B = 1100 = 12
算:
A - B = 5 - 12 = -7
用 4 位补码计算:
B = 1100
反码(B) = 0011
补码(B) = 0100
所以:
0101
+ 0100
------
1001
结果是:
1001
在 4 位补码里,1001 表示 -7。
此时:
Co = 0
说明发生了借位,也说明无符号意义下 A 小于 B。
5. retenue / dépassement”
法语里的:
retenue
意思是:
进位
或者在减法语境下,也可以用来理解为和借位有关的信号。
法语里的:
dépassement
意思是:
溢出 / 超出表示范围
La valeur de la retenue indiquera un dépassement également.
进位的值也可以指示是否发生了超出范围的情况。
6. BCD / 十进制加法部分
L'additionneur en base 10
Binary-Coded Decimal
也就是:
十进制加法器
BCD 码
BCD 的意思是:
Binary-Coded Decimal
中文叫:
二进制编码的十进制数
它不是直接用二进制表示整个数字,而是每一个十进制数字单独用 4 位二进制表示。
例如:
18
在普通二进制里是:
10010
但是在 BCD 里是:
0001 1000
也就是:
1 = 0001
8 = 1000
所以:
(18)10 = (0001 1000)BCD
7. 为什么 BCD 加法要 “加 6”?
一个 4 位二进制数可以表示:
0000 ~ 1111
也就是十进制:
0 ~ 15
但是 BCD 每一组 4 位只能表示十进制数字:
0 ~ 9
也就是:
0000 ~ 1001
下面这些在 BCD 里是非法的:
1010 = 10
1011 = 11
1100 = 12
1101 = 13
1110 = 14
1111 = 15
所以当两个 BCD 数字相加后,如果结果大于 9,就需要修正。
修正方法是:
加 6
也就是:
+ 0110
例如:
8 + 7 = 15
直接二进制加法得到:
1000
+ 0111
------
1111
但是 1111 在 BCD 里非法。
所以加 6:
1111
+ 0110
------
1 0101
低 4 位是:
0101
表示 5。
前面的进位 1 表示十位进 1。
所以结果就是:
15
BCD 表示为:
0001 0101
7. BCD 修正条件

K = Co + R3R2 + R3R1
也可以写成:
K = Co + R3(R2 + R1)
8 = 1000 → R3=1, R2=0, R1=0
9 = 1001 → R3=1, R2=0, R1=0
10 = 1010 → R3=1, R2=0, R1=1
11 = 1011 → R3=1, R2=0, R1=1
12 = 1100 → R3=1, R2=1, R1=0
13 = 1101 → R3=1, R2=1, R1=0
14 = 1110 → R3=1, R2=1, R1=1
15 = 1111 → R3=1, R2=1, R1=1
当:
K = 1
说明结果不是合法 BCD,或者已经产生了十进制进位。
这时第二个 7483 会再加:
0110
也就是加 6。
当:
K = 0
说明结果在 0 到 9 之间,不需要修正。
发表回复