第2章Thumb指令介绍课件.ppt
《第2章Thumb指令介绍课件.ppt》由会员分享,可在线阅读,更多相关《第2章Thumb指令介绍课件.ppt(67页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、ThumbThumb指令集指令集1/12/20231/12/20231江苏大学通信工程江苏大学通信工程ThumbThumb指令指令 ThumbThumb指指令令集集可可以以看看作作是是ARMARM指指令令压压缩缩形形式式的的子子集集,它它是是为为减减小小代代码码量量而而提提出出的的,具具有有1616位位的的代代码码密密度度。ThumbThumb指指令令体体系系不不完完整整,只只支支持持通通用用功功能能。必必要要时时仍仍需需要要使用使用ARMARM指令,如进入异常时。指令,如进入异常时。1/12/20231/12/20232江苏大学通信工程江苏大学通信工程简单的简单的ThumbThumb程序程序
2、;功能:使用功能:使用BX指令切换处理器状态指令切换处理器状态AREAExample8,CODE,READONLYENTRYCODE32ARM_CODEADRR0,THUMB_CODE+1BXR0;跳转并切换处理器状态跳转并切换处理器状态CODE16THUMB_CODEMOVR0,#10;R0=10MOVR1,#20;R1=20ADDR0,R1;R0=R0+R1B.END在Thumb程序段之前要用CODE16声明。1/12/20231/12/20233江苏大学通信工程江苏大学通信工程ThumbThumb指令集指令集1.Thumb1.Thumb指令集与指令集与ARMARM指令集的区别指令集的区别
3、52.2.存储器访问指令存储器访问指令73.3.数据处理指令数据处理指令254.4.分支指令分支指令575.5.杂项指令杂项指令626.6.伪指令伪指令641/12/20231/12/20234江苏大学通信工程江苏大学通信工程ThumbThumb指令集与指令集与ARMARM指令集的区别指令集的区别 ThumbThumb指令集较指令集较ARMARM指令集有如下限制:指令集有如下限制:只有只有B B指令可以条件执行,其它指令都不能条件执行;指令可以条件执行,其它指令都不能条件执行;分支指令的跳转范围有更多限制;分支指令的跳转范围有更多限制;数据处理指令的操作结果必须放入其中一个;数据处理指令的操作
4、结果必须放入其中一个;单寄存器访问指令,只能操作单寄存器访问指令,只能操作R0R0R7R7;LDMLDM和和STMSTM指令可以对指令可以对R0R0R7R7的任何子集进行操作;的任何子集进行操作;1/12/20231/12/20235江苏大学通信工程江苏大学通信工程ThumbThumb指令集指令集1.Thumb1.Thumb指令集与指令集与ARMARM指令集的区别指令集的区别2.2.存储器访问指令存储器访问指令3.3.数据处理指令数据处理指令4.4.分支指令分支指令5.5.杂项指令杂项指令6.6.伪指令伪指令1/12/20231/12/20236江苏大学通信工程江苏大学通信工程ThumbThu
5、mb存储器访问指令存储器访问指令助记符助记符说明说明操作操作影响标志影响标志LDR/STR Rd,addressing 加载加载/存储字数据存储字数据RdRdRn,#immed_5Rn,#immed_544,RdRd、RnRn为为R0R0R7R7无无LDRH/STRH Rd,addressing 加载加载/存储无符号半字数据存储无符号半字数据RdRdRn,#immed_5Rn,#immed_522,RdRd、RnRn为为R0R0R7R7无无LDRB/STRB Rd,addressing加载加载/存储无符号字节数据存储无符号字节数据RdRdRn,#immed_5Rn,#immed_511,RdR
6、d、RnRn为为R0R0R7R7无无LDRSH Rd,addressing 加载有符号半字数据加载有符号半字数据RdRdRn,RmRn,Rm,RdRd、RnRn、RmRm为为R0R0R7R7无无LDRSB Rd,addressing加载有符号字节数据加载有符号字节数据RdRdRn,RmRn,Rm,RdRd、RnRn、RmRm为为R0R0R7R7无无单寄存器访问指令单寄存器访问指令1/12/20231/12/20237江苏大学通信工程江苏大学通信工程LDRLDR和和STRSTR加载加载/存储指令存储指令 根据指令的寻址方式不同,可以分为以下三类:根据指令的寻址方式不同,可以分为以下三类:立即数偏
7、移寻址;立即数偏移寻址;寄存器偏移寻址;寄存器偏移寻址;PCPC或或SPSP相对偏移寻址;相对偏移寻址;ThumbThumb存储器访问指令存储器访问指令1/12/20231/12/20238江苏大学通信工程江苏大学通信工程单寄存器访问指令单寄存器访问指令立即数偏移寻址立即数偏移寻址 以以这这种种寻寻址址方方式式对对存存储储器器访访问问时时,存存储储器器的的地地址址以以一一个个寄寄存存器器的的内内容容为为基基址址,再再偏偏移移一一个个立立即即数数后后指指明明。指指令令格格式式如下:如下:LDRLDRRd,Rn,#immed_54 Rd,Rn,#immed_54;加载内存中的加载内存中的字字数据到
8、寄存器数据到寄存器RdRd中中STRSTRRd,Rn,#immed_54Rd,Rn,#immed_54 ;将将RdRd中的中的字字数据存储到指定地址的内存中数据存储到指定地址的内存中LDRH LDRH Rd,Rn,#immed_52Rd,Rn,#immed_52 ;加载内存中的加载内存中的半字半字数据到寄存器数据到寄存器RdRd的低的低1616位中位中STRHSTRHRd,Rn,#immed_52Rd,Rn,#immed_52 ;存储存储RdRd中的低中的低1616位位半字半字数据到指定的内存单元数据到指定的内存单元LDRBLDRBRd,Rn,#immed_51Rd,Rn,#immed_51
9、;加载内存中的加载内存中的字节字节数据到寄存器数据到寄存器RdRd中中STRBSTRBRd,Rn,#immed_51Rd,Rn,#immed_51 ;存储存储RdRd中的低中的低8 8位位字节字节数据到指定的内存单元数据到指定的内存单元 其中:其中:RdRd 表示加载或存储的寄存器。必须为表示加载或存储的寄存器。必须为R0R0R7R7。RnRn 表示基址寄存器。必须为表示基址寄存器。必须为R0R0R7R7。immed_5N immed_5N 表示立即数偏移量,其取值范围为表示立即数偏移量,其取值范围为(0(031)N31)N。1/12/20231/12/20239江苏大学通信工程江苏大学通信工
10、程单寄存器访问指令单寄存器访问指令立即数偏移指令编码立即数偏移指令编码指令执行的操作码:0110b:LDR/STR指令;1000b:LDRH/STRH指令;0111b:LDRB/STRB指令;L用于区别加载(L为1)或存储(L为0)Immed_5:5位无符号立即数偏移Rn:基址寄存器Rd:源或目标寄存器1/12/20231/12/202310江苏大学通信工程江苏大学通信工程单寄存器访问指令单寄存器访问指令立即数偏移寻址立即数偏移寻址注注意意:进进行行字字数数据据访访问问时时,必必须须保保证证传传送送地地址址为为3232位位对对齐齐。进行半字数据访问时,必须保证传送地址为进行半字数据访问时,必须
11、保证传送地址为1616位对齐。位对齐。应用示例:应用示例:LDRR0,R1,#0 x4STRR3,R4LDRHR5,R0,#0 x02STRHR1,R0,#0 x08LDRBR3,R6,#20STRBR1,R0,#311/12/20231/12/202311江苏大学通信工程江苏大学通信工程单寄存器访问指令单寄存器访问指令寄存器偏移寻址寄存器偏移寻址 这这种种寻寻址址方方式式是是以以一一个个寄寄存存器器的的内内容容为为基基址址,以以另另一一个个寄寄存存器器的内容为偏移量的内容为偏移量,两者相加作为存储器的地址。指令格式如下:两者相加作为存储器的地址。指令格式如下:LDRLDRRd,Rn,RmRd
12、,Rn,Rm;加载一个加载一个字字数据数据STRSTRRd,Rn,RmRd,Rn,Rm;存储一个存储一个字字数据数据LDRHLDRHRd,Rn,RmRd,Rn,Rm;加载一个加载一个无符号半字无符号半字数据数据STRHSTRHRd,Rn,RmRd,Rn,Rm;存储一个存储一个无符号半字无符号半字数据数据LDRBLDRBRd,Rn,RmRd,Rn,Rm;加载一个加载一个无符号字节无符号字节数据数据STRBSTRBRd,Rn,RmRd,Rn,Rm;存储一个存储一个无符号字节无符号字节数据数据LDRSHLDRSHRd,Rn,RmRd,Rn,Rm;加载一个加载一个有符号半字有符号半字数据数据LDRSB
13、LDRSBRd,Rn,RmRd,Rn,Rm;存储一个存储一个有符号半字有符号半字数据数据 其中:其中:RdRd 表示加载或存储的寄存器。必须为表示加载或存储的寄存器。必须为R0R0R7R7。RnRn 表示基址寄存器。必须为表示基址寄存器。必须为R0R0R7R7。Rm Rm 表示内含数偏移量的寄存器,必须为表示内含数偏移量的寄存器,必须为R0R0R7 R7。1/12/20231/12/202312江苏大学通信工程江苏大学通信工程单寄存器访问指令单寄存器访问指令寄存器偏移指令编码寄存器偏移指令编码指令执行的操作码:00b:LDR/STR指令;01b:LDRH/STRH指令;10b:LDRB/STR
14、B指令;L用于区别加载(L为1)或存储(L为0)Rm:偏移量寄存器Rn:基址寄存器Rd:源或目标寄存器说明:当opcode位为11b时,L位 为 0代 表 指 令“LDRSB“,L位为1代表指令“LDRSH”1/12/20231/12/202313江苏大学通信工程江苏大学通信工程单寄存器访问指令单寄存器访问指令寄存器偏移寻址寄存器偏移寻址注注意意:进进行行字字数数据据访访问问时时,必必须须保保证证传传送送地地址址为为3232位位对对齐齐。进行半字数据访问时,必须保证传送地址为进行半字数据访问时,必须保证传送地址为1616位对齐。位对齐。应用示例:应用示例:LDRR3,R1,R0STRR1,R0
15、,R2LDRHR6,R0,R1STRHR0,R4,R5LDRBR2,R5,R1STRBR1,R3,R2LDRSHR7,R6,R3LDRSBR5,R7,R21/12/20231/12/202314江苏大学通信工程江苏大学通信工程单寄存器访问指令单寄存器访问指令相对偏移寻址相对偏移寻址 这这种种寻寻址址方方式式是是以以PCPC或或SPSP寄寄存存器器的的内内容容为为基基址址,以以一一个个立立即数为偏移量,两者相加作为存储器的地址。指令格式如下:即数为偏移量,两者相加作为存储器的地址。指令格式如下:LDRLDRRd,PC,#immed_84Rd,PC,#immed_84LDRLDRRd,labelR
16、d,labelLDRLDRRd,SP,#immed_84Rd,SP,#immed_84STRSTRRd,SP,#immed_84Rd,SP,#immed_84 其中:其中:RdRd 表示加载或存储的寄存器。必须为表示加载或存储的寄存器。必须为R0R0R7R7。immed_84immed_84 表示偏移量,取值范围是表示偏移量,取值范围是(0(0255)4 255)4。label label 表示程序相对偏移表达式表示程序相对偏移表达式,Label,Label必须在当前指令之后的必须在当前指令之后的1KB1KB范围内。范围内。1/12/20231/12/202315江苏大学通信工程江苏大学通信工
17、程单寄存器访问指令单寄存器访问指令相对偏移指令编码相对偏移指令编码L:用于区别加载(L为1)或存储(L为0)Rd:目标或源寄存器immed8:偏移量PC相对偏移相对偏移LDR指令编码指令编码SP相对偏移相对偏移LDR/STR指令编码指令编码1/12/20231/12/202316江苏大学通信工程江苏大学通信工程注注意意:以以PCPC作作为为基基地地址址的的相相对对偏偏移移寻寻址址指指令令只只有有LDRLDR,而而没没有有STRSTR指令。指令。应用示例:应用示例:LDRR0,PC,#0 x08;读取读取PC+0 x08PC+0 x08地址上的字数据,地址上的字数据,;保存到保存到R0R0中中L
18、DRR7,LOCALDAT;读取读取LOCALDATLOCALDAT地址上的地址上的;字数据,保存到字数据,保存到R7R7中中LDRR3,SP,#1020;读取读取SP+1020SP+1020地址上的字数据,地址上的字数据,;保存到保存到R3R3中中STRR2,SP;存储存储R2R2寄存器的数据到寄存器的数据到SPSP;指向的存储单元指向的存储单元(偏移量为偏移量为0)0)单寄存器访问指令单寄存器访问指令相对偏移寻址相对偏移寻址1/12/20231/12/202317江苏大学通信工程江苏大学通信工程PUSHPUSH和和POPPOP寄存器入栈及出栈指令寄存器入栈及出栈指令 实实现现低低寄寄存存器
19、器和和可可选选的的LRLR寄寄存存器器入入栈栈及及低低寄寄存存器器和和可可选选的的PCPC寄寄存存器器出出栈栈操操作作。堆堆栈栈地地址址由由SPSP寄寄存存器器设设置置,堆栈是满递减堆栈堆栈是满递减堆栈。1/12/20231/12/202318江苏大学通信工程江苏大学通信工程寄存器入栈及出栈指令寄存器入栈及出栈指令PUSHPUSHreglist,LRreglist,LRPOPPOPreglist,PCreglist,PC其中:其中:reglistreglist 入栈入栈/出栈低寄存器列表,即出栈低寄存器列表,即R0R0R7R7。LRLR入栈时的可选寄存器。入栈时的可选寄存器。PCPC出栈时的可
20、选寄存器。出栈时的可选寄存器。指令编码指令格式L用于区别出栈(L为1)或入栈(L为0)R用于区别操作寄存器中是否有LR/PC寄存器(有则R为1,否则为0)1/12/20231/12/202319江苏大学通信工程江苏大学通信工程PUSHPUSHreglist,LRreglist,LRPOPPOPreglist,PCreglist,PC其中:其中:reglistreglist 入栈入栈/出栈低寄存器列表,即出栈低寄存器列表,即R0R0R7R7。LRLR入栈时的可选寄存器。入栈时的可选寄存器。PCPC出栈时的可选寄存器。出栈时的可选寄存器。指令格式指令格式 应用示例:应用示例:PUSHR0-R7,L
21、R;将低寄存器将低寄存器R0R0R7R7全部入栈,全部入栈,;LR;LR也入栈也入栈POPR0-R7,PC;将堆栈中的数据弹出到将堆栈中的数据弹出到;低寄存器低寄存器R0R0R7R7及及PCPC中中寄存器入栈及出栈指令寄存器入栈及出栈指令1/12/20231/12/202320江苏大学通信工程江苏大学通信工程LDMIALDMIA和和STMIASTMIA多寄存器加载多寄存器加载/存储指令存储指令 可可以以实实现现在在一一组组寄寄存存器器和和一一块块连连续续的的内内存存单单元元之之间间传传输输数数据据。LDMIALDMIA为为加加载载多多个个寄寄存存器器;STMIASTMIA为为存存储储多多个个寄
22、寄存存器器。使使用用它它们们允允许许一一条条指指令令传传送送8 8个个低低寄寄存存器器R0R0R7R7的的任任何何子子集。集。1/12/20231/12/202321江苏大学通信工程江苏大学通信工程多寄存器加载多寄存器加载/存储指令存储指令LDMIALDMIARn!,reglistRn!,reglistSTMIASTMIARn!,reglistRn!,reglist 其中:其中:Rn Rn 加载加载/存储的起始地址寄存器。存储的起始地址寄存器。RnRn必须为必须为R0R0R7R7。reglistreglist 加载加载/存储的寄存器列表。寄存器必须为存储的寄存器列表。寄存器必须为R0R0R7R
23、7。指令编码指令格式指令格式L用于区别加载(L为1)还是存储(L为0)1/12/20231/12/202322江苏大学通信工程江苏大学通信工程 应用示例:应用示例:LDMIAR0!,R2-R7;加载加载R0R0指向的地址上的多字数据,指向的地址上的多字数据,;保存到保存到R2R2R7R7中,中,R0 R0的值更新。的值更新。STMIAR1!,R2-R7;将将R2R2R7R7的数据存储到的数据存储到R1R1指向的指向的;地址上,地址上,R1R1值更新值更新 LDMIA/STMIA LDMIA/STMIA 的的主主要要用用于于数数据据复复制制、参参数数传传送送等等。进进行行数数据据传传送送时时,每
24、次传送后地址加每次传送后地址加4 4。若若RnRn在寄存器列表中:在寄存器列表中:对于对于LDMIALDMIA指令,指令,RnRn的最终值是加载的值,而不是增加后的地址;的最终值是加载的值,而不是增加后的地址;对对于于STMIASTMIA指指令令,若若RnRn是是寄寄存存器器列列表表中中的的最最低低数数字字的的寄寄存存器器,则则RnRn存储的值为存储的值为RnRn初值,其它情况不可预知。初值,其它情况不可预知。多寄存器加载多寄存器加载/存储指令存储指令1/12/20231/12/202323江苏大学通信工程江苏大学通信工程ThumbThumb指令集指令集1.Thumb1.Thumb指令集与指令
25、集与ARMARM指令集的区别指令集的区别2.2.存储器访问指令存储器访问指令3.3.数据处理指令数据处理指令4.4.分支指令分支指令5.5.杂项指令杂项指令6.6.伪指令伪指令1/12/20231/12/202324江苏大学通信工程江苏大学通信工程ThumbThumb数据处理指令数据处理指令 ThumbThumb数数据据处处理理指指令令涵涵盖盖了了编编译译器器需需要要的的大大多多数数操操作作。大大部部分分的的ThumbThumb数数据据处处理理指指令令采采用用2 2地地址址格格式式,不不能能在在单单指指令令中中同同时时完完成成一一个个操操作作数数的的移移位位及及一一个个ALUALU操操作作。所
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Thumb 指令 介绍 课件
限制150内