《安徽理工大学计算机汇编教程-Thumb指系统.ppt》由会员分享,可在线阅读,更多相关《安徽理工大学计算机汇编教程-Thumb指系统.ppt(61页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计8086/80888086/8088和和ARMARM核核汇编语言程序设计汇编语言程序设计第第1919章章ThumbThumb指令系统指令系统 1/31/20231第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计19.219.2 ThumbThumb存储器访问指令存储器访问指令第第20章章 ARM汇编程序设计汇编程序设计19.119.1 概述概述19.319.3 ThumbThumb数据处理指令
2、数据处理指令19.419.4 ThumbThumb分支指令分支指令19.519.5 ThumbThumb杂项指令杂项指令19.619.6 ThumbThumb伪指令伪指令1/31/20232第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计19.119.1 概述概述 ThumbThumbThumbThumb指指指指令令令令集集集集可可可可以以以以看看看看作作作作是是是是ARMARMARMARM指指指指令令令令压压压压缩缩缩缩形形形形式式式式的的的的子子子子集集集集,它它它它是是是是为为为为减减减减
3、小小小小代代代代码码码码量量量量而而而而提提提提出出出出的的的的,具具具具有有有有16161616位位位位的的的的代代代代码码码码密密密密度度度度。ThumbThumbThumbThumb指指指指令令令令体体体体系系系系不不不不完完完完整整整整,只只只只支支支支持持持持通通通通用用用用功功功功能能能能。必要时仍需要使用必要时仍需要使用必要时仍需要使用必要时仍需要使用ARMARMARMARM指令,如进入异常时。指令,如进入异常时。指令,如进入异常时。指令,如进入异常时。说明:Thumb指令的格式与使用方式与ARM指令集类似,而且使用并不是很频繁,建议这部分内容选修。1/31/20233第第20章
4、章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计19.219.2 ThumbThumb存储器访问指令存储器访问指令第第20章章 ARM汇编程序设计汇编程序设计19.119.1 概述概述19.319.3 ThumbThumb数据处理指令数据处理指令19.419.4 ThumbThumb分支指令分支指令19.519.5 ThumbThumb杂项指令杂项指令19.619.6 ThumbThumb伪指令伪指令1/31/20234第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇
5、编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计Thumb存储器访问指令助记符助记符说明说明操作操作影响标志影响标志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加载加载/存储无符号字存储无符号字节数据节数据RdRdR
6、n,#immed_5Rn,#immed_511,RdRd、RnRn为为R0R0R7R7无无LDRSH Rd,addressing 加载有符号半字数据加载有符号半字数据RdRdRn,RmRn,Rm,RdRd、RnRn、RmRm为为R0R0R7R7无无LDRSB Rd,addressing加载有符号字节数据加载有符号字节数据RdRdRn,RmRn,Rm,RdRd、RnRn、RmRm为为R0R0R7R7无无单寄存器访问指令1/31/20235第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计Thumb存
7、储器访问指令LDR和STR加载/存储指令 根据指令的寻址方式不同,可以分为以下三类:立即数偏移寻址;立即数偏移寻址;立即数偏移寻址;立即数偏移寻址;寄存器偏移寻址;寄存器偏移寻址;寄存器偏移寻址;寄存器偏移寻址;PCPCPCPC或或或或SPSPSPSP相对偏移寻址;相对偏移寻址;相对偏移寻址;相对偏移寻址;1/31/20236第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计单寄存器访问指令立即数偏移寻址立即数偏移寻址立即数偏移寻址立即数偏移寻址 以这种寻址方式对存储器访问时,存储器的地址以一个寄
8、存器的内容为基址,在偏移一个立即数后指明。指令格式如下:LDRLDRLDRLDRRd,Rn,#immed_5Rd,Rn,#immed_5Rd,Rn,#immed_5Rd,Rn,#immed_54 4 4 4;加载内存中的加载内存中的加载内存中的加载内存中的字字字字数据到寄存器数据到寄存器数据到寄存器数据到寄存器RdRdRdRd中中中中STRSTRSTRSTRRd,Rn,#immed_54Rd,Rn,#immed_54Rd,Rn,#immed_54Rd,Rn,#immed_54 ;将将将将RdRdRdRd中的中的中的中的字字字字数据存储到指定地址的内存中数据存储到指定地址的内存中数据存储到指定地
9、址的内存中数据存储到指定地址的内存中LDRH LDRH LDRH LDRH Rd,Rn,#immed_52Rd,Rn,#immed_52Rd,Rn,#immed_52Rd,Rn,#immed_52 ;加载内存中的加载内存中的加载内存中的加载内存中的半字半字半字半字数据到寄存器数据到寄存器数据到寄存器数据到寄存器RdRdRdRd的低的低的低的低16161616位中位中位中位中STRHSTRHSTRHSTRHRd,Rn,#immed_52Rd,Rn,#immed_52Rd,Rn,#immed_52Rd,Rn,#immed_52 ;存储存储存储存储RdRdRdRd中的低中的低中的低中的低161616
10、16位位位位半字半字半字半字数据到指定的内存单元数据到指定的内存单元数据到指定的内存单元数据到指定的内存单元LDRBLDRBLDRBLDRBRd,Rn,#immed_51Rd,Rn,#immed_51Rd,Rn,#immed_51Rd,Rn,#immed_51 ;加载内存中的加载内存中的加载内存中的加载内存中的字节字节字节字节数据到寄存器数据到寄存器数据到寄存器数据到寄存器RdRdRdRd中中中中STRBSTRBSTRBSTRBRd,Rn,#immed_51Rd,Rn,#immed_51Rd,Rn,#immed_51Rd,Rn,#immed_51 ;存储存储存储存储RdRdRdRd中的低中的低
11、中的低中的低8 8 8 8位位位位字节字节字节字节数据到指定的内存单元数据到指定的内存单元数据到指定的内存单元数据到指定的内存单元 其中:其中:其中:其中:RdRdRdRd 表示加载或存储的寄存器。必须为表示加载或存储的寄存器。必须为表示加载或存储的寄存器。必须为表示加载或存储的寄存器。必须为R0R0R0R0R7R7R7R7。RnRnRnRn 表示基址寄存器。必须为表示基址寄存器。必须为表示基址寄存器。必须为表示基址寄存器。必须为R0R0R0R0R7R7R7R7。immed_5immed_5immed_5immed_5N N N N 表示立即数偏移量,其取值范围为表示立即数偏移量,其取值范围为
12、表示立即数偏移量,其取值范围为表示立即数偏移量,其取值范围为(0(0(0(031)31)31)31)N N N N。1/31/20237第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计单寄存器访问指令立即数偏移指令编码立即数偏移指令编码立即数偏移指令编码立即数偏移指令编码指令执行的条件码:0110b:LDR/STR指令;1000b:LDRH/STRH指令;0111b:LDRB/STRB指令;L用于区别加载(L为1)或存储(L为0)Immed_5:5位无符号立即数偏移Rn:基址寄存器Rd:源或目标
13、寄存器1/31/20238第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计单寄存器访问指令立即数偏移寻址注意:进进行行字字数数据据访访问问时时,必必须须保保证证传传送送地地址址为为3232位位对对齐齐。进进行行半半字字数数据据访访问问时时,必必须须保保证证传传送送地地址址为为1616位位对对齐。齐。应用示例:LDR R0,R1,#0 x4LDR R0,R1,#0 x4 STR R3,R4 STR R3,R4 LDRH R5,R0,#0 x02 LDRH R5,R0,#0 x02 STRH R1,
14、R0,#0 x08 STRH R1,R0,#0 x08 LDRB R3,R6,#20 LDRB R3,R6,#20 STRB R1,R0,#31 STRB R1,R0,#311/31/20239第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计单寄存器访问指令寄存器偏移寻址寄存器偏移寻址寄存器偏移寻址寄存器偏移寻址 这种寻址方式是以一个寄存器的内容为基址,以另一个寄存器的内容为偏移量,两者相加作为存储器的地址。指令格式如下:LDRLDRLDRLDRRd,Rn,RmRd,Rn,RmRd,Rn,RmR
15、d,Rn,Rm ;加载一个加载一个加载一个加载一个字字字字数据数据数据数据STRSTRSTRSTRRd,Rn,RmRd,Rn,RmRd,Rn,RmRd,Rn,Rm ;存储一个存储一个存储一个存储一个字字字字数据数据数据数据LDRHLDRHLDRHLDRHRd,Rn,RmRd,Rn,RmRd,Rn,RmRd,Rn,Rm ;加载一个加载一个加载一个加载一个无符号半字无符号半字无符号半字无符号半字数据数据数据数据STRHSTRHSTRHSTRHRd,Rn,RmRd,Rn,RmRd,Rn,RmRd,Rn,Rm ;存储一个存储一个存储一个存储一个无符号半字无符号半字无符号半字无符号半字数据数据数据数据L
16、DRBLDRBLDRBLDRBRd,Rn,RmRd,Rn,RmRd,Rn,RmRd,Rn,Rm ;加载一个加载一个加载一个加载一个无符号字节无符号字节无符号字节无符号字节数据数据数据数据STRBSTRBSTRBSTRBRd,Rn,RmRd,Rn,RmRd,Rn,RmRd,Rn,Rm ;存储一个存储一个存储一个存储一个无符号字节无符号字节无符号字节无符号字节数据数据数据数据LDRSHLDRSHLDRSHLDRSHRd,Rn,RmRd,Rn,RmRd,Rn,RmRd,Rn,Rm ;加载一个加载一个加载一个加载一个有符号半字有符号半字有符号半字有符号半字数据数据数据数据LDRSBLDRSBLDRSB
17、LDRSBRd,Rn,RmRd,Rn,RmRd,Rn,RmRd,Rn,Rm ;存储一个存储一个存储一个存储一个有符号半字有符号半字有符号半字有符号半字数据数据数据数据 其中:其中:其中:其中:RdRdRdRd 表示加载或存储的寄存器。必须为表示加载或存储的寄存器。必须为表示加载或存储的寄存器。必须为表示加载或存储的寄存器。必须为R0R0R0R0R7R7R7R7。RnRnRnRn 表示基址寄存器。必须为表示基址寄存器。必须为表示基址寄存器。必须为表示基址寄存器。必须为R0R0R0R0R7R7R7R7。RmRmRmRm 表示内含数偏移量的寄存器,必须为表示内含数偏移量的寄存器,必须为表示内含数偏移
18、量的寄存器,必须为表示内含数偏移量的寄存器,必须为R0R0R0R0R7R7R7R7 。1/31/202310第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计单寄存器访问指令寄存器偏移指令编码寄存器偏移指令编码寄存器偏移指令编码寄存器偏移指令编码指令执行的条件码:00b:LDR/STR指令;01b:LDRH/STRH指令;10b:LDRB/STRB指令;L用于区别加载(L为1)或存储(L为0)Rm:偏移量寄存器Rn:基址寄存器Rd:源或目标寄存器说明:当opcode位为11b时,L位 为 0代 表
19、 指 令“LDRSB“,L位为1代表指令“LDRSH”1/31/202311第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计单寄存器访问指令寄存器偏移寻址寄存器偏移寻址寄存器偏移寻址寄存器偏移寻址注意:进行字数据访问时,必须保证传送地址为32位对齐。进行半字数据访问时,必须保证传送地址为16位对齐。应用示例:LDRLDRR3,R1,R0R3,R1,R0 STR STRR1,R0,R2R1,R0,R2 LDRH LDRHR6,R0,R1R6,R0,R1 STRH STRHR0,R4,R5R0,R4
20、,R5 LDRB LDRBR2,R5,R1R2,R5,R1 STRB STRBR1,R3,R2R1,R3,R2 LDRSH LDRSHR7,R6,R3R7,R6,R3 LDRSB LDRSBR5,R7,R2R5,R7,R21/31/202312第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计单寄存器访问指令相对偏移寻址相对偏移寻址相对偏移寻址相对偏移寻址 这这种种寻寻址址方方式式是是以以PCPC或或SPSP寄寄存存器器的的内内容容为为基基址址,以以一一个个立立即即数数为为偏偏移移量量,两两者者相
21、相加加作作为为存存储储器器的的地地址址。指指令格式如下:令格式如下:LDRLDRLDRLDRRd,PC,#immed_84Rd,PC,#immed_84Rd,PC,#immed_84Rd,PC,#immed_84LDRLDRLDRLDRRd,labelRd,labelRd,labelRd,labelLDRLDRLDRLDRRd,SP,#immed_84Rd,SP,#immed_84Rd,SP,#immed_84Rd,SP,#immed_84STRSTRSTRSTRRd,SP,#immed_84Rd,SP,#immed_84Rd,SP,#immed_84Rd,SP,#immed_84 其中:其中
22、:其中:其中:RdRdRdRd 表示加载或存储的寄存器。必须为表示加载或存储的寄存器。必须为表示加载或存储的寄存器。必须为表示加载或存储的寄存器。必须为R0R0R0R0R7R7R7R7。immed_84immed_84immed_84immed_84 表示偏移量,取值范围是表示偏移量,取值范围是表示偏移量,取值范围是表示偏移量,取值范围是(0(0(0(0255)4 255)4 255)4 255)4。label label label label 表表表表示示示示程程程程序序序序相相相相对对对对偏偏偏偏移移移移表表表表达达达达式式式式,Label,Label,Label,Label必必必必须须
23、须须在在在在当当当当前前前前指指指指令令令令之之之之后的后的后的后的1KB1KB1KB1KB范围内。范围内。范围内。范围内。1/31/202313第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计单寄存器访问指令相对偏移指令编码相对偏移指令编码相对偏移指令编码相对偏移指令编码L:用于区别加载(L为1)或存储(L为0)Rd:目标或源寄存器immed8:偏移量PC相对偏移LDR指令编码SP相对偏移LDR/STR指令编码1/31/202314第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术
24、系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计单寄存器访问指令相对偏移寻址相对偏移寻址相对偏移寻址相对偏移寻址注意:以PC作为基地址的相对偏移寻址指令只有LDR,而没有STR指令。应用示例:LDR R0,PC,#0 x08LDR R0,PC,#0 x08;读取读取读取读取PC+0 x08PC+0 x08PC+0 x08PC+0 x08地址上的字数据,地址上的字数据,地址上的字数据,地址上的字数据,;保存到保存到保存到保存到R0R0R0R0中中中中 LDR R7,LOCALDATLDR R7,LOCALDAT;读取读取读取读取LOCALDATLOCALDA
25、TLOCALDATLOCALDAT地址上的地址上的地址上的地址上的;字数据,保存到字数据,保存到字数据,保存到字数据,保存到R7R7R7R7中中中中 LDR R3,SP,#1020LDR R3,SP,#1020;读取读取读取读取SP+1020SP+1020SP+1020SP+1020地址上的字数据,地址上的字数据,地址上的字数据,地址上的字数据,;保存到保存到保存到保存到R3R3R3R3中中中中 STR R2,SPSTR R2,SP;存储存储存储存储R2R2R2R2寄存器的数据到寄存器的数据到寄存器的数据到寄存器的数据到SPSPSPSP;指向的存储单元指向的存储单元指向的存储单元指向的存储单元
26、 (偏移量为偏移量为偏移量为偏移量为0)0)0)0)1/31/202315第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计Thumb存储器访问指令 PUSHPUSHPUSHPUSH和和和和POPPOPPOPPOP寄存器入栈及出栈指令寄存器入栈及出栈指令寄存器入栈及出栈指令寄存器入栈及出栈指令 实实实实现现现现低低低低寄寄寄寄存存存存器器器器和和和和可可可可选选选选的的的的LRLRLRLR寄寄寄寄存存存存器器器器入入入入栈栈栈栈及及及及低低低低寄寄寄寄存存存存器器器器和和和和可可可可选选选选的的的
27、的PCPCPCPC寄寄寄寄存存存存器器器器出出出出栈栈栈栈操操操操作作作作。堆堆堆堆栈栈栈栈地地地地址址址址由由由由SPSPSPSP寄寄寄寄存存存存器器器器设设设设置,置,置,置,堆栈是满递减堆栈堆栈是满递减堆栈堆栈是满递减堆栈堆栈是满递减堆栈。1/31/202316第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计寄存器入栈及出栈指令PUSHPUSHPUSHPUSH reglist,LRreglist,LRreglist,LRreglist,LRPOPPOPPOPPOP reglist,PCre
28、glist,PCreglist,PCreglist,PC其中:其中:其中:其中:reglistreglistreglistreglist 入栈入栈入栈入栈/出栈低寄存器列表,即出栈低寄存器列表,即出栈低寄存器列表,即出栈低寄存器列表,即R0R0R0R0R7R7R7R7。LRLRLRLR入栈时的可选寄存器。入栈时的可选寄存器。入栈时的可选寄存器。入栈时的可选寄存器。PCPCPCPC出栈时的可选寄存器。出栈时的可选寄存器。出栈时的可选寄存器。出栈时的可选寄存器。指令编码指令格式L L L L用用用用于于于于区区区区别别别别出出出出栈栈栈栈(L L L L为为为为1 1 1 1)或入栈(或入栈(或入
29、栈(或入栈(L L L L为为为为0 0 0 0)R R用用于于区区别别操操作作寄寄存存器器中中是是否否有有LR/PCLR/PC寄寄存存器器(有有则则R R为为1 1,否则为,否则为0 0)1/31/202317第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计寄存器入栈及出栈指令PUSHPUSHPUSHPUSH reglist,LRreglist,LRreglist,LRreglist,LRPOPPOPPOPPOP reglist,PCreglist,PCreglist,PCreglist,PC
30、其中:其中:其中:其中:reglistreglistreglistreglist 入栈入栈入栈入栈/出栈低寄存器列表,即出栈低寄存器列表,即出栈低寄存器列表,即出栈低寄存器列表,即R0R0R0R0R7R7R7R7。LRLRLRLR入栈时的可选寄存器。入栈时的可选寄存器。入栈时的可选寄存器。入栈时的可选寄存器。PCPCPCPC出栈时的可选寄存器。出栈时的可选寄存器。出栈时的可选寄存器。出栈时的可选寄存器。指令格式 应用示例:PUSHR0-R7,LR;将低寄存器将低寄存器R0R0R7R7全部入栈,全部入栈,;LR;LR也入栈也入栈 POPR0-R7,PC;将堆栈中的数据弹出到将堆栈中的数据弹出到;
31、低寄存器低寄存器R0R0R7R7及及PCPC中中1/31/202318第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计19.219.2 ThumbThumb存储器访问指令存储器访问指令第第20章章 ARM汇编程序设计汇编程序设计19.119.1 概述概述19.319.3 ThumbThumb数据处理指令数据处理指令19.419.4 ThumbThumb分支指令分支指令19.519.5 ThumbThumb杂项指令杂项指令19.619.6 ThumbThumb伪指令伪指令1/31/202319第第
32、20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计Thumb数据处理指令 Thumb数据处理指令涵盖了编译器需要的大多数操作。大部分的Thumb数据处理指令采用2地址格式,不能在单指令中同时完成一个操作数的移位及一个ALU操作。所以数据处理操作比ARM状态的更少,并且访问寄存器R8R15受到限制。数据处理指令分为两类:数据传送指令数据传送指令数据传送指令数据传送指令 算术逻辑运算指令算术逻辑运算指令算术逻辑运算指令算术逻辑运算指令1/31/202320第第20章章 ARM汇编程序设计汇编程序设计 计算
33、机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计Thumb数据处理指令数据传送指令助记符助记符操作操作影响标志影响标志MOV MOV Rd,#exprRd,#exprRdRdexprexpr,RdRd为为R0R0R7R7影响影响N N、Z ZMOV MOV Rd,RmRd,RmRdRdRmRm,RdRd、RmRm均可为均可为R0R0R15R15RdRd和和RmRm均为均为R0R0R7R7时,时,影响影响N N、Z Z,清零清零C C、V V MVN MVN Rd,RmRd,RmRdRd(Rm(Rm),RdRd、RmRm均为均为R0R0R7R7影
34、响影响N N、Z ZNEG NEG Rd,RmRd,RmRdRd(-(-RmRm),RdRd、RmRm均为均为R0R0R7R7影响影响N N、Z Z、C C、V V1/31/202321第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计 MOV指令将8位立即数或寄存器传送到目标寄存器中。其指令格式如下:数据传送指令MOVMOVMOVRd,#exprRd,#exprMOVMOVRd,RmRd,Rm其中:其中:RdRd 目标寄存器。目标寄存器。MOV MOV Rd,#exprRd,#expr时,时,R
35、dRd必须在必须在R0R0R7R7之间。之间。experexper 8 8位立即数,即位立即数,即0 0255255。RmRm 源寄存器。为源寄存器。为R0R0R15R15。指令编码(立即数传送)指令编码(寄存器传送)1/31/202322第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计数据传送指令MOV注意:注意:“MOV Rd,#expr”指令会更新指令会更新NN和和Z Z标志,对标志标志,对标志C C和和V V无影响。无影响。“MOV Rd,Rm”指指令令,若若RdRd或或RmRm是是高高
36、寄寄存存器器(R8R8R15R15),则则标标志志不不受受影影响响,若若RdRd或或RmRm都都是是低低寄寄存存器器(R0R0R7R7),则则更更新新标标志志NN和和Z Z,且且清清除标志除标志C C和和V V。应用示例:MOV R1,#0 x10MOV R1,#0 x10;R1=0 x10;R1=0 x10;R1=0 x10;R1=0 x10 MOV R0,R8 MOV R0,R8;R0=R8;R0=R8;R0=R8;R0=R8 MOV PC,LR MOV PC,LR;PC=LR;PC=LR;PC=LR;PC=LR,子程序返回子程序返回子程序返回子程序返回1/31/202323第第20章章
37、ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计数据传送指令MVNMVNMVNRd,RmRd,Rm其中:其中:RdRd目标寄存器。目标寄存器。MOV MOV Rd,#exprRd,#expr时,时,RdRd必须在必须在R0R0R7R7之间。之间。RmRm源寄存器。为源寄存器。为R0R0R15R15。指令编码 MVNMVNMVNMVN指指指指令令令令将将将将寄寄寄寄存存存存器器器器RmRmRmRm按按按按位位位位取取取取反反反反后后后后传传传传送送送送到到到到目目目目标标标标寄寄寄寄存存存存器器器器RdRdRd
38、Rd中中中中。指指指指令令令令的的的的执执执执行行行行会会会会更更更更新新新新NNNN和和和和Z Z Z Z标标标标志志志志,对对对对标标标标志志志志C C C C和和和和V V V V无无无无影影影影响响响响。其其其其指指指指令格式如下:令格式如下:令格式如下:令格式如下:1/31/202324第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计 应用示例:MVN R1,R2MVN R1,R2;将将将将R2R2R2R2取反,结果存于取反,结果存于取反,结果存于取反,结果存于R1R1R1R1数据传送
39、指令MVNMVNMVNMVNMVNRd,RmRd,RmRd,RmRd,Rm其中:其中:其中:其中:RdRdRdRd目标寄存器。目标寄存器。目标寄存器。目标寄存器。MOV MOV MOV MOV Rd,#exprRd,#exprRd,#exprRd,#expr时,时,时,时,RdRdRdRd必须在必须在必须在必须在R0R0R0R0R7R7R7R7之间。之间。之间。之间。RmRmRmRm源寄存器。为源寄存器。为源寄存器。为源寄存器。为R0R0R0R0R15R15R15R15。MVNMVNMVNMVN指指指指令令令令将将将将寄寄寄寄存存存存器器器器RmRmRmRm按按按按位位位位取取取取反反反反后后
40、后后传传传传送送送送到到到到目目目目标标标标寄寄寄寄存存存存器器器器RdRdRdRd中中中中。指指指指令令令令的的的的执执执执行行行行会会会会更更更更新新新新NNNN和和和和Z Z Z Z标标标标志志志志,对对对对标标标标志志志志C C C C和和和和V V V V无无无无影影影影响响响响。其其其其指指指指令格式如下:令格式如下:令格式如下:令格式如下:1/31/202325第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计数据传送指令NEGNEGNEGNEGNEGRd,RmRd,RmRd,RmR
41、d,Rm其中:其中:其中:其中:RdRdRdRd 目标寄存器,必须在目标寄存器,必须在目标寄存器,必须在目标寄存器,必须在R0R0R0R0R7R7R7R7之间。之间。之间。之间。RmRmRmRm 源寄存器。为源寄存器。为源寄存器。为源寄存器。为R0R0R0R0R15R15R15R15。指令编码 NEGNEGNEGNEG指指指指令令令令将将将将寄寄寄寄存存存存器器器器RmRmRmRm乘乘乘乘以以以以-1-1-1-1后后后后传传传传送送送送到到到到目目目目标标标标寄寄寄寄存存存存器器器器RdRdRdRd中中中中。指令会更新指令会更新指令会更新指令会更新NNNN、Z Z Z Z、C C C C和和和
42、和V V V V标志。其标志。其标志。其标志。其指令格式如下:指令格式如下:指令格式如下:指令格式如下:1/31/202326第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计数据传送指令NEGNEGNEGNEGNEGRd,RmRd,RmRd,RmRd,Rm其中:其中:其中:其中:RdRdRdRd目标寄存器,必须在目标寄存器,必须在目标寄存器,必须在目标寄存器,必须在R0R0R0R0R7R7R7R7之间。之间。之间。之间。RmRmRmRm源寄存器。为源寄存器。为源寄存器。为源寄存器。为R0R0R0
43、R0R15R15R15R15。NEGNEGNEGNEG指指指指令令令令将将将将寄寄寄寄存存存存器器器器RmRmRmRm乘乘乘乘以以以以-1-1-1-1后后后后传传传传送送送送到到到到目目目目标标标标寄寄寄寄存存存存器器器器RdRdRdRd中中中中。指令会更新指令会更新指令会更新指令会更新NNNN、Z Z Z Z、C C C C和和和和V V V V标志。其指令格式如下:标志。其指令格式如下:标志。其指令格式如下:标志。其指令格式如下:应用示例:NEG R1,R0NEG R1,R0;R1=-R0;R1=-R0;R1=-R0;R1=-R01/31/202327第第20章章 ARM汇编程序设计汇编程
44、序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计Thumb数据处理指令算术逻辑运算指令 算术逻辑指令包括以下几类:算术指令逻辑运算指令移位指令比较指令1/31/202328第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计ADD指令将两个数据相加,结果保存到Rd寄存器中。算术运算指令ADDADD Rd,Rn,RmADD Rd,Rn,#expr3ADD Rd,#expr8其中:Rd 目标寄存器,必须在R0R7之间。Rn 第1个操作数寄存器
45、,必须在R0R7之间。Rm 第2个操作数寄存器,必须在R0R7之间。exper 3位立即数,即07。expr8 8位立即数,即0255。低寄存器的ADD指令格式:应用示例:ADD R1,R1,R0;R1=R0+R1 ADD R1,R1,#7;R1=R1+7 ADD R1,#200;R1=R1+2001/31/202329第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计ADD指令将两个数据相加,结果保存到Rd寄存器中。算术运算指令ADDADD Rd,Rm其中:Rd 目标寄存器,也是第一个操作数寄存
46、器。Rm 第2个操作数寄存器。高或低寄存器的ADD指令格式:应用示例:ADD R1,R10;R1=R1+R101/31/202330第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计ADD指令将两个数据相加,结果保存到Rd寄存器中。算术运算指令ADDADD SP,#expr其中:SP 目标寄存器,也是第一个操作数寄存器。expr 立即数,在-508+508之间的4的整数倍的数。SP操作的ADD指令格式:应用示例:ADD SP,#-500;SP=SP-5001/31/202331第第20章章 ARM
47、汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计SUB指令将两个数据相减,结果保存到Rd寄存器中。算术运算指令SUBSUB Rd,Rn,RmSUB Rd,Rn,#expr3SUB Rd,#expr8其中:Rd 目标寄存器,必须在R0R7之间。Rn 第1个操作数寄存器,必须在R0R7之间。Rm 第2个操作数寄存器,必须在R0R7之间。exper 3位立即数,即07。expr8 8位立即数,即0255。低寄存器的SUB指令格式:应用示例:SUB R1,R1,R0;R1=R1-R0 SUB R1,R1,#7;R1=R1-
48、7 SUB R1,#200;R1=R1-2001/31/202332第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计SUB指令将两个数据相减,结果保存到Rd寄存器中。算术运算指令SUBSUB SP,#expr其中:SP 目标寄存器,也是第一个操作数寄存器。expr 立即数,在-508+508之间的4的整数倍的数。SP操作的SUB指令格式:应用示例:SUB SP,#-380;SP=SP-3801/31/202333第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系
49、汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计 ADC指令将Rm的值相加,再加上CPSR中的C条件标志位,结果保存到Rd寄存器。算术运算指令ADCADC Rd,Rm其中:Rd 目标寄存器,也是第一个操作数寄存器,必须在R0R7之间。Rm 第2个操作数寄存器,必须在R0R7之间。ADC指令格式:应用示例(64位加法):ADD R0,R2 ADC R1,R3;(R1、R2)=(R1、R0)+(R3、R2)1/31/202334第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计 SBC
50、指令用寄存器Rd减去Rm,再减去CPSR中的C条件标志位的非,结果保存到Rd寄存器。算术运算指令SBCSBC Rd,Rm其中:Rd 目标寄存器,也是第一个操作数寄存器,必须在R0R7之间。Rm 第2个操作数寄存器,必须在R0R7之间。SBC指令格式:应用示例(64位减法):SUB R0,R2 SBC R1,R3;(R1、R2)=(R1、R0)-(R3、R2)1/31/202335第第20章章 ARM汇编程序设计汇编程序设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计 MUL乘法指令用寄存器Rd乘以Rm,结果保存到Rd寄存器。算术运算指