版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、8086/8088和ARM核汇编语言程序设计第19章Thumb指令系统 8/12/20221第1章 汇编语言基础知识 20章 ARM汇编程序设计19.2 Thumb存储器访问指令第20章 ARM汇编程序设计19.1 概述19.3 Thumb数据处理指令19.4 Thumb分支指令19.5 Thumb杂项指令19.6 Thumb伪指令8/12/20222第1章 汇编语言基础知识 20章 ARM汇编程序设计19.1 概述 Thumb指令集可以看作是ARM指令压缩形式的子集,它是为减小代码量而提出的,具有16位的代码密度。Thumb指令体系不完整,只支持通用功能。必要时仍需要使用ARM指令,如进入异
2、常时。说明:Thumb指令的格式与使用方式与ARM指令集类似,而且使用并不是很频繁,建议这部分内容选修。8/12/20223第1章 汇编语言基础知识 20章 ARM汇编程序设计19.2 Thumb存储器访问指令第20章 ARM汇编程序设计19.1 概述19.3 Thumb数据处理指令19.4 Thumb分支指令19.5 Thumb杂项指令19.6 Thumb伪指令8/12/20224第1章 汇编语言基础知识 20章 ARM汇编程序设计Thumb存储器访问指令助记符说明操作影响标志LDR/STR Rd,addressing 加载/存储字数据RdRn,#immed_54,Rd、Rn为R0R7无LD
3、RH/STRH Rd,addressing 加载/存储无符号半字数据RdRn,#immed_52,Rd、Rn为R0R7无LDRB/STRB Rd,addressing加载/存储无符号字节数据RdRn,#immed_51,Rd、Rn为R0R7无LDRSH Rd,addressing 加载有符号半字数据RdRn,Rm,Rd、Rn、Rm为R0R7无LDRSB Rd,addressing加载有符号字节数据RdRn,Rm,Rd、Rn、Rm为R0R7无单寄存器访问指令8/12/20225第1章 汇编语言基础知识 20章 ARM汇编程序设计Thumb存储器访问指令LDR和STR加载/存储指令 根据指令的寻址
4、方式不同,可以分为以下三类:立即数偏移寻址;寄存器偏移寻址;PC或SP相对偏移寻址;8/12/20226第1章 汇编语言基础知识 20章 ARM汇编程序设计单寄存器访问指令立即数偏移寻址 以这种寻址方式对存储器访问时,存储器的地址以一个寄存器的内容为基址,在偏移一个立即数后指明。指令格式如下:LDRRd,Rn,#immed_54 ;加载内存中的字数据到寄存器Rd中STRRd,Rn,#immed_54 ;将Rd中的字数据存储到指定地址的内存中LDRH Rd,Rn,#immed_52 ;加载内存中的半字数据到寄存器Rd的低16位中STRHRd,Rn,#immed_52 ;存储Rd中的低16位半字数
5、据到指定的内存单元LDRBRd,Rn,#immed_51 ;加载内存中的字节数据到寄存器Rd中STRBRd,Rn,#immed_51 ;存储Rd中的低8位字节数据到指定的内存单元 其中:Rd 表示加载或存储的寄存器。必须为R0R7。 Rn 表示基址寄存器。必须为R0R7。 immed_5N 表示立即数偏移量,其取值范围为(031)N。8/12/20227第1章 汇编语言基础知识 20章 ARM汇编程序设计单寄存器访问指令立即数偏移指令编码指令执行的条件码:0110b:LDR/STR指令;1000b:LDRH/STRH指令;0111b:LDRB/STRB指令;L用于区别加载(L为1)或存储(L为
6、0)Immed_5:5位无符号立即数偏移Rn:基址寄存器Rd:源或目标寄存器8/12/20228第1章 汇编语言基础知识 20章 ARM汇编程序设计单寄存器访问指令立即数偏移寻址注意:进行字数据访问时,必须保证传送地址为32位对齐。进行半字数据访问时,必须保证传送地址为16位对齐。 应用示例: LDR R0,R1,#0 x4 STR R3,R4 LDRH R5,R0,#0 x02 STRH R1,R0,#0 x08 LDRB R3,R6,#20 STRB R1,R0,#318/12/20229第1章 汇编语言基础知识 20章 ARM汇编程序设计单寄存器访问指令寄存器偏移寻址 这种寻址方式是以一
7、个寄存器的内容为基址,以另一个寄存器的内容为偏移量,两者相加作为存储器的地址。指令格式如下:LDRRd,Rn,Rm;加载一个字数据STRRd,Rn,Rm;存储一个字数据LDRHRd,Rn,Rm;加载一个无符号半字数据STRHRd,Rn,Rm;存储一个无符号半字数据LDRBRd,Rn,Rm;加载一个无符号字节数据STRBRd,Rn,Rm;存储一个无符号字节数据LDRSHRd,Rn,Rm;加载一个有符号半字数据LDRSBRd,Rn,Rm;存储一个有符号半字数据 其中:Rd 表示加载或存储的寄存器。必须为R0R7。 Rn 表示基址寄存器。必须为R0R7。 Rm 表示内含数偏移量的寄存器,必须为R0R
8、7 。8/12/202210第1章 汇编语言基础知识 20章 ARM汇编程序设计单寄存器访问指令寄存器偏移指令编码指令执行的条件码:00b:LDR/STR指令;01b:LDRH/STRH指令;10b:LDRB/STRB指令;L用于区别加载(L为1)或存储(L为0)Rm:偏移量寄存器Rn:基址寄存器Rd:源或目标寄存器说明:当opcode位为11b时,L位为0代表指令“LDRSB“,L位为1代表指令“LDRSH”8/12/202211第1章 汇编语言基础知识 20章 ARM汇编程序设计单寄存器访问指令寄存器偏移寻址注意:进行字数据访问时,必须保证传送地址为32位对齐。进行半字数据访问时,必须保证
9、传送地址为16位对齐。 应用示例: LDRR3,R1,R0 STRR1,R0,R2 LDRHR6,R0,R1 STRHR0,R4,R5 LDRBR2,R5,R1 STRBR1,R3,R2 LDRSHR7,R6,R3 LDRSBR5,R7,R28/12/202212第1章 汇编语言基础知识 20章 ARM汇编程序设计单寄存器访问指令相对偏移寻址 这种寻址方式是以PC或SP寄存器的内容为基址,以一个立即数为偏移量,两者相加作为存储器的地址。指令格式如下:LDRRd,PC,#immed_84LDRRd,labelLDRRd,SP,#immed_84STRRd,SP,#immed_84 其中:Rd 表
10、示加载或存储的寄存器。必须为R0R7。 immed_84 表示偏移量,取值范围是(0255)4 。 label 表示程序相对偏移表达式,Label必须在当前指令之后的1KB范围内。8/12/202213第1章 汇编语言基础知识 20章 ARM汇编程序设计单寄存器访问指令相对偏移指令编码L:用于区别加载(L为1)或存储(L为0)Rd:目标或源寄存器immed8:偏移量PC相对偏移LDR指令编码SP相对偏移LDR/STR指令编码8/12/202214第1章 汇编语言基础知识 20章 ARM汇编程序设计单寄存器访问指令相对偏移寻址注意:以PC作为基地址的相对偏移寻址指令只有LDR,而没有STR指令。
11、 应用示例: LDR R0,PC,#0 x08;读取PC+0 x08地址上的字数据,;保存到R0中 LDR R7,LOCALDAT;读取LOCALDAT地址上的;字数据,保存到R7中 LDR R3,SP,#1020; 读取SP+1020地址上的字数据,;保存到R3中 STR R2,SP; 存储R2寄存器的数据到SP;指向的存储单元 (偏移量为0) 8/12/202215第1章 汇编语言基础知识 20章 ARM汇编程序设计Thumb存储器访问指令PUSH和POP寄存器入栈及出栈指令 实现低寄存器和可选的LR寄存器入栈及低寄存器和可选的PC寄存器出栈操作。堆栈地址由SP寄存器设置,堆栈是满递减堆栈
12、。 8/12/202216第1章 汇编语言基础知识 20章 ARM汇编程序设计寄存器入栈及出栈指令PUSHreglist,LRPOPreglist,PC其中:reglist入栈/出栈低寄存器列表,即R0R7。LR入栈时的可选寄存器。PC出栈时的可选寄存器。指令编码指令格式L用于区别出栈(L为1)或入栈(L为0)R用于区别操作寄存器中是否有LR/PC寄存器(有则R为1,否则为0)8/12/202217第1章 汇编语言基础知识 20章 ARM汇编程序设计寄存器入栈及出栈指令PUSHreglist,LRPOPreglist,PC其中:reglist入栈/出栈低寄存器列表,即R0R7。LR入栈时的可选
13、寄存器。PC出栈时的可选寄存器。指令格式 应用示例: PUSHR0-R7,LR;将低寄存器R0R7全部入栈,;LR也入栈 POPR0-R7,PC;将堆栈中的数据弹出到;低寄存器R0R7及PC中8/12/202218第1章 汇编语言基础知识 20章 ARM汇编程序设计19.2 Thumb存储器访问指令第20章 ARM汇编程序设计19.1 概述19.3 Thumb数据处理指令19.4 Thumb分支指令19.5 Thumb杂项指令19.6 Thumb伪指令8/12/202219第1章 汇编语言基础知识 20章 ARM汇编程序设计Thumb数据处理指令 Thumb数据处理指令涵盖了编译器需要的大多数
14、操作。大部分的Thumb数据处理指令采用2地址格式,不能在单指令中同时完成一个操作数的移位及一个ALU操作。所以数据处理操作比ARM状态的更少,并且访问寄存器R8R15受到限制。数据处理指令分为两类:数据传送指令算术逻辑运算指令8/12/202220第1章 汇编语言基础知识 20章 ARM汇编程序设计Thumb数据处理指令数据传送指令助记符操作影响标志MOV Rd,#exprRdexpr,Rd为R0R7影响N、ZMOV Rd,RmRdRm,Rd、Rm均可为R0R15Rd和Rm均为R0R7时,影响N、Z,清零C、V MVN Rd,RmRd(Rm) ,Rd、Rm均为R0R7影响N、ZNEG Rd,
15、RmRd(-Rm) ,Rd、Rm均为R0R7影响N、Z、C、V8/12/202221第1章 汇编语言基础知识 20章 ARM汇编程序设计 MOV指令将8位立即数或寄存器传送到目标寄存器中。其指令格式如下:数据传送指令MOVMOVRd,#exprMOVRd,Rm其中:Rd目标寄存器。MOV Rd,#expr时,Rd必须在R0R7之间。 exper 8位立即数,即0255。 Rm源寄存器。为R0R15。指令编码(立即数传送)指令编码(寄存器传送)8/12/202222第1章 汇编语言基础知识 20章 ARM汇编程序设计数据传送指令MOV注意: “MOV Rd,#expr”指令会更新N和Z标志,对标
16、志C和V无影响。 “MOV Rd,Rm”指令,若Rd或Rm是高寄存器(R8R15),则标志不受影响,若Rd或Rm都是低寄存器(R0R7),则更新标志N和Z,且清除标志C和V。 应用示例: MOV R1,#0 x10; R1=0 x10 MOV R0,R8; R0=R8 MOV PC,LR; PC=LR,子程序返回8/12/202223第1章 汇编语言基础知识 20章 ARM汇编程序设计数据传送指令MVNMVNRd,Rm其中:Rd目标寄存器。MOV Rd,#expr时,Rd必须在R0R7之间。 Rm源寄存器。为R0R15。指令编码 MVN指令将寄存器Rm按位取反后传送到目标寄存器Rd中。指令的执
17、行会更新N和Z标志,对标志C和V无影响。其指令格式如下:8/12/202224第1章 汇编语言基础知识 20章 ARM汇编程序设计 应用示例: MVN R1,R2; 将R2取反,结果存于R1数据传送指令MVNMVNRd,Rm其中:Rd目标寄存器。MOV Rd,#expr时,Rd必须在R0R7之间。 Rm源寄存器。为R0R15。 MVN指令将寄存器Rm按位取反后传送到目标寄存器Rd中。指令的执行会更新N和Z标志,对标志C和V无影响。其指令格式如下:8/12/202225第1章 汇编语言基础知识 20章 ARM汇编程序设计数据传送指令NEGNEGRd,Rm其中:Rd目标寄存器,必须在R0R7之间。
18、 Rm源寄存器。为R0R15。指令编码 NEG指令将寄存器Rm乘以-1后传送到目标寄存器Rd中。指令会更新N、Z、C和V标志。其指令格式如下:8/12/202226第1章 汇编语言基础知识 20章 ARM汇编程序设计数据传送指令NEGNEGRd,Rm其中:Rd目标寄存器,必须在R0R7之间。 Rm源寄存器。为R0R15。 NEG指令将寄存器Rm乘以-1后传送到目标寄存器Rd中。指令会更新N、Z、C和V标志。其指令格式如下: 应用示例: NEG R1,R0; R1=-R08/12/202227第1章 汇编语言基础知识 20章 ARM汇编程序设计Thumb数据处理指令算术逻辑运算指令 算术逻辑指令
19、包括以下几类:算术指令逻辑运算指令移位指令比较指令8/12/202228第1章 汇编语言基础知识 20章 ARM汇编程序设计ADD指令将两个数据相加,结果保存到Rd寄存器中。算术运算指令ADDADD Rd,Rn,RmADD Rd,Rn,#expr3ADD Rd,#expr8其中:Rd目标寄存器,必须在R0R7之间。 Rn第1个操作数寄存器,必须在R0R7之间。 Rm第2个操作数寄存器,必须在R0R7之间。 exper 3位立即数,即07。 expr8 8位立即数,即0255。低寄存器的ADD指令格式: 应用示例: ADD R1,R1,R0; R1=R0+R1 ADD R1,R1,#7; R1=
20、R1+7 ADD R1,#200; R1=R1+2008/12/202229第1章 汇编语言基础知识 20章 ARM汇编程序设计ADD指令将两个数据相加,结果保存到Rd寄存器中。算术运算指令ADDADD Rd,Rm其中:Rd 目标寄存器,也是第一个操作数寄存器。 Rm 第2个操作数寄存器。高或低寄存器的ADD指令格式: 应用示例: ADD R1,R10; R1=R1+R108/12/202230第1章 汇编语言基础知识 20章 ARM汇编程序设计ADD指令将两个数据相加,结果保存到Rd寄存器中。算术运算指令ADDADD SP,#expr其中:SP 目标寄存器,也是第一个操作数寄存器。 expr
21、 立即数,在-508+508之间的4的整数倍的数。SP操作的ADD指令格式: 应用示例: ADD SP,#-500;SP=SP-5008/12/202231第1章 汇编语言基础知识 20章 ARM汇编程序设计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指令格式: 应
22、用示例: SUB R1,R1,R0; R1=R1-R0 SUB R1,R1,#7; R1=R1-7 SUB R1,#200; R1=R1-2008/12/202232第1章 汇编语言基础知识 20章 ARM汇编程序设计SUB指令将两个数据相减,结果保存到Rd寄存器中。算术运算指令SUBSUB SP,#expr其中:SP 目标寄存器,也是第一个操作数寄存器。 expr 立即数,在-508+508之间的4的整数倍的数。SP操作的SUB指令格式: 应用示例: SUB SP,#-380;SP=SP-3808/12/202233第1章 汇编语言基础知识 20章 ARM汇编程序设计 ADC指令将Rm的值相
23、加,再加上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)8/12/202234第1章 汇编语言基础知识 20章 ARM汇编程序设计 SBC指令用寄存器Rd减去Rm,再减去CPSR中的C条件标志位的非,结果保存到Rd寄存器。算术运算指令SBCSBC Rd, Rm其中:Rd目标寄存器,也是第一个操作数寄存器,必须在R
24、0R7之间。 Rm第2个操作数寄存器,必须在R0R7之间。SBC指令格式: 应用示例(64位减法): SUB R0,R2 SBC R1,R3;(R1、R2)=(R1、R0)-(R3、R2)8/12/202235第1章 汇编语言基础知识 20章 ARM汇编程序设计 MUL乘法指令用寄存器Rd乘以Rm,结果保存到Rd寄存器。算术运算指令MULMUL Rd, Rm其中:Rd目标寄存器,也是第一个操作数寄存器,必须在R0R7之间。 Rm第2个操作数寄存器,必须在R0R7之间。MUL指令格式: 应用示例(64位减法): MUL R0,R1;R0=R0R18/12/202236第1章 汇编语言基础知识 2
25、0章 ARM汇编程序设计 AND指令将寄存器Rd的值与寄存器Rm的值按位作逻辑“与”操作,结果保存到Rd寄存器中。逻辑运算指令ANDADD Rd, Rm其中:Rd目标寄存器,也是第一个操作数寄存器,必须在R0R7之间。 Rm第2个操作数寄存器,必须在R0R7之间。AND指令格式: 应用示例: MOV R1,#0 x0F AND R0,R1; R0=R0 & R1,清零R0高24位8/12/202237第1章 汇编语言基础知识 20章 ARM汇编程序设计 ORR指令将寄存器Rd的值与寄存器Rn的值按位作逻辑“或”操作,结果保存到Rd寄存器中。逻辑运算指令ORRORR Rd, Rm其中:Rd目标寄
26、存器,也是第一个操作数寄存器,必须在R0R7之间。 Rm第2个操作数寄存器,必须在R0R7之间。ORR指令格式: 应用示例: MOV R1,#0 x0F ORR R0,R1; R0=R0 | R1,置位R0低4位8/12/202238第1章 汇编语言基础知识 20章 ARM汇编程序设计 EOR指令将寄存器Rd的值与寄存器Rn的值按位作逻辑“异或”操作,结果保存到Rd寄存器中。逻辑运算指令EOREOR Rd, Rm其中:Rd目标寄存器,也是第一个操作数寄存器,必须在R0R7之间。 Rm第2个操作数寄存器,必须在R0R7之间。EOR指令格式: 应用示例: MOV R1,#0 x0F EOR R0,
27、R1; R0=R0 R1,取反R0低4位8/12/202239第1章 汇编语言基础知识 20章 ARM汇编程序设计 BIC指令将寄存器Rd的值与寄存器Rm的值的反码作逻辑“与”操作,结果保存到Rd寄存器中。逻辑运算指令BICBIC Rd, Rm其中:Rd目标寄存器,也是第一个操作数寄存器,必须在R0R7之间。 Rm第2个操作数寄存器,必须在R0R7之间。BIC指令格式: 应用示例: MOV R1,#0 x02 BIC R0,R1; 清零R0的第2位,其它位不变8/12/202240第1章 汇编语言基础知识 20章 ARM汇编程序设计 ASR指令将数据算术右移,将符号位拷贝到左侧空出的位,移位结
28、果保存到Rd寄存器中。移位指令ASRASR Rd, RsASR Rd,Rm,#expr其中:Rd 目标寄存器,也是第一个操作数寄存器,必须在R0R7之间。 Rs 寄存器控制移位中包含移位位数的寄存器,必须在R0R7之间 Rm 立即数移位的源寄存器,必须在R0R7之间 expr 立即数移位位数,值为132ASR指令格式:ASR移位操作: 若移位位数为32,则Rd清零,最后移出的位保留在标志C中;若移位位数大于32,则Rd和标志C均被清零;若移位位数为0,则不影响C标志。8/12/202241第1章 汇编语言基础知识 20章 ARM汇编程序设计 ASR指令将数据算术右移,将符号位拷贝到左侧空出的位
29、,移位结果保存到Rd寄存器中。移位指令ASRASR Rd, RsASR Rd,Rm,#expr其中:Rd 目标寄存器,也是第一个操作数寄存器,必须在R0R7之间。 Rs 寄存器控制移位中包含移位位数的寄存器,必须在R0R7之间 Rm 立即数移位的源寄存器,必须在R0R7之间 expr 立即数移位位数,值为132ASR指令格式: 应用示例: ASR R1,R2 ASR R3,R1,#28/12/202242第1章 汇编语言基础知识 20章 ARM汇编程序设计 LSL指令将数据逻辑左移,空位清零,移位结果保存到Rd寄存器中。移位指令LSLLSL Rd, RsLSL Rd,Rm,#expr其中:Rd
30、 目标寄存器,也是第一个操作数寄存器,必须在R0R7之间。 Rs 寄存器控制移位中包含移位位数的寄存器,必须在R0R7之间 Rm 立即数移位的源寄存器,必须在R0R7之间 expr 立即数移位位数,值为131LSL指令格式: 若移位位数为32,则Rd清零,最后移出的位保留在标志C中;若移位位数大于32,则Rd和标志C均被清零;若移位位数为0,则不影响C标志。LSL移位操作:08/12/202243第1章 汇编语言基础知识 20章 ARM汇编程序设计 LSL指令将数据逻辑左移,空位清零,移位结果保存到Rd寄存器中。移位指令LSLLSL Rd, RsLSL Rd,Rm,#expr其中:Rd目标寄存
31、器,也是第一个操作数寄存器,必须在R0R7之间。 Rs寄存器控制移位中包含移位位数的寄存器,必须在R0R7之间 Rm 立即数移位的源寄存器,必须在R0R7之间 expr 立即数移位位数,值为131LSL指令格式: 应用示例: LSL R6,R7 LSL R1,R6,#28/12/202244第1章 汇编语言基础知识 20章 ARM汇编程序设计 LSR指令将数据逻辑右移,空位清零,移位结果保存到Rd寄存器中。移位指令LSRLSR Rd, RsLSR Rd,Rm,#expr其中:Rd目标寄存器,也是第一个操作数寄存器,必须在R0R7之间。 Rs寄存器控制移位中包含移位位数的寄存器,必须在R0R7之
32、间 Rm 立即数移位的源寄存器,必须在R0R7之间 expr 立即数移位位数,值为132LSR指令格式: 若移位位数为32,则Rd清零,最后移出的位保留在标志C中;若移位位数大于32,则Rd和标志C均被清零;若移位位数为0,则不影响C标志。LSR移位操作:08/12/202245第1章 汇编语言基础知识 20章 ARM汇编程序设计 LSR指令将数据逻辑右移,空位清零,移位结果保存到Rd寄存器中。移位指令LSRLSR Rd, RsLSR Rd,Rm,#expr其中:Rd目标寄存器,也是第一个操作数寄存器,必须在R0R7之间。 Rs寄存器控制移位中包含移位位数的寄存器,必须在R0R7之间 Rm 立
33、即数移位的源寄存器,必须在R0R7之间 expr 立即数移位位数,值为132LSR指令格式: 应用示例: LSR R3,R0 LSR R5,R2,#28/12/202246第1章 汇编语言基础知识 20章 ARM汇编程序设计 ROR指令将数据循环右移,寄存器右侧移出的位放入左侧空出的位上,移位结果保存到Rd寄存器中。移位指令RORROR Rd, Rs其中:Rd目标寄存器,也是第一个操作数寄存器,必须在R0R7之间。 Rs寄存器控制移位中包含移位位数的寄存器,必须在R0R7之间 ROR指令格式:ROR移位操作: 应用示例: ROR R3,R08/12/202247第1章 汇编语言基础知识 20章
34、 ARM汇编程序设计 CMP指令使用寄存器Rn的值减去第二个操作数的值,根据操作的结果更新CPSR中的N、Z、C和V标志位。 比较指令CMPCMP Rn,RmCMP Rn,#epr其中:Rn第一个操作数寄存器,必须在R0R7之间。 Rm第二个操作数寄存器,必须在R0R7之间。 expr 立即数,值为0255ROR指令格式: 应用示例: CMP R1,#10;R1与10比较,设置相关标志位 CMP R1,R2 ;R1与R2比较,设置相关标志位8/12/202248第1章 汇编语言基础知识 20章 ARM汇编程序设计 CMN指令使用寄存器Rn的值加上寄存器Rm的值,根据操作的结果更新CPSR中的N
35、、Z、C和V标志位。 比较指令CMNCMN Rn,Rm其中:Rn第一个操作数寄存器,必须在R0R7之间。 Rm第二个操作数寄存器,必须在R0R7之间。ROR指令格式: 应用示例: CMN R0,R2 ;R0与-R2比较,设置相关标志位8/12/202249第1章 汇编语言基础知识 20章 ARM汇编程序设计 TST指令将寄存器Rn的值与寄存器Rm的值按位作逻辑“与”操作,根据操作的结果更新CPSR中的N、Z、C和V标志位。 比较指令TSTTST Rn,Rm其中:Rn第一个操作数寄存器,必须在R0R7之间。 Rm第二个操作数寄存器,必须在R0R7之间。TST指令格式: 应用示例: MOV R0,
36、#0 x01 TST R1,R0 ;判断R1的最低位是否为08/12/202250第1章 汇编语言基础知识 20章 ARM汇编程序设计19.2 Thumb存储器访问指令第20章 ARM汇编程序设计19.1 概述19.3 Thumb数据处理指令19.4 Thumb分支指令19.5 Thumb杂项指令19.6 Thumb伪指令8/12/202251第1章 汇编语言基础知识 20章 ARM汇编程序设计Thumb分支指令助记符说明操作条件码位置B label分支指令PClabelBcondBL label带链接的分支指令LRPC-4,PClabel无BX Rm带状态切换的分支指令PClabel,切换处
37、理器状态无8/12/202252第1章 汇编语言基础知识 20章 ARM汇编程序设计 B指令跳转到指定的地址执行程序,它是Thumb指令集中的唯一有条件执行指令。如果使用了条件执行,那么跳转范围在-252+256字节内。如果没有使用条件执行,那么跳转范围在2K内。分支指令BBcond label其中:label表示程序标号。B指令格式: 应用示例: B WAITB ;WAITB标号在当前指令的2K范围内 BEQ LOOP1 ;LOOP1标号在当前指令的-252+256范围内8/12/202253第1章 汇编语言基础知识 20章 ARM汇编程序设计 BL指令在跳转到指定地址执行程序前,将下一条指
38、令的地址拷贝到R14链接寄存器中。分支指令BLBL label其中:label 表示程序标号。BL指令格式:注意:由于BL指令通常需要大的地址范围,很难用16位指令格式实现,为此,Thumb采用两条这样的指令组合成22位半字偏移(符号扩展为32位),使指令转移范围为4MB。 应用示例:反汇编代码:ADDR0,R1BLRstInit 0 x1809 add r1,r1,r00 xf9dcf000 bl RstInit指令机器码汇编指令32位长的机器码8/12/202254第1章 汇编语言基础知识 20章 ARM汇编程序设计 BX指令是带状态切换的分支指令,跳转地址由Rm指定,同时根据Rm的最低位的值切换处理器状态,当最低两位均为0时,切换到ARM状态。分支指令BXBX Rm其中:Rm 保存有目标地址的寄存器。BX指令格式: 应用示例: ADR R0,ArmFun;将ARM程序段地址存入R0 BX R0 ;跳至R0指定的地址,并切换到ARM状态8/12/202255第1章 汇编语言基础知识 20章 ARM汇编程序设计19.2 Thumb存储器访问指令第20章 A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年特斯拉中国财务面试题集
- 渤海银行玉林市容县2026届毕业生招聘信息安全岗笔试题
- 2026年求职者如何提问以显示兴趣与准备
- 2026年快递驿站工作人员取件纠纷与客户沟通技巧问答
- 2026年直播电商实战带货话术设计测试题
- 2026年提升华电集团面试准备效率的方法
- 2026年乡镇冲锋舟操作手技能题库
- 2026年机器学习算法与实践应用解析
- 2026年财政系统预算执行常态化监督工作机制测试
- 2026年教育心理学学习宝典教育题库解析
- 福州三年级期中数学试卷
- 2025中国恶性肿瘤报告
- 温宿县鑫达化工有限责任公司6万吨年甲醛(37%)、9000吨年多聚甲醛、1万吨年甲缩醛项目环境影响报告书
- 凤梨批发合同4篇
- 老年人骨关节疾病防治与护理
- 70篇短文记完1600核心词汇
- 2025年四川省成都市成华区中考二诊英语试题(原卷版+解析版)
- 电气防爆管线安装规范
- GB/T 3917.3-2025纺织品织物撕破性能第3部分:梯形试样撕破强力的测定
- 人工智能班会主题班会
- DB11T 2335-2024 既有建筑外门窗改造及验收技术标准
评论
0/150
提交评论