| 项目 | 值 |
|---|---|
| 定长操作码 | 所有指令操作码等长,规整但浪费 |
| 变长操作码 | 不同指令操作码长度不同,灵活但复杂 |
| 扩展操作码 | 定长 + 变长的折中,408 重点考 |
| n 位操作码 | 最多表示 $2^{n}$ 条指令 |
| RISC | 定长操作码 |
| CISC | 变长操作码 |
操作码(Opcode)是指令中用于指定操作类型的部分。
核心思想:短操作码留给常用指令(地址码多 → 操作数多),长操作码留给不常用指令(地址码少 → 操作数少)。
设计步骤(以 16 位指令字长、4 位为一个字段为例):
0000~1110)→ 15 条三地址指令,留 1111 作扩展标志1111 0000~1111 1110)→ 15 条二地址指令1111 1111 0000~1111 1111 1110)→ 15 条一地址指令1111 1111 1111 0000~1111 1111 1111 1111)→ 16 条零地址指令若 $k$ 位操作码、每个地址码 $a$ 位、指令字长 $L$ 位:
| 编码方式 | 优点 | 缺点 |
|---|---|---|
| 定长操作码 | 译码简单,规整 | 指令条数受限 |
| 变长操作码 | 灵活,充分利用位数 | 译码复杂 |
| 扩展操作码 | 折中方案 | 设计复杂 |
| 考法 | 解题套路 |
|---|---|
| 求最多可设计多少条指令 | 根据操作码位数计算 $2^{n}$ |
| 扩展操作码设计 | 短码留扩展标志,长码用前缀区分 |
| 计算各类指令的数量 | 逐层计算:总编码 − 已用编码 |
| 判断编码是否合法 | 检查是否有前缀冲突 |
| 操作码位数与指令数关系 | $n$ 位 → 最多 $2^{n}$ 条 |
0000~1110,共 15 条(1111 扩展)1111 + 4 位,0000~1110,共 15 条1111 1111 + 4 位,0000~1110,共 15 条1111 1111 1111 + 4 位,0000~1111,共 16 条↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。