【问题标题】:Instruction addresses through Instruction Set Encoding通过指令集编码的指令地址
【发布时间】:2016-09-10 21:31:44
【问题描述】:

我正在尝试解决与指令编码相关的问题。我有一个指令长度为 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章 第111章

这些是剩下的三个指令,我还需要对 (c) 和 (d) 部分进行编码。因此,我们将不胜感激。

【问题讨论】:

  • 嗯 - 我可以从 a) 到 c) 但我发现无法适应 70 个零地址指令 - 我只能适应 32 个。
  • 是的,我现在也面临着同样的事情......我想 d) 选项是不可能的。你能分享你解决前三个的方法吗,这会有所帮助。跨度>
  • 当然 - 见下文。

标签: computer-science cpu-architecture


【解决方案1】:

您没有在问题中将其拼写出来,但我的印象是那些 xxxxx 字段是 3 地址指令中的 5 位地址字段。如果是这种情况,那么正如您所展示的,您在步骤a) 之后剩下的是三个前缀 101、110 和 111。

为了对 2-address 指令进行编码,除了三个“免费”前缀之外,您还可以使用第三个地址字段。由于地址字段是 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-address 指令以及下一个 - 现在可用 - 地址槽:

111 11111 00000 xxxxx ... 111 11111 11110 xxxxx

留下 13 位前缀 111 11111 11111 用于编码零地址指令:

111 11111 11111 00000 ... 111 11111 11111 11111

不幸的是,由于只有一个 5 位地址字段可用于对剩余的零地址指令进行编码,因此我只能放入其中的 32 个,而不是所需的 70 个。

【讨论】:

  • 嗯,我没有正确拼写地址字段,但我现在明白了 d) 选项是不可能的。非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 2018-03-18
  • 1970-01-01
相关资源
最近更新 更多