为什么5位通常是0?

时间:2015-04-12 05:21:35

标签: assembly mips bit machine-code

我学习MIPS,如果指令不是移位指令,我看到指令的5位始终为0。这似乎是浪费资源,必须这样做才能强化规则的简单性,即所有的实例都具有相同的长度?为什么移位指令不能长5位,其余指令使用这些位来处理更多溢出?

1 个答案:

答案 0 :(得分:4)

当MIPS处理器在80年代问世时,它是第一个所谓的RISC处理器,这是一个革命性的概念。当时的大多数处理器(8080系列,8086系列,Z80,6502,6800)都针对有效的指令编码,具有可变长度的指令(例如,它们可以采用1,2,3或4个字节)。这提供了良好的代码密度,但是,指令和执行的解码是一个状态机,状态的数量取决于确切的指令。

为了更快地执行,MIPS处理器进行了革命性的改变:

  • 所有指令都以32位字存储
  • 解码非常简单,大多数位应直接映射到硬件
  • 所有说明都采用相同数量的"状态"执行
  • "州"在管道而不是状态机中实现,这意味着指令吞吐量是每个指令1个周期而不是N(实际上在管道中同时有N个指令)

前两点是代码密度低的原因。 MIPS特意使程序占用的ROM / RAM空间比它们应该多得多,以便更有效地执行它们。

最后,ARM做了一些可以考虑的事情,并且#34;最好的两个" :可以在THUMB(更高的代码密度,更低的性能)和ARM(更高的性能,更低的代码密度,但仍然比MIPS更好)之间切换,具体取决于每个例程的特定需求。这可能就是为什么ARM如此受欢迎且无处不在。