Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

指令系统基础

复习

  • 小计算机已经能在人工控制下读取、运算和写回
  • 控制线决定每一步的数据流向
  • 我们想把这些操作写进存储器,让机器自己照做

TL;DR

  • 指令是机器能执行的一条命令
  • 操作码说明做什么,操作数说明对谁做
  • 指令也是一串比特,因此可以和普通数据一起存放

正文

  上一章的人类指挥员会说:“读地址 20”“读地址 21”“做加法”“写到地址 22”。要让机器自己工作,先把这些话翻译成固定格式的比特。

  这样的一句话叫作指令

一句话的两部分

  一条指令至少要回答两个问题:

  • 做什么:操作码
  • 对谁做:操作数

  例如,我们给极简机器约定:

操作码含义
0001把某地址的数据读入寄存器 A
0010把某地址的数据读入寄存器 B
0011A 与 B 相加,结果放进结果寄存器
0100把结果写到某地址

  若后面 8 位用来写地址,那么:

0001 00010100

  就可以表示“把地址 20 的数据读入 A”。前 4 位是操作码,后 8 位是操作数。

编号本身没有魔法

  为什么 0001 表示读取,而不是加法?没有为什么,这是设计者的约定。就像字符编码约定 65 表示字母 A,只要负责解释的一方使用同一张表,机器就能照办。

  所有可用指令以及它们的编码规则,合起来叫作指令集

指令也是数据

  指令写成比特后,外表和数字没有区别。它可以被存入、读取和搬运。不同只在于:控制器把这串比特当命令解释,ALU 把另一串比特当数值解释。

  现在,我们可以把许多条指令依次放进存储器。可机器执行完第一条以后,怎样找到第二条?下一章给它一根始终指向“下一条指令”的手指。

思考题

  同一串比特为什么既可能是数字,也可能是指令?机器靠什么决定怎样解释它?

小结

知识点

  • 指令由操作码和操作数组成
  • 指令集规定机器能听懂哪些编码
  • 指令与普通数据在存储器里都是比特

思考题答案(仅供参考)

  比特本身没有自带含义。它来自哪个位置、被送到哪个部件,决定解释方式:进入指令寄存器并交给控制器时被当作命令,进入运算器时则可能被当作数字。

协议

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

封面图

设计师 | 南国微雪