ARM的PC,LR在中断的使用
来源:互联网 发布:武汉市广电网络分公司 编辑:程序博客网 时间:2024/06/13 21:14
ARM是流水线结构的,ARM7是三级流水线,ARM9是五级流水线。
拿简单的ARM7来说,所谓的三级流水线,就是说取指,译码,执行三步同时进行,执行完一条指令时,同时取出一条指令。这种结构下,PC寄存器保存的不再是当前执行指令的地址,而是取指指令的地址。
即 PC - 8 : 当前指令
PC - 4 : 当前指令的下一条,正在译码的指令
PC : 当前指令的下两条,正在取指的指令
这些内容,在系统发生中断时,进行汇编处理要用到。
中断:
1.SWI和和未定义指令异常中断的返回:
指令地址
A PC-8 当前指令为SWI或未定义指令 此时发生中断.PC的值还没有更新.(不需要执行完此指 令,就跳到中断了;PC的值为A+8的地址)
A+4 PC-4 中断时处理器将PC-4保存到LR (LR = A +4的地址)
A+8 PC
返回时,从发生中断的指令A(PC-8)的下一条指令A+4(PC-4)处开始执行,所以直接 把LR的值赋给PC就行了,具体指令为MOV PC,LR (PC=A+4=LR)
对于MOV PC,LR 中的PC,指的是当前需要执行的地址,而不是流水线结构中的PC的值(PC = A+8的地址)
如果执行MV PC,PC,则实现的功能是跳从当前指令开始的第三条指令处执行。
2,IRQ和FIQ异常中断处理的返回:
指令地址 对应于PC
A PC-8 执行此指令完成后(!)查询IRQ及FIQ,如果有中断请求
则产生中断. .(需要执行完此指 令,再跳到中断)
A+4 PC-4
A+8 PC
( 此时PC的值已经更新,指向A+12.将当前PC-4(即A+8)
保存到LR.返回时,要接着执行A+4(LR-4)处的指令,所以返回指令为 SUBS PC, LR,#4(PC=A+4=LR-4)
3,指令预取中止异常中断处理的返回:
指令地址
A PC-8 执行本指令时发生中断,
A+4 PC-4 处理器将A+4(PC-4)保存到LR.
A+8 PC
返回时,发生指令预取中止的指令A(PC-8)处重新执行(A处的指令要重新执行),所以返回指令为
SUBS PC, LR,#4(PC=A=LR-4)
4,数据访问中止异常中断处理的返回:
指令地址
A PC-8 本指令访问有问题的数据,产生中断时,PC的值已经更新
A+4 PC-4 中断发生时PC=A+12,处理器将A+8(PC-4)保存到LR.
A+8 PC
返回时,要返回到A处继续执行,所以指令为SUBS PC, LR,#8.(PC=A=LR-8) (A处的指令要重新执行),
- ARM的PC,LR在中断的使用
- arm 的pc和lr寄存器
- ARM的PC和LR寄存器
- ARM处理器三级流水线与PC,LR的关系
- ARM处理器三级流水线与PC,LR的关系
- arm学习笔记020之mov pc,lr的解释
- ARM处理器三级流水线与PC,LR的关系
- ARM处理器三级流水线与PC,LR的关系
- 深入理解ARM的SP LR PC这三个寄存器
- arm异常中lr保存pc的情况
- ARM中断返回SUB pc lr-irq #4
- ARM保存中断时,为什么使用“sub lr, lr, #4”
- ARM中SP,LR,PC使用(转载)
- MOV PC,LR --ARM汇编
- MOV PC,LR --ARM汇编
- MOV PC,LR --ARM汇编
- ARM汇编 MOV PC,LR
- ARM中pc、lr寄存器
- MQ与kafka之间的对比
- android 6.0 权限崩溃分析:android.system.ErrnoException: statvfs failed: ENOENT (No such file or directory)
- VMware报错“原因: 未能锁定文件”,打开失败
- jquery.PrintArea.js 实现打印局部页面
- 三次Hermite插值
- ARM的PC,LR在中断的使用
- Java集合类详解
- 获取当前年月日 时分秒
- Python基础数据结构之数据转换(Dict,Set,Tuple,List)
- 解读彩色工业相机中的拜耳(Bayer)变换
- Java的getCanonicalName和getName
- ROS Gazebo(三):启动gazebo/URDF
- 15. 3Sum
- sqoop常用指令