如何设计扩展操作码--应用

在下面这一篇讲过一点点基础原理。
http://blog.csdn.net/u011240016/article/details/52717315

如果是给定指令字长,再给你一些需求,如何设计满足需求的指令格式?
光说没用,以实例求证。

假设指令字长是16位,操作数的地址码是6位,指令有0地址,一地址,二地址三种。

第一道

1)设固定操作码,若0地址指令有M种,一地址指令有N种,则二地址指令最多多少种?

解析:这个题只需要贯通固定的含义即可:无论是0地址还是1地址,亦或者是2地址,操作码位数都固定着,虽然很少,也不必介怀。因此,计算固定操作码的位数,就由最多的地址码位数决定。即:二地址时,地址码位数12位,那么只给操作码留下4位,共16种离散状态。也即二地址指令只有:16-M-N种.

第二道

采用扩展操作码技术,二地址指令最多有多少种?

解析:一般情况下,我们由多地址指令反向推导少地址指令,也即,按照扩展的思路进行,现在是反向考察,自然心里上就有一些抵触。
但是,我们不妨仍从正向角度出发:即,设二地址最多是X种,作为一个变量。那么我们知道二地址的时候,留给操作码的位数是4位,最多的离散状态是16种,现在二地址指令是X种,不能用光了16种状态,所以, X<16
再去扩展一地址指令:二地址留下16-X种作为扩展的种子。到这里,突然间发现,不必再往下看了,既然M,N都只是变量而已,根本不能对X形成什么约束,X的约束只是来自于:要留至少一个状态作为一地址的扩展。

于是:X最牛可以是15。就这样。

第三道

采用扩展码技术,若二地址指令有P条,0地址指令有Q条,则一地址指令最多几条?

解析:现在我们知道,解题的角度还是从最少的操作码开始推算:二地址留给操作码的位数是4位,共16种离散状态,也即最多16条,现在有P条指令,意味着16-P个状态用作扩展一地址指令了。
具体16-P要乘以什么呢,得由0地址推导得来。

0地址指令低6位共64种状态,设一地址留了X个状态用于0地址扩展,那么0地址共有64X = Q种。推导出 X=Q/64

因此一地址指令数目 R+X=(16P)64

==> R=(16P)64Q/64

也即:中间6位共64种状态有(16-P)*64 - Q/64用来做一地址自身了,于是一地址共有:(16-P)*64-Q/64种。

这里说最多,是因为,一地址指令可以设计的比这小,虽然理论上可以这么多。

以上。

你可能感兴趣的:(组成原理)