大家好,欢迎来到IT知识分享网。
文章目录
前言
在前面已经介绍了通用寄存器r0-r14,其中包括r13(SP)堆栈指针寄存器(比如c语言的执行,子函数的调用都会用到堆栈指针),r14(LR)程序链接寄存器保存子程序的返回地址以及保存异常发生时PC-4(当前执行的指令地址,执行完异常处理后继续回来处理)的值;实现异常等操作后程序的返回;PC(R15)是程序计数器,用来存放即将要执行程序的地址;功能寄存器有CPSR和SPSR,CPSR是当前程序状态寄存器,SPSR是保存程序状态寄存器,所以spsr能够保存cpsr中的值;有了这些概念以后,接下来看一下异常发生是CPU具体的操作步骤和操作流程究竟是怎样的?
一、当前程序状态寄存器(CPSR)
31位 N位 符号标志位 1运算结果负数 0运算结果正数 30位 Z位 结果0标志位 1运算结果为0 0运算结果非0 29位 C位 进位标志 加法 1存在进位 0不存在进位 减法 1不存在借位 0存在借位 28位 V位 溢出表示 1存在溢出 0不存在溢出 7位 I位 irq控制 1禁止irq 0使能irq 6位 F位 fiq控制 1禁止irq 0使能irq 5位 T位 1 thumb状态 0arm状态 4-0位 模式控制
二、异常的分类
2.1 7个异常源
异常主要有以下几个:
(1)复位异常 0x0 reset (2)未定义异常 0x4 undef (3)软件中断 0x8 swi (4)预取中止 0xc pre_abort (5)数据中止 0x10 data_abort (6)irq 0x18 中断请求 (7)fiq 0x1c 快速中断请求
2.2 异常的优先级
这里按照优先级介绍各个异常:
高优先级:
(1)复位指的时比如按下复位按键,那么CPU会从头开始执行程序;
(2)数据中止:由存储器发生的异常;
(3)快中断FIQ
(4)中断IRQ
(5) 预取中止:取指令时发现未定义或者不可识别的指令;
低优先级:
(6)未定义:未定义变量;
(7)软件中断:比如SWI软件中断;
2.3 为什么FIQ比IRQ快?
2.4 异常与工作模式的区别
三、异常的处理流程
3.1 异常处理机制
3.2 进入异常处理流程:
3.3 退出异常的处理流程:
总结
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/124301.html