历史上的今天
今天是:2025年02月19日(星期三)
2020年02月19日 | ARM学习笔记5——程序状态寄存器
2020-02-19 来源:eefocus
当前程序状态寄存器CPSR可以在任何位处理器模式下被访问,它包含条件码标志、中断控制、当前处理器模式以及其他状态和控制信息。CPSR的结构图如下:

一、条件标志位
CPSR最高4位:N(Negative)、Z(Zero)、C(Carry)和V(oVerflow)称为条件标志位。程序名中的算术或逻辑指令可以根据其执行结果修改这些条件标志位,之后的条件执行指令可以根据这些条件标志决定相应的指令是否被执行。各条件标志位的具体含义如下:
1、N(符号位)
该位设置为当前指令运行结果的BIT[31]的值。当两个由补码表示的有符号整数运算时,N=1表示运算的结果为负数;N=0表示结果为正数或零。
2、Z(零标志位)
如果指令的运算结果为0,则Z=1(通常用来表示比较的结果为“相等”);否则Z=0.
3、C(进、借位标志)
表示运算是否有进位、借位等。下面分4种情况讨论C的设置方法。
3.1、在加法指令中(包括比较指令CMN),当结果产生了进位,则C=1,表示无符号数运算发生上溢出;其他情况下C=0.
3.2、B、在减法指令中(包括比较指令CMP),当运算中发生错位(即无符号数运算发生下溢出),则C=0;其他情况下C=1
3.3、对于在操作数中包含移位操作的运算指令(非加/减法指令),C被设置成被移位寄存器最后移出去的位。
3.4、对于其他非加/减法运算指令,C的值通常不受影响
4、V(溢出标志位)
4.1、对于加/减运算指令,当操作数和运算结果都是以二进制的补码表示的带符号的数时,V=1表示符号位溢出
4.2、对于非加/减法指令,通常不改变标志位V的值
二、标志位
在带DSP指令扩展的ARM v5E及更高版本中,CPSR[27]用于指示增强的DSP指令是否发生了溢出或饱和。
三、中断控制位
I=1时,IRQ(中断模式)被禁止;I=0时,IRQ中断生效
F=1时,FIQ(快速中断模式)被禁止;F=0时,FIQ中断生效
四、状态控制位
T位是处理器的状态控制位,主要用于ARM体系带T的版本,在非T系列的ARM版本中,T位将始终为0.当T=0时,处理器处于ARM状态(即正在执行32位的ARM指令),当处理器处于Thumb状态(即正在执行16位的Thumb指令)
不能通过直接修改CPSR的T位来改变处理器的状态,因为直接修改CPSR的T结果不可预知,必须通过状态切换指令BX、BLX指令来修改T位。
五、模式控制位
M[4:0]为模式控制位,这些为的组合确定了处理器处于哪种状态。下表给出了各个模式对应的M值:
史海拾趣
|
引 言 无线传感器网络是面向事件的监测网络,对于大多数应用,不知道传感器位置而感知的数据是没有意义的。实时地确定事件发生的位置或获取消息的节点位置是传感器网络最基本的功能之一,也是提供监测事件位置信息的前提,所以定位 ...… 查看全部问答> |
|
对于那些既想品尝美味又不愿刷碗的懒汉们来说,一项新发明的面包碗一定会使他们欣喜过望,这种新餐具不但可以避免刷碗的烦恼,其本身还是一道美味佳肴。 据英国《每日电讯报》报道,这种面制碗是英国伯明翰的一家食品公司发明的,他们希望食客们可 ...… 查看全部问答> |
|
我今天下载了PB4.0要求在ARM平台下开发。但我新建平台添加BSP的时候为什么只有如下图的一个可选项,而没有ARM的呢? C:\\Documents and Settings\\yemanyu\\桌面… 查看全部问答> |
|
有一个问题请教一下各位大侠,希望大家给与帮助,谢谢! 我有一个开发板linux下默认的使用了3线的串口为调试终端,现我想使用其他的串口作为调试口,而把该3线口解放出来另作他用, 不知道该怎么做? 我的理解是:系统启动后会启动一个shell并 ...… 查看全部问答> |
|
有2个4子开关和两个2子开关,要设计一个仪器来测量各个开关的的时间延时,即最先接通的子开关和最后接通的时间,各个开关不是同时接通的。我的设计思路用cpld+mcs51,mcs51实现一个数字计时器的功能,用cpld做逻辑处理,即产生一个脉冲!硬件上的设 ...… 查看全部问答> |
|
移植过程主要参考http://blog.chinaunix.net/u1/34474/showart.php?id=397315文章,tekkamna写的很详细!下面就移植过程中出现的问题和学到的东西进行总结: 1.U-BOOT 启动分为两个阶段,第一阶段主要是对时钟和中断进行初始化。这主要在/cpu/ ...… 查看全部问答> |
|
物联网智能家居-厨房之富士通MB9B506的串口通讯传输数据成功 先上张富士通MB9B506与MSP430G2553的数据传输图片:黑白线为串口线!可以看到两边的数据相同!程序:接收(中断法):void MFSI_RX2_IRQHandler(void){ if(((UART2_SSR&0x08)>>3) == 1) UART2_SSR = 0 ...… 查看全部问答> |




