我正在尝试解决与指令编码有关的问题。我有一个指令长度为18位的处理器,我需要检查以下指令编码是否可能的可能性。 a)5个三个地址指令 b)95两个地址指令 c)31个地址指令 d)70个零地址指令
现在我能够完成(a)部分如下
xxx xxxxx xxxxx xxxxx
000 xxxxx xxxxx xxxxx
001 xxxxx xxxxx xxxxx
010 xxxxx xxxxx xxxxx
011 xxxxx xxxxx xxxxx
100 xxxxx xxxxx xxxxx
我可以从上面的编码中得到我的五个3地址指令,但现在我 需要95两个地址指令和更多的指令,但我似乎无法解决(b)部分,因为三个指令已经离开,我不知道如何做其余的。
101 xxxxx xxxxx xxxxx 110 xxxxx xxxxx xxxxx 111 xxxxx xxxxx xxxxx
这是剩余的三条指令,从中我还需要编码(c)和(d)part.So任何帮助将不胜感激。
答案 0 :(得分:0)
您不会在问题中拼写出来,但我认为这些xxxxx
字段是3地址指令中的5位地址字段。如果是这样,那么,如您所示,在步骤a)
之后您剩下的是三个前缀101,110和111.
对于2地址指令的编码,除了三个免费的'之外,您还可以使用第3个地址字段。前缀。由于地址字段是5位,因此它可以编码32个不同的值。三次32是96,这很好,因为你只是'对于双地址指令需要95,因此可以编码如下:
101 00000 xxxxx xxxxx ... 101 11111 xxxxx xxxxx
110 00000 xxxxx xxxxx ... 110 11111 xxxxx xxxxx
111 00000 xxxxx xxxxx ... 111 11110 xxxxx xxxxx
最后未使用的8位前缀111 11111
可用于编码1地址指令以及下一个 - 现在可用的 - 地址槽:
111 11111 00000 xxxxx ... 111 11111 11110 xxxxx
这使得13位前缀111 11111 11111
用于编码零地址指令:
111 11111 11111 00000 ... 111 11111 11111 11111
不幸的是,因为只有一个5位地址字段可用于编码剩余的零地址指令,所以我只能容纳32个,而不是70个。