Arm RISC处理器没有向后兼容性吗?

Arm RISC处理器没有向后兼容性吗?,arm,cpu-architecture,backwards-compatibility,instruction-set,risc,Arm,Cpu Architecture,Backwards Compatibility,Instruction Set,Risc,我正在读一本教科书,上面写着: RISC处理器在嵌入式处理器市场上做得很好,它控制着手机、汽车刹车和互联网设备等系统。在这些应用程序中,节省成本和电源比保持向后兼容性更重要 这是否意味着RISC处理器(如ARM)与旧版本不向后兼容?这是正确的;例如,在非常旧的ARM上,一个具有非零低位的字加载意味着旋转一个对齐的字。在现代ARM上,这些位只是地址的一部分,给您一个未对齐的负载 所以ARM在某一点上巧妙地打破了依赖于该特性的罕见代码的兼容性,使得这些旧的二进制文件在现代ARM上无法使用。大多数AR

我正在读一本教科书,上面写着:

RISC处理器在嵌入式处理器市场上做得很好,它控制着手机、汽车刹车和互联网设备等系统。在这些应用程序中,节省成本和电源比保持向后兼容性更重要


这是否意味着RISC处理器(如ARM)与旧版本不向后兼容?

这是正确的;例如,在非常旧的ARM上,一个具有非零低位的字加载意味着旋转一个对齐的字。在现代ARM上,这些位只是地址的一部分,给您一个未对齐的负载

所以ARM在某一点上巧妙地打破了依赖于该特性的罕见代码的兼容性,使得这些旧的二进制文件在现代ARM上无法使用。大多数ARM二进制文件仍然很好,因为它们完全避免了未对齐的单词加载/存储。

另一个例子是

通常,当引入新的ISA版本时,会添加指令,但为了向后兼容,旧指令仍保留原样。例如,在x86中,许多几十年来没有人使用的指令直到现在仍然有效并受支持。然而,在MIPS III中,删除了一些指令以释放一些操作码。然后在MIPS V之后,当MIPS技术从SGI中分离出来时,引入了一个重大的检修:MIPS32/MIPS64。命名方案已更改,并且删除了更多说明

  • 一些有条件的举动
  • 分支指令(在早期版本中已弃用)
  • 带16位立即数的整数溢出捕获指令
  • 整数累加器指令(连同HI/LO寄存器,移动到DSP应用程序特定扩展)
  • 未对齐的加载指令(LWL和LWR)(要求大多数普通加载和存储支持未对齐的访问,可能通过捕获并添加新指令(BALIGN))

它还“重新组织了指令编码,为将来的扩展腾出空间。”


其中一个原因可能是MIPS将重点从高性能系统转移到了嵌入式系统

哪本教科书?@phuclv教科书是CSAPP你在这本书中读得太重了。“更重要”的反面不是“不重要”。没有市场用例。为什么要为没有价值的东西在产品中添加浪费呢?如果本文试图回答RISC和向后兼容性不相关,那么就找一本更好的教科书。您可以很容易地阅读指令集上的arm文档,并了解有多大的兼容性。谢谢您的回答。那么,为什么我们不能让RISC处理器像X86-64那样向后兼容呢?@slowjams:如果你愿意,你可以这样做,只是没有市场理由以不进行会导致轻微不兼容的改进为代价来保持向后兼容。我认为其他一些RISC ISA,如MIPS,确实在很长一段时间内保持向后兼容(直到MIPS64r6重组了一堆操作码并提供了没有分支延迟槽的分支)。直到2014年MIPS32r6/MIPS64r6,操作码reorg才出现。在此之前,我认为MIPS32/MIPS64非常接近向后兼容,至少在用户空间代码方面是如此。我想我记得维基百科更清楚地说明了这一点,至少有一些MIPS32r6的副标题将其与早些时候的MIPS32区分开来。