ARM的7种工作模式、37个通用寄存器、CPSR程序状态寄存器

xiaoxiao2021-02-28  52

一、ARM 采用的是32位架构

1、ARM约定

Byte:8 bits

Halfword:16 bits (2 byte)

Word:32 bits (4 byte)

2、大部分ARM core 提供

ARM 指令集(32-bit) 每条指令都是4个字节?

Thumb 指令集(16-bit )

Thumb2指令集(16 & 32bit)

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

普通模式(Normal)

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

特权模式(Privilege)

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

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

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

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

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

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

各种模式的切换,可以是程序员通过代码主动切换(通过写CPSR寄存器),也可以是CPU在某些情况下自动切换。各种模式下权限和可以访问的寄存器不同。同一时刻只处于其中一种模式。操作系统有安全级别要求,因此CPU设计多种模式是为了方便操作系统的多种角色安全等级需要。不同模式下,对资源的访问权限不一样。

三、37个通用寄存器

1、寄存器分类和区别

(1)SoC中有2类寄存器:通用寄存器和SFR

通用寄存器(ARM中有37个)是CPU的组成部分,CPU的很多活动都需要通用寄存器的支持和参与。SFR(special function register,特殊功能寄存器)属于外设硬件的组成部分,我们通过访问外设的SFR来编程操控这个外设,这就是硬件编程控制的方法。

(2)通用寄存器没有地址,通过寄存器名字来访问;而特殊功能寄存器有地址。

(3)寄存器是外设硬件的软件编程接口API。使用软件编程控制某一硬件,其实就是编程读写该硬件的寄存器。

2、37个通用寄存器

(1)ARM总共有37个寄存器,但是每种模式下最多只能看到18个寄存器,其他寄存器虽然名字相同但是在当前模式不可见。 对r13这个名字来说,在ARM中共有6个名叫r13(又叫sp,栈指针)的寄存器,但是在每种特定处理器模式下,只有一个r13是当前可见的,其他的r13必须切换到他的对应模式下才能看到。这种设计叫影子寄存器(banked register)。 (2)ARM共有37个寄存器,都是32位长度。 30个为“通用”型;1个固定用作PC(Program control register,程序控制寄存器,PC指向哪里,CPU就会执行哪条指令,因此只有一个);1个固定用作CPSR(程序状态寄存器,用来记录当前cpu的状态,因此只有一个);5个固定用作5种异常模式下的SPSR(Saved Program Status Register,程序状态保存寄存器,用来保存CPSR的,返回时将spsr赋给cpsr)。 (3) lr用来存储返回地址。 (4)第二幅图中带颜色的,表示每种模式下特有的寄存器。 四、CPSR程序状态寄存器   (1)CPSR中各个bit位表明了CPU的某些状态信息,这些信息非常重要,和后面学到的汇编指令息息相关(譬如BLE指令中的E就和CPSR中的Z标志位有关)。 (2)CPSR中的I、F位和开中断、关中断有关。 (3)CPSR中的mode位(bit4~bit0共5位)决定了CPU的工作模式,在uboot代码中会使用汇编进行设置。

转载请注明原文地址: https://www.6miu.com/read-35828.html

最新回复(0)