第3章ARM指令系统课件

上传人:s9****2 文档编号:569474215 上传时间:2024-07-29 格式:PPT 页数:120 大小:2.88MB
返回 下载 相关 举报
第3章ARM指令系统课件_第1页
第1页 / 共120页
第3章ARM指令系统课件_第2页
第2页 / 共120页
第3章ARM指令系统课件_第3页
第3页 / 共120页
第3章ARM指令系统课件_第4页
第4页 / 共120页
第3章ARM指令系统课件_第5页
第5页 / 共120页
点击查看更多>>
资源描述

《第3章ARM指令系统课件》由会员分享,可在线阅读,更多相关《第3章ARM指令系统课件(120页珍藏版)》请在金锄头文库上搜索。

1、1第第3章章ARM指令系统指令系统1 13 32 2 ARM指令系统概述指令系统概述 ARM指令指令的寻址方式的寻址方式 ARM指令集指令集4 4 Thumb指令集指令集21 ARM指令系统概述指令系统概述 ARM指令集可以分为六大类,分别为:指令集可以分为六大类,分别为:数据传送指令数据传送指令数据处理指令数据处理指令跳转指令跳转指令程序状态寄存器访问指令程序状态寄存器访问指令异常中断指令。异常中断指令。协处理器指令协处理器指令31 ARM指令系统概述指令系统概述ARM指令的基本汇编格式指令的基本汇编格式 Opcode cond S Rd,Rn,operand2 助记符可选条件后缀可选标志位

2、后缀目标寄存器第1操作数寄存器第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 0

3、operand 2#opcodeSRnRd3128242119161512 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忽略无条件执行9

5、1 ARM指令系统概述指令系统概述 例例 条件执行条件执行 CMP R0,#0 BEQ SUB0 CMP R0,#1 BEQ SUB1 CMP R0,#2 BEQ SUB2SUB0:SUB1:SUB2:10第第3章章ARM指令系统指令系统1 13 32 2 ARM指令系统概述指令系统概述 ARM指令指令的寻址方式的寻址方式 ARM指令集指令集4 4 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,0x3f /*R0R00x3f*/第二个操作数即为立即数,以第二个操作数即为立即数,以“”为前缀,为前缀,141)立即寻址立即寻址立即数表示立即数表示十进制另加十进制另加“0d”或或省略省略。十六进制立即数另加十六进制立即数另加“0x”或或“&”,二进制另加二进制另加“0b”或或“2_”;立即寻址特点立即寻址特点速度快。为什么?速度快。为什么?能使用的立即数有限。为什么?能使用的立即数有限。为什么?151)立即寻址立即寻址立即寻址中立即寻址中立即数立即数范围

8、范围有多大?有多大?32位指令码中只能用位指令码中只能用12位表示立即数,最大为位表示立即数,最大为212=4096cond0 0operand 2# opcode SRnRd312827262524212019161512110目的寄存器第一操作数寄存器设置标志位码操作码16ARM采用采用8位常数循环右移偶数位得到位常数循环右移偶数位得到32位立即数,位立即数,右移的位数为右移的位数为4位二进制数的位二进制数的2倍倍(2x(015): “842”=immmed_8 ror 2xrotate_imm写汇编时程序员是否需将立即数表示为写汇编时程序员是否需将立即数表示为“842”形式?形式?con

9、d0 0operand 2# opcode SRnRd312827262524212019161512110目的寄存器第一操作数寄存器设置标志位码操作码8-bit 立即数118 70#rot171)立即寻址立即寻址汇编器完成将立即数转化为汇编器完成将立即数转化为“842”的表示形式的表示形式,例例如如MOV R0,#0xF2 00 E3A00CF2; 0xF2 ror 2x12MOV R1,#0x110000 E3A01811; 0x11 ror 2x8MOV R4,#12800 E3A04B4A; 0x4A ror 2x11并非所有并非所有32位常数都是合法的位常数都是合法的合法立即数:合法

10、立即数:0x0000F200,0x00110000,0x00012800非法立即数:非法立即数:0x1010,0x00102,0xFF100012位表示立即数汇编器汇编器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)逻辑左移逻辑左移:向左移

12、,最后向左移,最后移出的进移出的进CF,空出的最低有效位用零填充,空出的最低有效位用零填充LSR(Logical Shift Right)逻辑右移:向右移,最逻辑右移:向右移,最后移出的进后移出的进CF,空出的最高有效位用零填充,空出的最高有效位用零填充ASL(Arithmetic Shift Left)算术左移:向左移,算术左移:向左移,同同LSLLogical Shift Left (LSL)DestinationCF0DestinationCFLogical Shift Right.0212)寄存器寻址寄存器寻址ASR(Arithmetic Shift Right)算术右移:向右移,算术

13、右移:向右移,最后移出的进最后移出的进CF,空出的位用符号位填。源操作,空出的位用符号位填。源操作数为正,空出的最高有效位用零填充;源操作数数为正,空出的最高有效位用零填充;源操作数为负,空出的最高有效位用为负,空出的最高有效位用1填充。填充。DestinationCFArithmetic Shift RightSign bit shifted in222)寄存器寻址寄存器寻址ROR(Rotate Right)循环右移:移出的最低位依循环右移:移出的最低位依次填入空出的最高位,最后移出的进次填入空出的最高位,最后移出的进C标志位。标志位。RRX(Rotate Right Extended by

14、 1 Place)带扩带扩展循环右移:寄存器的内容循环右移展循环右移:寄存器的内容循环右移1位进入位进入C标标志位,空出的位用原来的志位,空出的位用原来的C标志位填充。标志位填充。DestinationCFRotate RightDestinationCFRotate Right through Carry233)寄存器间接寻址)寄存器间接寻址寄存器间接寻址:寄存器间接寻址:寄存器中的值作为操作数的寄存器中的值作为操作数的地址,而操作数本身存放在该地址所指向的存地址,而操作数本身存放在该地址所指向的存储器区中。例储器区中。例 LDR R0,R1;R0R1 STR R0,R1;R1R0 第一条指

15、令将第一条指令将R1的值为地址的存储器中的数据传送的值为地址的存储器中的数据传送到到R0中。第二条指令将中。第二条指令将R0的值传送到的值传送到R1的值为地址的值为地址的存储器中。的存储器中。244)基址变址寻址)基址变址寻址基址变址寻址:基址变址寻址:将寄存器(基址寄存器)的内容与指将寄存器(基址寄存器)的内容与指令中给出的地址偏移量相加,得到操作数的有效地址,令中给出的地址偏移量相加,得到操作数的有效地址,操作数存放在该地址指向的存储区中。如:操作数存放在该地址指向的存储区中。如:LDR R0,R1,4 ;R0R14LDR R0,R1,4!;!;R0 R14, R1R14LDR R0,R1

16、 ,4 ;R0R1, R1R14LDR R0,R1,R2 ;R0 R1R2变址寻址方式常用于访问某基地址附近的地址单元。变址寻址方式常用于访问某基地址附近的地址单元。前变址自动变址后变址255)堆栈寻址)堆栈寻址 操作数在堆栈中,堆栈是一块用于保存数据的连续操作数在堆栈中,堆栈是一块用于保存数据的连续内存区,按先进后出内存区,按先进后出FILO(First In Last Out)的)的顺序进行存取操作,使用一个称作堆栈指针的专用顺序进行存取操作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置。根据堆栈指针指向位寄存器指示当前的操作位置。根据堆栈指针指向位置的方式可分为如下两种堆栈:置的方

17、式可分为如下两种堆栈:满堆栈(满堆栈(Full Stack):当堆栈指针指向最后压入堆栈或当堆栈指针指向最后压入堆栈或第一个要读出的数据时。第一个要读出的数据时。空堆栈(空堆栈(Empty Stack):):当堆栈指针指向最后压入堆栈当堆栈指针指向最后压入堆栈的数据的上的数据的上/下一个空位或第一个要读出的数据上下一个空位或第一个要读出的数据上/下一个下一个空位时。空位时。12SP满满12SP空空265)堆栈寻址)堆栈寻址根据堆栈指针变化的方式可分为如下两种堆栈根据堆栈指针变化的方式可分为如下两种堆栈递增堆栈(递增堆栈(Ascending Stack) :当堆栈由低地当堆栈由低地址向高地址生成

18、时,称为递增堆栈址向高地址生成时,称为递增堆栈递减堆栈(递减堆栈(Decending Stack):):当堆栈由高地址当堆栈由高地址向低地址生成时,称为递减堆栈向低地址生成时,称为递减堆栈12SPBase,LowHigh递增堆栈递增堆栈SP12Base, HighLow递减堆栈递减堆栈275)堆栈寻址)堆栈寻址堆栈的四种工作方式堆栈的四种工作方式 满递增堆栈:堆栈指针指向最后压入或第一个要满递增堆栈:堆栈指针指向最后压入或第一个要读出的数据,且由低地址向高地址生长。读出的数据,且由低地址向高地址生长。满递减堆栈:堆栈指针指向最后压入或第一个要满递减堆栈:堆栈指针指向最后压入或第一个要读出的数据

19、,且由高地址向低地址生长。读出的数据,且由高地址向低地址生长。12SPBase,LowHigh满递增堆栈满递增堆栈SP12Base, HighLow满递减堆栈满递减堆栈285)堆栈寻址)堆栈寻址空递增堆栈:堆栈指针指向上一个将要放入数据空递增堆栈:堆栈指针指向上一个将要放入数据的空位或第一个将要读出的数据的上一个空位,的空位或第一个将要读出的数据的上一个空位,且由低地址向高地址生长。且由低地址向高地址生长。空递减堆栈:堆栈指针指向下一个将要放入数据空递减堆栈:堆栈指针指向下一个将要放入数据的空位或第一个将要读出的数据的下一个空位,的空位或第一个将要读出的数据的下一个空位,且由高地址向低地址生长

20、且由高地址向低地址生长12SPBase,LowHigh空递增堆栈空递增堆栈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入栈入栈P

21、OP r0,r1,r3-r5 ; r0,r1,r3-r5出栈出栈316)块拷贝寻址)块拷贝寻址/多寄存器寻址多寄存器寻址多寄存器寻址中,用一条指令把存储器中的一块数据多寄存器寻址中,用一条指令把存储器中的一块数据加载到多个寄存器,或把多个寄存器中的内容保存到加载到多个寄存器,或把多个寄存器中的内容保存到存储器中。寻址操作中的寄存器可以是存储器中。寻址操作中的寄存器可以是R0R15或其子或其子集。集。 LDM/STM加下列后缀即成为多寄存器寻址指令加下列后缀即成为多寄存器寻址指令IA(Increment After) : 操作完成后地址增操作完成后地址增IB(Increment Before)

22、:操作完成前地址增:操作完成前地址增DA(Decrement After) :操作完成后地址减:操作完成后地址减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,r5

23、1000100c101833STMDA r9!, r0,r1,r5 ;r0/1/5存存入入r9所指内存,先存后减所指内存,先存后减STMDB r9!, r0,r1,r5 ;r0/1/5存存入入r9所指内存,先减后存所指内存,先减后存r1r5r9STMDA r9!, r0,r1,r5r0r91000100c1018r5r9STMDB r9!, r0,r1,r5r1r0r91000100c1018347)相对寻址)相对寻址 相对寻址相对寻址: 以程序计数器以程序计数器PC的当前值为基地址,指令的当前值为基地址,指令中的地址标号作为偏移量,两者相加得操作数的有效中的地址标号作为偏移量,两者相加得操作

24、数的有效地址。以下程序段完成子程序的调用和返回,跳转指地址。以下程序段完成子程序的调用和返回,跳转指令令BL采用了相对寻址方式:采用了相对寻址方式: BL NEXT ;跳转到子程序;跳转到子程序NEXT处执行处执行 ;返回到此返回到此 ;当前当前PC ; NEXT ;子程序入口;子程序入口 MOV PC,LR ;从子程序返回;从子程序返回 PC+NEXTPC PC-4LR 35第第3章章ARM指令系统指令系统1 13 32 2 ARM指令系统概述指令系统概述 ARM指令指令的寻址方式的寻址方式 ARM指令集指令集4 4 Thumb指令集指令集363 ARM指令集指令集 1) 数据传送指令数据传

25、送指令2) 数据处理指令数据处理指令3) 状态寄存器访问指令状态寄存器访问指令4) 跳转移指令跳转移指令5) 异常产生指令异常产生指令6) 协处理器指令协处理器指令 37数据传送指令数据传送指令数据传送是指数据在寄存器与存储器之间的数据传送是指数据在寄存器与存储器之间的传送。其中,从存储器到寄存器的传送称为传送。其中,从存储器到寄存器的传送称为加载(加载(Load),从寄存器到存储器的传送称),从寄存器到存储器的传送称为存储(为存储(Store),故数据传送指令也称为加),故数据传送指令也称为加载载/存储(存储(Load/Store)指令或)指令或存储器访问指存储器访问指令令。ARM处理器采取

26、统一编址方式进行编址,即处理器采取统一编址方式进行编址,即所有所有I/O都和存储单元一样,同属都和存储单元一样,同属ARM的地址的地址空间,与存储器一起统一编址,数据在空间,与存储器一起统一编址,数据在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

28、 Rd, Rn,OffsetLDR|STR Cond B Rd, LABEL401字和无符号字节传送指令字和无符号字节传送指令LDR R1,R2,#16 ; R1 R2+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自动变址后缀41

29、1字和无符号字节传送指令字和无符号字节传送指令LDRB R1,R2,#3 ;R1R2+3,R1高高24清零清零LDREQB R1,R2,#5 ; R1 R2+5,R1高高24清零,清零, ;条件执行;条件执行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字和无符号字节传送指令字和无符号字节传送指令二进制编码格式二进制编码格

30、式P98LDR|STR Cond B Rd, Rn, Offset !LDR|STR Cond B Rd,Rn,Offset00LSL01LSR10RSR11RSLLDR R1,R2,#16LDR R1,R2,R3,LSL#2432半字与有符号字节数据传送指令半字与有符号字节数据传送指令半字与有符号字节数据传送指令用于内存与半字与有符号字节数据传送指令用于内存与寄存器间一次传送一个半字(无符号或无符寄存器间一次传送一个半字(无符号或无符号)或一个有符号字节。号)或一个有符号字节。汇编格式汇编格式前变址、自动变址格式前变址、自动变址格式 后变址格式后变址格式 LDR|STR H|SH|SB Rd

31、,Rn,! LDR|STR H|SH|SB Rd, Rn, 442半字与有符号字节数据传送指令半字与有符号字节数据传送指令LDRH R1,R0,#20 ;R1R0+20,零扩展至,零扩展至32位位LDRSH R1,R9,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|S

32、TR H|SH|SB Rd,Rn,! 45半字与有符号字节的数据传送指令半字与有符号字节的数据传送指令二进制编码二进制编码SH类型类型10SB01UH11SHLDR|STR H|SH|SB Rd,Rn,! LDR|STR H|SH|SB Rd, Rn, 463块数据传送指令块数据传送指令LDM/STM块数据传送指令用于在寄存器与存储器间一次传送块数据传送指令用于在寄存器与存储器间一次传送一块数据。一块数据。ARM有有16个通用寄存器(个通用寄存器(R0R15),),故一次最多可传故一次最多可传16个字个字 汇编格式汇编格式add mode ,必选后缀,有索引与堆栈两种后缀,必选后缀,有索引与堆

33、栈两种后缀IA(Increment After):后增,先传送一个字后地址再加:后增,先传送一个字后地址再加4IB(Increment Before):前增,地址先加前增,地址先加4后再传送一个字后再传送一个字DA(Decrement After):后减,先传送一个字后地址再减后减,先传送一个字后地址再减4DB(Decrement Before):前减,地址先减前减,地址先减4后再传送一个后再传送一个字字LDM|STMcond add mode Rn!, registers 473块数据传送指令块数据传送指令LDM/STM堆栈后缀:堆栈后缀:FD:满递减:满递减FA:满递增:满递增ED:空递减

34、:空递减EA:空递增:空递增483块数据传送指令块数据传送指令LDM/STMLDMIA R1,R0,R2,R5 ;R2R1+4 ;R5R1+8STMDB R1!,R3-R6,R11,R12 ;R1-8 R11 ;R1-12 R6 ;R1-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二进制编码

35、格式二进制编码格式SWPcond B Rd,Rm,Rn 533 ARM指令集指令集 1) 数据传送指令数据传送指令2) 数据处理指令数据处理指令3) 状态寄存器访问指令状态寄存器访问指令4) 跳转移指令跳转移指令5) 异常中断指令异常中断指令6) 协处理器指令。协处理器指令。54 数据处理指令数据处理指令数据处理指令主要完成寄存器中数据的算术和逻辑数据处理指令主要完成寄存器中数据的算术和逻辑运算。根据指令的功能可分为以下六类:运算。根据指令的功能可分为以下六类: 数据移动指令数据移动指令算术运算指令算术运算指令逻辑运算指令逻辑运算指令比较测试指令比较测试指令乘法指令乘法指令乘法指令的汇编格式及

36、二进制编码格式与基本数据乘法指令的汇编格式及二进制编码格式与基本数据处理指令不同,下面分别对其进行介绍。处理指令不同,下面分别对其进行介绍。基本数据处理指令基本数据处理指令55基本数据处理指令格式基本数据处理指令格式1. 指令汇编格式指令汇编格式数据移动型数据移动型S , := MOV | MVN比较测试型比较测试型 , := CMP | CMN | TST | TEQ算术逻辑运算型算术逻辑运算型S , , := ADD | SUB | RSB | ADC | SBC | RSC | AND | BIC | EOR | ORR56基本数据处理指令格式基本数据处理指令格式opcode:指令助记符

37、,决定指令的操作:指令助记符,决定指令的操作;cond :可选条件后缀,决定指令执行的条件:可选条件后缀,决定指令执行的条件;S :可选后缀,决定指令的操作是否影响:可选后缀,决定指令的操作是否影响CPSR的的值。有如下三种情形:值。有如下三种情形:目的寄存器非目的寄存器非R15时,带该后缀的指令执行结果会更新时,带该后缀的指令执行结果会更新CPSR的条件标志位;的条件标志位;目的寄存器为目的寄存器为R15时,带该后缀的指令会将当前模式下时,带该后缀的指令会将当前模式下的的SPSR拷贝到拷贝到CPSR中;中;比较测试指令不带比较测试指令不带S后缀,其操作总是影响条件标志位后缀,其操作总是影响条

38、件标志位Rd:目的寄存器,用于存放操作结果;:目的寄存器,用于存放操作结果;Rn:第:第1操作数寄存器,用于存放第操作数寄存器,用于存放第1个操作数。个操作数。57基本数据处理指令格式基本数据处理指令格式Operand2: 第第2操作数,可为一立即数、寄存器值操作数,可为一立即数、寄存器值或寄存器移位值三种类型:或寄存器移位值三种类型:立即数立即数 MOV R3, #0xF2 ;R30xF2 CMP R1,#0x2 ;R1-2,影响状态寄存器标志位,影响状态寄存器标志位 ADD R0,R1, #5 ;R0R1+5寄存器值寄存器值 MOV R0,R1;R0R1 CMP R0,R1;R0-R1,结

39、果影响状态寄存器,结果影响状态寄存器 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(2R3)ADD R0,R4,R5,LSL #0x02 ;R0R4+R54ADD R0,R4,R5,LSL R6 ;R0R4+R5(2R6)59基本数据处理指令格式基本数据处理指令格式00LSL01LSR10RSR11RSL第2操作数2. 指令编码格式指令编

40、码格式ADD R3,R2,R1,LSR #2ADD R3,R2,R1,LSR R460基本数据处理指令格式基本数据处理指令格式基本数据处理指令操作码表基本数据处理指令操作码表操作码操作码24:21助记符助记符意义意义效果效果0000AND逻辑位与逻辑位与Rd = Rn AND Op20001EOR逻辑位异或逻辑位异或Rd = Rn EOR Op20010SUB减减Rd = Rn - Op20011RSB反向减反向减Rd = Op2 Rn0100ADD加加Rd = Rn + Op20101ADC带进位加带进位加Rd = Rn + Op2 + C0110SBC带进位减带进位减Rd = Rn - O

41、p2 + C -10111RSC反向带进位减反向带进位减Rd = Op2 - Rn + C -11000TST测测 试试根根据据Rn AND Op2设设置置条条件件码码1001TEQ测试相等测试相等根据根据Rn EOR Op2设置条件设置条件1010CMP比较比较根据根据Rn - Op2设置条件码设置条件码1011CMN负数比较负数比较根据根据Rn + Op2设置条件码设置条件码1100ORR逻辑位或逻辑位或Rd = Rn OR Op21101MOV传送传送Rd = Op21110BIC位清零位清零Rd = Rn AND NOT Op21111MVN求反求反Rd = NOT Op261指令类型

42、指令类型助记符助记符 说说 明明 操操 作作 条件码位置条件码位置 数据移动数据移动指令指令MOV Rd,operand2数据传送指令数据传送指令Rdoperand2MOVcondSMVN Rd,operand2数据非传送指数据非传送指令令Rd(operand2)MVNcondS算术运算算术运算指令指令ADD Rd,Rn,operand2加法运算指令加法运算指令RdRnoperand2ADDcondSSUB Rd,Rn,operand2减法运算指令减法运算指令RdRnoperand2SUBcondSRSB Rd,Rn,operand2逆向减法指令逆向减法指令Rdoperand2RnRSBcon

43、dSADC Rd,Rn,operand2带进位加法指带进位加法指令令RdRnoperand2CarryADCcondSSBC Rd,Rn,operand2带进位减法指带进位减法指令令RdRnoperand2(NOT)CarrySBCcondSRSC Rd,Rn,operand2 带进位逆向减带进位逆向减法指令法指令 Rdoperand2Rn(NOT)CarryRSCcondS 基本数据处理指令集基本数据处理指令集62逻辑运逻辑运算指令算指令AND Rd,Rn,operand2逻辑逻辑“与与”操操作指令作指令RdRn & operand2ANDcondSORR Rd,Rn,operand2逻辑逻

44、辑“或或”操操作指令作指令RdRn | operand2ORRcondSEOR Rd,Rn,operand2逻辑逻辑“异或异或”操作指令操作指令RdRnoperand2EORcondSBIC Rd,Rn,operand2位清除指令位清除指令RdRn&(operand2)BICcondS比较测比较测试指令试指令CMP Rn,operand2比较指令比较指令标志标志N,Z,C,VRnoperand2CMPcondCMN Rn,operand2负数比较指令负数比较指令标志标志N,Z,C,V Rnoperand2CMNcondTST Rn,operand2位测试指令位测试指令标志标志N,Z,C,V R

45、n&operand2TSTcondTEQ Rn,operand2相等测试指令相等测试指令标志标志N,Z,C,V Rnoperand2TEQcond指令类型指令类型助记符助记符 说说 明明 操操 作作 条件码位置条件码位置 基本数据处理指令集基本数据处理指令集63基本数据处理指令用法基本数据处理指令用法 1. 数据移动指令数据移动指令MOV和和MVN MOV指令可将一个立即数、一个寄存器值或一个指令可将一个立即数、一个寄存器值或一个被移位的寄存器值传送到目的寄存器。被移位的寄存器值传送到目的寄存器。MVN指令的功能与指令的功能与MOV相似,唯一的差别是在相似,唯一的差别是在MVN中,数据在传送之

46、前被按位取反了,即把一中,数据在传送之前被按位取反了,即把一个被取反的值传送到目的寄存器中。个被取反的值传送到目的寄存器中。汇编格式汇编格式MOV|MVNS , 64基本数据处理指令用法基本数据处理指令用法例例MOV R1,R0 ;R1 R0MOV PC,R14 ;PCR14MOVS PC,R14 ;PCR14,CPSRSPSR MOV R0,0x80 ;R00x80MOVEQS R0, #0xFF ; While Z=1,R0255,刷新,刷新N和和ZMOVSR1,R0,LSL #3 ;R1R0x8, 刷新刷新N、Z和和CMNV R0,R3,LSL R5 ;R0非非R32R565基本数据处理

47、指令用法基本数据处理指令用法2. 比较测试指令比较测试指令CMP | CMN | TST | TEQ 比较测试指令是专门用于影响状态寄存器标志位比较测试指令是专门用于影响状态寄存器标志位的指令,不带的指令,不带“S”后缀,不保留操作结果。后缀,不保留操作结果。指令汇编格式指令汇编格式CMP | CMN | TST | TEQ , CMP | CMN 指令指令用于把一个寄存器的内容和另一个寄存器的内容用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较或立即数进行比较 ,结果更新标志位,前者为减,结果更新标志位,前者为减,后者为加后者为加66基本数据处理指令用法基本数据处理指令用法例例CM

48、PR1,R0 ;R1-R0,设置标志位,设置标志位CMPR1,100 ; R1-100,设置标志位,设置标志位 CMN R1,R0 ;R1+R0,设置标志位,设置标志位CMN R1,100 ; R1+ 100,设置标志位,设置标志位67基本数据处理指令用法基本数据处理指令用法TEQ指令指令 用于把一个寄存器的内容和另一个寄存器的内容用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位或立即数进行按位“异或异或”运算,结果更新标志运算,结果更新标志位值(位值(V除外)。除外)。通常用于测试(比较)两个操作数是否相等。通常用于测试(比较)两个操作数是否相等。“异或异或”是一种逻辑运算,运算的

49、法则是:两个是一种逻辑运算,运算的法则是:两个位相同结果为位相同结果为0,不同结果为,不同结果为1。例如:。例如: 0101 1010 异或异或 0011 1001 0110 001168基本数据处理指令用法基本数据处理指令用法例例TEQ R3,#0x0FF ;R30xFF ;若若R3= FF,则则Z=1,否则否则Z=0TEQ R1 , #0b00010101 ;R100010101 ;若若R1=00010101,则则Z=1 ;否则否则Z=0TEQ R1, R2 ;R1 R2,若若R1=R2,则则Z=1,否则否则Z=069基本数据处理指令用法基本数据处理指令用法TST指令指令 用于把一个寄存器

50、的内容和另一个寄存器的内容用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位或立即数进行按位“与与”运算,不保留结果,结运算,不保留结果,结果更新标志位值(果更新标志位值(V除外)。除外)。通常用来检测是否设置了特定的位,所以操作数通常用来检测是否设置了特定的位,所以操作数1为要测试的数据,操作数为要测试的数据,操作数2为一个位掩码。为一个位掩码。70基本数据处理指令用法基本数据处理指令用法例例TST R1, #0b1 ;测试;测试R1中位中位0 ;若;若0=1,Z=0,否则,否则Z=1 TST R3,#0b01010000 ;测试;测试R3中位中位6和和4 ;若均为;若均为1,Z=0

51、,否则,否则Z=1TST R1, #0xFF ;测试;测试 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时,指令执行结果更新条件标志位时,指令执行结果更新条件标志位N、Z、C与与V;当目的寄存器为当目的寄存器为

52、R15时,当前模式下的时,当前模式下的SPSR将被拷贝将被拷贝到到CPSRRd: 目的寄存器,用于保存结果目的寄存器,用于保存结果Rn: 第第1操作数寄存器操作数寄存器operand2: 第第2操作数,可为一立即数、寄存器值或寄存操作数,可为一立即数、寄存器值或寄存器移位值。器移位值。 72基本数据处理指令用法基本数据处理指令用法 例例ADDS R0,R4,R8 ;加低端的字,影响加低端的字,影响CPSRADCS R1,R5,R9 ;加第二个字,带进位加第二个字,带进位SUB R0,R1,#256 ; R0 = R1 - 256 SUBS R15,R14,#4 ;R15R14-4, ;CPSR

53、SPSRSBCS R0,R1,R2 ;R0 = R1 - R2 - !C RSB R0,R1,#256 ;R0 = 256 R1RSC R0,R1,R2 ;R0 = R2 R1 - !C 73基本数据处理指令用法基本数据处理指令用法4. 逻辑运算指令逻辑运算指令指令汇编格式指令汇编格式AND | BIC | EOR | ORR S , , Cond : 可选条件后缀可选条件后缀S: 可选后缀,若选用,则:可选后缀,若选用,则:目的寄存器非目的寄存器非R15时,更新条件标志位时,更新条件标志位N、Z、C(V除外)除外)目的寄存器为目的寄存器为R15时,当前模式下的时,当前模式下的SPSR被拷贝到

54、被拷贝到CPSRRd: 目的寄存器,用于保存结果目的寄存器,用于保存结果Rn: 第第1操作数寄存器操作数寄存器Operand2: 第第2操作数,可为一立即数、寄存器值或寄存器操作数,可为一立即数、寄存器值或寄存器移位值。移位值。74基本数据处理指令用法基本数据处理指令用法AND指令指令 用于在两个操作数上进行逻辑用于在两个操作数上进行逻辑“与与”运算,并把运算,并把结果放置到目的寄存器中结果放置到目的寄存器中 ,例:,例:AND R0,R0,3 ;R0R0&3,保留,保留R0的的最低两位不变,其余位清零最低两位不变,其余位清零 BIC指令指令用于将第用于将第1操作数与第操作数与第2操作数的操作

55、数的“非非”进行进行逻辑逻辑“与与”运算,结果放置到目的寄存器中,例:运算,结果放置到目的寄存器中,例: BIC R0,R0,#0x1F ;R0R0 & NOT 0x1F,即将,即将R0的最低的最低5位清零,其余位保持不变位清零,其余位保持不变 75基本数据处理指令用法基本数据处理指令用法ORR指令指令ORR指令用于在两个操作数上进行逻辑指令用于在两个操作数上进行逻辑“或或”运算,并把结果放置到目的寄存器中。常用于运算,并把结果放置到目的寄存器中。常用于置位操作数置位操作数1的某些位,例:的某些位,例: ORR R0,R0,3; R0R0|3,即将,即将R0的最低两位置位,其余位保持不变。的最

56、低两位置位,其余位保持不变。 EOR指令指令EOR指令用于在两个操作数上进行逻辑指令用于在两个操作数上进行逻辑“异异或或”运算,并把结果放置到目的寄存器中运算,并把结果放置到目的寄存器中 ,常用,常用于反转操作数于反转操作数1的某些位的某些位 ,例:,例:76基本数据处理指令用法基本数据处理指令用法EOR R0,R0,3;R0R03,即反转,即反转R0的最低两位,其余位保持不变。的最低两位,其余位保持不变。 77乘法指令乘法指令ARM微处理器支持的乘法指令与乘加指令共微处理器支持的乘法指令与乘加指令共有有6条,可分为运算结果为条,可分为运算结果为32位和运算结果为位和运算结果为64位两类。位两

57、类。与基本数据处理指令不同,乘法指令中的所与基本数据处理指令不同,乘法指令中的所有操作数、目的寄存器必须为通用寄存器,有操作数、目的寄存器必须为通用寄存器,不能对操作数使用立即数或被移位的寄存器不能对操作数使用立即数或被移位的寄存器数,同时,目的寄存器和操作数数,同时,目的寄存器和操作数1必须是不同必须是不同的寄存器。的寄存器。 78乘法指令乘法指令指令编码格式指令编码格式cond0 0 0 0Rm3128 27242321 20 19161512 118 74 301 0 0 1RsRn/RdLoRd/RdHimul S79助记符助记符说说 明明 操操 作作 条件码条件码MUL Rd,Rm,

58、Rs32位乘法指令位乘法指令RdRmRs (Rd!=(Rm) MULCondSMLA Rd,Rm,Rs,Rn32位乘加指令位乘加指令RdRmRsRn (Rd!=Rm)MLAcondSUMULL RdLo,RdHi,Rm,Rs64位无符号乘位无符号乘法指令法指令(RdLo,RdHi)RmRs UMULLcondSUMLAL RdLo,RdHi,Rm,Rs64位无符号乘位无符号乘加指令加指令(RdLo,RdHiRmRs(RdLo,RdHi)UMLALcondSSMULL RdLo,RdHi,Rm,Rs64位有符号乘位有符号乘法指令法指令(RdLo,RdHi)RmRsSMULLcondSSMLAL

59、RdLo,RdHi,Rm,Rs64位有符号乘位有符号乘加指令加指令(RdLo,RdHiRmRs(RdLo,RdHi)SMLALcondS乘法指令集乘法指令集80例例MULR0,R1,R2 ;R0 = (R1R2)低低32位位 MLAR0,R1,R2,R3 ;R0 =(R1R2 + R3)低低32位位 SMULL R0,R1,R2,R3 ;R0 =(R2R3)低低32位位 ;R1 = (R2R3)高高32位位SMLAL R0,R1,R2,R3 ;R0 =( R2R3)低低32位位R0 ;R1 =( R2R3)的高的高32位位 R1UMULL R0,R1,R2,R3 ;R0 =(R2R3)的低的低

60、32位位 ;R1 = (R2R3)的高的高32位位UMLAL R0,R1,R2,R3 ;R0 =(R2R3)的低的低32位位 R0 ;R1 =(R2R3)的高的高32位位 R1813 ARM指令集指令集 1) 数据传送指令数据传送指令2) 数据处理指令数据处理指令3) 状态寄存器访问指令状态寄存器访问指令4) 跳转移指令跳转移指令5) 异常产生指令异常产生指令6) 协处理器指令协处理器指令82状态寄存器访问指令状态寄存器访问指令MSR/MRS状态寄存器不允许直接修改,一般是通过状态寄存器不允许直接修改,一般是通过“读取修改写回读取修改写回”三个步骤来实现的。三个步骤来实现的。ARM指令中有两条

61、指令指令中有两条指令,用于实现用于实现“读取读取”与与“写回写回”操作。它们是:操作。它们是: MRS :读取或状态寄存器到通用寄存器的传送读取或状态寄存器到通用寄存器的传送MSR :写回或写回或 通用寄存器到状态寄存器的传送通用寄存器到状态寄存器的传送 83状态寄存器访问指令状态寄存器访问指令MSR/MRSMRS编码格式编码格式汇编格式汇编格式MRS Rd,CPSR|SPSR 例例:MRS R0,CPSR ; R0CPSRMRS R3, SPSR ; R3SPSR 84状态寄存器访问指令状态寄存器访问指令MSR/MRSMSR编码格式编码格式c16: PSR7:0x17: PSR15:8s18

62、: PSR23:16f19: PSR31:24位掩码位掩码85状态寄存器访问指令状态寄存器访问指令MSR/MRS汇编格式汇编格式MSR CPSR_f | SPSR_f,#MSR CPSR_ | SPSR_,Rm 例例MSRCPSR_cxsf,R0 ;CPSRR0MSRSPSR_cxsf,R0 ;SPSRR0MSRCPSR_c,R0 ;CPSRR0,仅,仅仅修改仅修改CPSR中的控制位域中的控制位域86状态寄存器访问指令状态寄存器访问指令MSR/MRSARMDisableIntARMDisableInt()().GLOBALARMDisableIntARMDisableInt:STMDBsp!,

63、 r0,lrMRSr0, CPSRORRr0, r0, #NoIntMSRCPSR_cxsf, r0LDMIAsp!, r0,pc/.EQU NoInt,0x80/.EQU NoInt,0x8087状态寄存器访问指令状态寄存器访问指令MSR/MRS.GLOBALARMEnableIntARMEnableInt:STMDB sp!, r0,lrMRSr0, CPSRBICr0, r0, #NoIntMSRCPSR_cxsf, r0LDMIA sp!, r0,pc/.EQU NoInt,0x80/.EQU NoInt,0x80ARMEnableInt()883 ARM指令集指令集 1) 数据传送指

64、令数据传送指令2) 数据处理指令数据处理指令3) 状态寄存器访问指令状态寄存器访问指令4) 跳转移指令跳转移指令5) 异常产生指令异常产生指令6) 协处理器指令协处理器指令89跳转指令跳转指令ARM有两种方法可以实现程序流程的跳转:有两种方法可以实现程序流程的跳转:直接向程序计数器直接向程序计数器PC写入目标地址值。可以实现在写入目标地址值。可以实现在4GB的地址空间中的任意跳转,这种跳转指令又称为长跳转的地址空间中的任意跳转,这种跳转指令又称为长跳转使用跳转指令。可以从当前指令向前或向后使用跳转指令。可以从当前指令向前或向后32MB地址地址空间的跳转。跳转指令有以下空间的跳转。跳转指令有以下

65、4条条B 跳转指令跳转指令BL带链接的跳转指令带链接的跳转指令BLX 带链接和状态切换的跳转指令带链接和状态切换的跳转指令BX带状态切换的跳转指令带状态切换的跳转指令90跳转指令跳转指令1. B与与 BLB完成简单的跳转,跳转到指令中给定的地址完成简单的跳转,跳转到指令中给定的地址BL带链接的跳转,跳转的同时将下一条指令的地带链接的跳转,跳转的同时将下一条指令的地址复制到链接寄存器址复制到链接寄存器LR中,以便将来返回中,以便将来返回编码格式编码格式91跳转指令跳转指令语法格式语法格式BL L:链接后缀,带该后缀时处理器自动将下一条指链接后缀,带该后缀时处理器自动将下一条指令的地址(返回地址)

66、复制到链接寄存器令的地址(返回地址)复制到链接寄存器LR中。中。cond: 可选条件后缀。可选条件后缀。targt_address:指定要跳往的目标地址:指定要跳往的目标地址,可跳转可跳转的目标地址范围为的目标地址范围为(-32MB+32MB)。92跳转指令跳转指令例例BLabel;程序跳转到标号程序跳转到标号Label处执行处执行BCS Label ;当当CPSR中的中的C条件码置位时,条件码置位时,程序程序 ;跳转到标号跳转到标号Label处执行处执行BL func_1 ;程序跳转到子程序程序跳转到子程序func_1处执处执行,行, ;同时将当前同时将当前PC值,保存到值,保存到LR中中9

67、3跳转指令跳转指令2. BLX指令指令BLX为带状态切换与连接的跳转指令,实现状态为带状态切换与连接的跳转指令,实现状态切换、连接(保存返回地址)与跳转两种功能。切换、连接(保存返回地址)与跳转两种功能。其有两种语法格式与编码格式,每种格式下的功其有两种语法格式与编码格式,每种格式下的功能是不同的,下面分别予以介绍。能是不同的,下面分别予以介绍。编码格式编码格式1 94跳转指令跳转指令语法格式语法格式1BLX target_addr 为目标地址,即要跳往的为目标地址,即要跳往的Thunb子子程首址,其计算方法同程首址,其计算方法同B与与BL指令。指令。格式格式1用于从用于从ARM指令集跳转到指

68、令中所指定的指令集跳转到指令中所指定的目标地址,其应为一目标地址,其应为一Thumb子程序,跳的同时完子程序,跳的同时完成成ARM 到到Thumb的状态转换,并将下一条指令的状态转换,并将下一条指令的地址拷贝到连接寄存器的地址拷贝到连接寄存器LR中。本指令属于无条中。本指令属于无条件执行的指令。件执行的指令。95跳转指令跳转指令编码格式编码格式2语法格式语法格式2BLXCond Rm格式格式2用于从用于从ARM指令集跳转到指令中所指定的目标地址,指令集跳转到指令中所指定的目标地址,同时将下一条指令的地址复制到同时将下一条指令的地址复制到LR中。目标地址存放在寄中。目标地址存放在寄存器存器Rm中

69、,可以是中,可以是ARM指令,也可以是指令,也可以是Thumb指令,由指令,由Rm寄存器的寄存器的bit0决定。当决定。当bit0值为值为0时,目标地址处的时,目标地址处的指令类型为指令类型为ARM指令;当指令;当Rm寄存器的寄存器的bit0值为值为1时,目时,目标地址处的指令类型为标地址处的指令类型为Thumb指令指令 96跳转指令跳转指令3. BX指令指令编码格式编码格式语法格式语法格式BX BX指令跳转到指令中所指定的目标地址,目标地址处的指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是指令既可以是ARM指令,也可以是指令,也可以是Thumb指令,由指令,由Rm寄寄存器的存器的

70、bit0决定。当决定。当bit0值为值为0时,目标地址处的指令类时,目标地址处的指令类型为型为ARM指令;当指令;当Rm寄存器的寄存器的bit0值为值为1时,目标地址时,目标地址处的指令类型为处的指令类型为Thumb指令指令973 ARM指令集指令集 1) 数据传送指令数据传送指令2) 数据处理指令数据处理指令3) 状态寄存器访问指令状态寄存器访问指令4) 跳转移指令跳转移指令5) 异常产生指令异常产生指令6) 协处理器指令协处理器指令985)异常产生指令)异常产生指令异常产生指令包括软件中断指令异常产生指令包括软件中断指令SWI(Software Interrupt)和断点指令和断点指令BK

71、PT(Breakpoint)。ARM指令在用户模式下运行时不能够访问受操作指令在用户模式下运行时不能够访问受操作系统保护的资源,需要访问这些资源时,使用软件系统保护的资源,需要访问这些资源时,使用软件控制的唯一方法就是使用软件中断指令控制的唯一方法就是使用软件中断指令SWI。运行运行SWI指令时,产生软件中断,系统自动切换到指令时,产生软件中断,系统自动切换到管理模式,用户程序便能够调用操作系统提供的服管理模式,用户程序便能够调用操作系统提供的服务例程,访问受操作系统保护的资源。务例程,访问受操作系统保护的资源。995)异常产生指令)异常产生指令编码格式编码格式语法格式语法格式SWI 例:例:

72、SWI 0x2立即数为何要用立即数为何要用24位来编码,有何用处?位来编码,有何用处?可用不同的立即数来区别操作系统的不同资源可用不同的立即数来区别操作系统的不同资源/服务例程服务例程1005)异常产生指令)异常产生指令执行执行SWI指令时,将产生软中断,指令时,将产生软中断,ARM处理器硬件处理器硬件会执行下列操作:会执行下列操作:(1)把)把CPSR拷贝到管理模式下的拷贝到管理模式下的SPSR中中(2)修改状态寄存器中相应位:)修改状态寄存器中相应位:模式控制位修改为:模式控制位修改为:10011(SVC模式)模式)禁止禁止IRQ中断,使中断,使CPSR7=1(3)把返回地址拷贝到)把返回

73、地址拷贝到SVC下的下的R14中中(4)把中断向量)把中断向量0x8赋给赋给PC随后,程序执行随后,程序执行0x8处的指令,通常是一个跳转指令处的指令,通常是一个跳转指令或或PC赋值指令赋值指令1015)异常产生指令)异常产生指令0x00000008 B SWISR 或或 0x00000008 LDR PC, SWISR 软中断处理程序应有如下结构软中断处理程序应有如下结构SWISR STMFD SP!,R0-R12 ;R0-R12进堆,保护现场进堆,保护现场 ;软中断事务处理软中断事务处理 LDMFD SP!,R0-R12 ;R0-R12出堆,恢复现场出堆,恢复现场 MOVS PC,R14

74、;中断返回中断返回无论立即数为何,都跳到无论立即数为何,都跳到0x8处,执行同样的程序,处,执行同样的程序,立即数似乎不起任何作用。如何根据立即数来调用操立即数似乎不起任何作用。如何根据立即数来调用操作系统的服务例程呢?作系统的服务例程呢?1025)异常产生指令)异常产生指令将软中断处理程序设计为总处理程序与子处理程序将软中断处理程序设计为总处理程序与子处理程序的两层结构的两层结构由总处理程序提取软中断指令中的立即数,并根据由总处理程序提取软中断指令中的立即数,并根据立即数(功能号)的不同跳转到不同的子处理程序立即数(功能号)的不同跳转到不同的子处理程序处处由子处理程序进行具体的软中断事务处理

75、由子处理程序进行具体的软中断事务处理可用如下两种方式将软中断指令中的立即数提取出可用如下两种方式将软中断指令中的立即数提取出来来 用寄存器传递立即数用寄存器传递立即数直接提取直接提取SWI指令中的立即数指令中的立即数1035)异常产生指令)异常产生指令(1)用寄存器传递立即数用寄存器传递立即数设有如下应用程序,其中多处放置软中断指令。设有如下应用程序,其中多处放置软中断指令。MOV R0,0 ;立即数立即数0进进R0,为调用,为调用0号系统服务例程做准备号系统服务例程做准备SWI 0 .MOV R0,#0x1 ;立即数立即数1进进R0,为调用,为调用1号系统服务例程做准备号系统服务例程做准备S

76、WI #1 .MOV R0,#n ;立即数立即数1进进R0,为调用,为调用1号系统服务例程做准备号系统服务例程做准备SWI #n 1045)异常产生指令)异常产生指令#软中断处理总程序软中断处理总程序SWISR MOV R0,R0,LSL #2 ;R04R0, R0=立即数立即数4 ADD PC,PC,R0 ;PCPC+R0 NOP B SWISRSUB0 B SWISRSUB1 B SWISRSUB2 B SWISRSUBn 1055)异常产生指令)异常产生指令#编号为编号为0的软中断处理子程序的软中断处理子程序SWISRSUB0 STMFD SP!,R0-R12 ;R0-R12进堆,保护现

77、场进堆,保护现场 ;0号软号软中断事务处理中断事务处理 LDMFD SP!,R0-R12;R0-R12出堆,恢复现场出堆,恢复现场 MOVS PC,R14 ;中断返回中断返回#编号为编号为n的软中断处理子程序的软中断处理子程序SWISRSUB0 STMFD SP!,R0-R12 ;R0-R12进堆,保护现场进堆,保护现场 ;n号软号软中断事务处理中断事务处理 LDMFD SP!,R0-R12;R0-R12出堆,恢复现场出堆,恢复现场 MOVS PC,R14 ;中断返回中断返回1065)异常产生指令)异常产生指令(2) 直接提取直接提取SWI指令中的立即数指令中的立即数设有如下应用程序,其中多处

78、放置软中断指令。设有如下应用程序,其中多处放置软中断指令。SWI #0SWI #1SWI #n1075)异常产生指令)异常产生指令SWISR LDR R0,R14,#-0x04 BIC R0,R0,#0xFF000000 MOV R0,R0,LSL#2 ADD PC,PC,R0 NOP B SWISRSUB0 B SWISRSUB1 软中总处理程序软中总处理程序108SWISRSUB0 STMFD SP!,R0-R12 ;0号软中断事务处理 ;0号软中断事务处理 LDMFD SP!,R0-R12 MOVS PC,R14 0号软中子处理程序号软中子处理程序5)异常产生指令)异常产生指令109SW

79、ISRSUB0 STMFD SP!,R0-R12 ;n号软中断事务处理 ;n号软中断事务处理 LDMFD SP!,R0-R12 MOVS PC,R14n号软中子处理程序号软中子处理程序5)异常产生指令)异常产生指令1105)异常产生指令)异常产生指令 断点指令(断点指令(BKPT)产生断点,用于软件调试产生断点,用于软件调试产生预取指令异常,进行异常处理产生预取指令异常,进行异常处理编码格式编码格式1115)异常产生指令)异常产生指令语法格式语法格式BKPT immed_16 例例BKPT BKPT 0xF02C1123 ARM指令集指令集 1) 数据传送指令数据传送指令2) 数据处理指令数据

80、处理指令3) 状态寄存器访问指令状态寄存器访问指令4) 跳转移指令跳转移指令5) 异常产生指令异常产生指令6) 协处理器指令协处理器指令 1136)协处理器指令)协处理器指令ARM支持支持16个协处理器,用于各种协处理器个协处理器,用于各种协处理器操作,最常使用的协处理器是用于控制片上操作,最常使用的协处理器是用于控制片上功能的系统协处理器。如管理高速缓存的协功能的系统协处理器。如管理高速缓存的协处理器、管理存储器单元的协处理器,浮点处理器、管理存储器单元的协处理器,浮点运算协处理器等。运算协处理器等。ARM协处理器指令根据其协处理器指令根据其用途主要分为以下三类:用途主要分为以下三类: 数据

81、操作指令;数据操作指令; 数据传送指令;数据传送指令; 寄存器传送指令寄存器传送指令 114数据操作指令数据操作指令 数据操作指令用于对协处理器进行初始化操用数据操作指令用于对协处理器进行初始化操用二进制编码二进制编码汇编格式汇编格式CDP ,CRd,CRn,CRm, 例:例:CDP p5,2,C12,C10,C3,4115数据传送指令数据传送指令 数据传送指令用于从存储器加载数据到协处理器的寄数据传送指令用于从存储器加载数据到协处理器的寄存器,或将协处理器寄存器的数据存入存储器存器,或将协处理器寄存器的数据存入存储器编码格式编码格式116汇编格式如下:汇编格式如下:前变址格式前变址格式LDC

82、|STCL ,CRd,Rn !; 后变址格式后变址格式LDC|STCL ,CRd,Rn,117寄存器传送指令寄存器传送指令寄存器传送指令用于在寄存器传送指令用于在ARM和协处理器寄存器之间和协处理器寄存器之间传送数据。传送数据。编码格式编码格式汇编格式如下:汇编格式如下: 从协处理器传送到从协处理器传送到ARM寄存器:寄存器: MRC ,Rd,CRn,CRm, 从从ARM寄存器传送到协处理器:寄存器传送到协处理器:MCR ,Rd,CRn,CRm, 118第第3章章ARM指令系统指令系统1 13 32 2 ARM指令系统概述指令系统概述 ARM指令指令的寻址方式的寻址方式 ARM指令集指令集4

83、4 Thumb指令集指令集119Thumb指令集指令集Thumb 是是16-bit 指令集指令集代码密度高代码密度高 (总代码大小约为总代码大小约为ARM指令的指令的65%)使用窄总线存储器时可以大大提高性能使用窄总线存储器时可以大大提高性能。是是 ARM 指令集的一个子集,不是一个完整指令集的一个子集,不是一个完整的指令集(的指令集(Thumb-2除外)除外)ARM和和Thumb之间可通之间可通BX 指令进行切换指令进行切换120015310ADDS r2,r2,#1ADD r2,#132-bit ARM 指令指令16-bit Thumb 指令指令没有条件后缀(没有条件后缀(B除外)除外)没有没有S后缀(均可影响标志后缀(均可影响标志位)位)源、目的寄存器必须相同源、目的寄存器必须相同仅能使用低寄存器仅能使用低寄存器(少数指少数指令除外)令除外)常数大小有限制常数大小有限制不能使用在线移位器(有不能使用在线移位器(有单独的移位指令)单独的移位指令)Thumb指令集指令集

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号