资源描述:
《三、Thumb指令.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Thumb指令Thumb指令集可以看作是ARM指令压缩形式的子集,它是为减小代码量而提出的,具有16位的代码密度。Thumb指令体系不完整,只支持通用功能。必要时仍需要使用ARM指令,如进入异常时。简单的Thumb程序;功能:使用BX指令切换处理器状态AREAExample8,CODE,READONLYENTRYCODE32ARM_CODEADRR0,THUMB_CODE+1BXR0;跳转并切换处理器状态CODE16THUMB_CODEMOVR0,#10;R0=10MOVR1,#20;R1=20ADDR0,R1;R0=R0+R1B.END在Thumb程序段之前要用CODE
2、16声明。Thumb指令小节目录1.Thumb指令集与ARM指令集的区别2.存储器访问指令3.数据处理指令4.分支指令5.杂项指令6.伪指令Thumb指令小节目录1.Thumb指令集与ARM指令集的区别2.存储器访问指令3.数据处理指令4.分支指令5.杂项指令6.伪指令和ARM指令集相比,Thumb有许多自身的特点:•代码尺寸更小,可以节省系统的存储空间;•针对的是32位的CPU,比纯16位的指令集效率更高;•所使用的编程模型和ARM指令集相似,只要遵循一定的调用规则,Thumb子程序和ARM子程序可以互相调用;•为实现16位的指令长度舍弃了ARM指令集的一些特性(大多数
3、为无条件执行/数据处理指令的目的寄存器和其中一个源寄存器相同);Thumb指令和ARM指令的区别•在编写Thumb指令时可以使用CODE16声明;•除跳转指令B外,其余指令均为无条件执行;•数据处理指令:a.采用2地址格式----其中一个寄存器既是源寄存器又是目的寄存器(也是大多数Thumb指令采用的);b.Thumb状态下数据处理指令访问R8-R15会受到一定限制(只有MOV、ADD和CMP可以);c.使用R0-R7的数据处理指令总是更新条件标志位,访问R8-R15的数据处理指令不能更新条件标志位;d.加载和存储指令只能访问R0-R7,且访问普通存储区只能使用LDMIA
4、和STMIA,访问堆栈区只能使用PUSH和POP(堆栈为满递减堆栈);e.Thumb指令集没有协处理器指令、状态寄存器访问指令、乘加指令、64位乘法指令。f.分支指令的跳转范围有更多限制;问题:1、什么时候访问R8~R15?2、什么时候影响条件码标志?Thumb指令小节目录1.Thumb指令集与ARM指令集的区别2.存储器访问指令3.数据处理指令4.分支指令5.杂项指令6.伪指令Thumb存储器访问指令助记符说明操作影响标志LDR/STRRd,addressing加载/存储字数据Rd←[Rn,#immed_5×4],Rd、Rn为R0~R7无LDRH/STRHRd,addr
5、essing加载/存储无符号半字数据Rd←[Rn,#immed_5×2],Rd、Rn为R0~R7无LDRB/STRBRd,addressing加载/存储无符号字节数据Rd←[Rn,#immed_5×1],Rd、Rn为R0~R7无LDRSHRd,addressing加载有符号半字数据Rd←[Rn,Rm],Rd、Rn、Rm为R0~R7无LDRSBRd,addressing加载有符号字节数据Rd←[Rn,Rm],Rd、Rn、Rm为R0~R7无单寄存器访问指令Thumb存储器访问指令LDR和STR——加载/存储指令根据指令的寻址方式不同,可以分为以下三类:立即数偏移寻址;寄存器偏
6、移寻址;PC或SP相对偏移寻址;单寄存器访问指令——立即数偏移寻址以这种寻址方式对存储器访问时,存储器的地址以一个寄存器的内容为基址,在偏移一个立即数后指明。指令格式如下:LDRRd,[Rn,#immed_5×4];加载内存中的字数据到寄存器Rd中STRRd,[Rn,#immed_5×4];将Rd中的字数据存储到指定地址的内存中LDRHRd,[Rn,#immed_5×2];加载内存中的半字数据到寄存器Rd的低16位中STRHRd,[Rn,#immed_5×2];存储Rd中的低16位半字数据到指定的内存单元LDRBRd,[Rn,#immed_5×1];加载内存中的字节数据到
7、寄存器Rd中STRBRd,[Rn,#immed_5×1];存储Rd中的低8位字节数据到指定的内存单元其中:Rd表示加载或存储的寄存器。必须为R0~R7。Rn表示基址寄存器。必须为R0~R7。immed_5×N表示立即数偏移量,其取值范围为(0~31)×N。单寄存器访问指令——立即数偏移指令编码指令执行的条件码:0110b:LDR/STR指令;1000b:LDRH/STRH指令;0111b:LDRB/STRB指令;L用于区别加载(L为1)或存储(L为0)Immed_5:5位无符号立即数偏移Rn:基址寄存器Rd:源或目标寄存器单寄