1、1第第3章章ARM指令系统指令系统 ARM指令系统概述指令系统概述 ARM指令指令的寻址方式的寻址方式 ARM指令集指令集 Thumb指令集指令集21 ARM指令系统概述指令系统概述 ARM指令集可以分为六大类,分别为:指令集可以分为六大类,分别为:数据传送指令数据传送指令数据处理指令数据处理指令跳转指令跳转指令程序状态寄存器访问指令程序状态寄存器访问指令异常中断指令。异常中断指令。协处理器指令协处理器指令31 ARM指令系统概述指令系统概述ARM指令的基本汇编格式指令的基本汇编格式 Opcode cond S Rd,Rn,operand2 助记符可选条件后缀可选标志位后缀目标寄存器第1操作数
2、寄存器第2操作数LDR R0,R1 ;R0 R1ADDS R2,R1,#1 ;R2R1+1,影响影响CPSRSUBNES R2,R1,R0;R2R1-R0 While NE,影响影响CPSR 41 ARM指令系统概述指令系统概述ARM指令的编码格式指令的编码格式指令的二进制数编码表示,通常包括目标寄存器、指令的二进制数编码表示,通常包括目标寄存器、第一操作数寄存器、第二操作数、条件、标志影响第一操作数寄存器、第二操作数、条件、标志影响位以及指令操作等的编码。位以及指令操作等的编码。51 ARM指令系统概述指令系统概述例例 数据处理类指令数据处理类指令cond0 0operand 2#opcod
3、eSRnRd3128242119161512 110目的寄存器目的寄存器第第1操作操作数数寄存器寄存器影影响状态响状态寄存器寄存器算算术术/逻辑逻辑功能功能opcode0000AND0010SUB0100ADD1111MVN(求反)操作61 ARM指令系统概述指令系统概述 ARM指令会根据指令会根据CPSR中的条件标志位判断是否需中的条件标志位判断是否需要执行。在条件满足时,指令执行,否则指令被忽要执行。在条件满足时,指令执行,否则指令被忽略。略。cond0 0operand 2#opcodeSRnRd3128242119161512 110目的寄存器目的寄存器第第1操作操作数数寄存器寄存器影
4、响状态寄存器影响状态寄存器算算术术/逻辑逻辑功能功能条件码条件码7条件码表条件码表1条件码后缀标 志含 义0000EQZ置位相等0001NEZ清零不相等0010CSC置位无符号数大于或等于0011CCC清零无符号数小于0100MIN置位负数0101PLN清零正数或零0110VSV置位溢出0111VCV清零未溢出8条件码表条件码表2条件码后缀标 志含 义1001LSC清零Z置位无符号数小于或等于1010GEN等于V带符号数大于或等于1011LTN不等于V带符号数小于1100GTZ清零且N等于V带符号数大于1101LEZ置位且N不等于V带符号数小于或等于1110AL忽略无条件执行91 ARM指令系
5、统概述指令系统概述 例例 条件执行条件执行 CMP R0,#0 BEQ SUB0 CMP R0,#1 BEQ SUB1 CMP R0,#2 BEQ SUB2SUB0:SUB1:SUB2:10第第3章章ARM指令系统指令系统 ARM指令系统概述指令系统概述 ARM指令指令的寻址方式的寻址方式 ARM指令集指令集 Thumb指令集指令集11什么是寻址方式什么是寻址方式寻找操作数地址的方式或寻找操作数的方式称为寻找操作数地址的方式或寻找操作数的方式称为寻址方式。寻址方式。如在计算如在计算2+3=?时,需先找到?时,需先找到2和和3的地址,才的地址,才能把它们取出来进行加法操作,寻找能把它们取出来进行
6、加法操作,寻找2和和3的地的地址的方式即寻址方式。址的方式即寻址方式。ARM有哪些寻址方式?有哪些寻址方式?2 ARM指令的寻址方式指令的寻址方式122 ARM指令的寻址方式指令的寻址方式ARM的寻址方的寻址方式式1)立即寻址立即寻址2)寄存器寻址寄存器寻址3)寄存器间接寻址寄存器间接寻址4)基址加偏址寻址基址加偏址寻址 5)堆栈寻址)堆栈寻址 6)块拷贝寻址)块拷贝寻址 7)相对寻址)相对寻址 131)立即寻址立即寻址 立即寻址立即寻址/立即数寻址:立即数寻址:操作数直接包含在指操作数直接包含在指令中,只要取出指令也就取到了操作数,这个令中,只要取出指令也就取到了操作数,这个操作数被称为立即
7、数。例如:操作数被称为立即数。例如:ADDR0,R0,1/*R0R01*/ADDR0,R0,0 x3f /*R0R00 x3f*/第二个操作数即为立即数,以第二个操作数即为立即数,以“”为前缀,为前缀,141)立即寻址立即寻址立即数表示立即数表示十进制另加十进制另加“0d”或或省略省略。十六进制立即数另加十六进制立即数另加“0 x”或或“&”,二进制另加二进制另加“0b”或或“2_”;立即寻址特点立即寻址特点速度快。为什么?速度快。为什么?能使用的立即数有限。为什么?能使用的立即数有限。为什么?151)立即寻址立即寻址立即寻址中立即寻址中立即数立即数范围范围有多大?有多大?32位指令码中只能用
8、位指令码中只能用12位表示立即数,最大为位表示立即数,最大为212=4096cond0 0operand 2#opcode SRnRd312827262524212019161512110目的寄存器第一操作数寄存器设置标志位码操作码16ARM采用采用8位常数循环右移偶数位得到位常数循环右移偶数位得到32位立即数位立即数,右移的位数为,右移的位数为4位二进制数的位二进制数的2倍倍(2x(015):“842”=immmed_8 ror 2xrotate_imm写汇编时程序员是否需将立即数表示为写汇编时程序员是否需将立即数表示为“842”形式?形式?cond0 0operand 2#opcode S
9、RnRd312827262524212019161512110目的寄存器第一操作数寄存器设置标志位码操作码8-bit 立即数118 70#rot171)立即寻址立即寻址汇编器完成将立即数转化为汇编器完成将立即数转化为“842”的表示形式的表示形式,例例如如MOV R0,#0 xF2 00 E3A00CF2;0 xF2 ror 2x12MOV R1,#0 x110000 E3A01811;0 x11 ror 2x8MOV R4,#12800 E3A04B4A;0 x4A ror 2x11并非所有并非所有32位常数都是合法的位常数都是合法的合法立即数:合法立即数:0 x0000F200,0 x00
10、110000,0 x00012800非法立即数:非法立即数:0 x1010,0 x00102,0 xFF100012位表示立即数汇编器汇编器DestinationCFRotate Right循环循环右移位数为2C182)寄存器寻址寄存器寻址 寄存器寻址:寄存器寻址:操作数在寄存器中,指令中的操作数在寄存器中,指令中的地址码为寄存器编号,地址码为寄存器编号,寄存器的内容寄存器的内容即即为操为操作数。执行效率较高的寻址方式。例作数。执行效率较高的寻址方式。例 ADD R0,R1,R2 /*R0R1R2*/寄存器寻址是各类微处器经常采用的寻址方寄存器寻址是各类微处器经常采用的寻址方式,是执行效率较高
11、的寻址方式。式,是执行效率较高的寻址方式。目的寄存器第一操作数寄存器第二操作数寄存器192)寄存器寻址寄存器寻址寄存器寻址中,第二寄存器操作数在与第一操寄存器寻址中,第二寄存器操作数在与第一操作数结合前可先进行移位操作,作数结合前可先进行移位操作,移位位数可以移位位数可以是一是一5位立即数或一寄存器位立即数或一寄存器R值。值。例例ADD R3,R2,R1,LSR#2 ;R3R2+R14ADD R3,R2,R1,LSR R4;R3R2+R12R4202)寄存器寻址寄存器寻址移位类型移位类型LSL(Logical Shift Left)逻辑左移逻辑左移:向左移,最后向左移,最后移出的进移出的进CF
12、,空出的最低有效位用零填充,空出的最低有效位用零填充LSR(Logical Shift Right)逻辑右移:向右移,最逻辑右移:向右移,最后移出的进后移出的进CF,空出的最高有效位用零填充,空出的最高有效位用零填充ASL(Arithmetic Shift Left)算术左移:向左移,算术左移:向左移,同同LSLLogical Shift Left(LSL)DestinationCF0DestinationCFLogical Shift Right.0212)寄存器寻址寄存器寻址ASR(Arithmetic Shift Right)算术右移:向右移算术右移:向右移,最后移出的进,最后移出的进C
13、F,空出的位用符号位填。源操,空出的位用符号位填。源操作数为正,空出的最高有效位用零填充;源操作作数为正,空出的最高有效位用零填充;源操作数为负,空出的最高有效位用数为负,空出的最高有效位用1填充。填充。DestinationCFArithmetic Shift RightSign bit shifted in222)寄存器寻址寄存器寻址ROR(Rotate Right)循环右移:移出的最低位依循环右移:移出的最低位依次填入空出的最高位,最后移出的进次填入空出的最高位,最后移出的进C标志位。标志位。RRX(Rotate Right Extended by 1 Place)带扩带扩展循环右移:寄
14、存器的内容循环右移展循环右移:寄存器的内容循环右移1位进入位进入C标标志位,空出的位用原来的志位,空出的位用原来的C标志位填充。标志位填充。DestinationCFRotate RightDestinationCFRotate Right through Carry233)寄存器间接寻址)寄存器间接寻址寄存器间接寻址:寄存器间接寻址:寄存器中的值作为操作数的寄存器中的值作为操作数的地址,而操作数本身存放在该地址所指向的存地址,而操作数本身存放在该地址所指向的存储器区中。例储器区中。例 LDR R0,R1;R0R1 STR R0,R1;R1R0 第一条指令将第一条指令将R1的值为地址的存储器中
15、的数据传送的值为地址的存储器中的数据传送到到R0中。第二条指令将中。第二条指令将R0的值传送到的值传送到R1的值为地址的值为地址的存储器中。的存储器中。244)基址变址寻址)基址变址寻址基址变址寻址:基址变址寻址:将寄存器(基址寄存器)的内容与指将寄存器(基址寄存器)的内容与指令中给出的地址偏移量相加,得到操作数的有效地址令中给出的地址偏移量相加,得到操作数的有效地址,操作数存放在该地址指向的存储区中。如:,操作数存放在该地址指向的存储区中。如:LDR R0,R1,4 ;R0R14LDR R0,R1,4!;!;R0 R14,R1R14LDR R0,R1,4 ;R0R1,R1R14LDR R0,
16、R1,R2 ;R0 R1R2变址寻址方式常用于访问某基地址附近的地址单元。变址寻址方式常用于访问某基地址附近的地址单元。前变址自动变址后变址255)堆栈寻址)堆栈寻址 操作数在堆栈中,堆栈是一块用于保存数据的连续操作数在堆栈中,堆栈是一块用于保存数据的连续内存区,按先进后出内存区,按先进后出FILO(First In Last Out)的)的顺序进行存取操作,使用一个称作堆栈指针的专用顺序进行存取操作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置。根据堆栈指针指向位寄存器指示当前的操作位置。根据堆栈指针指向位置的方式可分为如下两种堆栈:置的方式可分为如下两种堆栈:满堆栈(满堆栈(Full
17、 Stack):当堆栈指针指向最后压入堆栈或:当堆栈指针指向最后压入堆栈或第一个要读出的数据时。第一个要读出的数据时。空堆栈(空堆栈(Empty Stack):):当堆栈指针指向最后压入堆栈当堆栈指针指向最后压入堆栈的数据的上的数据的上/下一个空位或第一个要读出的数据上下一个空位或第一个要读出的数据上/下一个下一个空位时。空位时。12SP满满12SP空空265)堆栈寻址)堆栈寻址根据堆栈指针变化的方式可分为如下两种堆栈根据堆栈指针变化的方式可分为如下两种堆栈递增堆栈(递增堆栈(Ascending Stack):当堆栈由低地:当堆栈由低地址向高地址生成时,称为递增堆栈址向高地址生成时,称为递增堆
18、栈递减堆栈(递减堆栈(Decending Stack):):当堆栈由高地址当堆栈由高地址向低地址生成时,称为递减堆栈向低地址生成时,称为递减堆栈12SPBase,LowHigh递增堆栈递增堆栈SP12Base,HighLow递减堆栈递减堆栈275)堆栈寻址)堆栈寻址堆栈的四种工作方式堆栈的四种工作方式 满递增堆栈:堆栈指针指向最后压入或第一个要满递增堆栈:堆栈指针指向最后压入或第一个要读出的数据,且由低地址向高地址生长。读出的数据,且由低地址向高地址生长。满递减堆栈:堆栈指针指向最后压入或第一个要满递减堆栈:堆栈指针指向最后压入或第一个要读出的数据,且由高地址向低地址生长。读出的数据,且由高地
19、址向低地址生长。12SPBase,LowHigh满递增堆栈满递增堆栈SP12Base,HighLow满递减堆栈满递减堆栈285)堆栈寻址)堆栈寻址空递增堆栈:堆栈指针指向上一个将要放入数据空递增堆栈:堆栈指针指向上一个将要放入数据的空位或第一个将要读出的数据的上一个空位,的空位或第一个将要读出的数据的上一个空位,且由低地址向高地址生长。且由低地址向高地址生长。空递减堆栈:堆栈指针指向下一个将要放入数据空递减堆栈:堆栈指针指向下一个将要放入数据的空位或第一个将要读出的数据的下一个空位,的空位或第一个将要读出的数据的下一个空位,且由高地址向低地址生长且由高地址向低地址生长12SPBase,LowH
20、igh空递增堆栈空递增堆栈12SPBase,HighLow空递减堆栈空递减堆栈295)堆栈寻址)堆栈寻址堆栈的工作方式一般在处理器设计时就定好堆栈的工作方式一般在处理器设计时就定好了的,用户不能更改。了的,用户不能更改。ARM堆栈的工作方式为堆栈的工作方式为满递减堆栈满递减堆栈305)堆栈寻址)堆栈寻址例例ARMSTMFD SP!r0,r1,r3-r5;r0,r1,r3-r5入栈入栈LDMFD SP!r0,r1,r3-r5;r0,r1,r3-r5出栈出栈ThumbPUSH r0,r1,r3-r5;r0,r1,r3-r5入栈入栈POP r0,r1,r3-r5;r0,r1,r3-r5出栈出栈316
21、)块拷贝寻址)块拷贝寻址/多寄存器寻址多寄存器寻址多寄存器寻址中,用一条指令把存储器中的一块数据多寄存器寻址中,用一条指令把存储器中的一块数据加载到多个寄存器,或把多个寄存器中的内容保存到加载到多个寄存器,或把多个寄存器中的内容保存到存储器中。寻址操作中的寄存器可以是存储器中。寻址操作中的寄存器可以是R0R15或其子或其子集。集。LDM/STM加下列后缀即成为多寄存器寻址指令加下列后缀即成为多寄存器寻址指令IA(Increment After):操作完成后地址增操作完成后地址增IB(Increment Before):操作完成前地址增:操作完成前地址增DA(Decrement After):操
22、作完成后地址减:操作完成后地址减DB(Decrement Before):操作完成前地址减:操作完成前地址减326)块拷贝寻址)块拷贝寻址/多寄存器寻址多寄存器寻址例子例子STMIA r9!,r0,r1,r5;r0/1/5存入存入r9所指内存,先存后加所指内存,先存后加STMIB r9!,r0,r1,r5;r0/1/5存存入入r9所指内存,先加后存所指内存,先加后存r5r1r9r0r9STMIA r9!,r0,r1,r51000100c1018r5r1r0r9r9STMIB r9!,r0,r1,r51000100c101833STMDA r9!,r0,r1,r5;r0/1/5存入存入r9所指内
23、存,先存后减所指内存,先存后减STMDB r9!,r0,r1,r5;r0/1/5存入存入r9所指内存,先减后存所指内存,先减后存r1r5r9STMDA r9!,r0,r1,r5r0r91000100c1018r5r9STMDB r9!,r0,r1,r5r1r0r91000100c1018347)相对寻址)相对寻址 相对寻址相对寻址:以程序计数器以程序计数器PC的当前值为基地址,指令的当前值为基地址,指令中的地址标号作为偏移量,两者相加得操作数的有效中的地址标号作为偏移量,两者相加得操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指地址。以下程序段完成子程序的调用和返回,跳转指令令BL采
24、用了相对寻址方式:采用了相对寻址方式:BL NEXT ;跳转到子程序;跳转到子程序NEXT处执行处执行 ;返回到此返回到此 ;当前当前PC ;NEXT ;子程序入口;子程序入口 MOV PC,LR ;从子程序返回;从子程序返回 PC+NEXTPC PC-4LR 35第第3章章ARM指令系统指令系统 ARM指令系统概述指令系统概述 ARM指令指令的寻址方式的寻址方式 ARM指令集指令集 Thumb指令集指令集363 ARM指令集指令集 1)数据传送指令数据传送指令2)数据处理指令数据处理指令3)状态寄存器访问指令状态寄存器访问指令4)跳转移指令跳转移指令5)异常产生指令异常产生指令6)协处理器指
25、令协处理器指令 37数据传送指令数据传送指令数据传送是指数据在寄存器与存储器之间的数据传送是指数据在寄存器与存储器之间的传送。其中,从存储器到寄存器的传送称为传送。其中,从存储器到寄存器的传送称为加载(加载(Load),从寄存器到存储器的传送称),从寄存器到存储器的传送称为存储(为存储(Store),故数据传送指令也称为加),故数据传送指令也称为加载载/存储(存储(Load/Store)指令或)指令或存储器访问指存储器访问指令令。ARM处理器采取统一编址方式进行编址,即处理器采取统一编址方式进行编址,即所有所有I/O都和存储单元一样,同属都和存储单元一样,同属ARM的地址的地址空间,与存储器一
26、起统一编址,数据在空间,与存储器一起统一编址,数据在I/O与与寄存器间的传送也使用(寄存器间的传送也使用(Load/Store)指令)指令完成。完成。38数据传送指令数据传送指令ARM采用采用Load/Store结构,即除结构,即除Load/Store指令能在存储器与寄存器间进行数据传送外指令能在存储器与寄存器间进行数据传送外,其它指令均无此功能,也就是说除,其它指令均无此功能,也就是说除Load/Store外的指令均无访存功能。外的指令均无访存功能。数据传送指令可分为字与无符号字节传送指数据传送指令可分为字与无符号字节传送指令、半字与有符号字节传送指令、块数据传令、半字与有符号字节传送指令、
27、块数据传送指令及交换指令几类,下面分别加以介绍送指令及交换指令几类,下面分别加以介绍。391字和无符号字节传送指令字和无符号字节传送指令字和无符号字节传送指令用于寄存器与存储器字和无符号字节传送指令用于寄存器与存储器间一次传送一个字或一个无符号字节。间一次传送一个字或一个无符号字节。汇编格式汇编格式前变址前变址后变址后变址相对于相对于PC自动变址后缀LDR|STR Cond B Rd,Rn,Offset!LDR|STR Cond B T Rd,Rn,OffsetLDR|STR Cond B Rd,LABEL401字和无符号字节传送指令字和无符号字节传送指令LDR R1,R2,#16 ;R1 R
28、2+16LDRNE R1,R2,#960!;R1R2+960,;R2R2+960,WhileZ=0LDR R1,R2,R3,LSL#2 ;R1 R2+R3x4STR R1,R2,#-8 ;R1R2,;R2R2-8 LDR R1,R2,R3,LSL#2 ;R1R2,;R2R2+R3x4LDR|STR Cond B Rd,Rn,Offset!LDR|STR Cond B Rd,Rn,Offset自动变址后缀411字和无符号字节传送指令字和无符号字节传送指令LDRB R1,R2,#3 ;R1R2+3,R1高高24清零清零LDREQB R1,R2,#5 ;R1 R2+5,R1高高24清零,清零,;条件
29、执行;条件执行STRB R1,R2,-R8,ASR#2 ;R1R2-R84,;只存储;只存储R1的最低的最低8位位STR R1,R2,R4!;R1R2+R4,;R2+R4R2 STR R1,R2,R4 ;R1 R2,R2+R4R2STR R1,START ;R1STARTLDR|STR Cond B Rd,LABEL421字和无符号字节传送指令字和无符号字节传送指令二进制编码格式二进制编码格式P98LDR|STR Cond B Rd,Rn,Offset!LDR|STR Cond B Rd,Rn,Offset00LSL01LSR10RSR11RSLLDR R1,R2,#16LDR R1,R2,R
30、3,LSL#2432半字与有符号字节数据传送指令半字与有符号字节数据传送指令半字与有符号字节数据传送指令用于内存与半字与有符号字节数据传送指令用于内存与寄存器间一次传送一个半字(无符号或无符寄存器间一次传送一个半字(无符号或无符号)或一个有符号字节。号)或一个有符号字节。汇编格式汇编格式前变址、自动变址格式前变址、自动变址格式 后变址格式后变址格式 LDR|STR H|SH|SB Rd,Rn,!LDR|STR H|SH|SB Rd,Rn,442半字与有符号字节数据传送指令半字与有符号字节数据传送指令LDRH R1,R0,#20 ;R1R0+20,零扩展至,零扩展至32位位LDRSH R1,R9
31、,R2!;R1R9+R2,R9R9+R2,高,高16位用符号扩展位用符号扩展STRH R0,R1,R2,LSL#2 ;R0R1+R2*4 STRSB R0,R3,-R8,ASR#2 ;R0R3-R8x4LDREQSH R11,R6 ;R11R6,条件执行。,条件执行。STRNEH R0,R2,#960!;R0R2+960,R2 R2+960,条件执行。条件执行。LDR|STR H|SH|SB Rd,Rn,!45半字与有符号字节的数据传送指令半字与有符号字节的数据传送指令二进制编码二进制编码SH类型类型10SB01UH11SHLDR|STR H|SH|SB Rd,Rn,!LDR|STR H|SH
32、|SB Rd,Rn,463块数据传送指令块数据传送指令LDM/STM块数据传送指令用于在寄存器与存储器间一次传送块数据传送指令用于在寄存器与存储器间一次传送一块数据。一块数据。ARM有有16个通用寄存器(个通用寄存器(R0R15),),故一次最多可传故一次最多可传16个字个字 汇编格式汇编格式add mode,必选后缀,有索引与堆栈两种后缀,必选后缀,有索引与堆栈两种后缀IA(Increment After):后增,先传送一个字后地址再加:后增,先传送一个字后地址再加4IB(Increment Before):前增,地址先加前增,地址先加4后再传送一个字后再传送一个字DA(Decrement
33、After):后减,先传送一个字后地址再减后减,先传送一个字后地址再减4DB(Decrement Before):前减,地址先减前减,地址先减4后再传送一个后再传送一个字字LDM|STMcond add mode Rn!,registers 473块数据传送指令块数据传送指令LDM/STM堆栈后缀:堆栈后缀:FD:满递减:满递减FA:满递增:满递增ED:空递减:空递减EA:空递增:空递增483块数据传送指令块数据传送指令LDM/STMLDMIA R1,R0,R2,R5 ;R2R1+4 ;R5R1+8STMDB R1!,R3-R6,R11,R12 ;R1-8 R11 ;R1-12 R6 ;R1-
34、16 R5 ;R1-20 R4 ;R1-24 R3 ;R1R1-24;R1-4R12;R0R4 SWPB R2,R3,R4 ;R4R2,R3R4SWP R2,R2,R4 ;R4R2,R2R4,交换交换SWPNEB R5,R0,R4;R4R5,R0R4,;WhileZ=0。SWPcond B Rd,Rm,Rn 524交换指令交换指令SWP/SWPB二进制编码格式二进制编码格式SWPcond B Rd,Rm,Rn 533 ARM指令集指令集 1)数据传送指令数据传送指令2)数据处理指令数据处理指令3)状态寄存器访问指令状态寄存器访问指令4)跳转移指令跳转移指令5)异常中断指令异常中断指令6)协处理
35、器指令。协处理器指令。54 数据处理指令数据处理指令数据处理指令主要完成寄存器中数据的算术和逻辑数据处理指令主要完成寄存器中数据的算术和逻辑运算。根据指令的功能可分为以下六类:运算。根据指令的功能可分为以下六类:数据移动指令数据移动指令算术运算指令算术运算指令逻辑运算指令逻辑运算指令比较测试指令比较测试指令乘法指令乘法指令乘法指令的汇编格式及二进制编码格式与基本数据乘法指令的汇编格式及二进制编码格式与基本数据处理指令不同,下面分别对其进行介绍。处理指令不同,下面分别对其进行介绍。基本数据处理指令基本数据处理指令55基本数据处理指令格式基本数据处理指令格式1.指令汇编格式指令汇编格式数据移动型数
36、据移动型S,:=MOV|MVN比较测试型比较测试型,:=CMP|CMN|TST|TEQ算术逻辑运算型算术逻辑运算型S,:=ADD|SUB|RSB|ADC|SBC|RSC|AND|BIC|EOR|ORR56基本数据处理指令格式基本数据处理指令格式opcode:指令助记符,决定指令的操作:指令助记符,决定指令的操作;cond :可选条件后缀,决定指令执行的条件:可选条件后缀,决定指令执行的条件;S :可选后缀,决定指令的操作是否影响:可选后缀,决定指令的操作是否影响CPSR的值。有如下三种情形:的值。有如下三种情形:目的寄存器非目的寄存器非R15时,带该后缀的指令执行结果会更新时,带该后缀的指令执
37、行结果会更新CPSR的条件标志位;的条件标志位;目的寄存器为目的寄存器为R15时,带该后缀的指令会将当前模式下时,带该后缀的指令会将当前模式下的的SPSR拷贝到拷贝到CPSR中;中;比较测试指令不带比较测试指令不带S后缀,其操作总是影响条件标志位后缀,其操作总是影响条件标志位Rd:目的寄存器,用于存放操作结果;:目的寄存器,用于存放操作结果;Rn:第:第1操作数寄存器,用于存放第操作数寄存器,用于存放第1个操作数。个操作数。57基本数据处理指令格式基本数据处理指令格式Operand2:第第2操作数,可为一立即数、寄存器值操作数,可为一立即数、寄存器值或寄存器移位值三种类型:或寄存器移位值三种类
38、型:立即数立即数 MOV R3,#0 xF2 ;R30 xF2 CMP R1,#0 x2 ;R1-2,影响状态寄存器标志位,影响状态寄存器标志位 ADD R0,R1,#5 ;R0R1+5寄存器值寄存器值 MOV R0,R1;R0R1 CMP R0,R1;R0-R1,结果影响状态寄存器,结果影响状态寄存器 ADD R0,R1,R2;R0R1+R258基本数据处理指令格式基本数据处理指令格式寄存器移位值寄存器移位值 MOV R0,R1,LSR#2;R0R14MOV R0,R2,LSR R3;R0R2(2R3)CMP R0,R1,LSR#2;R0-R14CMP R0,R1,LSR R3;R0-R1(
39、2R3)ADD R0,R4,R5,LSL#0 x02;R0R4+R54ADD R0,R4,R5,LSL R6;R0R4+R5(2R6)59基本数据处理指令格式基本数据处理指令格式00LSL01LSR10RSR11RSL第2操作数2.指令编码格式指令编码格式ADD R3,R2,R1,LSR#2ADD R3,R2,R1,LSR R460基本数据处理指令格式基本数据处理指令格式基本数据处理指令操作码表基本数据处理指令操作码表操作码操作码24:21助记符助记符意义意义效果效果0000AND逻辑位与逻辑位与Rd=Rn AND Op20001EOR逻辑位异或逻辑位异或Rd=Rn EOR Op20010SU
40、B减减Rd=Rn-Op20011RSB反向减反向减Rd=Op2 Rn0100ADD加加Rd=Rn+Op20101ADC带进位加带进位加Rd=Rn+Op2+C0110SBC带进位减带进位减Rd=Rn-Op2+C-10111RSC反向带进位减反向带进位减Rd=Op2-Rn+C-11000TST测测 试试根据根据Rn AND Op2设置条件设置条件码码1001TEQ测试相等测试相等根据根据Rn EOR Op2设置条件设置条件1010CMP比较比较根据根据Rn-Op2设置条件码设置条件码1011CMN负数比较负数比较根据根据Rn+Op2设置条件码设置条件码1100ORR逻辑位或逻辑位或Rd=Rn OR
41、 Op21101MOV传送传送Rd=Op21110BIC位清零位清零Rd=Rn AND NOT Op21111MVN求反求反Rd=NOT Op261指令类型指令类型助记符助记符 说说 明明 操操 作作 条件码位置条件码位置 数据移动数据移动指令指令MOV Rd,operand2数据传送指令数据传送指令Rdoperand2MOVcondSMVN Rd,operand2数据非传送指数据非传送指令令Rd(operand2)MVNcondS算术运算算术运算指令指令ADD Rd,Rn,operand2加法运算指令加法运算指令RdRnoperand2ADDcondSSUB Rd,Rn,operand2减法
42、运算指令减法运算指令RdRnoperand2SUBcondSRSB Rd,Rn,operand2逆向减法指令逆向减法指令Rdoperand2RnRSBcondSADC Rd,Rn,operand2带进位加法指带进位加法指令令RdRnoperand2CarryADCcondSSBC Rd,Rn,operand2带进位减法指带进位减法指令令RdRnoperand2(NOT)CarrySBCcondSRSC Rd,Rn,operand2 带进位逆向减带进位逆向减法指令法指令 Rdoperand2Rn(NOT)CarryRSCcondS 基本数据处理指令集基本数据处理指令集62逻辑运逻辑运算指令算指令
43、AND Rd,Rn,operand2逻辑逻辑“与与”操操作指令作指令RdRn&operand2ANDcondSORR Rd,Rn,operand2逻辑逻辑“或或”操操作指令作指令RdRn|operand2ORRcondSEOR Rd,Rn,operand2逻辑逻辑“异或异或”操作指令操作指令RdRnoperand2EORcondSBIC Rd,Rn,operand2位清除指令位清除指令RdRn&(operand2)BICcondS比较测比较测试指令试指令CMP Rn,operand2比较指令比较指令标志标志N,Z,C,VRnoperand2CMPcondCMN Rn,operand2负数比较指
44、令负数比较指令标志标志N,Z,C,V Rnoperand2CMNcondTST Rn,operand2位测试指令位测试指令标志标志N,Z,C,V Rn&operand2TSTcondTEQ Rn,operand2相等测试指令相等测试指令标志标志N,Z,C,V Rnoperand2TEQcond指令类型指令类型助记符助记符 说说 明明 操操 作作 条件码位置条件码位置 基本数据处理指令集基本数据处理指令集63基本数据处理指令用法基本数据处理指令用法 1.数据移动指令数据移动指令MOV和和MVN MOV指令可将一个立即数、一个寄存器值或一个指令可将一个立即数、一个寄存器值或一个被移位的寄存器值传送
45、到目的寄存器。被移位的寄存器值传送到目的寄存器。MVN指令的功能与指令的功能与MOV相似,唯一的差别是在相似,唯一的差别是在MVN中,数据在传送之前被按位取反了,即把一中,数据在传送之前被按位取反了,即把一个被取反的值传送到目的寄存器中。个被取反的值传送到目的寄存器中。汇编格式汇编格式MOV|MVNS,64基本数据处理指令用法基本数据处理指令用法例例MOV R1,R0 ;R1 R0MOV PC,R14;PCR14MOVS PC,R14 ;PCR14,CPSRSPSR MOV R0,0 x80 ;R00 x80MOVEQS R0,#0 xFF ;While Z=1,R0255,刷新,刷新N和和Z
46、MOVSR1,R0,LSL#3;R1R0 x8,刷新刷新N、Z和和CMNV R0,R3,LSL R5 ;R0非非R32R565基本数据处理指令用法基本数据处理指令用法2.比较测试指令比较测试指令CMP|CMN|TST|TEQ 比较测试指令是专门用于影响状态寄存器标志位比较测试指令是专门用于影响状态寄存器标志位的指令,不带的指令,不带“S”后缀,不保留操作结果。后缀,不保留操作结果。指令汇编格式指令汇编格式CMP|CMN|TST|TEQ ,CMP|CMN 指令指令用于把一个寄存器的内容和另一个寄存器的内容用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较或立即数进行比较,结果更新标志位,
47、前者为减,结果更新标志位,前者为减,后者为加,后者为加66基本数据处理指令用法基本数据处理指令用法例例CMPR1,R0 ;R1-R0,设置标志位,设置标志位CMPR1,100 ;R1-100,设置标志位,设置标志位 CMN R1,R0 ;R1+R0,设置标志位,设置标志位CMN R1,100;R1+100,设置标志位,设置标志位67基本数据处理指令用法基本数据处理指令用法TEQ指令指令 用于把一个寄存器的内容和另一个寄存器的内容用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位或立即数进行按位“异或异或”运算,结果更新标志运算,结果更新标志位值(位值(V除外)。除外)。通常用于测试(比
48、较)两个操作数是否相等。通常用于测试(比较)两个操作数是否相等。“异或异或”是一种逻辑运算,运算的法则是:两个是一种逻辑运算,运算的法则是:两个位相同结果为位相同结果为0,不同结果为,不同结果为1。例如:。例如:0101 1010 异或异或 0011 1001 0110 001168基本数据处理指令用法基本数据处理指令用法例例TEQ R3,#0 x0FF ;R30 xFF ;若若R3=FF,则则Z=1,否则否则Z=0TEQ R1,#0b00010101;R100010101 ;若若R1=00010101,则则Z=1 ;否则否则Z=0TEQ R1,R2 ;R1 R2,若若R1=R2,则则Z=1,
49、否则否则Z=069基本数据处理指令用法基本数据处理指令用法TST指令指令 用于把一个寄存器的内容和另一个寄存器的内容用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位或立即数进行按位“与与”运算,不保留结果,结运算,不保留结果,结果更新标志位值(果更新标志位值(V除外)。除外)。通常用来检测是否设置了特定的位,所以操作数通常用来检测是否设置了特定的位,所以操作数1为要测试的数据,操作数为要测试的数据,操作数2为一个位掩码。为一个位掩码。70基本数据处理指令用法基本数据处理指令用法例例TST R1,#0b1 ;测试;测试R1中位中位0 ;若;若0=1,Z=0,否则,否则Z=1 TST R
50、3,#0b01010000 ;测试;测试R3中位中位6和和4 ;若均为;若均为1,Z=0,否则,否则Z=1TST R1,#0 xFF ;测试;测试 R1的低的低8位位 ;若均为;若均为1,则,则Z=0,否则,否则Z=1TST R3,R4,LSL R5 ;R3&R4x2R5,结果影响结果影响N、Z与与C(V除外)除外)71基本数据处理指令用法基本数据处理指令用法3.算术运算指令算术运算指令指令汇编格式指令汇编格式ADD|SUB|RSB|ADC|SBC|RSC S,S:可选后缀。若选用,则:可选后缀。若选用,则:当目的寄存器非当目的寄存器非R15时,指令执行结果更新条件标志位时,指令执行结果更新条