ARM处理器的运行模式和ARM寄存器
一、ARM处理器共有7种运行模式
处理器模式 | 描述 |
用户模式(User,usr) | 正常程序执行的模式 |
快速中断模式(FIQ,fiq) | 用于高速数据传输和通道处理 |
外部中断模式(IRQ,irq) | 用于通常的中断处理 |
特权模式(Supervisor,sve) | 供操作系统使用的一种保护模式 |
数据访问中止模式(Abort,abt) | 用于虚拟存储及存储保护 |
未定义指令中止模式(Undefined,und) | 用于支持通过软件仿真硬件的协处理器 |
系统模式(System,sys) | 用于运行特权级的操作系统任务 |
usr是普通模式,其他六种是特权模式(Privileged Modes),在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。除了usr和sys模式以外的五种模式又被称为异常模式。
处理器模式可以通过软件控制进行切换,也可以通过外部中断或异常处理过程进行切换。大多数的用户程序运行在用户模式下。这时,应用程序不能够访问一些受操作系统保护的系统资源。应用程序也不能直接进行处理器模式的切换。当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理过程中进行处理器模式的切换。这种体系结构可以使操作系统控制整个系统的资源。
当应用程序发生异常中断时,处理器进入相应的异常模式。在每一种异常模式中都有一组寄存器,供相应的异常处理程序使用,这样就可以保证在进入异常模式时,用户模式下的寄存器(保存了程序运行状态)不被破坏。
系统模式(sys)并不是通过异常过程进入的,它和用户模式具有完全一样的寄存器。但是系统模式属于特权模式,可以访问所用的系统资源,也可以直接进行处理器模式切换。它主要供操作系统任务使用。通常操作系统的任务需要访问所有的系统资源,同时该任务仍然使用用户模式的寄存器组,而不是使用异常模式下相应的寄存器组,这样可以保证当异常中断发生时任务状态不被破坏。
二、ARM寄存器
ARM处理器共有37个寄存器。包括:31个通用寄存器和6个状态寄存器,他们都是32位的。
1、31个通用寄存器可用分为3类:未备份寄存器,包括R0~R7、备份寄存器,包括R8~R14、程序计数器PC,即R15。
1)、未备份寄存器,包括R0~R7。对于未备份寄存器来说,在所以处理器模式下指的都是同一个物理寄存器。在异常中断造成处理器模式切换时,由于不同的处理器模式使用相同的物理寄存器,可能造成寄存器中数据被破坏。未备份寄存器没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用。
2)、备份寄存器,对于备份寄存器R8~R12来说,每个寄存器对应两个不同的物理寄存器。例如,当使用快速中断模式下的寄存器时,寄存器R8和寄存器R9分别记作R8_fiq、R9_fiq;当使用用户模式下的寄存器时,寄存器R8和寄存器R9分别记作R8_usr、R9_usr时等。在这两种情况下,使用的是不同的物理寄存器。系统没有将这几个寄存器用于任何特殊用途,但是当中断处理非常简单,仅仅使用R8~R14寄存器时,FIQ处理程序可以不必执行保存和候复中断现场的指令,从而可以使中断处理过程非常迅速,c从而达到快速中断的目的。
3)、对于备份寄存器R13和R14来说,每个寄存器对应6个不同的物理寄存器,其中一个是用户模式和系统模式共用的。记作:R13_usr、R13_svc、R13_abt、R13_und、R13_irq、R13_fiq。
寄存器R13在ARM中常用作栈指针。在ARM指令集中,这只是一种习惯的用法,并没有任何指令强制性地使用R13作为栈指针,用户也可以使用其他的寄存器作为栈指针;而在Thumb指令集中,有一些指令强制性地使用R13作为栈指针。每一种异常模式都拥有自己的物理的R13。应用程序初始化该R13,使其指向该异常模式专用的栈地址。当进入异常模式时,可以将需要使用的寄存器保存在R13所指的栈中:当退出异常处理程序时,将保存在R13所指的栈中的寄存器值弹出。这样就使异常处理程序不会破坏被其中断程序的运行现场。
寄存器R14又被称为连接寄存器(Link Register,LR),在ARM体系中具有下面两种特殊的作用:
A、每一种处理器模式自己的物理R14中存放着当前子程序的返回地址。当通过BL或BLX指令调用子程序时,R14被设置成该子程序的返回地址。在子程序中,当把R14的值复制到程序计数器PC中时,子程序即返回。
B、当异常中断发生时,该异常模式特定的物理R14被设置成该异常模式将要返回的地址。对于有些异常模式,R14的值可能与将要返回的地址有一个常数的偏移量。
4)、程序计数器R15,当成功地向R15写入一个地址数值时,程序将跳转到该地址执行。
2、程序状态寄存器
CPSR(当前程序状态寄存器)可以在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。每一种处理器模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断程序退出时,可以用SPSR中保存的值来恢复CPSR。
由于用户模式和系统模式不是异常中断模式,所以它们没有SPSR。当在用户模式或系统模式中访问SPSR时,将会产生不可预知的结果。
CPSR的格式如下所示。SPSR格式与CPSR格式相同。
N(Negative): 当两个补码表示的有符号整数运算时,1表示运算结果为负数,0表示结果为正或零。
Z(Zero):1表示运算的结果为零,0表示运算的结果不为零。对于CMP指令,1表示进行比较的两个数大小相等。
C(Carry):下面分四种情况讨论C的设置方法:
a) 加法运算(包括比较指令CMN):当运算产生了进位时(无符号数溢出),C=1,否则C=0。
b) 减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出),C=0,否则C=1。
c) 对于包含移位操作的非加/减运算指令,C为移出值的最后一位。
d) 对于其他的非加/减运算指令,C的值通常不改变。
V(overflow):下面分两种情况讨论V的设置方法
a) 对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。
b) 对于其他的非加/减运算指令,V的值通常不改变。
CPSR的低8位I、F、T、M[4:0]统称为控制位。当异常中断发生时,这些位发生变化。
I:1 表示禁止外部(硬件)中断(IRQ)
F:1 表示禁止快速中断(FIQ)
T:1表示为thumb状态,0为arm状态
M[4:0]:用来设置处理器的工作模式。
M[4:0] |
处理器模式 |
可访问的寄存器 |
0b10000 |
User |
PC,R14一R0,CPSR |
0b10001 |
FIQ |
PC,R14_fiq-R8_flq,R7~R0,CPSR,SPSR_nq |
0b10010 |
1RQ |
PC,R14 _irq-R13 _irq,R12一R0,CPSR,SPSR_ irq |
0b10011 |
Supervisor |
PC,R14_ svc-R13 _svc,R12~R0,CPSR,SPSR_svc |
0b10111 |
Abort |
PC,R14_abt-R13_abt,R12~R0,CPSR,SPSR_abt |
0b11011 |
Undefined |
PC,R14_und-R13_und,R12~R0,CPSR,SPSR_ und |
0b11111 | System | PC,R14-R0,CPSR |
各种处理器模式下的寄存器表(共37个):
用户模式 |
系统模式 |
特权模式 |
中止模式 |
未定义指令模式 |
外部中断模式 |
快速中断模式 |
R0 |
R0 |
R0 |
R0 |
R0 |
R0 |
R0 |
R1 |
R1 |
R1 |
R1 |
R1 |
R1 |
R1 |
R2 |
R2 |
R2 |
R2 |
R2 |
R2 |
R2 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R3 |
R4 |
R4 |
R4 |
R4 |
R4 |
R4 |
R4 |
R5 |
R5 |
R5 |
R5 |
R5 |
R5 |
R5 |
R6 |
R6 |
R6 |
R6 |
R6 |
R6 |
R6 |
R8 |
R8 |
R8 |
R8 |
R8 |
R8 |
R8_fiq |
R9 |
R9 |
R9 |
R9 |
R9 |
R9 |
R9_fiq |
R10 |
R10 |
R10 |
R10 |
R10 |
R10 |
R10_fiq |
R11 |
R11 |
R11 |
R11 |
R11 |
R11 |
R11_fiq |
R12 |
R12 |
R12 |
R12 |
R12 |
R12 |
R12_fiq |
R13 |
R13 |
R13_svc |
R13_abt |
R13_und |
R13_inq |
R13_fiq |
R14 |
R14 |
R14_svc |
R14_abt |
R14_und |
R14_inq |
R14_fiq |
PC |
PC |
PC |
PC |
PC |
PC |
PC |
CPSR |
CPSR |
CPSR SPSR_svc |
CPSR SPSR_abt |
CPSR SPSR_und |
CPSR SPSR_inq |
CPSR SPSR_fiq |
引用自《ARM体系结构与编程》 杜春雷版
ARM处理器的运行模式和ARM寄存器相关推荐
- Cortex-A7 MPCore 架构详细介绍(九种运行模式、内核寄存器组R0~R15,有特定的名字和功能)
目录 0.ARM架构的历史简介 1.Cortex-A7 MPCore(即多核) 简介 2.Cortex-A 处理器九种运行模式 3.Cortex-A 寄存器组(内核寄存器) 3.1通用寄存器 3.1. ...
- 多核处理器的运行模式
从软件的角度看,多核处理器的运行模式有AMP(非对称多处理).SMP(对称多处理)和BMP(受约束多处理)三种运行模式. AMP 运行模式指多个内核相对独立的运行不同的任务,每个内核相互隔离,可以运行 ...
- ARM处理器的异常模式
1.ARM处理器有各种异常模式,用于应对ARM出现的不同状态.出现异常时,会随即进入相关的异常向量,同时CPSR的寄存器也会设置成具体的模式. 例:当出现中断时,不管是哪种中断,都会跳转到0x18这个 ...
- ARM处理器指定运行核
1.序 1.1 CPU Affinity (CPU亲合力) CPU亲合力就是指在Linux系统中能够将一个或多个进程绑定到一个或多个处理器上运行. 一个进程的CPU亲合力掩码决定了该进程将在哪个或哪几 ...
- 移植嵌入式linux到arm处理器,移植嵌入式Linux到ARM处理器S3C2410:设备驱动
设备驱动程序是操作系统内核和机器硬件之间的接口,它为应用程序屏蔽硬件的细节,一般来说,Linux的设备驱动程序需要完成如下功能: ·设备初始化.释放: ·提供各类设备服务: ·负责内核和设备之间的数据 ...
- 关于arm处理器 内存编址模式 与 字节对齐方式 (转)
转自:http://bavon.bokee.com/5429805.html 在x86+Linux上写的程序,在PC机上运行得很好.可是使用ARM的gcc进行交叉编译,再送到DaVinci目标板上运行 ...
- ARM处理器的工作模式。
- ARM处理器工作状态和模式
两种工作状态 1.ARM状态:处理器执行32位对齐的ARM指令: 2.Thumb状态:处理器执行16位对齐的ARM指令. 它们之间的区别在于:Thumb指令集不是完整的指令集,它是ARM指令集的子集. ...
- 嵌入式典型ARM处理器介绍以及分类
笔者电子信息专业硕士毕业,获得过多次电子设计大赛.大学生智能车.数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究.对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验,共同 ...
最新文章
- ios关于用xib创建的cell 自动返回cell的高度问题!
- 「BZOJ1055」[HAOI2008] 玩具取名 - 区间动规 - 记忆化搜索
- 【学习笔记】28、类的方法及参数介绍
- 有虚拟服务器的无线路由,无线路由,虚拟服务器,。怎么办?
- 天津市电子计算机职业中专 概况,天津市电子计算机职业中专 .pptx
- 四、Web服务器——Session Cookie JSP入门 学习笔记
- intel编译器_Intel编译器编译并行版lammps
- 响应式手机配件织梦模板
- 智能续航兼得的“超能代表”OPPO Watch 2系列正式发布
- VC添加皮肤――SkinMagic msvcrtd.dll_本地测试
- Python3入门机器学习经典算法与应用 第3章 numpy矩阵运算
- [2018.10.10 T1] 餐馆
- “最大数之父”葛立恒逝世,他是20世纪数学巨匠,也是一个杂技演员
- MK60单片机开发环境-IAR Embedded Workbench的搭建
- SourceTeee 设置拉取时使用rebase
- AR unity制作阴影
- 19、论文解读:Intensity Scan Context: Coding Intensity and Geometry Relations for Loop Closure Detection
- 如何解决仓库无线网络覆盖问题?
- ArrayDeque集合的妙用
- 揭秘社会工程学(让你免于被诈骗的命运)
热门文章
- string转date类型_10:Wrapper;String;Date;Math;File;Enumeration;Syst
- python读取数据的函数详解_你了解文件缓存机制吗?磁盘文件如何读写?Python中open函数详解...
- python中画圆的代码_Python编程12:Python画图之turtle库如何画圆
- 减肥登Cell封面上热搜:华东师大热疗探索新突破,这一波网友们想象力大开
- 3年完成2款云端AI芯片研发量产,百度造芯为什么这么快?
- 机器学习博士自曝:实验室「阉割」我的创造力,劝你别读!
- 中国AI服务器,刷新全球18项性能基准测试纪录
- 小鹏汽车招股书,满是智能技术自研的标签
- 让电影动漫统统变丝滑,480帧也毫无卡顿,交大博士生开源插帧软件DAIN
- 老子不想考试了!英国计算机系学生黑掉校长邮箱:倒闭学校,取消考试