第3章ARM7TDMI指令系统ppt课件_第1页
第3章ARM7TDMI指令系统ppt课件_第2页
第3章ARM7TDMI指令系统ppt课件_第3页
第3章ARM7TDMI指令系统ppt课件_第4页
第3章ARM7TDMI指令系统ppt课件_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.ARM程序的文件类型:C程序:ARM开发中大部分程序使用C语言编写,文件类型为“*.C”;汇编程序:涉及到硬件底层操作的代码有时必须使用汇编语言编写,文件类型为“*.S”。2.为什么学习ARM指令系统:操作系统移植编写启动代码方便程序调试1. ARM处理器的寻址方式;2. ARM指令的特点;3. ARM指令的种类,它能完成哪些功能。本章学习重点目录q1.ARM处理器寻址方式q2.指令集介绍qARM指令集qThumb指令集目录q1.ARM处理器寻址方式q2.指令集介绍qARM指令集qThumb指令集第3章 ARM7TDMI(-S)指令系统 简介 ARM处理器是基于精简指令集计算机(RISC)

2、原理设计的,指令集和相关译码机制较为简单。ARM7TDMI(-S)具有32位ARM指令集和16位Thumb指令集,ARM指令集效率高,但是代码密度低;而Thumb指令集具有较高的代码密度,却仍然保持ARM的大多数性能上的优势,它是ARM指令集的子集。所有的ARM指令都是可以有条件执行的,而Thumb指令仅有一条指令具备条件执行功能。ARM程序和Thumb程序可相互调用,相互之间的状态切换开销几乎为零。 第3章 ARM7TDMI(-S)指令系统 ARM指令集与Thumb指令集的关系Thumb指令集具有灵活、小巧的特点ARM指令集支持ARM核所有的特性,具有高效、快速的特点3.1 ARM处理器寻址

3、方式 寻址方式分类 寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。ARM处理器具有9种基本寻址方式。1.寄存器寻址;2.立即寻址;3.寄存器移位寻址;4.寄存器间接寻址;5.基址寻址;6.多寄存器寻址;7.堆栈寻址;8.相对寻址。 操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举例如下: MOV R1,R2 ;将R2的值存入R1 SUB R0,R1,R2 ;将R1的值减去R2的值,结果保存到R0 0 xAA0 x55R2R13.1 ARM处理器寻址方式 寻址方式分类寄存器寻址MOV R1,R2MOV R1,R2

4、0 xAA 立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。立即寻址指令举例如下: SUBS R0,R0,#1 ;R0减1,结果放入R0,并且影响标志位MOV R0,#0 xFF000 ;将立即数0 xFF000装入R0寄存器 0 x55R0MOV R0,#0 xFF00程序存储3.1 ARM处理器寻址方式 寻址方式分类立即寻址MOV R0,#0 xFF00MOV R0,#0 xFF000 xFF00从代码中获得数据 寄存器移位寻址是ARM指令集特有的寻址方式。当第2个操作数是寄存器移位方式

5、时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下:MOV R0,R2,LSL #3 ;R2的值左移3位,结果放入R0, ;即是R0=R28 ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相 ;“与操作,结果放入R10 x55R0R20 x013.1 ARM处理器寻址方式 寻址方式分类寄存器移位寻址MOV R0,R2,LSL #3MOV R0,R2,LSL #30 x080 x08逻辑左移3位 寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。

6、寄存器间接寻址指令举例如下: LDRR1,R2;将R2指向的存储单元的数据读出;保存在R1中 SWPR1,R1,R2;将寄存器R1的值和R2指定的存储;单元的内容交换 0 x55R0R2 0 x400000000 xAA0 x400000003.1 ARM处理器寻址方式 寻址方式分类寄存器间接寻址LDR R0,R2LDR R0,R20 xAA 基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。基址寻址指令举例如下: LDRR2,R3,#0 x0C ;读取R3+0 x0C地址上的存储单元

7、;的内容,放入R2 STRR1,R0,#-4! ;先R0=R0-4,然后把R1的值寄存 ;到保存到R0指定的存储单元 3.1 ARM处理器寻址方式 寻址方式分类基址寻址0 x55R2R3 0 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0CLDR R2,R3,#0 x0C0 xAA将R3+0 x0C作为地址装载数据 多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下: LDMIAR1!,R2-R7,R12 ;将R1指向的单元中的数据读出到 ;R2R7、R12中(R1自动加1) STMIAR0!,R2

8、-R7,R12 ;将寄存器R2R7、R12的值保 ;存到R0指向的存储; 单元中 ;(R0自动加1)0 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存储器3.1 ARM处理器寻址方式 寻址方式分类多寄存器寻址LDMIA R1!,R2-R4,R6 LDMIA R1!,R2-R4,R6 0 x010 x020 x030 x040 x40000010 堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出” 。堆栈寻址是隐含的,它使用一个专门的

9、寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种: 向上生长:向高地址方向生长,称为递增堆栈向下生长:向低地址方向生长,称为递减堆栈3.1 ARM处理器寻址方式 寻址方式分类堆栈寻址3.1 ARM处理器寻址方式 寻址方式分类堆栈寻址栈底栈顶栈区SP堆栈存储区栈顶栈底栈区SP向下增长向上增长0 x123456780 x12345678堆栈压栈堆栈压栈栈顶SP栈顶SP栈底空堆栈栈底满堆栈堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。 3.1 ARM处理器寻址方式 寻址方式分类堆栈寻址0 x1

10、23456780 x12345678栈顶SP0 x12345678栈顶SP压栈压栈所以可以组合出四种类型的堆栈方式:满递增:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA、STMFA等; 空递增:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEA、STMEA等; 满递减:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFD、STMFD等;空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如LDMED、STMED等。 3.1 ARM处理器寻址方式 寻址方式分类堆栈寻址 相对寻址是基址寻址的一种变通。由程序计数器PC提供基准地址,指令中的

11、地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下:BLSUBR1;调用到SUBR1子程序BEQLOOP;条件跳转到LOOP标号处.LOOP MOV R6,#1.SUBR1. 3.1 ARM处理器寻址方式 寻址方式分类相对寻址1. ARM处理器的寻址方式 8种寻址方式;2. ARM指令的特点;3. ARM指令的种类,它能完成哪些功能。本章学习重点目录q1.ARM处理器寻址方式q2.指令集介绍qARM指令集qThumb指令集 简单的ARM程序;文件名:TEST1.S ;功能:实现两个寄存器相加 ;说明:使用ARMulate软件仿真调试 AREAExample1,

12、CODE,READONLY ;声明代码段Example1 ENTRY ;标识程序入口 CODE32 ;声明32位ARM指令START MOVR0,#0 ;设置参数 MOVR1,#10LOOPBLADD_SUB ;调用子程序ADD_SUB BLOOP ;跳转到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回 END ;文件结束 使用“;”进行注释标号顶格写实际代码段声明文件结束;文件名:TEST1.S ;功能:实现两个寄存器相加 ;说明:使用ARMulate软件仿真调试 AREAExample1,CODE,READONLY ;声明代码段

13、Example1 ENTRY ;标识程序入口 CODE32 ;声明32位ARM指令START MOVR0,#0 ;设置参数 MOVR1,#10LOOPBLADD_SUB ;调用子程序ADD_SUB BLOOP ;跳转到LOOPADD_SUB ADDSR0,R0,R1 ;R0 = R0 + R1 MOVPC,LR ;子程序返回 END ;文件结束 简单的ARM程序目录q1.ARM处理器寻址方式q2.指令集介绍qARM指令集qThumb指令集ARM指令小节目录1.指令格式2.条件码3.ARM指令ARM指令小节目录1.指令格式2.条件码3.ARM指令 ARM指令的基本格式如下:3.2 指令集介绍 A

14、RM指令集指令格式 S , 其中号内的项是必须的,号内的项是可选的。各项的说明如下:opcode:指令助记符;:指令助记符;cond:执行条件;:执行条件;S:是否影响:是否影响CPSR寄存器的值;寄存器的值;Rd:目标寄存器;:目标寄存器; Rn:第:第1个操作数的寄存器;个操作数的寄存器;operand2:第:第2个操作数;个操作数;ARM指令小节目录1.指令格式2.条件码3.ARM指令 ARM指令的基本格式如下:3.2 指令集介绍 ARM指令集条件码 S , 使用条件码“cond可以实现高效的逻辑操作,提高代码效率。 绝大部分的ARM指令都可以条件执行,而Thumb指令只有B跳转指令具有

15、条件执行 功能。如果指令不标明条件代码,将默认为无条件AL执行。操作码条件助记符标志含义0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1无符号数大于或等于0011CC/LOC=0无符号数小于0100MIN=1负数0101PLN=0正数或零0110VSV=1溢出0111VCV=0没有溢出1000HIC=1,Z=0无符号数大于1001LSC=0,Z=1无符号数小于或等于1010GEN=V有符号数大于或等于 1011LTN!=V有符号数小于 1100GTZ=0,N=V有符号数大于 1101LEZ=1,N!=V有符号数小于或等于 1110AL任何无条件执行 (指令默认条件) 11

16、11NV任何从不执行(不要使用) 指令条件码表3.2 指令集介绍 ARM指令集条件码C代码:if(a b)a+;elseb+;对应的汇编代码:CMPR0,R1 ;R0与R1比较ADDHI R0,R0,#1 ;若R0R1,则R0=R0+1ADDLS R1,R1,#1 ;若R0R1,则R1=R1+1例如:1. ARM处理器的寻址方式 8种寻址方式;2. ARM指令的特点可条件执行、可选择影响标志位3. ARM指令的种类,它能完成哪些功能。本章学习重点ARM指令种类1.存储器访问指令2.数据处理指令3.乘法指令4.ARM分支指令5.协处理器指令6.杂项指令7.伪指令 为什么要掌握部分常用ARM指令?

17、熟悉ARM体系结构:通过指令的学习可以更深入的了解ARM硬件结构的特点;修改启动代码:启动代码为了满足大部分系统的顺利运行,通常将系统硬件配置在最低性能,通过调整启动代码中的参数使其更适合自己的硬件系统;调试程序:通过观察反汇编代码了解程序执行情况,比如某个变量的操作是否被编译器优化掉了。阅读已有的汇编代码;ARM指令种类1.存储器访问指令2.数据处理指令3.乘法指令4.ARM分支指令5.协处理器指令6.杂项指令7.伪指令3.2 指令集介绍 ARM指令集存储器访问指令 ARM处理器是典型的RISC处理器,对存储器的访问只能使用加载和存储指令实现。ARM处理器是冯诺依曼存储结构,程序空间、RAM

18、空间及I/O映射空间统一编址,除对RAM操作以外,对外围IO、程序数据的访问均要通过加载/存储指令进行。 存储器访问指令分为单寄存器操作指令和多寄存器操作指令。 LDR/STR指令用于对内存变量的访问、内存缓冲区数据的访问、查表、外围部件的控制操作等。若使用LDR指令加载数据到PC寄存器,则实现程序跳转功能,这样也就实现了程序散转。 所有单寄存器加载/存储指令可分为“字和无符号字节加载存储指令和“半字和有符号字节加载存储指令。3.2 指令集介绍 ARM存储器访问指令单寄存器存取3.2 指令集介绍 ARM存储器访问指令单寄存器存取装载指令:LDR 目标寄存器,源地址存储指令:STR 源寄存器,目

19、标地址存储器源地址目标寄存器存储器目标地址源寄存器3.2 指令集介绍 ARM存储器访问指令单寄存器存取装载指令:LDR存储指令:STRxxLDR/STR指令搭配不同的后缀实现不同方式的单寄存器存取操作:字/半字/字节数据控制是/否用户模式控制无/有符号控制助记符助记符说明说明操作操作条件码位置条件码位置LDR Rd,addressing 加载字字数据Rdaddressing,addressing索引LDRcondLDRB Rd,addressing 加载无符号字节字节数据Rdaddressing,addressing索引LDRcondBLDRT Rd,addressing以用户模式用户模式加载

20、字数据Rdaddressing,addressing索引LDRcondTLDRBT Rd, addressing 以用户模式用户模式加载无符号无符号字节数据Rdaddressing,addressing索引LDRcondBTLDRH Rd, addressing 加载无符号半字无符号半字数据Rdaddressing,addressing索引LDRcondHLDRSB Rd, addressing 加载有符号字节有符号字节数据Rdaddressing,addressing索引LDRcondSBLDRSH Rd, addressing加载有符号半字有符号半字数据 Rdaddressing,addr

21、essing索引 LDRcondSH ARM存储器访问指令装载指令助记符助记符说明说明操作操作条件码位置条件码位置STR Rd, addressing 存储字字数据addressingRd,addressing索引STRcondSTRB Rd,addressing 存储字节字节数据addressingRd,addressing索引STRcondBSTRT Rd,addressing 以用户模式用户模式存储字数据addressingRd, addressing索引STRcondTSTRBT Rd,addressing 以用户模式用户模式存储字节字节数据addressingRd,addressin

22、g索引STRcondBTSTRH Rd,addressing 存储半字半字数据addressing Rd,addressing索引STRcondH ARM存储器访问指令保存指令 ARM存储器访问指令地址形式装载指令:LDR 目标寄存器, 源地址保存指令:STR 源寄存器, 目标地址立即数:立即数可以是一个无符号的数值。这个数据可以加到基址寄存器,也可以从基址寄存器中减去这个数值。 如:LDR R1,R0,#0 x12 寄存器:寄存器中的数值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。 如:LDR R1,R0,R2 寄存器及移位常数:寄存器移位后的值可以加到基址寄存器,也可以从基址寄存

23、器中减去这个数值。 如:LDR R1,R0,R2,LSL #20 x55R2R5 0 x400000000 x123456780 x40000000存储器地址应用示例:LDRR2,R5 ;将R5指向地址的字数据存入R20 x12345678 ARM存储器访问指令单寄存器转载应用0 x12345678R1R2 0 x400000000 x?0 x40000004存储器地址应用示例:STRR1,R2,#0 x04 ;将R1的数据存储到R0+0 x04地址0 x12345678+4 ARM存储器访问指令单寄存器保存应用3.2 指令集介绍 ARM存储器访问指令多寄存器存取 多寄存器加载/存储指令可以实

24、现在一组寄存器和一块连续的内存单元之间传输数据。LDM为加载多个寄存器;STM为存储多个寄存器。允许一条指令传送16个寄存器的任何子集或所有寄存器。它们主要用于现场保护、数据复制、常数传递等。3.2 指令集介绍 ARM存储器访问指令多寄存器存取装载指令:LDM 源地址,目标寄存器列表存储指令:STM 目标地址,源寄存器列表存储器源地址目标寄存器1目标寄存器n存储器目标地址源寄存器1源寄存器n3.2 指令集介绍 ARM存储器访问指令多寄存器存取装载指令:LDM存储指令:STMxxLDM/STM指令搭配不同的后缀实现不同方式地址增长方式:IA: 每次传送后地址加4IB: 每次传送前地址加4DA:每

25、次传送后地址减4DB:每次传送前地址减40 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存储器0 x010 x020 x030 x040 x40000010应用示例:LDMIA R1!,R2-R4,R6 将R1指向的内存数据读取到R0-R4和R6寄存器中 ARM存储器访问指令多寄存器存取3.2 指令集介绍 SWP指令用于将一个内存单元(该单元地址放在寄存器Rn中)的内容读取到一个寄存器Rd中,同时将另一个寄存器Rm的内容写入到该内存单元中。使

26、用SWP可实现信号量操作。 ARM存储器访问指令寄存器和存储器交换指令3.2 指令集介绍 ARM存储器访问指令寄存器和存储器交换指令装载指令:SWP 读入寄存器,输出寄存器,目标地址存储器目标地址读入寄存器输出寄存器3.2 指令集介绍 ARM存储器访问指令寄存器和存储器交换指令装载指令:SWP 读入寄存器,输出寄存器,目标地址助记符助记符说明说明操作操作条件码位置条件码位置SWP Rd,Rm,Rn 寄存器和存储器字字数据交换RdRn,RnRm(RnRd或Rm)SWPcondSWPB Rd,Rm,Rn 寄存器和存储器字节字节数据交换RdRn,RnRm(RnRd或Rm)SWPcondB0 x123

27、45678R1R20 x?0 x112233440 x40000000存储器地址R0 0 x400000003.2 指令集介绍 ARM存储器访问指令寄存器和存储器交换指令应用示例:SWPR2,R1,R0将R1的内容与R0指向的存储单元的内容进行交换0 x123456780 x11223344ARM指令种类1.存储器访问指令2.数据处理指令3.乘法指令4.ARM分支指令5.协处理器指令6.杂项指令7.伪指令3.2 指令集介绍 ARM指令集ARM数据处理指令 数据处理指令大致可分为3类: 数据传送指令;算术逻辑运算指令;比较指令。 数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操

28、作。影响状态标志。 思考与练习?1.MOV指令与LDR指令都是往目标寄存器中传送数据,但是它们有什么区别吗? 思考与练习?1.MOV指令与LDR指令都是往目标寄存器中传送数据,但是它们有什么区别吗? MOV指令用于将数据从一个寄存器传送到另一个寄存器中,或者将一个常数传送到一个寄存器中,但是不能访问内存。LDR指令用于从内存中读取数据放入寄存器中。3.2 指令集介绍 ARM指令集乘法指令 ARM7TDMI具有三种乘法指令,分别为:3232位乘法指令;32 32位乘加指令;32 32位结果为64位的乘/乘加指令。ARM指令种类1.存储器访问指令2.数据处理指令3.乘法指令4.ARM分支指令5.协

29、处理器指令6.杂项指令7.伪指令3.2 指令集介绍 ARM指令集程序如何跳转在ARM中有两种方式可以实现程序的跳转:1.直接向PC寄存器赋值实现跳转; 例: MOV PC,R142.使用分支指令直接跳转。3.2 指令集介绍 ARM指令集分支指令程序代码跳转指令跳转目标程序代码跳转指令跳转目标3.2 指令集介绍 ARM指令集分支指令分支指令种类:B:分支指令BL:带链接的分支指令BX:带状态切换的分支指令 ARM指令分支指令因为用来表示目标地址的位数有限,所以B/BL指令无法实现4G32位范围内的任意跳转3.2 指令集介绍程序代码B mainxxmain ARM指令集分支指令程序代码BL Lab

30、elxxxxxxLabelxxxMOV PC,LRAddr1Addr2xxxxxxLRPC ARM指令分支指令 带链接的分支指令BL指令除了具有跳转功能,还能在跳转之前将下一条指令的地址拷贝到R14(即LR) 链接寄存器中,它适用于子程序调用。跳转范围限制在当前指令的32M字节地址内。指令格式如下:Addr1LabelAddr2Addr21.当程序执行到BL跳转指令时,硬件将下一条指令的地址Addr2装入LR寄存器,并把跳转地址装入程序计数器PC)2. 程序跳转到目标地址Label继续执行,当子程序执行结束后,将LR寄存器内容存入PC,返回调用函数继续执行例如: BL DelayNS;调用子程

31、序DelayNS ARM指令分支指令 带状态切换的分支指令BX指令除了具有跳转功能,还能在跳转的同时切换处理器状态。其跳转范围不受限制。指令格式如下:最低位为1?YN切换到Thumb状态切换到ARM状态 ARM指令分支指令 带状态切换的分支指令BX指令除了具有跳转功能,还能在跳转的同时切换处理器状态。其跳转范围不受限制。指令格式如下:例如:ADRL R0,T_Fun+1 ;将Thumb程序的入口地址加1存入R0BXR0 ; 跳转到R0指定的地址, ;并根据R0的最低位来切换处理器状态ARM指令种类1.存储器访问指令2.数据处理指令3.乘法指令4.ARM分支指令5.协处理器指令6.杂项指令7.伪

32、指令ARM指令种类1.存储器访问指令2.数据处理指令3.乘法指令4.ARM分支指令5.协处理器指令6.杂项指令7.伪指令 在ARM指令集中杂项指令共有3条,它们非常重要,特别是与操作系统的使用息息相关:1.软件中断产生指令:SWI2. 程序状态寄存器读指令:MRS3. 程序状态寄存器写指令:MSR3.2 指令集介绍 ARM指令集杂项指令3.2 指令集介绍 ARM指令集软中断指令 SWI指令用于产生软中断,主要用于用户程序调用操作系统的系统服务。执行该指令后,处理器将完成以下动作:1. 切换到管理模式2. 将CPSR备份到管理模式下的SPSR寄存器3. 程序跳转到软件中断入口用户模式管理模式任务

33、1任务2其它代码功能1:打开中断功能2:关闭中断功能n:任务调度CPSR寄存器SPSR寄存器1.使用操作系统后,为了防止出错的任务影响其它任务的执行,通常将任务放在用户模式执行,以限制其权限;2.对于一些重要的操作,如中断的开关,必须由操作系统完成。使用软件中断指令即可完成系统功能调用; ARM杂项指令软中断指令3.2 指令集介绍 ARM指令集软中断指令 SWI指令格式如下所示: 可以利用指令中的这个24位立即数向软中断服务程序传递参数,比如请求的服务类型 ARM杂项指令软中断指令 根据SWI指令传递的参数SWI异常处理程序可以作出相应的处理。SWI指令传递参数有以下两种方法,指令中的24位立

34、即数指定了用户请求的服务类型,参数通过通用寄存器传递。 MOV R0,#34;设置子功能号为34 SWI 12;调用12号软中断 指令中的24位立即数被忽略,用户请求的服务类型由寄存器R0的值决定,参数通过其它的通用寄存器传递。 MOV R0,#12;调用12号软中断 MOV R1,#34;设置子功能号为34 SWI 0 ARM杂项指令软中断指令 在SWI异常中断处理程序中,取出SWI指令中立即数的步骤为:首先确定引起软中断的SWI指令是ARM指令还是Thumb指令,这可通过对SPSR访问得到;然后取得该SWI指令的地址,这可通过访问LR寄存器得到;接着读出该SWI指令,分解出立即数。 SWI

35、_Handler STMFD SP!, R0-R3, R12, LR; 现场保护 MRS R0, SPSR ; 读取SPSR STMFD SP!, R0 ; 保存SPSR TST R0, #0 x20 ; 测试T标志位 LDRNEH R0, LR,#-2 ; 若是Thumb指令,读取指令码(16位) BICNE R0, R0, #0 xFF00; 取得Thumb指令的8位立即数 LDREQ R0, LR,#-4 ; 若是ARM指令,读取指令码(32位) BICEQ R0, R0, #0 xFF000000 ; 取得ARM指令的24位立即数 . LDMFD SP!, R0-R3, R12, PC

36、; SWI异常中断返回 3.2 指令集介绍 ARM指令集状态寄存器读指令 在ARM处理器中,只有MRS指令可以对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以了解当前处理器的工作状态。读SPSR寄存器可以了解到进入异常前的处理器状态。指令格式如下所示:目标寄存器3.2 指令集介绍 ARM指令集状态寄存器写指令例如,将R0的内容写入CPSR寄存器的控制位域MSR CPSR_c,R0条件代码标志保管控制位域Byte0Byte3, Byte2, Byte1R0CPSRNZCV IM0M1M2M3M4TF. . .31 30 29 28 27 26 8 7 6 5 4 3 2 1 0Byte0 ARM杂项指令状态寄存器写指令启动代码堆栈初始化应用示例: INITSTACKMOV R0,LR;设置管理模式堆栈MSR CPSR_C,#0 xD3LDR SP,StackSvc;设置中断模式堆栈MSR CPSR_C,#0 xD2LDR SP,StackIrq.模式位状态位IRQ禁止位FIQ禁止位NZCVIFT M4 M3 M2 M1 M031 30 29 28 27 2676543210配置值0 xD211010010禁止FI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论