CPSR的具体内容

全称程序状态寄存器,一共有32位,其中分为4个8位的域,分别用CXSF来表示

  C:控制位域【0,7】

    中断禁止位: I=1,IRQ被禁止

    MSR R0,CPSR

    ORR R0,R0,#0x80

    MSR CPSR_C,R0

    MOV PC,LR

    终端禁止位:F=1,FIQ被禁止

    T位是处理器的状态控制位

    T=0,处理器处于ARM状态

    T=1,处理器处于Thumb状态

    M【0,4】是位模式控制位,共同确定处理器处于什么状态

    

0b10000 用户模式(usr):ARM处理器正常的程序执行状态。 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 管理模式(svc):操作系统使用的保护模式。 PC,R14_SVC-R13_SVC,R12~R0,CPSR,SPSR_SVC

0b10111 数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。 PC,R14_ABT-R13_ABT,R12~R0,CPSR,SPSR_ABT

0b11111 系统模式(sys):运行具有特权的操作系统任务。 PC,R14-R0,CPSR

0b11011 未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。 PC,R14_UND-R8_UND,R12~R0,CPSR,SPSR_UND

  X:扩展位域【8,15】

    

  S:状态位域【16:23】

  F:条件标志位域【24:31】

    N——本位设置成当前指令运算结果的bit[31]的值。当两个表示的有符号整数运算时,n=1表示运算结果为负数,n=0表示结果为正数或零。

    z——z=1表示运算的结果为零;z=0表示运算的结果不为零。对于CMP指令,Z=1表示进行比较的两个数大小相等。

    C——下面分四种情况讨论C的设置方法:

        在加法指令中(包括比较指令CMN),当结果产生了进位,则C=1,表示无符号运算发生溢出(overflow);其他情况C=0。

        在减法指令中(包括比较指令CMP),当运算中发生借位,则C=0,表示无符号运算数发生进位;其他情况下C=1。

        对于包含移位操作的非加减运算指令,C中包含最后一次溢出的位的数值

        对于其他非加减运算指令,C位的值通常不受影响

    V——对于加减运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出;通常其他指令不影响V位。

    在ARM V5的E系列处理器中,CPSR的bit[27]称为q标识位,主要用于指示增强的dsp指令是否发生了溢出。同样的spsr的bit[27]位也称为q标识位,用于在异常中

    断发生时保存和恢复CPSR中的Q标识位。

    在ARM V5以前的版本及ARM V5的非E系列的处理器中,Q标识位没有被定义。

时间: 2024-10-11 20:48:55

CPSR的具体内容的相关文章

SPSR与CPSR

原文:http://blog.chinaunix.net/uid-28458801-id-3487199.html CPSR:程序状态寄存器(current program status register) (当前程序状态寄存器),在任何处理器模式下被访问.它包含了条件标志位.中断禁止位.当前处理器模式标志以及其他的一些控制和状态位.CPSR在用户级编程时用于存储条件码.    SPSR:程序状态保存寄存器(saved program status register),每一种处理器模式下都有一个

CPSR和SPSR(转)

转载地址:http://blog.chinaunix.net/uid-28458801-id-3487199.html CPSR:程序状态寄存器(current program status register) (当前程序状态寄存器),在任何处理器模式下被访问.它包含了条件标志位.中断禁止位.当前处理器模式标志以及其他的一些控制和状态位.CPSR在用户级编程时用于存储条件码.    SPSR:程序状态保存寄存器(saved program status register),每一种处理器模式下都有

ARM指令集(三)

4.跳转指令 ARM中实现程序跳转有两种方法,一种是直接给PC(R15)寄存器赋值,另一种是利用跳转指令. 第一种跳转方式可以实现整个32位地址空间范围内的跳转.而第二种跳转方式只能够实现前后32MB范围内的跳转,这个范围的大小是由跳转指令的编码格式所决定的. 跳转指令有以下几种: B:跳转指令,单纯的程序跳转. BL:带返回的跳转指令,用于实现子程序或者函数的调用.在程序跳转前,会自动将下一条指令的地址给保存到用户模式下的LR中. BX:带状态的跳转指令,可以实现ARM状态和Thumb状态的切

arm9的操作模式,寄存器,寻址方式

工作模式 Arm有7种工作模式: 名称 简称 简介 User Usr 正常用户程序执行的模式(linux下用户程序就是在这一模式执行的.) FIQ Fiq 快速中断模式 IRQ Irq 普通中断模式 Supervisor Svc 给操作系统准备的保护模式,权限很高的一种模式,linux的内核就是运行在此模式 Abort Abt 比如访问虚拟内存,导致了异常,就是进入这一模式. Undefined Und 运行一条处理器并不支持的指令就进入此模式. System Sys Armv4及以上的版本才有

ARM重要汇编指令记录

IMPORT ,定义表示这是一个外部变量的标号,不是在本程序定义的EXPORT ,表示本程序里面用到的变量提供给其他模块调用的.以上两个在汇编和C语言混合编程的时候用到 ENDP    表示PROC所定义的过程结束. (end procedure)ENDS    表示SEGMENT定义的段结束.   (end segment)END     程序结束. B.BL.BX.BLX 和 BXJ跳转.带链接跳转.跳转并切换指令集.带链接跳转并切换指令集.跳转并转换到 Jazelle 状态. 状态寄存器传

start.s 解析(一)

可以参考 : http://blog.csdn.net/bluesummerg/article/details/5940452 (强大的反汇编) http://www.cnblogs.com/yanhc/archive/2011/09/13/2175280.html // 本文学习目标: 微观上,对此start.S的每一行,都有了基本的了解 宏观上,对基于ARM核的S3C24X0的CPU的启动过程,有更加清楚的概念 注意: ————————————————————————————————————

六、uboot 代码流程分析---start.S

6.1 _start 入口函数 6.1.1 vectors.S (arch\arm\lib) 从上一节可以知道,uboot 的入口函数为 _start .此 函数定义在 vectors.S (arch\arm\lib) 中. 在此文件中,定义了异常向量表,及其操作函数._start 开始后,直接跳入  reset 复位中执行启动. 1 /* 头文件包含,包含架构和配置相关的头文件,自动生成的 */ 2 #include <config.h> 3 4 /* 5 * A macro to allo

(转)ARM汇编学习笔记——CPSR寄存器、CPSR_C

转自:http://blog.csdn.net/cos_sin_tan/article/details/7667582 内容有所改动 1:ARM每种工作模式除R0~R15共16个寄存器外,还有第17个寄存器CPSR,叫做 "当前程序状态寄存器",CPSR中一些位被用于标识各种状态,一些位被用于标识当前处于什么工作模式. 2:这个状态寄存器的32位可以分为四个8位的域. 其中cpsr_c代表的是cpsr寄存器的低8位,也就是控制位 有些程序里这样写msr cpsr_c, #0xd2   

CPSR &amp; SPSR 程序状态寄存器的访问 笔记

CPSR & SPSR 一行短短的汇编触发的学习笔记~ ARM 微处理器支持程序状态寄存器访问指令,用于在程序状态寄存器和通用寄存器之间传递数据.程序状态寄存器(*PSR) 的访问指令包括一下两条: -------------------------------------------------------------------------------------------------------------------------------------------------- 关于M