找回密码
 注册
关于网站域名变更的通知
查看: 602|回复: 2
打印 上一主题 下一主题

ARM处理器的运行模式和ARM寄存器

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-6-18 11:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
一、ARM处理器共有7种运行模式
处理器模式描述
用户模式(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: f
B、当异常中断发生时,该异常模式特定的物理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
0b11111SystemPC,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
  • TA的每日心情
    慵懒
    2022-12-26 15:28
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2021-6-18 13:13 | 只看该作者
    处理器模式可以通过软件控制进行切换,也可以通过外部中断或异常处理过程进行切换
  • TA的每日心情
    开心
    2023-1-3 15:10
  • 签到天数: 2 天

    [LV.1]初来乍到

    3#
    发表于 2021-6-18 16:33 | 只看该作者
    ARM处理器共有37个寄存器
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 04:29 , Processed in 0.140625 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表