ARMv4/5/6代码的哪些部分在ARMv7上不起作用?

ARMv4/5/6代码的哪些部分在ARMv7上不起作用?,arm,backwards-compatibility,cpu-architecture,binary-compatibility,Arm,Backwards Compatibility,Cpu Architecture,Binary Compatibility,据我所知,ARMv7处理器,如Cortex-A9,大多向后兼容较旧ARM架构版本的代码。然而,我读过的报告,例如 ARMv4/5/6(ARM7TDMI/ARM9/ARM11)代码的哪些部分在ARMv7处理器上不起作用?这些较旧的ARM体系结构版本中存在哪些功能或体系结构特征会导致为这些版本构建的程序在ARMv7上失败?编译armv4指令应该一直有效 你的问题的真正问题不是没有自己研究这个主题(你花了更长的时间来避免研究它,而不是研究它),是你可能希望从一个平台移植到下一个平台的大部分代码都与外围

据我所知,ARMv7处理器,如Cortex-A9,大多向后兼容较旧ARM架构版本的代码。然而,我读过的报告,例如


ARMv4/5/6(ARM7TDMI/ARM9/ARM11)代码的哪些部分在ARMv7处理器上不起作用?这些较旧的ARM体系结构版本中存在哪些功能或体系结构特征会导致为这些版本构建的程序在ARMv7上失败?

编译armv4指令应该一直有效

你的问题的真正问题不是没有自己研究这个主题(你花了更长的时间来避免研究它,而不是研究它),是你可能希望从一个平台移植到下一个平台的大部分代码都与外围设备有关,而不是指令集。您的大多数代码不会进行移植,这不是因为指令集,而是因为计时器、UART、视频和usb控制器等。这些不是wintel机箱,它们不尝试反向兼容


你链接的问题其实没有什么实质性的内容,因为OP没有写下任何代码,也没有在这个主题上做任何工作,至少没有在stackoverflow公开,这可能是一个简单的坏代码案例,与处理器核心无关,也可能是一个外围设备不存在并访问它们的案例,您可能会遇到挂起或崩溃。

对于应用程序代码,主要问题是未对齐的内存访问。在ARMv4和可在ARMv4到ARMv6上配置之前,从未对齐的地址加载LDR将导致读取的数据被旋转,而其他内存访问的行为就像最低有效2位为零一样。

此问题所需的所有文档都在那里,看看架构参考手册和技术参考手册。这有点太复杂了,有人能把这些信息提炼成容易理解的东西吗?我在寻找一个答案,比如“较旧的ARM代码通常会在ARMv7处理器上运行,但有以下例外……”您读过ARMv7a体系结构参考手册的附录“m”和“O”吗?他们似乎给出了最接近你想要的答案;只有ARM客户才能下载这些文件。@DragonLord不正确-访问架构文档需要注册,但不要求成为客户。事实上,这就是中所示的行为。本质上,你是说链接问题的OP得到的旋转输出是ARMv6和更早版本的特征,同样的代码会在ARMv7上崩溃?