程序与程序计数器
复习
- 指令把读取、运算和写回编码成比特
- 连续放置的多条指令可以描述一项任务
- 机器还需要知道下一条指令在哪里
TL;DR
- 程序是一串按顺序执行的指令
- 程序计数器 PC 保存下一条指令的地址
- 顺序执行时 PC 加一,跳转时 PC 改成目标地址
正文
把上一章的命令依次放进存储器:
| 地址 | 指令 |
|---|---|
| 0 | 读取地址 20 到 A |
| 1 | 读取地址 21 到 B |
| 2 | A 与 B 相加 |
| 3 | 把结果写到地址 22 |
这一串指令就是程序。
指向下一条指令
我们增加一个专用寄存器,叫作程序计数器,简称 PC。开机时把 PC 清成 0,机器就这样工作:
- 按 PC 给出的地址取出指令
- 把 PC 加一,指向下一条
- 执行刚才取出的指令
- 回到第 1 步
取完地址 0,PC 变成 1;取完地址 1,又变成 2。只要时钟继续,机器就会沿着程序自动前进。
不总是往下走
顺序执行只能完成一条直路。要做“如果结果为零就结束”,或者“没有算完就再来一轮”,必须允许程序改变 PC。
例如一条“若 Z = 1,跳到地址 8”的指令:条件成立,就把 8 写进 PC;不成立,PC 保持原来已经加一的值。循环也不过是把 PC 改回较小的地址。
状态标志在这里终于参与决定:ALU 只负责产生 Z,跳转指令负责根据 Z 选择下一条路。
谁完成这些小动作
PC 会指出地址,但仍有人要发出“读取指令”“PC 加一”“执行”“写回”等控制信号。下一章,我们造出那个按时钟逐步发号施令的部件。
思考题
一个循环结束后,若机器忘了把 PC 改回循环开头,会发生什么?
小结
知识点
- 程序是有顺序的一串指令
- PC 保存下一条指令地址
- 顺序执行、条件跳转与循环都通过改变 PC 实现
思考题答案(仅供参考)
PC 会继续指向循环之后的指令,循环只执行一次便离开。重复并不是指令天然会做的事,而是跳转把 PC 再次指回开头造成的。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪