arm中断返回地址详细分析.
arm中断实验的实验报告

arm中断实验的实验报告ARM中断实验的实验报告引言:ARM中断是一种常用的处理器功能,它可以在特定条件下中断当前的程序执行,转而执行指定的中断服务程序。
本次实验旨在通过ARM中断实验,深入了解中断的原理和应用。
一、实验背景ARM中断是ARM处理器中的一种重要功能,它可以在特定条件下中断当前的程序执行,转而执行指定的中断服务程序。
中断可以分为外部中断和内部中断两种类型。
外部中断是指来自外部设备的中断请求,例如外部设备的输入信号变化;内部中断是指来自处理器内部的中断请求,例如算术溢出、指令错误等。
二、实验目的1. 了解中断的概念和原理;2. 掌握ARM中断的实现方法;3. 学习如何编写中断服务程序。
三、实验步骤1. 准备实验环境:搭建ARM开发板,连接必要的外设;2. 配置中断控制器:根据实验需求,配置中断控制器的相关寄存器,使其能够正确响应中断请求;3. 编写中断服务程序:根据实验需求,编写中断服务程序,实现中断处理的相关功能;4. 运行实验程序:将编写好的程序下载到ARM开发板上,运行程序,观察中断的触发和响应情况;5. 实验结果分析:根据实验结果,分析中断的触发条件、中断服务程序的执行情况等。
四、实验结果与分析通过实验,我们成功实现了ARM中断的功能。
在实验过程中,我们配置了外部设备的中断引脚,当引脚状态发生变化时,中断控制器会产生中断请求,处理器则会立即中断当前的程序执行,转而执行中断服务程序。
在中断服务程序中,我们可以完成一些特定的操作,例如读取外设数据、更新系统状态等。
实验结果表明,中断服务程序能够正确地响应中断请求,并完成相应的操作。
五、实验总结本次实验通过ARM中断的实验,我们深入了解了中断的原理和应用。
中断是一种重要的处理器功能,它可以在特定条件下中断当前的程序执行,转而执行指定的中断服务程序。
掌握了中断的实现方法和编写中断服务程序的技巧,我们可以在实际应用中更好地利用中断功能,提高系统的响应速度和稳定性。
ARM的异常处理学习笔记转贴

ARM 的异常处理学习笔记转贴ARM的异常处理这部分比较不好理解。
当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。
当异常中断处理程序执行完成后,程序返回到发生中断指令的下条指令处执行。
在进入异常中断处理程序时,要保存被中断程序的执行现场,从异常中断处理程序退出时,要恢复被中断程序的执行现场。
1、引起异常的原因(1)、指令执行引起的异常软件中断、未定义指令(包括所要求的协处理器不存在是的协处理器指令)、预取址中止(存储器故障)、数据中止。
(2)、外部产生的中断复位、FIQ、IRQ。
2、ARM中异常中断的种类(1)、复位(RESET)a、当处理器复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行,包括系统加电和系统复位。
b、通过设置PC跳转到复位中断向量处执行称为软复位。
(2)、未定义的指令当ARM处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断,可以通过改异常中断机制仿真浮点向量运算。
(3)、软件中断这是一个由用户定义的中断指令(SWI)。
可用于用户模式下的程序调用特权操作指令。
在实时操作系统中可以通过该机制实现系统功能调用。
(4)、指令与取终止(Prefech Abort)如果处理器预取的指令的地址不存在,或者该地址不允许当前指令访问,当被预取的指令执行时,处理器产生指令预取终止异常中断。
(5)、数据访问终止(DATAABORT)如果数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问终止异常中断。
(6)、外部中断请求(IRQ)当处理器的外部中断请求引脚有效,而且CPSR的寄存器的I控制位被清除时,处理器产生外部中断请求异常中断。
系统中个外设通过该异常中断请求处7)、快速中断请求(FIQ) 理服务。
(当处理器的外部快速中断请求引脚有效,而且CPSR的F控制位被清除时,处理器产生外部中断请求异常中断。
arm汇编程序退出方式

arm汇编程序退出方式1.引言概述部分的内容如下所示:1.1 概述ARM汇编语言是一种低级的程序设计语言,专门用于编写ARM架构下的机器指令。
与高级语言相比,ARM汇编语言更加底层且与硬件关联密切,可以直接操作寄存器、内存和设备等。
在编写ARM汇编程序时,了解如何正确退出程序是非常重要的。
程序的退出方式通常有两种:正常退出和异常退出。
正常退出是指程序在完成所需的任务后,通过一系列指令主动结束程序的执行。
异常退出是指在程序执行过程中发生了错误或异常情况,导致程序意外终止。
无论是正常退出还是异常退出,程序的结束都需要进行一系列的清理工作,如关闭文件、释放内存等,以确保程序能够正确退出并回收资源。
在ARM汇编程序中,正常退出通常通过以下几种方式实现:1. 返回指令:使用指令`BX LR`或`MOV PC, LR`将程序的执行流程返回到调用该函数的位置。
这通常用于函数的正常返回。
2. 终止指令:使用指令`MOV PC, 0`或`MOV PC, R0`将程序的执行流程直接跳转到地址0处,从而结束程序的执行。
这通常用于主程序的结束。
异常退出则需要通过异常处理机制来实现,例如使用相关的中断处理程序或异常处理程序。
当程序发生异常情况时,处理程序会根据异常类型进行相应的处理和清理工作,最终将程序的执行流程返回到预定的位置。
本文将重点讨论ARM汇编程序的退出方式,以及如何正确地进行清理工作,确保程序的正常退出和资源的释放。
在接下来的章节中,我们将详细介绍不同的退出方式,并提供示例代码以说明其用法和注意事项。
1.2文章结构1.2 文章结构本文将围绕ARM汇编程序的退出方式展开讨论。
首先在引言部分进行了概述,介绍了本文的背景和意义。
接着通过文章结构的说明,将向读者展示本文的组织架构和思路。
在正文部分,将重点讨论两个要点,分别是“第一个要点”和“第二个要点”。
通过详细的解释和实例分析,将阐明ARM汇编程序退出的不同方式及其相关的特点和优缺点。
ARM异常后返回的几种情况

ARM异常后返回的几种情况当ARM处理器执行指令时,可能会遇到异常条件。
异常是一种CPU的响应,用于处理系统的特殊情况,例如错误指令,中断和系统调用。
当发生异常时,ARM处理器会暂停正在执行的任务,并执行特定的异常处理程序。
下面是几种ARM异常后返回的情况:1. 异常返回(Exception Return)指令:当ARM处理器遇到一个异常时,它会将程序状态保存在异常模式的专用寄存器中,并执行一个异常处理程序。
处理程序完成后,可以使用异常返回指令(例如bx或pop)来恢复中断指令后的执行。
2.异常向量表:ARM处理器使用异常向量表来存储异常处理程序入口地址。
当异常发生时,ARM会检索对应异常向量表中的地址并跳转到对应的处理程序。
这些异常向量表通常被存储在系统的固定内存位置,以便ARM能够快速找到异常处理程序。
3.异常处理程序:每个异常都有一个对应的异常处理程序。
异常处理程序负责处理异常情况,并采取适当的措施。
例如,当发生访问错误异常时,异常处理程序可能会尝试恢复,并重新执行导致访问错误的指令。
4. 异常级别(Exception Level):ARM处理器中存在不同的异常级别,用于处理不同优先级的异常。
较高的级别可以屏蔽较低级别的异常,以确保在优先级更高的异常发生时能够优先处理。
5.异常处理期间的状态保存:在进入异常处理程序时,ARM处理器会保存当前任务的状态,包括程序计数器值、寄存器值等。
这样,当异常处理程序执行完毕后,可以准确地返回到之前的任务。
6.异常处理程序的恢复操作:在异常处理程序执行完毕后,ARM处理器可能需要执行一些恢复操作,例如重新加载保存在堆栈中的寄存器值,以确保异常处理程序之后的指令能够正确执行。
7.异常处理程序之间的切换:在多个异常同时发生的情况下,ARM处理器可以通过执行特定的异常处理程序来处理不同的异常。
当多个异常同时发生时,ARM处理器可能会选择一个具有最高优先级的异常进行处理。
单片机中断处理过程:中断响应 中断处理 中断返回详解

单片机中断处理过程:中断响应中断处理中断返回详
解
中断处理过程可分为中断响应、中断处理和中断返回三个阶段。
中断响应
中断响应是CPU 对中断源中断请求的响应,包括保护断点和将程序转向中断服务程序的入口地址(通常称矢量地址)。
中断响应过程
中断响应过程包括保护断点和将程序转向中断服务程序的入口地址。
首先,中断系统通过硬件自动生成长调用指令(LACLL),该指令将自动把断点地址压入堆栈保护(不保护累加器A、状态寄存器PSW 和其它寄存器的内容),然后,将对应的中断入口地址装入程序计数器PC(由硬件自动执行),使程序转向该中断入口地址,执行中断服务程序。
MCS-51 系列单片机各中断源的入口地址由硬件事先设定,分配如下:
中断源入口地址
外部中断00003H
定时器T0 中断000BH
外部中断10013H
定时器T1 中断001BH
串行口中断0023H
使用时,通常在这些中断入口地址处存放一条绝对跳转指令,使程序跳转到用户安排的中断服务程序的起始地址上去。
中断返回
中断返回是指中断服务完后,计算机返回原来断开的位置(即断点),继续执。
学习小结--ARM7中断原理

2
3 向量地址寄存器 0-15(VICVectAddr0-15 - 0xFFFFF100-13C,读/写)
一般(以 Slot0 为例):VICVectAddr0 = (uint32)IRQ_TIME0 ;
4 向量地址寄存器(VICVectAddr - 0xFFFFF030,读/写) VICVectAddr = 0x00; // 通知 VIC 中断处理结束
二 ,VIC 寄存器 1,中断选择寄存器(VICIntSelect - 0xFFFFF00C,读/写)
该寄存器将 32 个中断请求分别分配为 FIQ 或 IRQ。
一般选 IRQ 时:VICIntSelect = 0x00;
1
2,向量控制寄存器 0-15(VICVectCnt l0-15 - 0xFFFFF200-23C,读/写)
PINSEL0 = 0x00000000; // 设置管脚连接 GPIO IO1DIR = LED1|LED2; // 设置 I/O 为输出 IO1SET = LED1|LED2; Time1Init(); // 初始化定时器及使能中断 Time0Init(); VICIntSelect = 0x00; // 所有中断通道设置为 IRQ 中断 VICDefVectAddr = (uint32)nIRQ_TIME; VICIntEnable = time0|time1; while(1); // 等待定时器中断或定时器匹配输出 return(0); }
}
} /**************************************************************************** * 名 称:Time0Init() * 功 能:初始化定时器,定时时间为 S,并使能中断。 * 入口参数:无 * 出口参数:无 ****************************************************************************/ void Time1Init(void) {
ARM异常中断以及对ARM异常返回地址的分析

返回地址:SUBS PC,R14,#8 返回地址分析: 当进入异常时,R14_abt = address of the aborted instruction + 8
所以要返回到有问题的指令处重新执行,所以返回的地址为 R14-8 IRQ 中断异常:
产生原因: 当处理器的外部中断请求引脚有效,且 CPSR 寄存器的 I 控制位被清除 时,处理器产生外部中断 IRQ 异常。
是因为当前指令即引起软件异常中断的指令执行后所引起的,说明当前指令已近执行,当从
中断返回时,执行的指令应该是当前指令的下一条指令,即待执行指令的地址应该是 0x3004, 而 R14 中存放的即为 0x3004,所以返回时使用将 R14 的值直接赋给 PC 即可。
指令预期中止异常: 发生原因:若在指令预取阶段遇到无效指令时,系统存储器将该预取的指令标记为无
效指令,当处理器试图去执行这一条被标记为预取无效的指令时,将产生指令预取中止异常, 注意若处理器没有执行无效指令时将不会产生异常中断(在流水线中存在一条分支指令,导 致该非法指令没有执行,将不会产生该异常)。
处理器动作: R14_abt = address of the aborted instruction + 4 SPSR_abt = CPSR ….. …..
2、各异常分析
举个小例子,下面是一段 ARM 汇编代码: (后面的返回地址分析中将会用到此图)
arm处理器异常中断响应过程

arm处理器异常中断响应过程ARM处理器是一种广泛应用于移动设备、嵌入式系统和服务器等领域的处理器架构。
在运行过程中,处理器可能会遇到各种异常情况,如访问非法内存、除零错误等。
当这些异常发生时,ARM处理器需要做出相应的中断响应,以保证系统的稳定性和安全性。
ARM处理器异常中断响应的过程可以分为异常触发、异常处理和恢复执行三个阶段。
首先是异常触发阶段。
当处理器在执行指令时,发生了某种异常情况,例如访问了非法的内存地址,处理器会立即检测到异常,并将当前指令的状态保存起来。
同时,处理器会根据异常类型,确定异常向量的地址,将控制转移到异常向量所指向的地址处。
接下来是异常处理阶段。
当处理器进入异常向量所指向的地址时,会执行相应的异常处理程序。
这个程序通常是由操作系统或应用程序提供的,用于处理不同类型的异常。
在异常处理程序中,可以进行一系列的操作,例如保存现场、记录异常信息、处理异常原因等。
处理程序还可以根据需要选择继续执行或终止当前指令。
最后是恢复执行阶段。
在异常处理程序执行完毕后,处理器会根据异常返回地址,将控制权返回到引发异常的指令处,继续执行后续指令。
在返回之前,处理器可能会进行一些必要的恢复操作,如恢复现场、清除异常状态等。
这样,系统就可以继续正常运行,不受异常的影响。
需要注意的是,ARM处理器还提供了一些特殊的异常处理方式,如中断(Interrupt)和陷阱(Trap)。
中断是外部设备触发的异常,用于异步事件的处理,例如外部设备的输入输出请求。
陷阱是由程序主动触发的异常,用于实现系统调用和调试功能。
这些异常的触发和处理方式与一般异常略有不同,但整体的处理过程仍然符合前述的异常中断响应流程。
在ARM处理器中,异常中断响应是保证系统正常运行和异常处理的关键环节。
通过合理的异常处理程序和恢复机制,可以有效地应对各种异常情况,提高系统的可靠性和稳定性。
同时,开发人员也需要根据具体应用场景和需求,灵活地配置和调整异常处理方式,以满足不同的需求。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在ARM体系中,通常有以下3种方式控制程序的执行流程:1、在正常执行过程中,每执行一条ARM指令,程序计数器PC的值加4个字节;每执行一条Thumb 指令,程序计数器PC加2个字节。
整个过程是顺序执行的;2、跳转B指令执行跳转操作;BL指令在执行跳转的同时,保存子程序返回地址;BX指令,执行跳转的同时,根据目标地址的最低位,可以将程序状态切换到Thumb状态;BLX指令执行上述3个操作;3、当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。
在进入异常中断处理程序时,要保存被中断的程序的执行现场,在从异常中断处理程序退出时,要恢复被中断的程序的执行现场。
当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行。
异常中断种类、异常中断向量地址和异常中断优先级别见下表:ARM运行的几种处理器模式如上表所示。
其中,应用程序通常运行在用户模式下!为了说明异常中断执行过程,先了解各处理器模式下的寄存器组,如下表:重点:ARM处理器对异常中断的响应过程:㈠、保存当前程序状态寄存器CPSR到对应异常中断的处理器模式下的SPSR中;㈡、设置当前程序状态寄存器CPSR的处理器模式位M(4:0)为对应的处理器模式,并禁止IRQ 中断(设置I位=1);当进入的是FIQ模式时,禁止FIQ中断(设置F位=1);㈢、将对应异常中断的处理器模式下的LR设置成返回地址;㈣、将程序计数器PC值,设置成该异常中断向量地址,从而跳转到相应的异常中断处理程序处执行。
上述处理器对异常中断的响应过程可以用伪代码描述如下:R14<exception_mode>=return LinkSPSR<exception_mode>=CPSRCPSR[4:0]=exception mde numberCPSR[5] = 0 //所有异常均在ARM状态下处理(本句出自《基于ARM的嵌入式系统开发与实例》P32)if(<exception_mode>==Reset or FIQ )thenCPSR[6]=1 //禁止FIQ中断CPSR[7] =1 //禁止IRQ中断PC = exception vetor address程序将自动跳转到对应异常中断的处理程序中。
上述过程,完全由处理器自动完成,所以,当发生一种异常中断时,寄存器R14 、CPSR、SPSR 和PC的值将是上述的结果!结果如下图所示:下面是引用别人的文章:ARM处理器中主要有7个异常(2个中断异常):1、复位异常;在以ARM为核的单片机中,常把下列事件作为引起复位的原因。
? 上电复位:在上电后,复位使内部达到预定的状态,特别是程序跳到初始入口;? 复位引脚上的复位脉冲:这是由外部其他控制信号引起的;? 对系统电源检测发现过压或欠压;? 时钟异常复位。
ARM处理器复位后,处理器硬件将进行以下操作:? 强制进入管理模式;0b10011? 强制进入ARM状态;T=0? 跳转到绝对地址PC=0x00000000处执行;? 禁止IRQ中断和FIQ中断。
I=1,F=1;复位后,程序状态寄存器如下:...... I F T M4 M3 M2 M1 M01 1 0 1 0 0 1 1上电复位后,进入管理模式,执行操作系统程序,一般用做对系统初始化,例如开中断等;然后切换到用户模式,开始执行正常的用户程序。
切换到用户模式可使用下列程序:MRS R0,CPSR ;读状态寄存器BIC R0,R0,#03 ;把末两位清0MSR CPRS_c,R0 ;把修改后的值加载给状态寄存器,切换结束...... ;用户程序2、未定义指令异常;由于ARM使用32位代码,包含的信息量很大,可达2的31方(4G)。
ARM指令集不能用尽所有代码。
当ARM处理器遇到无法译码的指令时就会发生未定义指令异常。
进入中断处理程序。
ARM的未定义指令异常有以下两种情况:(1)遇到一条无法执行的指令,此指令没有定义;(2)执行一条对协处理器的操作指令,在正常情况下,协处理器应该应答,但协处理器没有应答。
未定义异常中断时,处理器硬件将进行以下操作:? 把下一条指令的地址拷贝给LR;? 把程序状态寄存器CPSR拷贝给SPSR_und;? 强制进入未定义模式;0b11011? 强制进入到ARM模式;T=0? 跳转到绝对地址PC=0x00000004处执行;? 禁止IRQ中断。
I=0? 状态寄存器中的F位不变。
进入中断后,程序状态寄存器如下:...... I F T M4 M3 M2 M1 M01 x 0 1 1 0 1 1使用下列指令退出异常中断,返回原程序。
MOVS PC,R14.3、软件中断异常;是由指令SWI引起的。
程序在执行这一指令后,进入异常中断。
{下面是《ARM体系结构与编程》书中的一段摘录}********SWI和未定义指令异常中断是由当前执行的指令自身产生的。
当SWI和未定义指令异常中断产生时,程序计数器PC的值还未更新,它指向当前指令后面第2条指令(对于ARM指令来说+8字节;对于Thumb指令来说+4字节的位置)。
当SWI和未定义指令异常中断产生时,处理器将值(PC-4)保存到异常模式下的寄存器LR_mode中。
这时(PC-4)即指向当前指令的下一条指令地址。
因此返回操作可以通过下面的指令来实现:MOV PC,LR该指令将寄存器LR中的值复制到程序计数器PC中实现程序返回,同时将SPSR_mode寄存器内容复制到当前程序状态寄存器CPSR中。
**********{摘录结束}处理器响应中断,硬件执行如下的操作。
? 把下一条指令的地址拷贝给LR;? 把程序状态寄存器CPSR拷贝给SPSR_svc;? 强制进入管理模式;0b10011? 强制进入到ARM状态;T=0? 跳转到绝对地址PC=0x00000008处执行;? 禁止IRQ中断。
I=1;F保持不变;进入中断后的程序状态寄存器如下:...... I F T M4 M3 M2 M1 M01 x 0 1 0 0 1 1软件中断处理程序完成后,使用下列指令返回到原中断处:MOVS PC,R14.4、预取指中止异常;由程序存储器引起的中止异常叫做预取指中止异常;由数据存储器引起的中止异常叫做数据中止异常。
由于ARM的指令是3级流水线结构,读取指令周期是提前进行的,因此把读取指令的过程一般称预取指。
如果在取得指令的同时程序存储器发出中止信号,则ARM处理器把这一条指令标记位无效,然后等待执行。
{下面是《ARM体系结构与编程》书中的一段摘录}************在指令预取时,如果目标地址是非法的,该指令将被标记成有问题的指令。
这时,流水线上该指令之前的指令继续执行。
当执行到该被标记成有问题的指令时,处理器产生指令预取中止异常中断。
当发生指令预取中止异常中断时,程序要返回到该有问题的指令处,重新读取并执行该指令。
因此指令预取中止异常中断程序应该返回到产生该指令预取中止异常中断的指令处,而不是像前面两种情况下返回到发生中断的指令的下一条指令。
指令预取中止异常中断是由当前执行的指令自身产生的,当指令预取中止异常中断产生时,程序计数器PC的值还未更新,它指向当前指令后面第2条指令(对于ARM指令来说,它指向当前指令地址加8个字节的w位置;对于Thumb指令来说,它指向当前指令地址加4个字节的位置)。
当指令预取中止异常中断产生时,处理器将(PC-4)值保存到异常模式下的寄存器LR_mode中。
这时(PC-4)即指向当前指令的下一条指令。
因此返回操作可以通过下面的指令来实现:SUBS PC,LR,#4该指令将寄存器LR中的值减4后,复制到程序计数器PC中,实现程序返回,同时将SPSR_mode 寄存器内容复制到当前程序状态寄存器CPSR中。
*************{摘录结束}有两种可能如下:? 当执行这条指令前程序发生跳转,则这条无效指令不引起异常中断;? 当执行到这条指令时,处理器会发生预取指中止异常,引起中断。
当进入预取指异常中断时,处理器硬件响应中断,执行以下的操作:? 把中断时PC的地址拷贝给LR;? 把程序状态寄存器CPSR拷贝给SPSR_abt;? 强制进入中止异常模式;0b10111? 强制进入到ARM状态;T=0;? 跳转到绝对地址PC=0x0000000C处执行;? 禁止IRQ中断。
I=1;进入中断后,程序状态寄存器如下:...... I F T M4 M3 M2 M1 M01 x 0 1 0 1 1 1预取指中止异常中断返回时,应该执行下列指令:SUBS PC,R14,#4.5、数据中止异常;ARM处理器访问数据存储器时,在读取数据的同时数据存储器发出了中止信号,引起数据中止异常。
当进入预取数据异常中断时,处理器硬件响应中断,执行以下的操作:? 把中断时的PC的地址拷贝给LR;? 把程序状态寄存器CPSR拷贝给SPSR_abt;? 强制进入中止异常模式;? 强制进入到ARM状态;? 跳转到绝对地址PC=0x00000010处执行;? 禁止IRQ中断。
进入中断后,程序状态寄存器如下:...... I F T M4 M3 M2 M1 M01 x 0 1 0 1 1 1数据中止异常中断服务程序返回时,使用下列指令:SUBS PC,R14,#8上述指令是返回到中断时所执行的指令,目的是再一次从数据存储器中读取数据。
如果不再一次读取数据,则执行下一条指令,此时使用下列指令返回:SUBS PC,R14,#46、中断请求(IRQ)异常;例如:定时器中断、串行口通讯中断、外部信号中断和A/D 处理中断等。
IRQ中断是可屏蔽的。
{下面是《ARM体系结构与编程》书中的一段摘录}P269************通常当处理器执行完当前指令后,查询IRQ中断引脚及FIQ中断引脚,并且查看系统是否允许IRQ及FIQ中断。
如果有中断引脚有效,并且系统允许该中断产生,处理器将产生IRQ 或FIQ异常中断。
这时,程序计数器PC的值已经更新,它指向当前指令后面的第3条指令(对于ARM 指令来说,它指向当前指令地址+12字节位置;对于Thumb指令来说,它指向当前指令地址+6字节的位置)。
处理器这时将值(PC-4)保存到异常模式下的寄存器LR_mode中。
这时(PC-4)即指向当前指令后面的第2条指令。
因此返回操作可以通过下面的指令实现:SUBS PC, LR, #4该指令将寄存器LR中的值减4后,复制到程序计数器PC中,实现程序返回,同时将SPSR_mode 寄存器内容复制到当前程序状态寄存器CPSR中。
**********{摘录结束}在状态寄存器中的I位就是IRQ的屏蔽位。
当I=1时。