Thumb(ARM体系结构的指令集)

Thumb是ARM体系结构中一种16位的指令集。Thumb指令集可以看作是ARM指令压缩形式的子集,它是为减小代码量而提出,具有16bit的代码密度。Thumb指令体系并不完整,只支持通用功能,必要时仍需要使用ARM指令,如进入异常时。其指令的格式与使用方式与ARM指令集类似,而且使用并不频繁,Thumb指令集作一般了解。

Thumb指令

基本介绍

Thumb是ARM体系结构中一种16位的指令集。

从ARMv4T之后的ARM处理器有一种16-bit指令模式,叫做Thumb,也许跟每个条件式执行指令均耗用4位元的情形有关。Thumb指令集可以看作是ARM指令压缩形式的子集,它是为减小代码量而提出,具有16bit的代码密度。Thumb指令体系并不完整,只支持通用功能,必要时仍需要使用ARM指令,如进入异常时。其指令的格式与使用方式与ARM指令集类似,而且使用并不频繁,Thumb指令集作一般了解。

在Thumb模式下,较小的指令码有更少的功能性。例如,只有分支可以是条件式的,且许多指令码无法存取所有CPU的暂存器。然而,较短的指令码提供整体更佳的编码密度,即使有些运算需要更多的指令。特别在内存埠或总线宽度限制在32以下的情形时,更短的Thumb指令码能更有效地使用有限的内存带宽,因而提供比32位元程式码更佳的效能。典型的嵌入式硬件仅具有较小的32-bit datapath寻址范围以及其他更窄的16 bits寻址。

Thumb指令在分支指令中一部分可以在ARM指令集之间切换,Thumb的数据处理指令都能映射到相应的ARM数据处理指令中。但是单寄存器和多寄存器的加载和存储指令是不能相互交换的。

最早应用Thumb技术的处理器是ARM7TDMI系列的内核。所有ARM9和后来的家族,包括XScale都纳入了Thumb技术。Thumb达到的卓越的代码效率意味着对存储器容量需求的降低,使得利用16位宽度的存储器可以达到32位存储器才能达到的高性能。

在编写Thumb指令时,先要使用伪指令CODE16声明,编写ARM指令时,则可使用CODE32伪指令声明。

1、Thumb指令集没有协处理器指令、信号量指令、以及访问CPSR或SPSR的指令,没有乘加指令及64位乘法指令等,且指令的第二操作数受到限制;

2、大多数的Thumb数据处理指令采用2地址格式;

3、除了跳转指令B有条件执行功能之外,其他指令均为无条件执行,而且分支指令的跳转范围有更多限制;

4、数据处理指令是对通用寄存器进行操作,在大多数情况下,操作的结果放入其中一个操作数寄存器中,而不是放入第3个寄存器中;访问寄存器R8~R15受到一定的限制,除MOV、ADD指令访问R8~R15外,其他数据处理指令总是更新CPSR中ALU状态标志,访问寄存器R8~R15的Thumb数据处理指令不能更新CPSR中的ALU状态指示。

5、Thumb状态下,单寄存器加载和存储指令只能访问寄存器R0~R7;

6、LDM、STM指令可以将任何范围为R0~R7的寄存器子集加载或存储;

7、PUSH、POP指令使用栈寄存器R13作为基址堆栈操作。

Thumb指令与ARM指令的区别

1.分支指令:跳转的范围小,除B指令外,都是无条件跳转。

2.数据处理指令:Thumb指令只有2个操作数,而ARM指令是3个操作数。

3.单寄存器加载存储指令:Thumb指令只能访问R0~R7.

4.多寄存器加载存储指令:Thumb指令只能访问R0~R7的子集。

5.Thumb特有指令:PUSH和POP作用于R13.

Thumb应用

在Thumb平台上每提出一个问题就会平均收到50-100个回复,这些回复可能是问题的答案,也可能是用户对此的评论等等。如此一来,Thumb会逐渐累积各种类型问题的回复。

原创文章,作者:来自网友投稿,如若转载,请注明出处:https://www.ladyww.cn/article/20230117130707.html