程序状态寄存器PSR

当前程序状态寄存器(CPSR)在所有处理器模式下都是可访问的,它包括条件标志位,中断标志位,当前处理器模式控制以及其他状态和控制位。每种异常模式都有一个保存程序状态寄存器(SPSR),当异常发生时用于保存CPSR的值。
注:User模式和System模式都没有SPSR,因为它们都不是异常模式。在User模式下和System模式下读写SPSR都会引起不可预料的结果。
在这里插入图片描述
PSR位的类型:
预留位:为将来的扩展预留
用户可写位:在任意模式下都可写,N,Z,C,V,Q,和GE[3:0]以及E位都是用户可写的。
特权模式位:在特权模式下可写,用户模式下写特权位没有效果,A,I,F,T和M[4:0]都是特权位。
执行状态位:在特权模式下可写,用户模式下写执行状态位没有效果,J和T位都是执行状态位,在ARM状态下一直为0

条件标志位
N,Z,C,V这四位被称为条件标志位,几乎所有指令都会测试CPSR中的条件标志位来决定指令是否执行。
条件标志位有两种方式修改:
1,执行比较指令:CMN,CMP,TEQ以及TST
2,执行一些其他的算数,逻辑或者移动指令,并且他们的目的寄存器不是R15。

各个标志位的含义:
N:设为指令结果的第31位,如果结果当作二进制补码表示的有符号整型,N=1表示结果是负的;N=0表示结果是非负的。

Z:指令结果是0的情况下设置为1,反之设为0。

C:C位的设置存在以下四种情况:
1),对于加法,包括比较指令CMN,如果加法运算产生无符号溢出,C设为1,反之设为0。
2),对于减法,包括比较指令CMP,如果减法运算产生一个借位,C就设置为1,反之设为0。
3),对于包含移位操作的非加减运算,C设为移位器移出的最后一位。
4),对于其他的非加减运算,C通常保持不变。
V:V这一位的设置存在以下两种情况:
1),在两个二进制补码的有符号整形的加法和减法指令运算时,如果发生符号溢出,设置为1。
2),对于非加法和减法指令,V通常是不改变的。

以上这些标志位还可以通过以下的这些方式进行修改:
1),执行MSR指令,向CPSR或SPSR寄存器中写入新值。
2),执行目的寄存器是R15的MRC指令,该指令的目的是将些处理器产生的条件标志位传递到ARM处理器中。
3),执行LDM指令的某些变种指令,这些变种指令会复制SPSR的值到CPSR中。这种主要是用于异常返回的情况下。
4),在特权模式执行RFE指令可以从内存中向CPSR中加载新值。
5),执行目的寄存器是R15的算术逻辑指令的设置标志位的变种指令,它们也可以复制SPSR的值到CPSR中,用于异常返回。

中断禁止位:
A,I,F都是中断禁止位
A:abort中断禁止位,被
I:被置位后禁止IRQ中断
F:被置位后禁止FIQ中断

模式位
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值