【问题标题】:What is the ARM Thumb Instruction set?什么是 ARM Thumb 指令集?
【发布时间】:2012-05-25 04:07:51
【问题描述】:

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

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

谁能解释一下这句话,特别是第二句话,并说处理器是如何执行它的?

【问题讨论】:

    标签: arm thumb instruction-set


    【解决方案1】:

    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”(汇编器会忽略它)。

    【讨论】:

    • 原始拇指指令集仅包含 16 位指令。 Thumb2 引入了混合 16/32 位指令。 Thumb(1) 只是 ARM 指令集的压缩版本。 CPU 将在指令获取时启用“解压缩器”,因此最终 CPU 仍会处理 ARM 指令。对于 ARM 来说,这很可能是一种快速但优雅的 hack,可以减少代码大小和 ICache-Utilization,而对实际内核的更改很少。 Thumb2 添加了许多新功能,例如前面提到的“IT*”指令和一些 32 位指令。
    • 哪个更受欢迎? 32 位处理器必须使用 ARM 指令,16 位处理器必须使用 Thumb 指令吗?
    • @Rajesh AFAIK 没有“16 位 ARM 处理器”。如果您的目标是 armv7 或更高版本,请使用 Thumb。
    • @Rajesh:具有单独 16 位和 32 位模式的机器倾向于以大致相同的每条指令速度执行这两种指令,但执行许多指令所需的 32 位指令数量任务将小于 16 位操作的数量。因此,对速度至关重要的部分代码通常会从使用 32 位模式中受益,而对速度要求不高的部分则可以使用 16 位模式变得更紧凑。
    • @Rajesh。不要谈论 16 位和 32 位模式。指令的长度与处理器寄存器的长度无关。 80386 可以是 16 位模式的数据和 32 位模式的地址长度,反之亦然,指令相同。手臂不能在 16 位模式下获取数据!在英特尔出现让我们感到困惑之前,x 位处理器只是意味着具有 x 位宽数据路径的处理器。英特尔包含至少 4 条单独的指令,用于将寄存器 A 移动到寄存器 B,并且它们的长度不同。 Groetjes Albert
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多