feat: 更新附录交互组件和文档
This commit is contained in:
@@ -112,23 +112,20 @@
|
||||
|
||||
如果刚才介绍的逻辑门只能做简单的条件判断,那计算机到底是如何做数学运算的呢?
|
||||
|
||||
我们先回想一下手算加法的方式:对应位相加,如果超出了限制(十进制是满十进一,二进制是满二进一),就向更高位“进位”。
|
||||
|
||||
在二进制中,只有 0 和 1。对于一位数的加法,可能的情况只有四种:
|
||||
- `0 + 0 = 0` (本位是 0,不进位)
|
||||
- `0 + 1 = 1` (本位是 1,不进位)
|
||||
- `1 + 0 = 1` (本位是 1,不进位)
|
||||
- `1 + 1 = 10` (本位是 0,进位 1)
|
||||
<BinaryAdditionRulesDemo />
|
||||
|
||||
仔细观察这四种情况,你会发现:
|
||||
1. **本位的结果**,只有在两个输入**不同**时才为 1,这正是 **XOR 门(异或门)** 的逻辑。
|
||||
2. **进位的结果**,只有在两个输入**都为 1** 时才为 1,这正是 **AND 门(与门)** 的逻辑。
|
||||
|
||||
因此,只要把一个 XOR 门和一个 AND 门组合起来,我们就得到了能计算一位数加法的电路,这也是最基础的**半加器(Half Adder)**。
|
||||
因此,只要把一个 XOR 门(负责算本位)和一个 AND 门(负责算进位)组合起来,我们就得到了能计算一位数加法的电路,这也是最基础的**半加器(Half Adder)**。
|
||||
|
||||
<HalfAdderDemo />
|
||||
|
||||
但半加器有个致命缺陷:它无法处理来自低位的进位。在多位加法中,中间的每一位不仅要加 A 和 B,还要加上低位传来的进位。这就需要**全加器(Full Adder)**:
|
||||
但半加器有个致命缺陷:它在物理结构上**只有两个输入端口(A 和 B)**。
|
||||
|
||||
想象我们在做十进制竖式加法(比如 `19 + 22`):
|
||||
- **算个位**:`9 + 2 = 11`。只需两个数相加,写 `1` 进 `1`。这刚好是两个输入,半加器能完美胜任。
|
||||
- **算十位**:不仅要算 `1 + 2`,还要**加上刚才个位传过来的“进位 1”**(即 `1 + 2 + 1 = 4`)。这意味着在多位加法中,除了最低位,其他位实际上是在做**三个数字**的相加!
|
||||
|
||||
因为半加器没有接纳“低位传来的进位(Carry-in)”的第三个输入口,所以除了最右边的那一位,它在别的位全都没法用。为了解决这个问题,我们需要能接收三个信号的**全加器(Full Adder)**:
|
||||
|
||||
<FullAdderDemo />
|
||||
|
||||
@@ -185,6 +182,10 @@
|
||||
当我们将 32 个抑或 64 个这种触发器整齐地编排成一列,施加同一种强劲的时钟频率信号(Clock)来号令它们统一行动时,**寄存器(Register)**便应运而生了。它身居 CPU 系统的心脏位置,被当做极速的“工作草稿纸”,默默捍卫着你每一个即时的关键变量。
|
||||
:::
|
||||
|
||||
请通过下面的互动演示,亲自体验这个打破和恢复闭环的过程:
|
||||
|
||||
<FlipFlopDemo />
|
||||
|
||||
---
|
||||
|
||||
## 4. CPU 架构:从功能单元到处理器
|
||||
|
||||
Reference in New Issue
Block a user