您的位置 首页 新品

ARM处理器的寄存器

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

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] 处理器形式可拜访的寄存器
10 userpc,r14~r0,CPSR
11 FIQPC,R14_FIQ-R8_FIQ,R7~R0,CPSR,SPSR_FIQ
10010 IRQPC,R14_IRQ-R13_IRQ,R12~R0,CPSR,SPSR_IRQ
10011 SUPERVISORPC,R14_SVC-R13_SVC,R12~R0,CPSR,SPSR_SVC
10 ABORTPC,R14_ABT-R13_ABT,R12~R0,CPSR,SPSR_ABT
11011 UNDEFINEEDPC,R14_UND-R8_UND,R12~R0,CPSR,SPSR_UND
11 SYSTEMPC,R14-R0,CPSR(ARM V4以及更高版别)

***CPSR中的其他位***

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

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部