历史上的今天
返回首页

历史上的今天

今天是:2025年01月18日(星期六)

正在发生

2020年01月18日 | ARM处理器的运行模式和ARM寄存器

2020-01-18 来源:eefocus

一、ARM处理器共有7种运行模式 

处理器模式描述
用户模式(User,usr)正常程序执行的模式
快速中断模式(FIQ,fiq)用于高速数据传输和通道处理
外部中断模式(IRQ,irq)用于通常的中断处理
特权模式(Supervisor,sve)供操作系统使用的一种保护模式
数据访问中止模式(Abort,abt)用于虚拟存储及存储保护
未定义指令中止模式(Undefined,und)用于支持通过软件仿真硬件的协处理器
系统模式(System,sys)用于运行特权级的操作系统任务

usr是普通模式,其他六种是特权模式(Privileged Modes),在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。除了usr和sys模式以外的五种模式又被称为异常模式。

处理器模式可以通过软件控制进行切换,也可以通过外部中断或异常处理过程进行切换。大多数的用户程序运行在用户模式下。这时,应用程序不能够访问一些受操作系统保护的系统资源。应用程序也不能直接进行处理器模式的切换。当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理过程中进行处理器模式的切换。这种体系结构可以使操作系统控制整个系统的资源。

当应用程序发生异常中断时,处理器进入相应的异常模式。在每一种异常模式中都有一组寄存器,供相应的异常处理程序使用,这样就可以保证在进入异常模式时,用户模式下的寄存器(保存了程序运行状态)不被破坏。

系统模式(sys)并不是通过异常过程进入的,它和用户模式具有完全一样的寄存器。但是系统模式属于特权模式,可以访问所用的系统资源,也可以直接进行处理器模式切换。它主要供操作系统任务使用。通常操作系统的任务需要访问所有的系统资源,同时该任务仍然使用用户模式的寄存器组,而不是使用异常模式下相应的寄存器组,这样可以保证当异常中断发生时任务状态不被破坏。


二、ARM寄存器

ARM处理器共有37个寄存器。包括:31个通用寄存器和6个状态寄存器,他们都是32位的。


1、31个通用寄存器可用分为3类:未备份寄存器,包括R0~R7、备份寄存器,包括R8~R14、程序计数器PC,即R15。


1)、未备份寄存器,包括R0~R7。对于未备份寄存器来说,在所以处理器模式下指的都是同一个物理寄存器。在异常中断造成处理器模式切换时,由于不同的处理器模式使用相同的物理寄存器,可能造成寄存器中数据被破坏。未备份寄存器没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用。


2)、备份寄存器,对于备份寄存器R8~R12来说,每个寄存器对应两个不同的物理寄存器。例如,当使用快速中断模式下的寄存器时,寄存器R8和寄存器R9分别记作R8_fiq、R9_fiq;当使用用户模式下的寄存器时,寄存器R8和寄存器R9分别记作R8_usr、R9_usr时等。在这两种情况下,使用的是不同的物理寄存器。系统没有将这几个寄存器用于任何特殊用途,但是当中断处理非常简单,仅仅使用R8~R14寄存器时,FIQ处理程序可以不必执行保存和候复中断现场的指令,从而可以使中断处理过程非常迅速,c从而达到快速中断的目的。


3)、对于备份寄存器R13和R14来说,每个寄存器对应6个不同的物理寄存器,其中一个是用户模式和系统模式共用的。记作:R13_usr、R13_svc、R13_abt、R13_und、R13_irq、R13_fiq。


寄存器R13在ARM中常用作栈指针。在ARM指令集中,这只是一种习惯的用法,并没有任何指令强制性地使用R13作为栈指针,用户也可以使用其他的寄存器作为栈指针;而在Thumb指令集中,有一些指令强制性地使用R13作为栈指针。每一种异常模式都拥有自己的物理的R13。应用程序初始化该R13,使其指向该异常模式专用的栈地址。当进入异常模式时,可以将需要使用的寄存器保存在R13所指的栈中:当退出异常处理程序时,将保存在R13所指的栈中的寄存器值弹出。这样就使异常处理程序不会破坏被其中断程序的运行现场。

寄存器R14又被称为连接寄存器(Link Register,LR),在ARM体系中具有下面两种特殊的作用:
A、每一种处理器模式自己的物理R14中存放着当前子程序的返回地址。当通过BL或BLX指令调用子程序时,R14被设置成该子程序的返回地址。在子程序中,当把R14的值复制到程序计数器PC中时,子程序即返回。


B、当异常中断发生时,该异常模式特定的物理R14被设置成该异常模式将要返回的地址。对于有些异常模式,R14的值可能与将要返回的地址有一个常数的偏移量。


4)、程序计数器R15,当成功地向R15写入一个地址数值时,程序将跳转到该地址执行。

 

2、程序状态寄存器

CPSR(当前程序状态寄存器)可以在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。每一种处理器模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断程序退出时,可以用SPSR中保存的值来恢复CPSR。

由于用户模式和系统模式不是异常中断模式,所以它们没有SPSR。当在用户模式或系统模式中访问SPSR时,将会产生不可预知的结果。

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)
F:1 表示禁止快速中断(FIQ)
T: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


引用自《ARM体系结构与编程》 杜春雷版

推荐阅读

史海拾趣

CML公司的发展小趣事

面对日益增长的市场需求,CML开始积极寻求市场扩张的机会。公司通过与各大电子产品制造商建立合作关系,将自己的产品广泛应用于电视、手机、电脑等消费电子产品中。同时,CML还积极开拓新兴市场,如汽车电子、工业控制等领域,不断扩大自己的市场份额。这些策略的实施,使得CML的业绩逐年攀升,公司规模不断壮大。

博林(BL)公司的发展小趣事

博林公司自创立以来,一直致力于电子行业的技术创新。公司拥有一支专业的研发团队,不断投入巨资进行技术研发和创新。在某一时期,博林公司成功开发出了一款具有颠覆性的电子产品,凭借其卓越的性能和独特的设计,迅速在市场上获得了广泛认可。这款产品的成功推出,不仅为博林公司带来了巨大的经济效益,也进一步巩固了其在电子行业的领导地位。

Comus_International公司的发展小趣事

Comus International深知,要想在竞争激烈的电子行业中立足,除了不断创新外,还需要注重产品质量和服务。因此,公司一直将质量和服务作为核心竞争力,不断提升产品质量和服务水平。正是这种对质量和服务的执着追求,使得Comus International在市场上赢得了客户的广泛认可和信赖。

Defense Supply Center Columbus公司的发展小趣事

随着国防事业的不断发展,军事电子产品的市场需求也在不断增加。Defense Supply Center Columbus公司敏锐地捕捉到了这一市场机遇,积极拓展国内外市场。公司通过与国内外知名企业和机构建立合作关系,共同开发新产品、新技术,不断拓展市场份额。同时,公司还积极参加各类国际展览和论坛,展示公司的技术实力和产品优势,吸引了众多潜在客户的关注。这些市场拓展的努力,为公司的发展注入了新的动力。

Acutechnology公司的发展小趣事

随着国内市场的逐渐饱和,Acutechnology公司开始将目光投向国际市场。公司制定了国际化发展战略,通过在海外设立分支机构、参加国际展会等方式拓展海外业务。同时,公司还积极引进国际先进技术和管理经验,提升企业的整体竞争力。这些举措为公司的长远发展注入了新的活力。

安普康(AMPCOM)公司的发展小趣事

安普康(AMPCOM)自创立之初,就致力于将品牌推向国际市场。随着公司规模的扩大和产品线的丰富,安普康开始实施全球商标注册战略。从2011年首次申请安普康AMPCOM商标,到随后的几年内在泰国、日本、新加坡、老挝、澳大利亚等多个国家成功注册,安普康的品牌影响力逐渐扩大。这一过程中,公司不仅面临着不同国家法律法规的挑战,还需应对文化差异和市场需求的差异。然而,凭借专业的团队和精准的市场定位,安普康成功地将品牌推向了全球舞台。

问答坊 | AI 解惑

产生幅值精确的正弦波

利用SPWM产生正弦波只能把频率计算来, 那么怎样才能产生幅值精确的波形呢? 哪位大侠帮助下。…

查看全部问答>

AVR单片机ISP(在系统编程)及熔丝补救方法

并行编程,最早的编程方法,功能最强大,但需要连接较多的引脚,通常需要12V~24V的高压,以示区别,下面称为高压并行编程。 ISP(In System Programmability) 在系统编程,简称为串行下载。 IAP(In Application Programing) 在应用编程,BootLoad ...…

查看全部问答>

基于单片机的秒表计时器

今天刚学完单片机,老师也布置了这个作业,虽然说是最简单的那种,但是对我这个初学者来说还是蛮有难度的。我会尽自己的努力把东西做好。这个主要是通过设置按键来控制计数,还好老师只是要两个数码管显示。希望大家给点建议哈…

查看全部问答>

嵌入式低层开发、嵌入式应用开发都是些什么方面???

嵌入式低层开发做些什么?是1、硬件2、驱动3、系统移植吗?还有其他的吗? 嵌入式应用开发和PC机开发类似吗?…

查看全部问答>

嵌入式软件采购,供应商质量保证

聘用:我这里需要嵌入式软件采购工作的朋友(2年以上工作经验)或者是供应商质量保证方面工作的相关朋友(4年以上工作经验),是一规模强大的法资公司,全球500强之一。如有疑问或问题,请联系我,谢谢! 我的联系方式:13522292029 liping_ling@ ...…

查看全部问答>

GPRS MODEM的IP问题请问!

   最近用ARM+Linux做一个基于GPRS的无线数据传输项目。两个gprs modem分别接到arm开发板和pc上,两个modem之间能实现点对点通信,互传数据。但是因为gprs modem拨号获得的ip(10.x.x.x)是动态分配,开发板每次上电拨号获得的ip都不同,所 ...…

查看全部问答>

关于IAR编译器volatile警告问题

4.42a 发现同时使用2个以上volatile运算时就会出现如下警告:Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement  ...…

查看全部问答>

StellarisWare Tools 文件夹下小工具介绍

对Tools文件夹下的几个工具做一个简单的介绍: 这些工具大多数都要在PC上的命令行下使用,所以在windows XP或Win 7下,使用快捷键WIN+R后输入cmd,在进入到这些小程序所在的路径下,这样使用这些程序转换或生成的文件也在该程序所在的目录下。 ...…

查看全部问答>

如何确定终端是连到协调器还是路由器?

如何确定终端是连到协调器还是路由器?…

查看全部问答>