gpt4 book ai didi

arm - ARM、Thumb 和 Thumb 2 指令编码之间有什么区别?

转载 作者:行者123 更新时间:2023-12-03 08:35:51 25 4
gpt4 key购买 nike

我对指令集有点困惑。有 Thumb、ARM 和 Thumb 2。从我所读到的 Thumb 指令都是 16 位的,但在 内。 ARMv7M 用户手册 (第 vi 页)提到了 Thumb 16 位和 Thumb 32 位指令。

现在我必须克服这种困惑。据说Thumb 2支持16位和32位指令。那么 ARMv7M 实际上是否支持 Thumb 2 指令而不仅仅是 Thumb?

还有一件事。我可以说 Thumb(32 位)与同样是 32 位的 ARM 指令相同吗?

最佳答案

哦,ARM 和他们愚蠢的命名...

这是一个常见的误解,但官方没有“Thumb-2 指令集”这样的东西。

忽略 ARMv8(一切都被重命名,AArch64 使事情复杂化),从 ARMv4T 到 ARMv7-A 有两个 指令集 : ARM 和拇指。它们都是“32 位”,因为它们在具有 32 位地址的 32 位宽寄存器中对高达 32 位宽的数据进行操作。事实上,它们重叠的地方代表完全相同的指令——只是指令 编码 这是不同的,并且 CPU 实际上只有两个不同的解码前端到它的管道,它可以在它们之间切换。为了清楚起见,我现在将故意避免使用术语“32 位”和“16 位”......

ARM 指令具有固定宽度的 4 字节编码,需要 4 字节对齐。 Thumb 指令具有需要 2 字节对齐的可变长度(2 或 4 字节,现在称为“窄”和“宽”)编码 - 大多数指令具有 2 字节编码,但 blblx一直有 4 字节编码*。真正令人困惑的是 ARMv6T2,它引入了“Thumb-2 技术”。 Thumb-2 不仅包括向 Thumb 添加加载更多指令(主要使用 4 字节编码)使其几乎与 ARM 相同,而且还扩展了执行状态以允许有条件地执行大多数 Thumb 指令,最后引入了一个全新的汇编语法(UAL,“统一汇编语言”)取代了以前单独的 ARM 和 Thumb 语法,并允许编写一次代码并将其组装到任一指令集而无需修改。

Cortex-M 架构仅实现 Thumb 指令集 - ARMv7-M (Cortex-M3/M4/M7) 支持大部分“Thumb-2 技术”,包括条件执行和 VFP 指令的编码,而 ARMv6-M (Cortex-M3/M4/M7) M0/M0+) 仅以少数 4 字节系统指令的形式使用 Thumb-2。

因此,新的 4 字节编码(以及后来在 ARMv7 修订版中添加的那些)仍然是 拇指说明 - 它们的“Thumb-2”方面是它们可以有 4 字节编码,并且它们可以(大部分)通过 it 有条件地执行(而且,我想,他们的助记符仅在 UAL 中定义)。

* 在ARMv6T2之前,是否bl实际上是一个复杂的实现细节(或 blx )作为 4 字节指令或一对 2 字节指令执行。架构定义是后者,但由于它们只能按顺序成对执行,因此出于性能原因将它们融合为一条指令不会有什么损失(除了中途中断的能力)。 ARMv6T2 只是在融合的单指令执行方面重新定义了事物

关于arm - ARM、Thumb 和 Thumb 2 指令编码之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28669905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com