首页 理论教育ARM嵌入式系统:Thumb指令简介

ARM嵌入式系统:Thumb指令简介

【摘要】:Thumb不是一个完整的体系结构,不能指望处理器只执行Thumb指令而不支持ARM指令集。因此,Thumb指令只需要支持通用功能,必要时可以借助完善的ARM指令集。Thumb指令集与ARM指令集的区别一般有如下几点:●转指令。Thumb数据处理指令是对通用寄存器进行操作,在大多数情况下,操作的结果须放入其中一个操作数寄存器中,而不是第3个寄存器中。在Thumb状态下,单寄存器加载和存储指令只能访问寄存器R0~R7。

为了兼容存储系统总线宽度为16位的应用系统,ARM体系结构中提供了16位Thumb指令集,它可以看作是ARM指令压缩形式的子集,是针对代码密度的问题而提出的,它具有16位的代码密度,这对嵌入式系统来说至关重要。

Thumb不是一个完整的体系结构,不能指望处理器只执行Thumb指令而不支持ARM指令集。因此,Thumb指令只需要支持通用功能,必要时可以借助完善的ARM指令集。只要遵循一定的调用规则,Thumb子程序和ARM子程序可以互相调用。当处理器在执行ARM程序段时,称ARM处理器处于ARM工作状态;当处理器在执行Thumb程序段时,称ARM处理器处于Thumb工作状态。

Thumb指令集没有协处理器指令、信号量指令以及访问CPSR或SPSR的指令,没有乘加指令及64位乘法指令等,并且指令的第二操作数受到限制;除了分支指令B有条件执行功能外,其他指令均为无条件执行;大多数Thumb数据处理指令采用2字节地址格式。

Thumb指令集与ARM指令集的区别一般有如下几点:

●转指令。程序相对转移,特别是条件跳转与AR M代码下的跳转相比,在范围上有更多的限制,转向子程序是无条件的转移。(www.chuimin.cn)

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

●单寄存器加载和存储指令。在Thumb状态下,单寄存器加载和存储指令只能访问寄存器R0~R7。

●多寄存器加载和多寄存器存储指令。LDM和STM指令可以将任何范围为R0~R7的寄存器子集加载或存储。PUSH和POP指令使用堆栈指针R13作为基址实现满递减堆栈。除R0~R7外,PUSH指令还可以存储链接寄存器R14,并且POP指令可以加载程序计数器PC。