您的位置 首页 技术

ARM状况寄存器 CPSR SPSR

CPSR:程序状态寄存器(currentprogramstatusregister),cpsr在用户级编程时用于存储条件码。CPSR包含条件码标志,中断禁止位,当前…

CPSR:程序状况寄存器(current program status register) ,cpsr在用户级编程时用于存储条件码。CPSR包含条件码标志,中止制止位,当时处理器形式以及其他状况和操控信息。

  SPSR:程序状况保存寄存器。SPSR用于保存CPSR的状况,以便反常回来后康复反常发生时的作业状况。

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] 处理器形式 可拜访的寄存器
ob10000 user pc,r14~r0,CPSR
0b10001 FIQ PC,R14_FIQ-R8_FIQ,R7~R0,CPSR,SPSR_FIQ
0b10010 IRQ 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 UNDEFINEED PC,R14_UND-R8_UND,R12~R0,CPSR,SPSR_UND
0b11111 SYSTEM PC,R14-R0,CPSR(ARM V4以及更高版别)

*CPSR中的其他位*
这些位用于将来扩展。应用软件不要操作这些位。

——————————————————————-

(CPSR,SPSR)拜访指令
ARM 微处理器支撑程序状况寄存器拜访指令,用于在程序状况寄存器和通用寄存器之间传送数据,程序状况寄存器拜访指令包含以下两条:
— MRS: 程序状况寄存器到通用寄存器的数据传送指令
— MSR: 通用寄存器到程序状况寄存器的数据传送指令

1、 MRS 指令
MRS 指令的格局为:MRS{条件} 通用寄存器,程序状况寄存器(CPSR 或SPSR)
MRS 指令用于将程序状况寄存器的内容传送到通用寄存器中。该指令一般用在以下几种状况:
- 当需求改动程序状况寄存器的内容时,可用MRS 将程序状况寄存器的内容读入通用寄存器,修正后再写回程序状况寄存器。
- 当在反常处理或进程切换时,需求保存程序状况寄存器的值,可先用该指令读出程序状况寄存器的值,然后保存。
指令示例:
MRS R0,CPSR ;传送CPSR 的内容到R0
MRS R0,SPSR ;传送SPSR 的内容到R0

2、 MSR 指令
MSR 指令的格局为:MSR{条件} 程序状况寄存器(CPSR 或SPSR)_<域>,操作数
MSR 指令用于将操作数的内容传送到程序状况寄存器的特定域中。其间,操作数能够为通用寄存器或当即数。<域>用于设置程序状况寄存器中需求操作的位,32 位的程序状况寄存器可分为4 个域:
位[31:24]为条件标志位域,用f 表明;
位[23:16]为状况位域,用s 表明;
位[15:8]为扩展位域,用x 表明;
位[7:0]为操控位域,用c 表明;
该指令一般用于康复或改动程序状况寄存器的内容,在运用时,一般要在MSR 指令中指明即将操作的域。
指令示例:
MSR CPSR,R0 ;传送R0 的内容到CPSR
MSR SPSR,R0 ;传送R0 的内容到SPSR
MSR CPSR_c,R0 ;传送R0 的内容到SPSR,但只是修正CPSR 中的操控位域

1状况寄存器传送至通用寄存器类指令
功用:将状况寄存器的内容传送至通用寄存器。

格局:
MRS{<条件码>}Rd,CPSR}SPSR
其间:
Rd方针寄存器,Rd不允许R15。
R=0将CPSR中的内容传送意图寄存器。
R=1将SPSR中的内容传送至意图寄存器。

注释:
MRS与MSR合作运用,作为更新PSR的读-修正-写序列的一部分。例如:改动处理器或铲除标志Q。留意:当处理器在用户形式或体系形式下,必定不能企图拜访SPSR这条指令,不影响条件码标志。
例:
MRSR0,CRSR;将CPSR中的内容传送至R0
MRSR3,SPSR;将SPSR中的内容传送至R3

2 .通用寄存器传送至状况寄存器传送指令
功用:将通用寄存器的内容传送至状况寄存器.

格局:
MSR{<条件码>CPSR_f|SPSR_f,<#ommed_8r>
MSR{<条件码>CPSR_|SPSR_,Rm
其间:
字段能够是以下之一或多种:
C:操控域屏蔽字段(PSR中的第0位到第7位);
X:扩展域屏蔽字段(PSR中的第8位到第15位);
S:状况域屏蔽字段(PSR中的第16位到第32位);
F:标志域屏蔽字段(PSR中的第24位到第31位)。
immed_8r值数字常量的表达式。常量有必要对应8位位图。该位图在32位字中循环移位偶数数位。
Rm源寄存器。

注释:
同前一条指令(MRS)。
例1:设置N、Z、C、V标志。
MSRCPSR_f,#&f0000000;仅高位有用,其他有必要为0
例2:
仅置位C标志,保存N、Z、V标志。
MRSR0,CPSR;将CPSR中的内容传送至R0
ORRR0,R0,#&1f;置位R0的第29位
MSRCPSR_c,R0;再将R0中的内容传送至CPSR

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部