本文主要是介绍刘帅嵌入式系统-当前程序状态寄存器(cpsr),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
CPSR的格式如下图。SPSR格式与CPSR格式相同。
1、条件标志位
N(Negative)、Z(Zero)、C(Carry)及V(oVerflow)统称为条件标志位。大部分的ARM指令可以根据CPSR中的这些条件标志位选择性地执行。各条件标志位的具体含义如下。
N:当两个补码表示的有符号整数运算时,N=1表示运算的结果为负数;N=0表示结果为整数或零。
Z:Z=1表示运算结果为零;Z=0表示运算结果不为零。对于CMP指令,Z=1表示进行比较的两个数大小相等。
C:下面介绍4种情况C的设置方法。
--在加法指令中(包括比较指令CMN),当结果产生了进位,则C=1,表示无符号数运算发生上溢出;其他情况下C=0。
--在剑法指令中(包括比较指令CMP),当运算中发生借位,则C=0,表示无符号数运算发生下溢出;其他情况下C=1。
--对于包含移位操作的非加/减发运算指令,C中包含最后一次被溢出的位的数值。
--对于其他非加/减法运算指令,C位的值通常不变。
V:对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。通常其他的指令不影响V位,具体可参考各指令的说明。
2、CPSR中的控制位
CPSR的低8位I、F、T及M[4:0]统称为控制位。当异常发生时,这些位发生变化,在特权级的处理器模式下,软件可以修改这些控制位。
1)中断禁止位
-- I=1时,禁止IRQ中断。
-- F=1时,禁止FIQ中断。
2)T控制位
T控制位用于控制指令执行的状态,级说明本指令时ARM指令,还是Thumb指令。但对于不同版本的ARM处理器,T控制位的含义不同。
对于ARMv3和ATMv4的非T系列版本的处理器,没有ARM状态和Thumb状态切换,固T=0。
对于ARMv4以及更高的版本的T系列处理器,T含义如下:
-T=0表示执行ARM指令。
-T=1表示执行Thumb指令。
对于ARMv5以及更高的、版本的非T系列的ARM处理器,T含义如下:
-T=0表示执行ARM指令。
-T=1表示强制下一条执行的指令产生未定义指令中断。
3)M控制位,可参考上图所示。
3、CPSR中的其他位
CPSR中的其他位用于将来ARM版本的扩展。应用软件不要操作这些位,以免与ARM将来版本的扩展冲突。
这篇关于刘帅嵌入式系统-当前程序状态寄存器(cpsr)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!