58

在“ARM11TechnicalRefManual”第 1-34 节的“Thumb 指令集”下,它说:

“Thumb 指令集是最常用的 32 位 ARM 指令的子集。Thumb 指令的长度为 16 位,对应的 32 位 ARM 指令对处理器型号的影响相同。”

任何人都可以解释更多关于这个特别是第二句话的内容,并说处理器是如何执行它的吗?

4

1 回答 1

80

ARM 处理器有 2 个指令集,传统的 ARM 集,其中指令都是 32 位长,以及更精简的 Thumb 集,其中最常见的指令是 16 位长(有些是 32 位长)。开发人员可以选择运行哪个指令集,并且只能激活一组(即一旦处理器切换到 Thumb 模式,所有指令都将被解码为使用 Thumb 而不是 ARM)。

尽管它们是不同的指令集,但它们共享相似的功能,并且可以使用相同的汇编语言来表示。例如,指令

ADDS  R0, R1, R2

可以编译为 ARM (E0910002 / 11100000 10010001 00000000 00000010) 或 Thumb (1888 / 00011000 10001000)。当然,它们执行相同的功能(添加 r1 和 r2 并将结果存储到 r0),即使它们具有不同的编码。这就是Thumb 指令的含义是 16 位长,并且有对应的 32 位 ARM 指令,对处理器型号有相同的影响。

Thumb 编码中的每条*指令在 ARM 中也有对应的编码,即“子集”语句的意思。


*: 不完全正确,ARM 中没有“IT”指令,尽管 ARM 无论如何都不需要“IT”(汇编器会忽略它)。

于 2012-05-17T15:22:29.820 回答