×
单片机 > 单片机程序设计 > 详情

arm寄存器解析

发布时间:2020-06-20 发布时间:
|
寒假闲来无事准备将自己的走过的arm之路总结一下,今天就先从arm的寄存器说起吧,欢迎各位拍砖。
要介绍arm寄存器之前我们要先了解一下arm处理器的工作模式:
Arm处理器有七种工作模式,为的是形成不同的使用级别,以防造成对系统的破坏。不同模式可以访问的寄存器不同,可以运行的指令不同。
(1)usr(10):普通应用程序运行的模式(应用程序)
(2)FIQ(11):快速中断模式,以处理快速情况,高速数据传输
(3)IRQ(10010):外部中断模式,普通中断处理
(4)svc(10011):保护模式(管理模式),操作系统使用的特权模式(内核)
(5)abt(10):数据访问中止模式,用于虚拟存储和存储保护
(6)und(11011):未定义指令终止模式,用于支持通过软件仿真硬件的协处理器
(7)sys(11):系统模式,用于运行特权级的操作系统任务(armv4以上版本才具有)
注意:usr是普通模式,其他六种是特权模式,而除了usr和sys模式以外的五种模式是异常模式
--
Ok下面进入正题:
我们首先可以找到这样一本资料《ARM Architecture Reference Manual》在其中的Programmers’Model一章中,我们可以轻松的找到官方文档对寄存器的说明,建议大家去看看官方的英文文档,我将其中的重要内容简单的总结一下。
Arm处理器总共有37个寄存器其可以分为以下两类(在此我先列出大框架下面会一一介绍):
1.        通用寄存器(31个)
1.        不分组寄存器(R0—R7)
2.        分组寄存器(R8—R14)
3.        PC指针(R15)
2.        状态寄存器(6个)
1.        CPSR(1个)
2.        SPSR(5个)
相信通过上面的介绍大家对arm的寄存器有个初步的印象,下面官方文档对寄存器的说明:


下面我将会结合上图和我上面列出的大框架对寄存器进行解析:
1.        不分组寄存器(R0—R7)
在所有的运行模式下都使用同一个物理寄存器,它们未被系统用作特殊的用途。
2.        分组寄存器(R8—R14)
a)        对于R8~R12,当使用FIQ(快速中断模式)时访问寄存器R8_fiq~R12_fiq,当使用除FIQ模式以外的其他模式时,访问寄存器R8~R12
b)        对于R13,R14来说,每个寄存器对应6个不同的物理寄存器,其中一个是用户模式与系统模式共用(图中的R13,R14),另外5个物理寄存器对应其他5种不同的运行模式,并采用以下记号来区分不同的物理寄存器分别为fiq,irq,svc,abt,und.(如上图)
                             i.R13在ARM指令中常用作堆栈指针SP
特别注意:由于每一种模式都有自己的R13,所以我们在自己初始化的时候一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间。
                             ii. R14称为子程序链接寄存器LR(Link Register)
有两个特殊功能,一种是每一种模式下都可以用于保存函数的返回地址,另外就是异常处理后的返回地址,如中断。
3.        PC指针(R15)
R15用作程序计数器(PC)对应一个物理寄存器,由于ARM体系结构采用了多级流水线技术(不了解多级流水线的可以访问这个博客http://blog.csdn.net/abclixu123/article/details/7471822,博主讲的不错),对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节程序状态寄存器。
4.        CPSR
在官方文档中我们可以找到


下面介绍其中几个比较重要的位,其他位,大家可以参考官方手册:
N: 当两个表示的有符号整数运算时,1表示运算结果为负数,0表示结果为正或零。
Z:1表示运算的结果为零,0表示运算的结果不为零。对于CMP指令,1表示进行比较的两个数大小相等。
C:下面分四种情况讨论C的设置方法:
a)        加法运算(包括比较指令CMN):当运算产生了进位时(无符号数溢出),C=1,否则C=0。
b)        减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出),C=0,否则C=1。
c)        对于包含移位操作的非加/减运算指令,C为移出值的最后一位。
d)       对于其他的非加/减运算指令,C的值通常不改变。
V:下面分两种情况讨论V的设置方法
a)        对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。
b)        对于其他的非加/减运算指令,C的值通常不改变。
I:1 表示禁止外部(硬件)中断(IRQ)
F:1 表示禁止快速中断(FIQ)
T:1表示为thumb状态0为arm状态
M[4:0]:用来设置处理器的工作模式具体数据见本文开始的介绍。
5.        SPSR
SPSR 除usr、sys外,对应用于异常保护的CPSR的备份,异常时,保存CPSR值,异常退出时,将该值恢复到CPSR,以保证程序的正常运行,每一中异常运行模式(除usr和sys)有各自的物理寄存器。
 
以上是自己的arm寄存器的简单理解,希望各位提出宝贵意见,并且在这个寒假从今天开始没有意外的话我的博客会一天一更,努力学习,欢迎大家监督。
关键字:ARM  寄存器

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法