Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

一台会记事的小计算机

复习

  1. 第十八、十九章:ALU 能算,还能给出状态标志
  2. 第二十六章:寄存器能保存数据
  3. 第二十九~三十二章:理解了存储器、存储层次与缓存

TL;DR

  • 这一章把“运算器“和“存储器“两大系统拼到一起
  • 我们得到一台能连续计算、还能把结果记住、存回内存的机器
  • 它已经很像计算机了,但每一步还得人手动拨开关——这引出下一段的“指令“

正文

  第二十章结束时,运算器装好了,但它得了“健忘症“。接下来这十几章,我们给它治好了病——做出了锁存器、触发器、寄存器,又做出了容量更大的存储器。

  现在,是时候把两半合起来了。

先看看长成了什么

   运算器                           存储器
 ┌─────────┐                   ┌─────────────┐
 │   ALU   │                   │   寄存器     │
 └─────────┘                   │   (快而小)  │
      │                        ├─────────────┤
      │                        │   存储器     │
      │                        │  (大而慢)   │
      │                        └─────────────┘
      └────── 多路选择器 ── 时钟 ──┘

  左边是“会算的“,右边是“会记的“。中间靠多路选择器和时钟来协调。这一章要做的,就是把它们接到一起。

组装

  我们要拼一台小机器,它要能满足三条:

  1. 能从存储器里把一个数取出来
  2. 能和另一个数做运算
  3. 能把结果存回存储器

  为此需要这些零件:

  • ALU:算
  • 寄存器:临时存放取出来的数、以及中间结果
  • 存储器:长期存放一批数据
  • 多路选择器:决定这一步的数据,是从内存来的,还是从上一个结果来的
  • 时钟:统一节拍,让“取数→运算→存回“有序进行

  这台机器比第二十章的运算器多了“记性“,所以它终于能算多步的式子了。

让它做一件事

  比如,计算内存里两个数的和,把结果存回内存:

内存:  [100] = 3
        [200] = 5
        [300] = ?

步骤一:从地址 100 取出 3,送进寄存器 R1
步骤二:从地址 200 取出 5,送进寄存器 R2
步骤三:ALU 计算 R1 + R2,得到 8
步骤四:把 8 写回地址 300

  时钟每响一下,就走一步。数据在“存储器 → 寄存器 → ALU → 寄存器 → 存储器“之间流动,像一个完整的小循环。这就是一台能记事、能干活的小计算机。

  它甚至还能连续运算:把上一步的结果留在寄存器里,作为下一步的输入,配合多路选择器的选择,就能像第二十七章的累加器那样,连着算很多步。

但还差一口气

  机器是好机器,可你注意到了吗——上面那“步骤一到步骤四“,是谁在指挥?

  还是人。

  每一步把数据从哪里取、做什么运算、存到哪里,都得我们提前拨好开关。想算一道新题,就得重新拨一遍开关、重新接线。这和我们在第二章吐槽过的“每次算新题都要重新接电路“没有本质区别,只是麻烦从“接线“变成了“拨开关“。

  机器有算的能力、有记的能力,却唯独没有**“自己知道下一步该干什么“的能力**。

  要让它真正自动起来,我们需要把“做什么、对谁做“这套指挥,也变成一串预先生成好的信号,存起来,让机器自己照着走。

  这套指挥信号,就叫指令。下一段路,我们让机器学会“听话“。

思考题

  上面这台小机器,如果想算 (3 + 5) × 2,一共要几步?每一步要人拨哪些开关?把它和第二十章那个“只会算不会记“的运算器比一比,多了什么、少了什么?

小结

知识点

  • 运算器与存储器的合体
  • 数据在“存储器↔寄存器↔ALU“之间的流动
  • 时钟和多路选择器在其中的协调作用
  • 这台机器的局限:仍需人工指挥每一步

参考资料

  1. Wikipedia(zh):数据通路:数据在部件间的流动
  2. Wikipedia(zh):存储程序计算机:指令与数据同存的思想

思考题答案(仅供参考)

  大概需要:取 3 → 取 5 → 加得 8 → 存 8 → 取 2 → 乘得 16 → 存 16,一共 7 步左右,每一步都要人设定“数据从哪来、做什么、存到哪“。

  和第二十章那个运算器相比,它多了记忆和存储,所以能把中间结果 8 保存下来供下一步用,不必人来抄写;但少了自动化——它不会自己决定下一步,仍需人一步步指挥。计算机还差临门一脚。

协议

  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

封面图

设计师 | 南国微雪