指令系统基础
复习
- 小计算机已经能在人工控制下读取、运算和写回
- 控制线决定每一步的数据流向
- 我们想把这些操作写进存储器,让机器自己照做
TL;DR
- 指令是机器能执行的一条命令
- 操作码说明做什么,操作数说明对谁做
- 指令也是一串比特,因此可以和普通数据一起存放
正文
上一章的人类指挥员会说:“读地址 20”“读地址 21”“做加法”“写到地址 22”。要让机器自己工作,先把这些话翻译成固定格式的比特。
这样的一句话叫作指令。
一句话的两部分
一条指令至少要回答两个问题:
- 做什么:操作码
- 对谁做:操作数
例如,我们给极简机器约定:
| 操作码 | 含义 |
|---|---|
0001 | 把某地址的数据读入寄存器 A |
0010 | 把某地址的数据读入寄存器 B |
0011 | A 与 B 相加,结果放进结果寄存器 |
0100 | 把结果写到某地址 |
若后面 8 位用来写地址,那么:
0001 00010100
就可以表示“把地址 20 的数据读入 A”。前 4 位是操作码,后 8 位是操作数。
编号本身没有魔法
为什么 0001 表示读取,而不是加法?没有为什么,这是设计者的约定。就像字符编码约定 65 表示字母 A,只要负责解释的一方使用同一张表,机器就能照办。
所有可用指令以及它们的编码规则,合起来叫作指令集。
指令也是数据
指令写成比特后,外表和数字没有区别。它可以被存入、读取和搬运。不同只在于:控制器把这串比特当命令解释,ALU 把另一串比特当数值解释。
现在,我们可以把许多条指令依次放进存储器。可机器执行完第一条以后,怎样找到第二条?下一章给它一根始终指向“下一条指令”的手指。
思考题
同一串比特为什么既可能是数字,也可能是指令?机器靠什么决定怎样解释它?
小结
知识点
- 指令由操作码和操作数组成
- 指令集规定机器能听懂哪些编码
- 指令与普通数据在存储器里都是比特
思考题答案(仅供参考)
比特本身没有自带含义。它来自哪个位置、被送到哪个部件,决定解释方式:进入指令寄存器并交给控制器时被当作命令,进入运算器时则可能被当作数字。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪