EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
| 处理器模式 | 描述 | | 用户模式(User,usr) | 正常程序执行的模式 | | 快速中断模式(FIQ,fiq) | 用于高速数据传输和通道处理 | | 外部中断模式(IRQ,irq) | 用于通常的中断处理 | | 特权模式(Supervisor,sve) | 供操作系统使用的一种保护模式 | | 数据访问中止模式(Abort,abt) | 用于虚拟存储及存储保护 | | 未定义指令中止模式(Undefined,und) | 用于支持通过软件仿真硬件的协处理器 | | 系统模式(System,sys) | 用于运行特权级的操作系统任务 |
usr是普通模式,其他六种是特权模式(Privileged Modes),在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。除了usr和sys模式以外的五种模式又被称为异常模式。 [* Q8 x9 h; U( y' Z6 h m
6 u9 \% J S3 N5 Y3 |$ m+ i+ x
处理器模式可以通过软件控制进行切换,也可以通过外部中断或异常处理过程进行切换。大多数的用户程序运行在用户模式下。这时,应用程序不能够访问一些受操作系统保护的系统资源。应用程序也不能直接进行处理器模式的切换。当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理过程中进行处理器模式的切换。这种体系结构可以使操作系统控制整个系统的资源。3 q9 V/ }: S2 l, U$ i6 Y$ A) u
: ~6 b* O, s N. V4 d* M7 _ 当应用程序发生异常中断时,处理器进入相应的异常模式。在每一种异常模式中都有一组寄存器,供相应的异常处理程序使用,这样就可以保证在进入异常模式时,用户模式下的寄存器(保存了程序运行状态)不被破坏。
# u/ o: {/ x; T) S+ [* A& D
2 v5 R0 Y) D, _ 系统模式(sys)并不是通过异常过程进入的,它和用户模式具有完全一样的寄存器。但是系统模式属于特权模式,可以访问所用的系统资源,也可以直接进行处理器模式切换。它主要供操作系统任务使用。通常操作系统的任务需要访问所有的系统资源,同时该任务仍然使用用户模式的寄存器组,而不是使用异常模式下相应的寄存器组,这样可以保证当异常中断发生时任务状态不被破坏。
. u0 R1 `$ e2 J0 ^& x$ }0 p二、ARM寄存器 ARM处理器共有37个寄存器。包括:31个通用寄存器和6个状态寄存器,他们都是32位的。
1 z6 x5 Y+ v' l: J/ Y. j1 e1、31个通用寄存器可用分为3类:未备份寄存器,包括R0~R7、备份寄存器,包括R8~R14、程序计数器PC,即R15。 8 M: {( q k9 i% j; }9 z0 G
1)、未备份寄存器,包括R0~R7。对于未备份寄存器来说,在所以处理器模式下指的都是同一个物理寄存器。在异常中断造成处理器模式切换时,由于不同的处理器模式使用相同的物理寄存器,可能造成寄存器中数据被破坏。未备份寄存器没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用。 * L' x6 c3 x# W& `+ m. c- J$ g
2)、备份寄存器,对于备份寄存器R8~R12来说,每个寄存器对应两个不同的物理寄存器。例如,当使用快速中断模式下的寄存器时,寄存器R8和寄存器R9分别记作R8_fiq、R9_fiq;当使用用户模式下的寄存器时,寄存器R8和寄存器R9分别记作R8_usr、R9_usr时等。在这两种情况下,使用的是不同的物理寄存器。系统没有将这几个寄存器用于任何特殊用途,但是当中断处理非常简单,仅仅使用R8~R14寄存器时,FIQ处理程序可以不必执行保存和候复中断现场的指令,从而可以使中断处理过程非常迅速,c从而达到快速中断的目的。 : j3 @2 ?/ j1 C2 Z
3)、对于备份寄存器R13和R14来说,每个寄存器对应6个不同的物理寄存器,其中一个是用户模式和系统模式共用的。记作:R13_usr、R13_svc、R13_abt、R13_und、R13_irq、R13_fiq。
( u$ D8 B, v* m; T, @寄存器R13在ARM中常用作栈指针。在ARM指令集中,这只是一种习惯的用法,并没有任何指令强制性地使用R13作为栈指针,用户也可以使用其他的寄存器作为栈指针;而在Thumb指令集中,有一些指令强制性地使用R13作为栈指针。每一种异常模式都拥有自己的物理的R13。应用程序初始化该R13,使其指向该异常模式专用的栈地址。当进入异常模式时,可以将需要使用的寄存器保存在R13所指的栈中:当退出异常处理程序时,将保存在R13所指的栈中的寄存器值弹出。这样就使异常处理程序不会破坏被其中断程序的运行现场。% q7 s5 n$ Q @0 i: |# G
$ X4 a8 m. q# Y$ ^ 寄存器R14又被称为连接寄存器(Link Register,LR),在ARM体系中具有下面两种特殊的作用:
1 B3 Y7 o' s6 k6 c: }( uA、每一种处理器模式自己的物理R14中存放着当前子程序的返回地址。当通过BL或BLX指令调用子程序时,R14被设置成该子程序的返回地址。在子程序中,当把R14的值复制到程序计数器PC中时,子程序即返回。 - D# m! ?6 V- y) |8 d/ d" U0 W
B、当异常中断发生时,该异常模式特定的物理R14被设置成该异常模式将要返回的地址。对于有些异常模式,R14的值可能与将要返回的地址有一个常数的偏移量。 & u3 A/ k( j. R+ s/ }5 x2 o4 M
4)、程序计数器R15,当成功地向R15写入一个地址数值时,程序将跳转到该地址执行。 2、程序状态寄存器 CPSR(当前程序状态寄存器)可以在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。每一种处理器模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断程序退出时,可以用SPSR中保存的值来恢复CPSR。
% g9 q5 _4 L* G7 I' {8 z; Y' p1 e5 V( v6 M8 n- E+ o
由于用户模式和系统模式不是异常中断模式,所以它们没有SPSR。当在用户模式或系统模式中访问SPSR时,将会产生不可预知的结果。
* v$ f1 ~1 u t( u5 b Y" q& _" B
CPSR的格式如下所示。SPSR格式与CPSR格式相同。 N(Negative):当两个补码表示的有符号整数运算时,1表示运算结果为负数,0表示结果为正或零。 Z(Zero):1表示运算的结果为零,0表示运算的结果不为零。对于CMP指令,1表示进行比较的两个数大小相等。 C(Carry):下面分四种情况讨论C的设置方法: a)加法运算(包括比较指令CMN):当运算产生了进位时(无符号数溢出),C=1,否则C=0。 b)减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出),C=0,否则C=1。 c)对于包含移位操作的非加/减运算指令,C为移出值的最后一位。 d)对于其他的非加/减运算指令,C的值通常不改变。 V(oveRFlow):下面分两种情况讨论V的设置方法 a)对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。 b)对于其他的非加/减运算指令,V的值通常不改变。 CPSR的低8位I、F、T、M[4:0]统称为控制位。当异常中断发生时,这些位发生变化。 I:1 表示禁止外部(硬件)中断(IRQ). p4 W* q; }( ^' z6 {. ]" l
F:1 表示禁止快速中断(FIQ)
3 Y& |1 i) Q% f5 L" W Z8 WT:1表示为thumb状态,0为arm状态 M[4:0]:用来设置处理器的工作模式。 M[4:0] | 处理器模式 | 可访问的寄存器 | 0b10000 | User | PC,R14一R0,CPSR | 0b10001 | FIQ | PC,R14_fiq-R8_flq,R7~R0,CPSR,SPSR_nq | 0b10010 | 1RQ | PC,R14 _irq-R13 _irq,R12一R0,CPSR,SPSR_ irq | 0b10011 | Supervisor | PC,R14_ svc-R13 _svc,R12~R0,CPSR,SPSR_svc | 0b10111 | Abort | PC,R14_abt-R13_abt,R12~R0,CPSR,SPSR_abt | 0b11011 | Undefined | PC,R14_und-R13_und,R12~R0,CPSR,SPSR_ und | | 0b11111 | System | PC,R14-R0,CPSR |
各种处理器模式下的寄存器表(共37个): 用户模式 | 系统模式 | 特权模式 | 中止模式 | 未定义指令模式 | 外部中断模式 | 快速中断模式 | R0 | R0 | R0 | R0 | R0 | R0 | R0 | R1 | R1 | R1 | R1 | R1 | R1 | R1 | R2 | R2 | R2 | R2 | R2 | R2 | R2 | R3 | R3 | R3 | R3 | R3 | R3 | R3 | R4 | R4 | R4 | R4 | R4 | R4 | R4 | R5 | R5 | R5 | R5 | R5 | R5 | R5 | R6 | R6 | R6 | R6 | R6 | R6 | R6 | R8 | R8 | R8 | R8 | R8 | R8 | R8_fiq | R9 | R9 | R9 | R9 | R9 | R9 | R9_fiq | R10 | R10 | R10 | R10 | R10 | R10 | R10_fiq | R11 | R11 | R11 | R11 | R11 | R11 | R11_fiq | R12 | R12 | R12 | R12 | R12 | R12 | R12_fiq | R13 | R13 | R13_svc | R13_abt | R13_und | R13_inq | R13_fiq | R14 | R14 | R14_svc | R14_abt | R14_und | R14_inq | R14_fiq | PC | PC | PC | PC | PC | PC | PC | CPSR | CPSR | CPSR SPSR_svc | CPSR SPSR_abt | CPSR SPSR_und | CPSR SPSR_inq | CPSR SPSR_fiq 5 Z7 f! l8 u: @
| 6 a+ R! ]4 X8 t5 s4 |5 c
|