拓展操作码举例
指令字长16位,每个地址码占4位:
那么如果要表示三地址操作码有16条
前四位表示操作码op,后面有3个4位长的地址字段A1,A2,A3
三地址指令
至少需要将1111留作扩展操作码之用,因此三地址指令只能有2^4 -1=15条
二地址指令
至少将 1111 1111 留作扩展操作码之用,因此只能有2^4 -1=15条 (前面四个1固定)
一地址指令
111111111111留作扩展操作码之用,只能有2^4 -1=15条(前面8个1固定)
零地址指令
零地址指令为16条
需要注意以下两点
1,不允许短码是长吗的前缀,短操作码不可与长操作码的前面部分的代码相同(哈夫曼树)
2.个指令的操作码一定不可重复
对于使用频率高的指令,分配比较短的操作码,对使用频率低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间

对于扩展操作码,可以用类似于子网划分的方法理解(计算机网络)
设地址长度为n,上一层留出m种状态,下一层可以扩展出m x 2^n种状态
比方说三地址指令2的四次可以表示16种状态,而实际上只表示了15种,那么这一层就留出了1种
然后在二地址指令 就可以扩展出1x2的四次=16种,而实际上使用了12种,那么这一次就留出了4种
然后在一地址指令 可以扩展出 4x2的四次=64种,实际上使用了62种,这一层留出了2种
最后在零地址指令,可以拓展出2x2的四次=32种