【ARM】寄存器与异常——第二篇
目录
1、ARM寄存器
1.1、CPU内部的存储单元存在单位:
1.2、通用寄存器(R0-R12)
1.2.1、特殊功能寄存器
1.3、状态寄存器
1.4、条形码标志
1.5、协处理器
1.6、Jazelle状态
1.7、指令流水线
2、异常
2.1、异常源
2.2、异常产生时发生的硬件操作
2.2.1、保存执行状态
2.2.2、模式切换
2.2.3、保存返回地址
2.2.4、跳入异常向量表
2.3、异常向量表
2.4、异常处理
1、ARM寄存器
寄存器:是一种特殊的存储器,在CPU内部,可以用来存储数据,但是存储的内容有一定作用。
对于CortexA有40个寄存器,每个寄存器有32bit,寄存器没有地址,用编号来表示。
1.1、CPU内部的存储单元存在单位:
word:字-----------32bit
halfword:半字---16bit
bitByte:字节-----8bit
1.2、通用寄存器(R0-R12)
有小三角的是私有性寄存器,未加小三角的是通用的寄存器
- 未分组寄存器:R0-R12,在所有模式下,未分组寄存器都是指向同一个物理寄存器,如果存在模式转换时,不同的模式都使用相同的寄存器,所以可能造成寄存器的数据破坏,应该工作模式切换时要保存。
- 分组寄存器:R13(SP)、R14(LR) FIQ是 R8-R12,每次访问寄存器都与当前的工作模式相关,不同的模式都有不同的寄存器
- 程序计数器(指令寄存器/程序状态寄存器):R15(PC)
1.2.1、特殊功能寄存器
- R13(堆栈指针寄存器SP),存储栈的栈顶位置地址,与内存相关。
- R14(链接寄存器LR),当程序跳转、函数调用、产生异常。
- R15(程序寄存器PC),当前执行的下一条指令地址,会自动由硬件修改,也可以由我们操作改变。
ARM指令:一条ARM指令有4个字节,所以指令偏移大小为4个字节,指令地址是4的整数倍,所以程序计数器最低2位无效(低2位地址为0-3)。
Thumb指令:大小为2个字节,所以程序计数器最低位无效。
1.3、状态寄存器
程序状态寄存器CPSR、SPSR
- CPSR(程序状态寄存器):存储当前CPU执行程序时的工作状态,CPU在工作时只会有一个工作状态,所以所有的工作模式都是同一个CPSR,所有工作模式都可以访问到CPSR。
- SPSR(程序状态寄存器):备份当前状态的寄存器,保存当前的CPSR值,然后改变CPSR,异常结束时,回到之前的工作模式,就把SPSR的值恢复到CPSR。
1.4、条形码标志
31-28Bit条件码标志 N Z C V都是条件码标志,它们的内容可以被算数运算或逻辑运算的结果修改。
- N : 当两个有符号数〈用补码表示)进行运算时,用N=1表示运算结果为负数,N=0表示运算结果为整数或零
- Z : Z=1表示运算结果为0,Z=0表示运算结果为非O
- C : 运算加法产生进位,减法产生借位,运算加法时,如果产生了进位时C=1,否则C=0,减法运算时,如果产生了借位时C=O,否则C=1。进行包含移位操作的非加法/减法的指令时,C为移出值的最后一位,其他耳加法/减法指令时,C通常不变。
- V :进行有符号位(补码表示)运算时,符号位溢出,V=1。
- 27Bit:Q,ARMV5架构以上的E系列使用,表示增强的DSP运算是否发生了溢出,其他处理器,Q没有意义。
- 24Bit:J,T=0,J=1,处理器是处于JaZelle状态
- 9Bit:E,大小端的控制
- 8Bit:A=1,禁止不精确的数据异常
- 7Bit:I=1,禁止IRQ中断
- 6Bit:F=1,禁止FIQ中断
- 5Bit:T=0,J=0,处理器处于ARM状态(32位指令),解析ARM指令。
T=1,J=0,处理器处于Thumb状态(16位指令)。
T=1,J=1,处理器处于ThumbEE状态
4-0Bit:工作模式
用户模式(user):0B10000----R0-R14、PC、CPSR
快速中断模式FIQ : 0b10001-----RO-R7,R8_FIQ-R14_FIQ, PC,CPSR,SPSR
一般中断模式IRQ:0b10010
管理模式supervisor:0b10011
中止模式abort:0b10111
未定义模式undefined:ob11011系统模式
system:0b11111
Cortex-A特有安全模式monitor:0b10110
1.5、协处理器
ARM体系架构允许通过添加协处理器来扩展指令集,每个协处理器执行指令时,会忽略处理器和其他协处理器的指令当协处理器也不能识别指令时,也会产生未定义异常。
ARM协处理器指令分为三类:
用于ARM处理器初始化ARM协处理器的数据操作
用于ARM处理器的寄存器和ARM协处理器的寄存器之间的数据传输操作
用于ARM协处理器的寄存器和内存之间数据传输操作
1.6、Jazelle状态
在ARM处理器种有Jazelle技术,实现在ARM处理器种能够直接在硬件上提供了对java字节码的支持,提高系统效率。
java字节码就是]B-bits独立架构的指令集
1.7、指令流水线
指令流水线:让CPU内部的多个部件并行工作,以缩短程序的执行时间,提高了处理器的效率,所以处理器架构设计时,其作为最重要的技术进行使用。
三级流水线:
(1)取址(PC取址)
(2)译码
(3)执行
指令的取址、译码、执行的这三个执行过程,将其变成流水线形式执行,就是三级流水线指令。
ARM架构升级,流水线也在增加,但是ARM公司没有提供对应的技术,但是不管是几级流水线都可以按照三级流水线的操作方式来思考。
2、异常
在CPU执行程序(指令)时,有可能会出现意外情况,需要去解决对应的意外情况,就叫做异常
2.1、异常源
在ARM体系结构中设计了7种异常源,ARM架构就需要对这些异常源进行处理,只要执行程序指令时产生对应的异常就会执行对应的异常处理。
只要发生对应的异常时,处理器就会把PC寄存器设置为特定的存储器地址。这个地址被放在称为向量表的范围内,向量表内就是一些跳转操作。即CPU设计了一个向量表来表示每一种异常的处理方式,只要产生异常,PC寄存器就会被设置为向量表种的对应异常的地址,执行异常向量表中的对应指令(跳转执行,执行对应的处理办法)。
ARM异常源
异常源 | 对应异常 |
---|---|
Reset | 上电执行 |
undef | 当流水线中某个非法指令被执行(undefined) |
swi | 当程序执行软中断指令时(supervisor svc) |
Prefetch | 当指令从内存进行存取指令失败时(abort) |
Data | 当指令从内存存取数据失败时(abort) |
IRQ | 一般中断 |
FIQ | 快速中断 |
2.2、异常产生时发生的硬件操作
2.2.1、保存执行状态
把CPSR寄存器的内容复制到对应产生异常的模式下的SPSR。
2.2.2、模式切换
由硬件自动把cpsr中的模式[4 :0]设置为与异常相对应的值
处理器设置为ARM状态,执行ARM指令
禁止中断,如进入FIQ模式自动把IRQ中断禁止
2.2.3、保存返回地址
把当前的下一条指令的地址保存到 LR_mode寄存器(异常模式下)
2.2.4、跳入异常向量表
强制设置PC寄存器为对应异常向量地址
2.3、异常向量表
异常面量表是一段特定的内存空间,每一种ARM异常都在异常向量中设定出来,对应一个字长空间4Byte(32bit),就是一条ARM指令大小,产生异常时,CPU强制把PC的值设置为对应异常的地址。
当产生异常后,硬件能够完成的操作就只是跳转到异常向量表(d赋值为异常向量地址),剩下的异常处理都是由程序员完成。通常在向量中写一条跳转指令,表示异常应该怎么做,跳转到对应的地址(异常处理地址)执行。
实现异常向量表,完成异常设定。
2.4、异常处理
异常处理是由自己实现的
(1)保存现场(进入异常之前寄存器的值)
将寄存器的值保存到对应异常模式下的栈(内存)(入栈),SP寄存器存栈地址。
(2)执行对应的异常操作
(3)恢复之前现场
当异常处理完,要返回异常之前的状态,继续执行
恢复之前的寄存器数据(从sp对应的栈出栈存储到对应寄存器)
恢复程序运行是的状态cpsr
通过异常逛入时保存的返回地址(Ir寄存器),可以返回到被打断的程序继续执行
-------------------------------------------------到这里已经结束了哦-----------------------------------------------------
【ARM】寄存器与异常——第二篇相关推荐
- ARM体系结构与编程(篇二):ARM体系架构与寄存器介绍
文章目录 前言 一.ARM内核与架构 1.1 ARM芯片的组成 1.2 ARM指令集与架构 二.ARM处理器模式与寄存器 2.1 ARM处理器模式 2.2 ARM寄存器 前言 该文章是通过学习< ...
- 【嵌入式开发】ARM 芯片简介 (ARM芯片类型 | ARM处理器工作模式 | ARM 寄存器 | ARM 寻址)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42375701 相关资源下载 : -- 三星 ARM Archit ...
- 第二篇|腾讯开源项目盘点:ncnn、xLua、libco等
开源展示了人类共同协作,成果分享的魅力,每一次技术发展都是站在巨人的肩膀上,技术诸多创新和发展往往就是基于开源发展起来的,没有任何一家网络公司可以不使用开源技术,仅靠自身技术而发展起来. 腾讯开源了个 ...
- ARM 寄存器 详解
From( ARM 寄存器详解 ):https://blog.csdn.net/sandeldeng/article/details/52954781 ARM 汇编基础教程:2.数据类型和寄存器:ht ...
- imx6ull移植Linux系统第二篇——Linux内核的移植
imx6ull移植Linux系统第二篇--Linux内核的移植 花了大概两周的时间,把Linux的移植认真学了一遍,期间踩了不少坑,花费了不少时间去解决各种奇奇怪怪的问题,最终完成了uboot.系统镜 ...
- swi 指令能用在C语言吗,ARM的SWI异常中断处理程序设计
原标题:ARM的SWI异常中断处理程序设计 本节主要介绍编写 处理程序时需要注意的几个问题,包括判断SWI中断号,使用汇编语言编写SWI异常处理函数,使用C语言编写SWI异常处理函数,在特权模式下使用 ...
- ARM寄存器的7种工作模式和几种寻址方式
ARM寄存器的7种工作模式 CPSR[5:0] 10000 user 10001 FIQ 10010 IRQ 10011 SVC 10111 中止 11011 未定义 11111 系统 用这两个指令读 ...
- rk3568硬件开发笔记(第二篇 ) 外围模块设计
rk3568硬件开发笔记(第二篇 ) 外围模块设计 前言: rk3568处理器属于中高端通用型SOC,RK3568兼具CPU.GPU.NPU.VPU于一身,是一款高性能低功耗四核应用的处理器. rk3 ...
- ARM 寄存器 和 工作模式了解
一. ARM 工作模式 1. ARM7,ARM9,ARM11,处理器有 7 种工作模式:Cortex-A 多了一个监视模式(Monitor) 2. 用户模式:非特权模式,大部分任务执行在这种模式 ...
最新文章
- Python 解决一行代码分成多行及多行代码放在一行
- 2.4亿!知乎到底牛X在哪里!
- Most Powerful
- 使用阿基米德螺线进行数据可视化
- Solaris11创建NFS服务
- Date类型之组件方法
- Windows 新建文本文档快捷键设置
- php抓包腾讯大王卡token,【大王卡专用抓包教程,内附视频链接】动态抓包
- 吹塑模具和注塑模具的区别
- tplink怎么进去_怎么进入TP-Link路由器设置界面? | 192路由网
- ArcGIS 教程:Workflow Manager 高速浏览
- UVA1723 Intervals
- iPhone 8价格已破发!苹果无奈只能减产
- Python------2022-1-11作业
- 湖南省工信厅党组书记、厅长雷绍业一行莅临麒麟信安调研
- 华为云服务器协议,云服务器协议
- 【管理篇 / 诊断】❀ 01. 了解防火墙的性能参数 ❀ FortiGate 防火墙
- 毕业设计-基于SSM医院信息管理系统
- PMP知识点:项目管理十大知识领域和47个过程
- My Interview