原创 arm 模式 cpsr

2011-5-13 15:51 2880 4 4 分类: MCU/ 嵌入式

c669ef6f-2a91-4c80-a041-e431e6d42288.JPG


2种运行状态:
ARM状态(32位)、Thumb状态(16位),两种状态之间可任意切换;
7种运行模式:
用户模式usr
快速中断fiq
外部中断irq
管理svc
系统sys
数据访问中止abt
未定义指令中止und

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

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

程序状态寄存器:
CPSR 每一中模式下访问同一物理寄存器
SPSR 除usr、sys外,用于异常保护的CPSR的备份,异常时,保存CPSR值,异常退出时,将该值恢复到CPSR,每一中异常运行模式(除usr和sys)有各自的物理寄存器。其功能:保存ALU中的当前操作信息;控制允许和禁止中断;设置处理器的运行模式


统计上述,ARM处理器共有:
8个未分组(R0~R7)寄存器共享物理寄存器
2×5个分组物理寄存器:fiq模式分别独享一个fiq物理寄存器(对应R8_fiq~R14_fiq),其余模式分别共享一个通用物理寄存器
6个堆栈指针物理寄存器,R13×6
6个LR物理寄存器      R14×6
1个程序计数物理寄存器 
6个状态物理寄存器:一个CPSR,5个SPSR

8+10+6+6+1+6 = 37个物理寄存器

Thumb状态:
出去R8~R14未分组部分
SP 对应 ARM状态R13
LR 对应 ARM状态R14
PC 对应 ARM状态R15
CPSR对应ARM状态CPSR
SPSR 对应ARM状态SPSR
程序状态寄存器位标识:

条件标识位        保留        控制位
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位(包括I、F、T和M[4:0])称为控制位,当发生异常时这些位可以被改变。如果处理器运行特权模式,这些位也可以由程序修改。 

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

运行模式位M[4 : 0]:M0、M1、M2、M3、M4是模式位。这些位决定了处理器的运行模式。具体含义如表2-2所示:
表2-2        运行模式位M[4:0]的具体含义
M[4:0]        处理器模式        可访问的寄存器
0b10000        用户模式        PC,CPSR,R0-R14
0b10001        FIQ模式        PC,CPSR, SPSR_fiq,R14_fiq-R8_fiq, R7~R0
0b10010        IRQ模式        PC,CPSR, SPSR_irq,R14_irq,R13_irq,R12~R0
0b10011        管理模式        PC,CPSR, SPSR_svc,R14_svc,R13_svc,,R12~R0,
0b10111        中止模式        PC,CPSR, SPSR_abt,R14_abt,R13_abt, R12~R0,
0b11011        未定义模式        PC,CPSR, SPSR_und,R14_und,R13_und, R12~R0,
0b11111        系统模式        PC,CPSR(ARM v4及以上版本), R14~R0
由表2-2可知,并不是所有的运行模式位的组合都是有效地,其他的组合结果会导致处理器进入一个不可恢复的状态


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条