Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

程序与程序计数器

复习

  • 指令把读取、运算和写回编码成比特
  • 连续放置的多条指令可以描述一项任务
  • 机器还需要知道下一条指令在哪里

TL;DR

  • 程序是一串按顺序执行的指令
  • 程序计数器 PC 保存下一条指令的地址
  • 顺序执行时 PC 加一,跳转时 PC 改成目标地址

正文

  把上一章的命令依次放进存储器:

地址指令
0读取地址 20 到 A
1读取地址 21 到 B
2A 与 B 相加
3把结果写到地址 22

  这一串指令就是程序

指向下一条指令

  我们增加一个专用寄存器,叫作程序计数器,简称 PC。开机时把 PC 清成 0,机器就这样工作:

  1. 按 PC 给出的地址取出指令
  2. 把 PC 加一,指向下一条
  3. 执行刚才取出的指令
  4. 回到第 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 国际许可协议进行许可。

封面图

设计师 | 南国微雪