Skip to content

指令设计(操作码扩展)

考情分析

扩展操作码计算题是 408 大题中的常见考点,通常给出指令字长和地址码位数,要求计算各格式下能表示的最多指令条数。需要掌握"前缀保留"原则和计算方法。

固定长度操作码的局限

定长操作码的问题:所有指令的操作码位数固定,地址码位数也固定,难以同时支持地址多的指令(少位操作码)和地址少的指令(多位操作码)。

扩展操作码:让地址码少的指令"借用"多余的位来扩展操作码,实现不同指令用不同长度的操作码。

好处:在相同指令字长下,能够表示更多种类的指令。

设计原则

  1. 短操作码不能是长操作码的前缀

    若某操作码为 1100(4位),则不能同时存在以 1100 开头的 8 位操作码(如 11001010),否则译码器无法判断指令边界。

  2. 各操作码不重复、不遗漏

    每一种编码只属于一条指令。

  3. 使用频率高的指令用短操作码

    短操作码 + 多地址位,支持更多寻址能力;长操作码 + 少地址位,用于不需要地址的特殊操作。

典型扩展操作码结构

设指令字长 16 位,地址字段每个 4 位。

格式一(三地址):[4位OP | 4位A1 | 4位A2 | 4位A3]
格式二(二地址):[8位OP | 4位A1 | 4位A2    ]
格式三(一地址):[12位OP| 4位A1              ]
格式零(零地址):[16位OP                      ]

若格式一的操作码不包含 1111(保留用于扩展),则格式一最多表示 241=15 条三地址指令。

格式二的操作码以 1111 开头(4位),再用 4 位扩展:最多 241=15 条(再保留 11111111 用于格式三)。

以此类推。

标准计算模型

设指令字长 n 位,定义三种格式:

  • 三地址:操作码 k1 位,三个 m 位地址
  • 二地址:操作码 k2 位,两个 m 位地址
  • 一地址:操作码 k3 位,一个 m 位地址

条件:k1+3m=k2+2m=k3+m=n

因此:k2=k1+mk3=k1+2m

前缀保留:三地址格式中预留若干编码不用,留给二地址格式做前缀。设三地址格式有 p 个操作码保留,则二地址格式的操作码以这 p 种前缀之一开头:

二地址格式最多编码数 = p×2k2k1q(其中 q 是继续保留给一地址的数量)

经典例题

题1:16位指令,4位地址字段,三段扩展

指令字长 16 位,地址字段每段 4 位。

  • 三地址格式:OP = 4 位,地址 = 4+4+4 = 12 位

    操作码 00001110(保留 1111)= 15 条三地址指令

  • 二地址格式:OP = 8 位,地址 = 4+4 = 8 位

    前4位固定为 1111,后4位:00001110(保留 1111)= 15 条二地址指令

  • 一地址格式:OP = 12 位,地址 = 4 位

    前8位固定为 1111 1111,后4位:00001110(保留 1111)= 15 条一地址指令

  • 零地址格式:OP = 16 位

    前12位固定为 1111 1111 1111,后4位:00001111 = 16 条零地址指令

总计:15+15+15+16=61 条指令。

题2:给定已有指令数,求另一格式最多多少条

:指令字长 12 位,操作数地址字段 3 位。已知有 8 条三地址指令,求最多能有多少条二地址指令?

三地址格式:操作码 123×3=3 位,三地址指令最多 23=8 条。

已有 8 条,全部用完,没有剩余操作码可供二地址格式使用。

答:0 条(三地址已将 3 位操作码用尽,无法扩展)。

:已知有 4 条三地址指令,求最多多少条二地址指令?

三地址使用 4 个编码(000~011),保留 100~111 共 4 个前缀给二地址扩展。

二地址格式:OP = 3+3 = 6 位,前 3 位是 4 种保留前缀之一,后 3 位自由。

最多 = 4×23=32 条二地址指令(若不继续向下扩展)。

题3:逆向推导(给定各格式指令数,验证是否可行)

:16 位指令字,地址字段 4 位。需要 15 条三地址、15 条二地址、15 条一地址和 16 条零地址指令,能否设计?

按题1的方案,正好是 15+15+15+16 = 61 条,可行。

扩展操作码的一般公式

设操作码从 k1 位扩展到 k2 位(k2>k1),已分配给上一格式 n1 个操作码,则可用于下一格式的编码数为:

n2=p2k2k1

其中 p 是为扩展保留的前缀数(即上一格式未使用的操作码数)。

考点清单

  • 短操作码不能是长操作码的前缀(唯一可译码原则)
  • 扩展操作码:保留若干短操作码作为"扩展标记",用更多位给下一格式
  • 三地址保留 p 个 → 二地址能用 p×2m 个编码(m 为扩展位数)
  • 若上一格式已用满所有编码,则无法继续扩展
  • 计算题思路:从最短操作码格式开始,逐级计算保留数量和可用数量

真题练习

相关真题(2题)

2022Q19选择题2分

操作码扩展编码与零地址指令数量计算

2017Q16选择题2分

操作码扩展与指令字长的最小值计算