Appearance
指令设计(操作码扩展)
考情分析
扩展操作码计算题是 408 大题中的常见考点,通常给出指令字长和地址码位数,要求计算各格式下能表示的最多指令条数。需要掌握"前缀保留"原则和计算方法。
固定长度操作码的局限
定长操作码的问题:所有指令的操作码位数固定,地址码位数也固定,难以同时支持地址多的指令(少位操作码)和地址少的指令(多位操作码)。
扩展操作码:让地址码少的指令"借用"多余的位来扩展操作码,实现不同指令用不同长度的操作码。
好处:在相同指令字长下,能够表示更多种类的指令。
设计原则
短操作码不能是长操作码的前缀
若某操作码为
1100(4位),则不能同时存在以1100开头的 8 位操作码(如11001010),否则译码器无法判断指令边界。各操作码不重复、不遗漏
每一种编码只属于一条指令。
使用频率高的指令用短操作码
短操作码 + 多地址位,支持更多寻址能力;长操作码 + 少地址位,用于不需要地址的特殊操作。
典型扩展操作码结构
设指令字长 16 位,地址字段每个 4 位。
格式一(三地址):[4位OP | 4位A1 | 4位A2 | 4位A3]
格式二(二地址):[8位OP | 4位A1 | 4位A2 ]
格式三(一地址):[12位OP| 4位A1 ]
格式零(零地址):[16位OP ]若格式一的操作码不包含 1111(保留用于扩展),则格式一最多表示
格式二的操作码以 1111 开头(4位),再用 4 位扩展:最多 11111111 用于格式三)。
以此类推。
标准计算模型
设指令字长
- 三地址:操作码
位,三个 位地址 - 二地址:操作码
位,两个 位地址 - 一地址:操作码
位,一个 位地址
条件:
因此:
前缀保留:三地址格式中预留若干编码不用,留给二地址格式做前缀。设三地址格式有
二地址格式最多编码数 =
经典例题
题1:16位指令,4位地址字段,三段扩展
指令字长 16 位,地址字段每段 4 位。
三地址格式:OP = 4 位,地址 = 4+4+4 = 12 位
操作码
0000~1110(保留1111)= 15 条三地址指令二地址格式:OP = 8 位,地址 = 4+4 = 8 位
前4位固定为
1111,后4位:0000~1110(保留1111)= 15 条二地址指令一地址格式:OP = 12 位,地址 = 4 位
前8位固定为
1111 1111,后4位:0000~1110(保留1111)= 15 条一地址指令零地址格式:OP = 16 位
前12位固定为
1111 1111 1111,后4位:0000~1111= 16 条零地址指令
总计:
题2:给定已有指令数,求另一格式最多多少条
题:指令字长 12 位,操作数地址字段 3 位。已知有 8 条三地址指令,求最多能有多少条二地址指令?
三地址格式:操作码
已有 8 条,全部用完,没有剩余操作码可供二地址格式使用。
答:0 条(三地址已将 3 位操作码用尽,无法扩展)。
换:已知有 4 条三地址指令,求最多多少条二地址指令?
三地址使用 4 个编码(000~011),保留 100~111 共 4 个前缀给二地址扩展。
二地址格式:OP = 3+3 = 6 位,前 3 位是 4 种保留前缀之一,后 3 位自由。
最多 =
题3:逆向推导(给定各格式指令数,验证是否可行)
题:16 位指令字,地址字段 4 位。需要 15 条三地址、15 条二地址、15 条一地址和 16 条零地址指令,能否设计?
按题1的方案,正好是 15+15+15+16 = 61 条,可行。
扩展操作码的一般公式
设操作码从
其中
考点清单
- 短操作码不能是长操作码的前缀(唯一可译码原则)
- 扩展操作码:保留若干短操作码作为"扩展标记",用更多位给下一格式
- 三地址保留
个 → 二地址能用 个编码( 为扩展位数) - 若上一格式已用满所有编码,则无法继续扩展
- 计算题思路:从最短操作码格式开始,逐级计算保留数量和可用数量