ARM通识——ARM的7种基本工作模式与37个通用寄存器

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

一、ARM采用32位架构

ARM约定一个Byte是8 bits,一个Halfword是16 bits (2 byte),一个Word是32 bits (4 byte)。

大部分ARM core 提供ARM 指令集(32 bit,每条指令都是4个字节),Thumb 指令集(16bit),Thumb2指令集(16 & 32bit)。

二、ARM的7种基本工作模式

ARM的工作模式分为普通模式、特权模式,其中特权模式又细分为六种模式。

普通模式(Normal)

(1)用户模式(User):非特权模式,大部分任务执行在这种模式。

特权模式(Privilege)

(2)快速中断模式(FIQ):当一个高优先级(fast) 中断产生时将会进入这种模式。

(3)普通中断模式(IRQ):当一个低优先级(normal) 中断产生时将会进入这种模式。

(4)超级用户模式(SVC):当复位或软中断指令执行时将会进入这种模式。

(5)中止模式(Abort):当存取异常时将会进入这种模式。

(6)未定义模式(Undef):当执行未定义指令时会进入这种模式。

(7)系统模式(System):使用和User模式相同寄存器集的特权模式。

诸多模式是为了满足操作系统的安全等级需要,各种模式下可以访问的寄存器不同。

注意,同一时刻CPU只处于其中一种模式。

程序员可以修改CPSR寄存器,实现各个模式的切换;CPU在某些情况下也会自动切换。

三、ARM的37个通用寄存器

1、寄存器分类

SoC中有2类寄存器,即通用寄存器、特殊功能寄存器(SFR,special function register)。

(1)通用寄存器

通用寄存器是CPU的组成部分,CPU的很多活动都需要通用寄存器的支持和参与。

ARM一共有37个通用寄存器,这些通用寄存器没有地址,通过寄存器名字来访问。

(2)特殊功能寄存器

特殊功能寄存器,属于外设硬件的组成部分。使用软件编程控制某一硬件,其实就是编程读写这个硬件的特殊功能寄存器。

注意,特殊功能寄存器有地址,通过地址来访问寄存器。

2、ARM的37个通用寄存器

(1)影子式设计

注意,上图中除了Abort模式列出所有的寄存器外,其他模式只列出对应位置该模式下特有的寄存器,没有列出的寄存器,则说明和Abort模式共用。比如User模式下有自己的r13和r14寄存器,其他寄存器和Abort模式相同。

这样算下来,ARM总共有 37 个寄存器,但最多只能同时存在18个寄存器。有些寄存器虽然名字相同,但是在当前模式是不可见的。比如在ARM中一共有6个名叫r13的寄存器,但是在特定的处理器模式下,只有一个r13是当前可见的,其他的r13必须切换到对应的模式才能看到。这种设计叫影子寄存器。

这样设计的好处是,当各种异常发生的时候,每种异常模式都可以保存一些重要的数据,异常处理程序完成之后返回异常前的程序时,不会破坏原有的寄存器或状态。

(2)重要的寄存器

这37个寄存器都是32位长度,值得重点理解的寄存器有以下几个。

程序控制寄存器(PC,Program Control Register)

  • 此寄存器存放将要执行的指令的地址,它指向哪里CPU就会执行哪条指令,所以程序跳转时把目标代码的地址放到PC寄存器中。
  • 整个CPU只有一个PC寄存器,其别名是r15寄存器

程序状态寄存器(CPSR,Current Program Status Register)

  • 这个寄存器用来记录CPU的当前状态。
  • 整个CPU只有一个CPSR寄存器。

程序状态保存寄存器(SPSR,Saved Program Status Register)

  • 这个寄存器用来保存CPSR的,子程序返回时将SPSR赋给CPSR。
  • 整个CPU有5个SPSR寄存器,但在某模式下只能使用该模式对应的SPSR寄存器。
  • SPSR寄存器的别名是r13寄存器

连接寄存器(LR,Link Register)

  • 作用一是调用子程序时,用来保存子程序返回地址(子程序返回时返回到哪个地址)。当通过bl或blx指令调用子程序时,硬件会自动将子程序返回地址保存在LR寄存器中。在子程序返回时,把LR的值复制到PC即可实现子程序返回。比如可以使用mov pc,lr完成子程序返回。
  • 作用二是当异常发生时,LR中保存的值等于异常发生时PC的值减4,因此在各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行。
  • 连接寄存器的别名是r14寄存器

四、程序状态寄存器(CPSR)

程序状态寄存器(CPSR)在CPU中只有一个,是32bit的,记录着CPU的当前状态。这些信息非常重要,和后面学到的汇编指令息息相关(比如BLE指令中的E就和CPSR中的Z标志位有关)。

程序状态寄存器每个bit的含义如下。

描述
bit[31:28]

条件位

  • N = Negative result from ALU
  • Z = Zero result from ALU
  • C = ALU operation Carried out
  • V = ALU operation oVerflowed
bit[27]Q位,仅ARM 5TE/J架构支持,用来指示饱和状态。
bit[24]J位,仅ARM 5TE/J架构支持,J = 1处理器处于Jazelle状态。
bit[7~6]

中断禁止位

  • I = 1 表示禁止IRQ。
  • F = 1 表示禁止FIQ。
bit[5]

T位

  • 仅ARM  xT架构支持。
  • T = 0 表示处理器处于 ARM 状态。
  • T = 1 表示处理器处于 Thumb 状态。
bit[4~0]

Mode位,这是处理器模式位,决定了CPU的工作模式。

  • 14
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天糊土

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值