当前程序状态寄存器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值:

ARM学习笔记5——程序状态寄存器的更多相关文章

  1. ARM学习笔记6——程序状态寄存器访问指令

    这两条指令结合,可用于对CPSR或SPSR进行读/写操作. 当需要保存或修改当前模式下CPSR或SPSR的内容时,首先必须将这些内容传递到通用寄存器中 1.MRS指令(Move to Register ...

  2. arm学习笔记

    学习ARM也有一定时间了,想想还是记点东西,要不以后就忘了.这是我的第一片,简简单单.但比较基础.1. ARM中一些常见英文缩写解释MSB:最高有效位:LSB:最低有效位:AHB:先进的高性能总线:V ...

  3. ARM学习笔记1——Arm寄存器与模式的关系

    ARM微处理器上有37个32位的寄存器,其中有6个状态寄存器(一个CPSR,5个SPSR),其它31个为通用寄存器.在ARM的不同模式下,可以访问的物理寄存器是不同,如下图所示: 从图中可知,用户模式 ...

  4. ARM学习笔记13——LED驱动程序设计

    首先我们要根据开发板原理图得到控制LED灯的引脚是哪个,我们现在以LED1为例,我们已经知道LED1由S5PV210的GPC1_3控制,因此我们按如下步骤进行: 第一步是配制S5PV210的GPC1_ ...

  5. ARM学习笔记11——GNU ARM汇编程序设计

    GNU ARM汇编程序设计中,每行的语法格式如下: [<label>:] [<instruction | directive | pseudo-instruction>] @c ...

  6. ARM学习笔记9——ARM汇编汇编语言中的伪指令

    ARN汇编器支持ARM伪指令,这些伪指令在汇编阶段被翻译成ARM或Thumb指令.ARM伪指令包含ADR.ADRL.MOV32和LDR.一.ADR伪指令 1.作用 ADR是小范围地址读取伪指令,基于P ...

  7. ARM学习笔记8——通用寄存器和存储器内容交换指令和软中断指令

    交换指令将一个存储单元内容与制定的寄存器内容相交换,交换指令为进程间同步提供了一种方便的解决途径.该指令产生一堆原子Load/Store操作,该操作发生在一个连续的总线操作中,在操作期间阻止其他任何指 ...

  8. ARM学习笔记7——乘法指令

    ARM乘法指令完成两个数据的乘法,两个32位二进制数相乘的结果是64位的4积. 其中: 1.“RadHi:RdLo”是由RdHi(最高有效32位)和RdLo(最低有效32位)链接形成的64位数,“[3 ...

  9. ARM学习笔记2——分支跳转指令

    一.Arm指令条件码和条件助记符 二.跳转指令B 1.作用 跳转指令B使程序跳转到指定的地址执行程序(跳转范围是PC-32MB到PC+32MB) 2.指令格式(注:B后面如果有条件,条件就是紧跟在B后 ...

随机推荐

  1. 暑假集训(1)第八弹 -----简单迷宫(Poj3984)

    Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, ...

  2. SGU 218.Unstable Systems

    题意: 有n(n<500)台机器,和500个程序.不同的程序在不同的机器上运行有着不同的不稳定度s[i][j].求最小的最大稳定度及其方案. Solution: 比较经典的二分图模型. 建图很简 ...

  3. Struts2配置文件_常量属性_独立测试分析

    <constant name="struts.devMode" value="true" /> 设置开发模式,可以了解详细信息,该属性指定视图标签默 ...

  4. Libnids---编写网络应用程序的利器

    一.前言 Libnids是一个用于网络入侵检测开发的专业编程接口,它使用Libpcap进行数据包的捕获.同时,Libnids提供了TCP/IP数据流重组功能,因此省去了应用层自己考虑数据分片.重传等情 ...

  5. 【原创】Linux opensource-src-4.3.2.tar.gz的安装。

    下载好opensource-src-4.3.2.tar.gz 安装G++等必备库: sudo apt-get install make gcc g++ sudo apt-get install bui ...

  6. 网站开发常用jQuery插件总结(14)图片修剪插件Jcrop

    一.插件功能 用于对图片进行修剪.但是在使用Jcrop时,还需要配合服务器端开发语言(如asp.net,php等)使用. 二.官方地址 http://deepliquid.com/content/Jc ...

  7. js 中如何通过提示框跳转页面

    通过提示框跳转页面 <!doctype html> <html lang="en"> <head> <meta charset=" ...

  8. CentOS 6.5-默认没开启网络连接:开启网络连接

    vi  /etc/sysconfig/network-scripts/ifcfg-eth0 修改网络, 禁止IP6开启,禁止自启动服务chkconfig

  9. phpcms V9 添加模块(转)

    转自:http://www.cnblogs.com/Braveliu/p/5101345.html 为phpcms创建一个模块的开发流程 [1]创建模块目录 通过前面的学习,我们已经知道phpcms ...

  10. dedecms插件开发教程

    这是一个很简单插件实例,通过此插件,你可以知道怎么样开发一个插件,它结构是怎么设置的,数据库,后台等.文件结构:enroll.php 文件在 plus文件下enroll.htm文件在templets/ ...