您的位置 首页 系统

ARM基础知识教程二:ARM处理器的寄存器

在ARM体系中通常有以下3种方式控制程序的执行流程:在正常执行过程中,每执行一条ARM指令,程序计数器(PC)的值加4个字节;每执行一条Thumb

ARM体系中一般有以下3种办法操控程序的履行流程:

在正常履行进程中,每履行一条ARM指令,程序计数器(PC)的值加4个字节;每履行一条Thumb指令,程序计数器寄存器(PC)加2个字节。整个进程是按次序履行。

跳转指令,程序能够跳转到特定的地址标号处履行,或许跳转到特定的子程序处履行。其间,B指令用于履行跳转操作;BL指令在履行跳转操作一起,保存子程

序的回来地址;BX指令在履行跳转操作一起,依据方针地址为能够将程序切换到Thumb状况;BLX指令履行3个操作,跳转到方针地址处履行,保存子程序的回来

地址,依据方针地址为能够将程序切换到Thumb状况。

当反常中止发生时,体系履行完当时指令后,将跳转到相应的反常中止处理程序处履行。当反常中止处理程序履行完成后,程序回来到发生中止指令的下条指

令处履行。在进入反常中止处理程序时,要保存被中止程序的履行现场,从反常中止处理程序退出时,要康复被中止程序的履行现场。

ARM处理器共有37个寄存器。其间包括:
31个通用寄存器,包括程序计数器(PC)在内。这些寄存器都是32位寄存器。

6个状况寄存器。这些寄存器都是32位寄存器。

ARM处理器共有7种不同的处理器形式,每一种形式中都有一组相应的寄存器组。在任何时刻,可见的寄存器包括15个通用寄存器(R0-R14),一个或两个状况寄存器及程序计数器(PC)。在一切的寄存器中,有些是各形式共用一个物理寄存器,有一些寄存器各形式具有自己独立的物理寄存器。

通用寄存器

*8

通用寄存器分为以下三类:备份寄存器、未备份寄存器、程序计数器PC

未备份寄存器

未备份寄存器包括R0-R7。关于每一个未备份寄存器来说,一切处理器形式下都是运用同一个物理寄存器。未备份寄存器没有被体系用于特别的用处,任何可选用通用寄存器的场合都能够运用未备份寄存器。

备份寄存器

关于R8-R12备份寄存器来说,每个寄存器对应两个不同的物理寄存器。体系为将备份寄存器用于任何的特别用处,可是当中止处理十分简略,只是运用R8-R14寄存器时,FIQ处理程序能够不用履行保存和康复中止现场的指令,然后能够使中止处理十分敏捷。

关于R13,R14备份寄存器来说,每个寄存器对应六个不同的物理寄存器,其间的一个是体系形式和用户形式共用的;别的的五个对应于其他的五种处理器形式。选用下面的记号来区别各个物理寄存器:

R13_

其间MODE能够是下面几种形式之一:usr,svc,abt,und,irq,fiq

R13常作为栈指针;R14(LR)常作为子程序的回来地址

lr(r14)的效果问题,这个lr一般来说有两个效果:
1.当运用bl或许blx跳转到子进程的时分,r14保存了回来地址,能够在调用进程结束康复。
2.反常中止发生时,这个反常形式特定的物理R14被设置成该反常形式即将回来的地址。

别的留意pc,在调试的时分显现的是当时指令地址,而用mov lr,pc的时分lr保存的是此指令向后数两条指令的地址,我们能够试一下用mov pc,pc,成果得到的是跳转两条指令,这个原因是因为arm的流水线形成的,预取两条指令的成果.

程序计数器PC

能够作为一般的通用寄存器运用,但有一些指令在运用R15时有一些约束。因为ARM选用了流水线处理器机制,当正确读取了PC的值时,该值为当时指令地址值加上8个字节。也就是说,关于ARM指令集来说,PC指向当时指令的下两条指令的地址。因为ARM指令是字对齐的,PC值的第0位和第一位总为0。

需求留意的是,当运用str/stm保存R15时,保存的或许是当时指令地址值加8个字节,也或许保存的是当时指令地址值加12个字节。究竟哪种办法取决于芯片的详细规划。关于用户来说,尽量防止运用STR/STM指令来保存R15的值。
当成功的向R15写入一个数值时,程序将跳转到该地址履行。因为ARM指令是字对齐的,写入R15的值应满意bits[1:0]为0b00,详细要求arm个版别有所不同:
关于arm3以及更低的版别,写入R15的地址值bits[1:0]被疏忽,即写入r15的地址值将与0xFFFF FFFC做与操作。
关于ARM4以及更高的版别,程序有必要确保写入R15的地址值bits[1:0]为0b00,否则将发生不行预知的成果。
关于Thumb指令集来说,指令是班子对齐的,处理器将疏忽bit[0]。

程序状况寄存器

CPSR(当时程序状况寄存器)在任何处理器形式下被拜访。它包括了条件标志位、中止制止位、当时处理器形式标志以及其他的一些操控和状况位。每一种处理器

形式下都有一个专用的物理状况寄存器,称为SPSR(备份程序状况寄存器)
。当特定的反常中止发生时,这个寄存器用于寄存当时程序状况寄存器的内容。在反常中止退出时,能够用SPSR来康复CPSR。因为用户形式和体系形式不是反常

中止形式,所以他没有SPSR。当用户在用户形式或体系形式拜访SPSR,将发生不行预知的成果。
CPSR格局如下所示。SPSR和CPSR格局相同。

31 30 29 28 27 26 7 6 5 4 3 2 1 0
N Z C V Q DNM(RAZ) I F T M4 M3 M2 M1 M0

*条件标志位*
N——本位设置成当时指令运算成果的bit[31]的值。当两个表明的有符号整数运算时,n=1表明运算成果为负数,n=0表明成果为正书或零。

z——z=1表明运算的成果为零;z=0表明运算的成果不为零。关于CMP指令,Z=1表明进行比较的两个数巨细持平。

C——下面分四种状况评论C的设置办法:
在加法指令中(包括比较指令CMP),当成果发生了进位,则C=1,表明无符号运算发生上溢出;其他状况C=0。
在减法指令中(包括减法指令CMP),当运算中发生错位,则C=0,表明无符号运管用发生下溢出;其他状况下C=1。
关于包括移位操作的非加碱运算指令,C中包括最终一次溢出的的位的数值
关于其他非加减运算指令,C位的值一般不受影响
V——关于加减运算指令,当操作数和运算成果为二进制的补码表明的带符号数时,V=1表明符号为溢出;一般其他指令不影响V位。

*Q标识位*
在ARM V5的E系列处理器中,CPSR的bit[27]称为q标识位,首要用于指示增强的dsp指令是否发生了溢出。相同的spsr的bit[27]位也称为q标识位,用于在反常中

断发生时保存和康复CPSR中的Q标识位。
在ARM V5曾经的版别及ARM V5的非E系列的处理器中,Q标识位没有被界说。

*CPSR中的操控位*

CPSR的低八位I、F、T、M[4:0]统称为操控位。当反常中止发生时这些位发生变化。在特权级的处理器形式下,软件能够修正这些操控位。

中止制止位:当I=1时制止IRQ中止,当F=1时制止FIQ中止

T操控位:T操控位用于操控指令履行的状况,即阐明本指令是ARM指令仍是Thumb指令。关于ARM V4以更高版别的T系列ARM处理器,T操控位意义如下:
T=0表明履行ARM指令
T=1表明履行Thumb指令
关于ARM V5以及更高版别的非T系列处理器,T操控位的意义如下
T=0表明履行ARM指令
T=1表明强制下一条履行的指令发生不决指令中止

*M操控位*
M操控位操控处理器形式,详细意义如下:

M[4:0] 处理器形式 可拜访的寄存器
10000 user pc,r14~r0,CPSR
10001 FIQ PC,R14_FIQ-R8_FIQ,R7~R0,CPSR,SPSR_FIQ
10010 IRQ PC,R14_IRQ-R13_IRQ,R12~R0,CPSR,SPSR_IRQ
10011 SUPERVISOR PC,R14_SVC-R13_SVC,R12~R0,CPSR,SPSR_SVC
10111 ABORT PC,R14_ABT-R13_ABT,R12~R0,CPSR,SPSR_ABT
11011 UNDEFINEED PC,R14_UND-R8_UND,R12~R0,CPSR,SPSR_UND
11111 SYSTEM PC,R14-R0,CPSR(ARM V4以及更高版别)

*CPSR中的其他位*

这些位用于将来扩展。应用软件不要操作这些位。

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部