arm cpsr寄存器解析

原文作者1:keluoze

原文作者2:xiaolangyangyang

原文地址1:http://home.eeworld.com.cn/my/space-uid-566817-blogid-239332.html

原文地址2:http://blog.csdn.net/xiaolangyangyang/article/details/51768462

版权声明:转载只为交流学习,版权属于原作者

条件标识位                                                          保留                                                             控制位
31        30        29        28        27        26        25        24        …       8       7        6        5        4        3        2        1        0
N          Z         C          V         .           .          .                …                             I         F        T       M4     M3     M2     M1    M0
 
说明:
条件标识位[31 : 28]:它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。在ARM状态下,绝大多数指令都是有条件的执行的,在Thumb状态下,只有分支指令被有条件的执行
N
:当用两个补码表示的带符号数进行运算时,N=1 表示运算的结果为负数;N=0 表示运算的结果为正数或零;
Z
Z=1 表示运算的结果为零;Z=0表示运算的结果为非零;
C
:可以有4种方法设置C的值:
─ 加法运算(包括比较指令CMN):当运算产生了进位时(无符号数溢出),C=1,否则C=0。─ 减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出),C=0,否则C=1
─ 对于包含移位操作的非加/减运算指令,C为移出值的最后一位。
─ 对于其他的非加/减运算指令,C的值通常不改变。
V
:可以有2种方法设置V的值:
─ 对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。
─ 对于其他的非加/减运算指令,C的值通常不改变。
保留位[27 : 8]:当改变PSR中的条件码标志位或者控制位时,保留位不要被改变,在程序中也不要使用保留位来存储数据。保留位将用于ARM版本的扩展。

控制位[7 : 0]PSR的低8位(包括IFTM[40])称为控制位,当发生异常时这些位可以被改变。如果处理器运行特权模式,这些位也可以由程序修改。 

I
I =1 表示禁止外部(硬件)中断(IRQ
F
F=1 表示快速中断(FIQ
T
:反映处理器的运行状态。
对于ARM体系结构v5及以上的版本的T系列处理器,当该位为1时,程序运行于Thumb状态,否则运行于ARM状态。对于ARM体系结构v5及以上的版本的非T系列处理器,当该位为1时,执行下一条指令以引起为定义的指令异常;当该位为0时,表示运行于ARM状态。

运行模式位M[4 : 0]M0M1M2M3M4是模式位。这些位决定了处理器的运行模式。具体含义如表2-2所示:
2-2        运行模式位M[40]的具体含义
M[4
0]        处理器模式        可访问的寄存器
0b10000        
用户模式        PCCPSR,R0-R14
0b10001        FIQ
模式        PCCPSR, SPSR_fiqR14_fiq-R8_fiq, R7R0
0b10010        IRQ
模式        PCCPSR, SPSR_irqR14_irq,R13_irq,R12R0
0b10011        
管理模式        PCCPSR, SPSR_svcR14_svc,R13_svc,,R12R0,
0b10111        
中止模式        PCCPSR, SPSR_abtR14_abt,R13_abt, R12R0,
0b11011        
未定义模式        PCCPSR, SPSR_undR14_und,R13_und, R12R0,
0b11111        
系统模式        PCCPSRARM v4及以上版本), R14R0

7种运行模式:
用户模式(usrARM处理器正常的程序执行状态,不能直接切换到其他模式
快速中断模式(fiq):用于高速数据传输或通道处理FIQ异常响应时进入此模式
外部中断模式(irq用于通用的中断处理IRQ异常响应时进入此模式
管理模式(svc):操作系统使用的保护模式,系统复位和软件中断响应时进入此模式(由系统调用执行软中断SWI命令触发)
系统模式(sys):运行具有特权的操作系统任务,与用户模式类似,但具有可以直接切换到其他模式等特权
数据访问中止模式(abt当数据或指令预取终止时进入该模式,用于支持虚拟内存和/或存储器保护,在ARM7TDMI没有大用处
未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真

硬件权限级别:系统模式 > 异常模式 > 用户模式

异常模式优先级:SVC>FIQ>IRQ>ABT>UND

ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。
除用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式;其中除去用户模式和系统模式以外的5种又称为异常模式,常用于处理中断或异常,以及需要访问受保护的系统资源等情况。


寄存器组织:
ARM
状态:
R0
R14 通用寄存器
         R0
R7   未分组寄存器,所有7种运行模式下指向同一物理寄存器,在中断或异常处理等模式转换时,需防止寄存器中数据的破坏。
         R8
R14  分组 根据不同的运行模式访问不同的物理寄存器
R8
R12  fiq外,其余同usr模式
R13
R14 usrsys外,其余有各自分组模式
R15 PC  
程序计数器
R16     
状态寄存器  CPSR通用;   SPSR usrsys外,用于异常保护的CPSR的备份,异常时,保存CPSR值,异常退出时,将该值恢复到CPSR
Thumb
状态:
R0
R7 通用
SP
对应ARM状态R13
LR
对应ARM状态R14
PC
对应ARM状态R15
CPSR
SPSRARM状态同

R13 
SP stack pointer 堆栈指针,用于取指令操作
R14 
LR Load register 用于程序调用
PC 
-程序计数器,总是指向当前指令的下两条指令,即PC值为当前指令地址值加8个字节


Linux操作系统与ARM工作模式

    首先,ARM开发板在刚上电或复位后都会首先进入SVC即管理模式,此时、程序计数器R15-PC值会被赋为0x0000 0000;bootloader就是在此模式下,位于0x0000 0000的NOR FLASH或SRAM中装载的,因此、开机或重启后bootloader会被首先执行。
    接着,bootloader引导Linux内核,此时、Linux内核一样运行在ARM的SVC即管理模式下;当内核启动完毕、准备进入用户态init进程时,内核将ARM的当前程序状态CPSR寄存器M[4:0]设置为10000、进而用户态程序只能运行在ARM的用户模式。
    由于ARM用户模式下对资源的访问受限,因此、可以达到保护Linux操作系统内核的目的。
    需要强调的是:Linux内核态是从ARM的SVC即管理模式下启动的,但在某些情况下、如:硬件中断、程序异常(被动)等情况下进入ARM的其他特权模式,这时仍然可以进入内核态(因为就是可以操作内核了);同样,Linux用户态是从ARM用户模式启动的,但当进入ARM系统模式时、仍然可以操作Linux用户态程序(进入用户态,如init进程的启动过程)。
    即:Linux内核从ARM的SVC模式下启动,但内核态不仅仅指ARM的SVC模式(还包括可以访问内核空间的所有ARM模式);Linux用户程序从ARM的用户模式启动,但用户态不仅仅指ARM的用户模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值