资源描述:
《armthumb指令集详解》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、ARMThumb指令集详解ARMThumb指令集详解2010-04-2712:30来源:MCU嵌入式领域ARMThumb指令集Thumb指令可以看作是ARM指令压缩形式的子集,是针对代码密度的问题而提出的,它具有16位的代码密度。Thumb不是一个完整的体系结构,不能指望处理只执行Thumb指令而不支持ARM指令集。因此,Thumb指令只需要支持通用功能,必要时可以借助于完善的ARM指令集,比如,所有异常自动进入ARM状态。在编写Thumb指令时,先要使用伪指令CODE16声明,而且在ARM指令中要使用BX指令跳转到Thumb指令,以切换处理器状态。编写ARM指令时,则可使用伪指令CO
2、DE32声明。1Thumb指令集与ARM指令集的区别Thumb指令集没有协处理器指令,信号量指令以及访问CPSR或SPSR的指令,没有乘加指令及64位乘法指令等,且指令的第二操作数受到限制;除了跳转指令B有条件执行功能外,其它指令均为无条件执行;大多数Thumb数据处理指令采用2地址格式。Thumb指令集与ARM指令的区别一般有如下几点:跳转指令程序相对转移,特别是条件跳转与ARM代码下的跳转相比,在范围上有更多的限制,转向子程序是无条件的转移。数据处理指令数据处理指令是对通用寄存器进行操作,在大多数情况下,操作的结果须放入其中一个操作数寄存器中,而不是第3个寄存器中。数据处理操作比A
3、RM状态的更少,访问寄存器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。2Thumb存储器访问指令T
4、humb指令集的LDM和SRM指令可以将任何范围为R0~R7的寄存器子集加载或存储。批量寄存器加载和存储指令只有LDMIA、STMIA指令,即每次传送先加载/存储数据,然后地址加4。对堆栈处理只能使用PUSH指令及POP指令。表A-9给出Thumb存储器访问指令。表A-9Thumb存储器访问指令LDR和STR立即数偏移的LDR和STR指令。存储器的地址以一个寄存器的立即数偏移指明。指令格式如下:LDRRd,[Rn,#immed_5×4];加载指定地址上的数据(字),放入Rd中STRRd,[Rn,#immed_5×4];存储数据(字)到指定地址的存储单元,要存储数据在Rd中LDRHRd,
5、[Rn,#immed_5×4];加载半字数据,放入Rd中,即Rd低16位有效,高16位清零STRHRd,[Rn,#immed_5×4];存储半字数据,要存储的数据在Rd,最低16位有效LDRBRd,[Rn,#immed_5×4];加载字节数据,放入Rd中,即Rd最低字节有效,;高24位清零STRBRd,[Rn,#immed_5×4];存储字节数据,要存储的数据在Rd,最低字节有效其中:Rd加载或存储的寄存器。必须为R0~R7。Rn基址寄存器。必须为R0~R7。immed_5×N偏移量。它是一个无符立即数表达式,其取值为(0~3)×N立即数偏移的半字和字节加载是无符号的。数据加载到Rd的
6、最低有效半字或字节,Rd的其余位补0。地址对准一一字传送时,必须保证传送地址为32位对准。半字传送时,必须保证传送地址为16位对准立即数偏移的LDR和STR指令举例如下:LDRR0,[R1,#0x4]STRR3,[R4]LDRHR5,[R0,#0x02]STRHR1,[R0,#0x08]LDRBR3,[R6,#20]STRBR1,[R0,#31]寄存器偏移的LDR和STR指令。存储器的地址用一个寄存器的基于寄存器偏移来指明。指令格式如下:LDRRd,[Rn,Rm];加载一个字数据STRRd,[Rn,Rm];存储一个字数据LDRHRd,[Rn,Rm];加载一个无符半字数据STRHRd,[
7、Rn,Rm];存储一个无符半字数据LDRBRd,[Rn,Rm];加载一个无符字节数据STRBRd,[Rn,Rm];存储一个无符字节数据LDRSHRd,[Rn,Rm];加载一个有符半字数据LDRSBRd,[Rn,Rm];存储一个有符半字数据其中:Rd加载或存储的寄存器。必须为R0~R7Rn基址寄存器。必须为R0~R7Rm内含偏移量的寄存器。必须为R0~R7。寄存器偏移的半字和字节加载可以是有符号或无符号的,数据加载到Rd的其余位拷贝符号位。地址对