ARM 异常处理过程,指令[ swi ]
1. 发生异常:
程序正常执行,突然被一个不正常的事件打断正在执行的程序,执行相应的异常事件对应的程序
2. 5 种异常模式对应着 7 种异常源:
异常工作模式 异常源
FIR FIR
IRQ IRQ
Abort data_abort / pref_abort
Undef undefine
SVC reset复位 / swi软中断指令
3. 同种异常源不可以被打断,reset 优先级最高,打断任何程序执行
4. 异常处理过程:
保护现场:由 CPU 自动完成,通过 4 步完成 ; 通用寄存器CPSR 中的状态,改变CPU状态
(1)CPU 保存现场当前状态 CPSR 到异常模式下的 SPSR 中 ,这步的目的是保护当前状态的CPSR(每种异常模式都对应一个自己的SPSR,以便将来在异常返回时,从SPSR恢复至CPSR)
(2)CPU 修改 CPSR 中 模式位,禁止相应中断源,切换 CPU 状态为ARM 状态(Thumb态和ARM态由CPSR的T位来决定)
(3)保存的返回地址到对应异常模式下的LR 寄存器中。(返回地址:异常发生前正在执行指令的下一条地址)
(4)pc 指向异常向量表中对应的异常
恢复现场: 需要自己手动完成(手动修改寄存器 CPSR 中对应的状态位)
(1) 把异常模式下的 SPSR_MODE 恢复到CPSR中
(2)把 异常模式下的 LR_MODE 恢复到 PC中
5. 异常向量表
1)异常向量表就是内存的一块空间,这块内存的空间的大小为32byte,平均分成了8份,每份4个byte,然后在里边存放7中异常源,多余的一份保留不用
2) 在异常量表中存放的一条跳转指令
3) 7种异常源在异常向量表中的位置固定,不可以随意更改。
示例: 手动修改到user模式,然后使用 swi 软中断切换到 SVC 异常模式
.text
.global _start
_start:
b reset_handler
b undef_handler
b swi_handler
b pref_abort_handler
b data_abort_handler
b .
b irq_handler
b fiq_handler reset_handler: @ 复位开始为 SVC 模式
ldr sp, =0x40000200 @ 初始化栈
mrs r0, cpsr @ 读取程序状态寄存器
mov r1, #0x1F
mvn r1, r1
and r0, r0, r1
mov r1, #0x10
orr r0, r0, r1 @ 修改 读取 的CPSR 中的数据, 然后再重新写入CPSR 寄存器
msr cpsr, r0 @ 保存状态寄存器 此时改为 user 模式
ldr sp, =0x40000100 @ 初始化此状态下的 sp 指针
swi # @ 使用指令 swi 产生异常,异常号为
mov r0, #
mov r1, #
swi # @ 使用指令 swi 产生异常,异常号为
mov r0, #
mov r1, #
loop:
b loop undef_handler:
swi_handler: @ 切换模式后, 先进行现场保护, cpsr和lr值保存,修改cpsr切换模式
.if
stmfd sp!, {r0-r10, lr} @ 入栈 拷贝过来的lr 值, lr内容没有改变
mov r0, #
mov r1, #
ldmfd sp!, {r0-r10, r12} @ 出栈
mrs r11, spsr
msr cpsr, r11
mov pc, r12 @ 恢复现场
.else
stmfd sp!, {r0-r12, lr}
mov r0, #
mov r1, # mov r0, lr
sub r0, r0, # @ 获取 lr 上一条指令(也就是swi)的地址
ldr r1, [r0] @ 提取 swi 指令对应的机器码
ldr r2, =0xFFFFFF @ 提取后24位 对应的 num号
and r0, r1, r2 @根据r0判断具体是哪个地方的swi ldmfd sp!, {r0-r12, pc}^ @ 恢复现场, ^ 表示同时操作两个步骤
.endif pref_abort_handler:
data_abort_handler:
irq_handler:
fiq_handler: .end
ARM 异常处理过程,指令[ swi ]的更多相关文章
- 四、ARM 异常处理
4.1 模式与异常 当正常程序流程被暂时停止发生异常,例如响应一个来自外设的中断.在处理异常前,必须保护当前的处理器状态,以便在完成处理程序后能恢复到原来的程序 . 异常的类型: Reset unde ...
- Linux kernel的中断子系统之(六):ARM中断处理过程
返回目录:<ARM-Linux中断系统>. 总结:二中断处理经过两种模式:IRQ模式和SVC模式,这两种模式都有自己的stack,同时涉及到异常向量表中的中断向量. 三ARM处理器在感知到 ...
- or1200处理器的异常处理类指令介绍
下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 我们在计算机体系结构的学习中知道:中断实质上包含由外部事件引起的硬中断(又称外中断)和由内部预先安排的特定指令或内部异常引起的软中断 ...
- ARM的栈指令
ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长 ...
- ARM的栈指令(转)
ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长 ...
- ARM指令集—SWP指令
ARM指令集-SWP指令 SWP和SWPB是ARM指令集中对存储单元的原子操作.即对存储单元的一次读和一次不可被切割. SWP和SWPB分别完毕存储器和寄存器之间 一个字(32bit)和一个字节(8b ...
- (二十三)ARM平台NEON指令的编译和优化
ARM平台NEON指令的编译和优化 本文介绍了ARM平台基于ARM v7-A架构的ARM Cortex-A系列处理器(Cortex-A5, Cortex-A7,Cortex-A8, Cortex-A9 ...
- Linux中断 - ARM中断处理过程
一.前言 本文主要以ARM体系结构下的中断处理为例,讲述整个中断处理过程中的硬件行为和软件动作.具体整个处理过程分成三个步骤来描述: 1.第二章描述了中断处理的准备过程 2.第三章描述了当发生中的时候 ...
- ARM指令集——数据处理指令
ARM汇编指令集 ARM汇编文件的组成 指令:编译完成后作为一条指令(机器码)存储在内存单元中,CPU执行时能够完成处理的操作 伪指令:在编译时替换成能被识别的ARM指令 伪操作:知道编译器进行编译, ...
随机推荐
- 35-python基础-python3-字符串修改大小写的方法-title()方法-lower()方法-upper()方法
1-title()-注:不是原地修改,有返回值 以首字母大写的方式显示每个单词,即将每个单词的首字母都改为大写. 2-lower()和upper()-注:不是原地修改,有返回值 将字符串改为全部小写或 ...
- BUUCTF MISC部分题目wp
MISC这里是平台上比较简单的misc,都放在一起,难一些的会单独写1,二维码图片里藏了一个压缩包,用binwalk -e分离,提示密码为4个数字,fcrackzip -b -c1 -l 4 -u 得 ...
- CreateFile的内部实现
今天想看看CreateFile的内部实现,不过网上没有想要的资料,都只是对参数分析了一下.找了找WRK源码,找到CreateFile的源码自己来分析一下. HANDLE WINAPI CreateFi ...
- std::wcout输出1遍不输出
std::wcout输出1遍不输出 程序明明在执行地方执行 wcout无法输出到控制台 cout就可以 添加中文支持即可
- node.js提供的服务器live-server的使用
安装node.js的版本控制工具nvm,在终端中执行 curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/instal ...
- leetcode-12双周赛-1244-力扣排行榜
题目描述: class Leaderboard: def __init__(self): self.map = collections.Counter() def addScore(self, pla ...
- js 暂停几秒后刷新或提交
js源码如下: setTimeout(function () { //内容3秒后执行 }, 3000);
- js-统计中文,英文,字符的个数
function getByteLen(val) { ; ; i < val.length; i++) { var a = val.charAt(i); if (a.match(/[^\x00- ...
- CSS3 图形变换
1.zoom 和 transform:scale 的区别 : http://www.zhangxinxu.com/wordpress/2015/11/zoom-transform-sc ...
- js设计模式——6.模板方法模式与职责链模式
js设计模式——6.模板方法模式与职责链模式 职责链模式