EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
| 处理器模式 | 描述 | | 用户模式(User,usr) | 正常程序执行的模式 | | 快速中断模式(FIQ,fiq) | 用于高速数据传输和通道处理 | | 外部中断模式(IRQ,irq) | 用于通常的中断处理 | | 特权模式(Supervisor,sve) | 供操作系统使用的一种保护模式 | | 数据访问中止模式(Abort,abt) | 用于虚拟存储及存储保护 | | 未定义指令中止模式(Undefined,und) | 用于支持通过软件仿真硬件的协处理器 | | 系统模式(System,sys) | 用于运行特权级的操作系统任务 |
usr是普通模式,其他六种是特权模式(Privileged Modes),在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。除了usr和sys模式以外的五种模式又被称为异常模式。
: R, c& N% u- K! T% O( e5 }. i+ U, \4 D/ }: }* p/ ?) `
处理器模式可以通过软件控制进行切换,也可以通过外部中断或异常处理过程进行切换。大多数的用户程序运行在用户模式下。这时,应用程序不能够访问一些受操作系统保护的系统资源。应用程序也不能直接进行处理器模式的切换。当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理过程中进行处理器模式的切换。这种体系结构可以使操作系统控制整个系统的资源。
% c& P4 ^/ f! g- p; {7 V
" B; u: ]* D5 `' K: _ 当应用程序发生异常中断时,处理器进入相应的异常模式。在每一种异常模式中都有一组寄存器,供相应的异常处理程序使用,这样就可以保证在进入异常模式时,用户模式下的寄存器(保存了程序运行状态)不被破坏。
$ `1 S. S m- Q3 n, s6 p, E( ], N9 n* a# D2 B4 P+ S
系统模式(sys)并不是通过异常过程进入的,它和用户模式具有完全一样的寄存器。但是系统模式属于特权模式,可以访问所用的系统资源,也可以直接进行处理器模式切换。它主要供操作系统任务使用。通常操作系统的任务需要访问所有的系统资源,同时该任务仍然使用用户模式的寄存器组,而不是使用异常模式下相应的寄存器组,这样可以保证当异常中断发生时任务状态不被破坏。
: b9 ^7 y, t+ ]8 O6 D/ y0 U二、ARM寄存器 ARM处理器共有37个寄存器。包括:31个通用寄存器和6个状态寄存器,他们都是32位的。 ! w5 ^# P& X/ b7 N/ L* e9 _: {8 f
1、31个通用寄存器可用分为3类:未备份寄存器,包括R0~R7、备份寄存器,包括R8~R14、程序计数器PC,即R15。
7 B8 N$ e9 |" f; C \1)、未备份寄存器,包括R0~R7。对于未备份寄存器来说,在所以处理器模式下指的都是同一个物理寄存器。在异常中断造成处理器模式切换时,由于不同的处理器模式使用相同的物理寄存器,可能造成寄存器中数据被破坏。未备份寄存器没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用。 + a( @ i3 M4 v9 P# }
2)、备份寄存器,对于备份寄存器R8~R12来说,每个寄存器对应两个不同的物理寄存器。例如,当使用快速中断模式下的寄存器时,寄存器R8和寄存器R9分别记作R8_fiq、R9_fiq;当使用用户模式下的寄存器时,寄存器R8和寄存器R9分别记作R8_usr、R9_usr时等。在这两种情况下,使用的是不同的物理寄存器。系统没有将这几个寄存器用于任何特殊用途,但是当中断处理非常简单,仅仅使用R8~R14寄存器时,FIQ处理程序可以不必执行保存和候复中断现场的指令,从而可以使中断处理过程非常迅速,c从而达到快速中断的目的。
9 [, M* I& T1 C: ^! ?1 j6 ^3)、对于备份寄存器R13和R14来说,每个寄存器对应6个不同的物理寄存器,其中一个是用户模式和系统模式共用的。记作:R13_usr、R13_svc、R13_abt、R13_und、R13_irq、R13_fiq。 % o! _- X! |9 ~) h
寄存器R13在ARM中常用作栈指针。在ARM指令集中,这只是一种习惯的用法,并没有任何指令强制性地使用R13作为栈指针,用户也可以使用其他的寄存器作为栈指针;而在Thumb指令集中,有一些指令强制性地使用R13作为栈指针。每一种异常模式都拥有自己的物理的R13。应用程序初始化该R13,使其指向该异常模式专用的栈地址。当进入异常模式时,可以将需要使用的寄存器保存在R13所指的栈中:当退出异常处理程序时,将保存在R13所指的栈中的寄存器值弹出。这样就使异常处理程序不会破坏被其中断程序的运行现场。
2 y$ h# d+ i8 } v( \2 k
1 i2 X, f% \7 C7 F 寄存器R14又被称为连接寄存器(Link Register,LR),在ARM体系中具有下面两种特殊的作用:
$ ^& _9 ]: y4 D- b( x% ~A、每一种处理器模式自己的物理R14中存放着当前子程序的返回地址。当通过BL或BLX指令调用子程序时,R14被设置成该子程序的返回地址。在子程序中,当把R14的值复制到程序计数器PC中时,子程序即返回。
4 l' c3 P/ ~- l7 L e* Z: fB、当异常中断发生时,该异常模式特定的物理R14被设置成该异常模式将要返回的地址。对于有些异常模式,R14的值可能与将要返回的地址有一个常数的偏移量。 . v/ Z4 z! k& [8 z# S" C) V1 O$ H
4)、程序计数器R15,当成功地向R15写入一个地址数值时,程序将跳转到该地址执行。 2、程序状态寄存器 CPSR(当前程序状态寄存器)可以在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。每一种处理器模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断程序退出时,可以用SPSR中保存的值来恢复CPSR。
1 K3 }% R6 k. ?, Y" Y* X, y# }& L& t8 z5 c8 D# }1 b/ }
由于用户模式和系统模式不是异常中断模式,所以它们没有SPSR。当在用户模式或系统模式中访问SPSR时,将会产生不可预知的结果。
+ z# L! D; X( l, ~3 R4 \3 J- y; J
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)
) {0 e+ s! q" K9 M9 c# HF:1 表示禁止快速中断(FIQ)
0 c2 |( {2 s7 K: rT: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 ~5 X8 D1 T6 o, n |
, ?6 v/ t* S0 o% K( _! U |