一台会记事的小计算机
复习
- 第十八、十九章:ALU 能算,还能给出状态标志
- 第二十六章:寄存器能保存数据
- 第二十九~三十二章:理解了存储器、存储层次与缓存
TL;DR
- 这一章把“运算器“和“存储器“两大系统拼到一起
- 我们得到一台能连续计算、还能把结果记住、存回内存的机器
- 它已经很像计算机了,但每一步还得人手动拨开关——这引出下一段的“指令“
正文
第二十章结束时,运算器装好了,但它得了“健忘症“。接下来这十几章,我们给它治好了病——做出了锁存器、触发器、寄存器,又做出了容量更大的存储器。
现在,是时候把两半合起来了。
先看看长成了什么
运算器 存储器
┌─────────┐ ┌─────────────┐
│ ALU │ │ 寄存器 │
└─────────┘ │ (快而小) │
│ ├─────────────┤
│ │ 存储器 │
│ │ (大而慢) │
│ └─────────────┘
└────── 多路选择器 ── 时钟 ──┘
左边是“会算的“,右边是“会记的“。中间靠多路选择器和时钟来协调。这一章要做的,就是把它们接到一起。
组装
我们要拼一台小机器,它要能满足三条:
- 能从存储器里把一个数取出来
- 能和另一个数做运算
- 能把结果存回存储器
为此需要这些零件:
- ALU:算
- 寄存器:临时存放取出来的数、以及中间结果
- 存储器:长期存放一批数据
- 多路选择器:决定这一步的数据,是从内存来的,还是从上一个结果来的
- 时钟:统一节拍,让“取数→运算→存回“有序进行
这台机器比第二十章的运算器多了“记性“,所以它终于能算多步的式子了。
让它做一件事
比如,计算内存里两个数的和,把结果存回内存:
内存: [100] = 3
[200] = 5
[300] = ?
步骤一:从地址 100 取出 3,送进寄存器 R1
步骤二:从地址 200 取出 5,送进寄存器 R2
步骤三:ALU 计算 R1 + R2,得到 8
步骤四:把 8 写回地址 300
时钟每响一下,就走一步。数据在“存储器 → 寄存器 → ALU → 寄存器 → 存储器“之间流动,像一个完整的小循环。这就是一台能记事、能干活的小计算机。
它甚至还能连续运算:把上一步的结果留在寄存器里,作为下一步的输入,配合多路选择器的选择,就能像第二十七章的累加器那样,连着算很多步。
但还差一口气
机器是好机器,可你注意到了吗——上面那“步骤一到步骤四“,是谁在指挥?
还是人。
每一步把数据从哪里取、做什么运算、存到哪里,都得我们提前拨好开关。想算一道新题,就得重新拨一遍开关、重新接线。这和我们在第二章吐槽过的“每次算新题都要重新接电路“没有本质区别,只是麻烦从“接线“变成了“拨开关“。
机器有算的能力、有记的能力,却唯独没有**“自己知道下一步该干什么“的能力**。
要让它真正自动起来,我们需要把“做什么、对谁做“这套指挥,也变成一串预先生成好的信号,存起来,让机器自己照着走。
这套指挥信号,就叫指令。下一段路,我们让机器学会“听话“。
思考题
上面这台小机器,如果想算
(3 + 5) × 2,一共要几步?每一步要人拨哪些开关?把它和第二十章那个“只会算不会记“的运算器比一比,多了什么、少了什么?
小结
知识点
- 运算器与存储器的合体
- 数据在“存储器↔寄存器↔ALU“之间的流动
- 时钟和多路选择器在其中的协调作用
- 这台机器的局限:仍需人工指挥每一步
参考资料
- Wikipedia(zh):数据通路:数据在部件间的流动
- Wikipedia(zh):存储程序计算机:指令与数据同存的思想
思考题答案(仅供参考)
大概需要:取 3 → 取 5 → 加得 8 → 存 8 → 取 2 → 乘得 16 → 存 16,一共 7 步左右,每一步都要人设定“数据从哪来、做什么、存到哪“。
和第二十章那个运算器相比,它多了记忆和存储,所以能把中间结果 8 保存下来供下一步用,不必人来抄写;但少了自动化——它不会自己决定下一步,仍需人一步步指挥。计算机还差临门一脚。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪