在ARM处理器中一条指令的执行分为取指、译码、执行三个阶段,由于指令流水线的存在造成当前执行的指令的地址是PC-8(ARM指令集),那么当前执行指令的下一条指令的地址应该是PC-4,所以在异常产生时处理器会将PC-4的值保存到对应模式的LR寄存器中,但是该返回地址是否能够被使用还要看具体产生的异常的种类而定。

FIQ与RIQ异常:

FIQ与RIQ异常返回处理是一样的,当处理器执行完当前指令后才去查询中断且查看是否允许中断,如果处理器产生了中断,这时PC的值已经更新,即PC指向了当前指令后第三条指令的位置(被中断指令地址加12),产生FIQ与RIQ异常后处理器将PC-4的值保存到了对应模式下的LR,而它指向的是当前被中断指令的后面的第二条指令,因此在返回时我们需要人为的将LR中保存的值自减4以得到正确的返回地址。

预取指中止异常:

在指令预取时如果地址是非法的,该指令就被标记为有问题的指令,流水线上该指令之前的指令继续执行,当执行被标记为有问题的指令的时候,处理器就会产生异常。产生该异常最终返回时需要返回到被标记的指令处重新读取并执行该指令,因此异常返回时需要返回到该指令处而不是该指令的下一条指令。所以在中断返回时我们需要人为的对LR中保存的值自减4。

指令未定义异常:

指令未定义异常由当前正在执行的指令产生,即产生异常时PC的值还没有更新,PC的值指向当前指令后面第二条指令,产生异常后LR中保存的指令是当前指令的下一条指令的地址,所以异常返回时直接把LR的值给PC即可不许人为的去修正返回地址。

软中断异常:

软中断异常与指令未定义异常一样,也是当前指令在执行过程中就产生了异常,所以LR中保存的返回地址是当前软中断指令的下一条指令的地址,不需要人为的去修正,返回时直接将LR的值赋给PC即可。

数据中止异常:

产生该异常的时候程序要返回到有问题的指令处重新访问该数据,因此应该返回到产生异常的指令处而不是产生异常指令的下一条指令处。当异常产生时PC的值已经更新,所以PC指向的是异常产生指令的后面的第三条指令,而LR中保存的是PC-4的值即异常产生指令的后面的第二条指令的地址。所以在返回时我们需人为的对LR中的值进行自减8的处理。以保证异常正确的返回。

上述每一种异常发生时,返回地址都要根据具体的异常类型进行重新修正

ARM处理器异常返回地址相关推荐

  1. ARM处理器中断处理机制

    一.异常   概念:处理器在正常执行程序的过程中可能会遇到一些不正常的事件发生,这时处理器就要将当前的程序暂停下来去处理这个异常的事件,当异常事件处理完成之后再返回被异常打断的点继续执行程序. 不同的 ...

  2. arm处理器下的对齐异常1-简介

    一.问题引入 什么是对齐异常呢,为什么ARM处理器下会有对齐异常?这个要先从arm 32位处理器下的两条指令LDR与STR说起.作为A32指令集的两条最基本指令,STR/LDR 可以用于寄存器与内存之 ...

  3. ARM处理器的异常模式

    1.ARM处理器有各种异常模式,用于应对ARM出现的不同状态.出现异常时,会随即进入相关的异常向量,同时CPSR的寄存器也会设置成具体的模式. 例:当出现中断时,不管是哪种中断,都会跳转到0x18这个 ...

  4. ARM处理器的运行模式和ARM寄存器

    一.ARM处理器共有7种运行模式  处理器模式 描述 用户模式(User,usr) 正常程序执行的模式 快速中断模式(FIQ,fiq) 用于高速数据传输和通道处理 外部中断模式(IRQ,irq) 用于 ...

  5. ARM处理器异常处理

    1.1   ARM处理器异常处理 所谓异常就是正常的用户程序被暂时中止,处理器就进入异常模式,例如响应一个来自外设的中断,或者当前程序非法访问内存地址都会进入相应异常模式. 1.1.1   异常分类 ...

  6. ARM嵌入式系统开发:软件设计与优化--第二章ARM处理器基础

    注:本文资料全部来源于网络或书籍,同时加上个人理解.若有侵权,告知即删.若有错误,留言商讨. 1.寄存器: 总共有37个寄存器,最多可以有17个活动寄存器(16个数据寄存器,2个状态寄存器:CPSR和 ...

  7. swi 指令能用在C语言吗,arm处理器异常处理-swi - zgolee的专栏 - CSDN博客

    arm处理器异常处理-swi 收藏 ARM处理器共有7中运行模式: 用户模式(usr)                     --  正常程序执行模式 |--             |--     ...

  8. 计算机原理与应用 第二章——ARM处理器

    第二章--ARM微处理器 文章目录 第二章--ARM微处理器 一.ARM微处理器特点及功能结构 1.ARM微处理器主要特点 2.指令集方面的主要特点 3.Cortex系列处理器特点 4.ARM处理器功 ...

  9. 【中断】发生硬件中断后,ARM处理器做了那些事情?

    Linux中断知识汇总: [深入理解Linux内核][中断]内容汇总帖 发生硬件中断后,ARM处理器做了那些事情? CPU自动保存处理器状态,即将中断发生时的CPSR寄存器内容保存到SPSR_irq寄 ...

  10. Linux内核ARM架构异常中断向量表

    Linux内核ARM架构异常中断向量表 说明 ARM中异常中断的种类 ARM异常中断向量表 内核异常向量表 异常向量表跳转 vector_srub宏 内核启动建立异常向量表   当异常中断发生时,系统 ...

最新文章

  1. centos卸载harbor_【Harbor】Harbor镜像仓库的安装与历史版本镜像的清理
  2. DOM笔记(五):JavaScript的常见事件和Ajax小结
  3. SQL Story摘录(七)————触摸NULL值
  4. 嵌入式Linux学习2——Linux常用指令2
  5. JPEG压缩matlab实现
  6. python访问服务器注册表,如何在Python中使用写入权限打开Windows注册表
  7. error C1189: #error : WINDOWS.H already included. MFC apps must not #include windows.h
  8. Java设计模式之享元flyweight模式代码示例
  9. 【大话数据结构算法】查找算法
  10. Unity翻译工具(使用百度翻译)
  11. 排序(三)之快速排序 填坑法
  12. 苏格拉底谈爱情、婚姻、外遇与生活
  13. 六、Sails中执行存储过程模拟Waterline的Create插入数据
  14. kde 崩溃,如何重启 kde plasma 5 桌面
  15. NLP基础知识点:ROUGE
  16. 基于Sequoia DB巨杉数据库的投资组合评比器(设计思路)
  17. NVS4200M显卡“超频”
  18. Lua利用自定义函数打印_G内容
  19. $.ajax 的使用方法及参数说明
  20. Activtiy完全解析(一、Activity的创建过程)

热门文章

  1. SDN:初学SDN的感受和规划
  2. 动态规划,dp 动态规划初步——普及/提高-
  3. C语言中怎么用iomainp文件,C語言I/O文件操作總結
  4. 杰理之广播音箱音量同步以及自定义消息【篇】
  5. 分众无线CEO徐茂栋手机营销精准到人
  6. win11鼠标指针怎么设置
  7. NOIP2017奶酪题解
  8. 记录|MacbookPro Shell|报错 cd: string not in pwd的解决办法
  9. 测试圈相亲平台开发流程(9):择偶结果弹层-前端开发vue-cli
  10. 使用STM32 再实现蓝牙/点动控制小车