拓展操作码举例

拓展操作码举例

指令字长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.个指令的操作码一定不可重复

对于使用频率高的指令,分配比较短的操作码,对使用频率低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间

![image-20250914171051336](/Users/tusier/Library/Application Support/typora-user-images/image-20250914171051336.png)

对于扩展操作码,可以用类似于子网划分的方法理解(计算机网络)

设地址长度为n,上一层留出m种状态,下一层可以扩展出m x 2^n种状态

比方说三地址指令2的四次可以表示16种状态,而实际上只表示了15种,那么这一层就留出了1

然后在二地址指令 就可以扩展出1x2的四次=16种,而实际上使用了12种,那么这一次就留出了4

然后在一地址指令 可以扩展出 4x2的四次=64种,实际上使用了62种,这一层留出了2

最后在零地址指令,可以拓展出2x2的四次=32

posted @ 2025-09-14 17:18  是我,米老鼠  阅读(16)  评论(0)    收藏  举报