扩展码再思考
@(组成原理)
之前有总结过比较规整的情况下,如何计算扩展码的问题。同时强调了扩展码要抓住操作码位数扩大的方向,同时是地址减少的方向。
可以类比IP地址子网划分时,子网号扩大,则主机号变少。
本质都是在有限字长上的二进制计算。
http://blog.csdn.net/u011240016/article/details/52717315
再思考一个问题:
某指令系统指令字长是8位。每一地址码长3位,采用扩展操作码技术。若指令系统具有两条二进制地址指令,10条零地址指令,则最多有多少条一地址指令。
分析:按照正常计算顺序,从二地址推导到一地址,再到0地址是非常简单的,因为是等式。但是如果告诉左右两边,求中间,就需要一点点不等式的思想了。
具体如下:首先看,二地址是不是推导的起点,二地址共占用6位,这样只留下2位作操作码,不可能有3地址,因此确定是最多只有二地址。二地址条件下,只有2位操作码,最多四条二地址指令。如果真的是4条二地址指令,问题就来了,就不存在一地址,零地址了。我们说要留个种子,才有扩展。
根据题干,只有2条二地址指令,意味着留了2个种子做下一级的扩展。拿一个3位的地址段,共有
23=8
个状态,乘上刚才留的两个种子,最多可以有
2⋅8=16
个一地址指令。
同样的道理,如果一地址指令不留一个或多个状态做0地址的扩展种子,就不存在0地址了。而现在是已经知道存在0地址指令,所以,要留状态。那么留几个呢?根据0地址指令个数反推。如果只留一个,那么0地址指令最多是 1⋅23=8 个。不够10个,那么就意味着至少留2个状态做种子。于是一地址最多是 16−2=14个 。