您的位置 首页 芯闻

arm寄存器解析

寒假闲来无事准备将自己的走过的arm之路总结一下,今天就先从arm的寄存器说起吧,欢迎各位拍砖。要介绍arm寄存器之前我们要先了解一下arm处…

寒假闲来无事预备将自己的走过的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寄存器的简略了解,期望各位提出宝贵意见,并且在这个寒假从今日开端没有意外的话我的博客会一天一更,努力学习,欢迎咱们监督。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/276452.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部