ARM处理器的工作模式、CPSR寄存器的简单介绍、ARM的异常处理机制

1. ARM处理器的7种工作模式:

        USER:非特权模式,大部分任务执行在该模式下

        FIQ:高优先级中断模式

        IRQ:低优先级中断模式

        Supervisor:复位/软中断指令执行时会进入该模式

        Abort:存取异常模式

        Undef:执行未定义指令

        System:user模式使用的寄存器相同,但是它可以执行普通指令,也可以执行特权指令

        各种运行模式的切换是可以由程序员通过代码主动切换的(通过读写CPSR寄存器),也可以是CPU在某些情况下自动切换的。在各种模式下,其访问权限和可访问的寄存器是不同的。

寄存器

扫描二维码关注公众号,回复: 1650472 查看本文章

user_mode

FIQ_mode

IRQ_mode

SVC_mode

Undef_mode

Abort_mode

R0

R0

R1

R1

R2

R2

R3

R3

R4

R4

R5

R5

R6

R6

R7

R7

R8

R8

R8

R9

R9

R9

R10

R10

R10

R11

R11

R11

R12

R12

R12

R13(SP)

R13(SP)

R13(SP)

R13(SP)

R13(SP)

R13(SP)

R13(SP)

R14(LR)

R14(LR)

R14(LR)

R14(LR)

R14(LR)

R14(LR)

R14(LR)

R15(PC)

R15(PC)

CPSR

CPSR

SPSR

SPSR

SPSR

SPSR

SPSR

SPSR

   ARM一个有37个寄存器,长度均为32位,其中通用型的有30个,1个特定用途PC1个程序状态寄存器CPSR5个异常模式下的SPSR

2. 关于CPSR程序状态寄存器的简单介绍:

        31-27条件位(N,Z,C,V,Q)他们的内容可以被算数或逻辑运算的结果所改变,并且这些位可以决定某条条件指令是否被执行,条件位具体含义如下:

标志

含义

N

当两个有符号数进行运算时,N=1表示运算的结果为负数;N=0表示运算的结果为正数或零

Z

Z=1表示运算的结果为零,Z=0表示运算的结果非零。

C

可以有4种方法设置C的值:

 -加法运算(包括CMP):当运算结果产生了进位时(无符号数溢出),C=1,否则C=0

 -减法运算(包括CMP):当运算时产生了借位时(无符号数溢出),C=0,否则C=1

 -对于包含移位操作的非加/减运算指令,C为移出值的最后一位。

 -对于其它的非加/减运算指令,C的值通常不会改变。

V

可以有2种方法设置V的值:

 -对于加减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出

 -对于其它的非加/减运算指令,V的值通常不会改变。

Q

ARM V5及以上版本的E系列处理器中,用Q标志位指示增强的DSP运算指令是否发生了溢出。在其它版本的处理器中,Q标志位无定义

        ARM状态下,绝大多数的指令都是有条件执行的;在THUMB状态下,仅有分支指令是条件执行的。

        24位(J位),该位置1,表示处理器处于JAVA加速(仅ARM 5TE/J架构支持)

        7-6位(I F)中断控制位,I=1禁止IRQF=1禁止FIQ

        5位(T位),T=0,处理器处于ARM状态,T=1,处理器处于Thumb状态

        4-0位(处理器模式位),在uboot代码中会使用汇编指令进行设置

3. ARM的异常处理机制:

当异常差生时,处理器会进行如下操作:

一.拷贝CPSRSPSR_<mode>

二.设置适当的CPSR标志位(改变处理器模式进入ARM态、改变处理器进入响应的异常模式、在需要的时候设置中断禁止位)

三.保存返回地址到LR_<mode>

四.设置PC为相应的异常向量

五.进行中断服务

六.从SPSR_<mode>恢复CPSR

七.从LR_<mode>恢复PC


猜你喜欢

转载自blog.csdn.net/weixin_40955308/article/details/80116994