硬件与处理是计算机科学中解释电脑运行程序时到底在做什么的部分:处理器取出(fetch)一条指令,理解它的意思,执行它,并在寄存器、内存、存储和设备之间移动数据。
这个课题属于计算机科学学习指南,与软件与系统以及图像、声音与存储(在那里会计算存储数据的大小)关系密切。
开始之前需要先知道什么?
你需要熟悉二进制(binary),并明白指令和数据都以二进制存储。如果这部分还不稳,请先复习数字与文本的表示。你还需要能按一串简短的步骤记录数值的变化,这和填写追踪表(trace table)是同一种技能。
一个导入例子
内存中存放着一段很小的程序。地址 100 存 LDA 200,地址 101 存 ADD 201,地址 102 存 STO 202。地址 200 存 7,地址 201 存 5。
处理器从程序计数器(PC)等于 100 开始。取出第一条指令后,PC 变为 101,MAR 曾是 100,当前指令寄存器(CIR)存着 LDA 200。执行它会把 7 复制到累加器(ACC)。
第二条指令把地址 201 的值加上去:ACC 变为 7 + 5 = 12。第三条把 ACC 复制到地址 202,所以那里的内存现在是 12。本模块的每一课都用同一个思路:一个小而清楚的模型,每个寄存器只有一项工作。
应该按什么顺序学习这几课?
- 追踪简化的指令周期。先学这一课,因为它用追踪表给出 fetch、decode、execute 的完整图景。
- 把寄存器与其作用对应起来。会追踪之后,就能准确说出每个寄存器存什么、为什么。
- 用具体任务比较内存与存储。从处理器转向程序和文件存放的地方。
- 解释输入与输出设备的选择。练习为特定情境说明设备选择的理由。
- 不要从通用模型推断品牌规格。最后一课教你让答案停留在题目和模型所能支持的范围内。
然后用硬件与处理练习题检验整个模块。
哪些陷阱最常让学生出错?
- 说 MAR 存数据。它存的是地址;MDR 存正在移动的数据或指令。
- 在错误的时刻更新 PC。在简化的周期中,PC 在 fetch 期间前进,而不是在 execute 之后。
- 题目指的是辅助存储(secondary storage)时写成“内存”,或者反过来。
- 选了输入或输出设备,却没有把它和题目中的任务联系起来。
- 把真实产品的数字当作通用模型已经证明了的事实。
如何使用练习题?
先盖住答案,在纸上做每一题,需要时画出追踪表。然后打开解答,逐步对照,而不只是核对最终数值。受限伪代码追踪训练器和安全的 Python 推理沙盒可以帮你检查小例子的逻辑,错题记录与重测队列则帮你记录反复出现的错误。
有些学生能背出 CPU 的各个部分,却说不清每一步什么在改变。老师在现场追踪时很快就能找到这个缺口,它也是我们线上一对一计算机科学补习中很自然的起点。