您的位置:首页 > 其它

ARM处理器体系结构知识—[0]寄存器

2017-01-11 18:41 134 查看

ARM运行模式

用户模式(User):ARM处理器正常的程序执行状态。

快速中断模式(FIQ):用于高速数据传输或通道处理。

外部中断模式(IRQ):用于通用的中断处理。

管理模式(Supervisor):操作系统使用的保护模式。

数据访问终止模式(Abort):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。

系统模式(System):运行具有特权的操作系统任务。

未定义指令中止模式(Undifined):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。

上面7种运行模式除了用户模式外均属于“特权”模式,“特权”模式下CPU可以访问受保护的系统资源。

ARM工作模式

ARM处理器有两种工作状态:ARM状态和Thumb状态。处理器可以在两种状态之间随意切换。当处理器处于ARM状态时,会执行32位字对齐的ARM指令,当处于Thumb状态时,执行的是16位对齐的Thumb指令。Thumb状态下对寄存器的命名与ARM有部分差异,他们的关系如下:

Thumb状态下的R0~R7与ARM状态下的R0~R7相同。

Thumb状态下的CPSR与ARM状态下的CPSR相同。

Thumb状态下的FP对应于ARM状态下的R11。

Thumb状态下的IP对应于ARM状态下的R12。

Thumb状态下的SP对应于ARM状态下的R13。

Thumb状态下的LR对应于ARM状态下的R14。

Thumb状态下的PC对应于ARM状态下的R15。

寄存器

寄存器是CPU内部用来存放数据的一些小型存储区域,和内存比起来CPU可以高效的读写寄存器,所以在各个CPU支持的汇编指令中都不会看到直接对两个内存间数据的处理的,都需要寄存器进行中转。

ARM微处理器共有37个寄存器,其中31个为通用寄存器,6个为状态寄存器,所有处理器均为32位。在ARM处理器不同运行模式下的寄存器用途也不同,在ARM处理器的不同工作状态下会对部分寄存器重命名,主要体现在汇编指令上。

31个通用寄存器又分为:未分组寄存器(R0~R7)、分组寄存器(R8~R14)和程序计数器(R15).

System&UserFIQIRQSupervisorAbortUndifined
R0R0R0R0R0R0
R1R1R1R1R1R1
R2R2R2R2R2R2
R3R3R3R3R3R3
R4R4R4R4R4R4
R5R5R5R5R5R5
R6R6R6R6R6R6
R7R7R7R7R7R7
R8R8_FIQR8R8R8R8
R9R9_FIQR9R9R9R9
R10R10_FIQR10R10R10R10
R11R11_FIQR11R11R11R11
R12R12_FIQR12R12R12R12
R13R13_FIQR13_IRQR13_ABTR13_SVCR13_UND
R14R14_FIQR14_IRQR14_ABTR14_SVCR14_UND
R15(pc)R15(pc)R15(pc)R15(pc)R15(pc)R15(pc)

未分组寄存器R0~R7

在所有运行模式下,未分组寄存器都指向同一个物理寄存器,它们未被系统用作特殊的用途。

在中断或异常处理进行运行模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,所以可能造成寄存器中数据的破坏。

分组寄存器R8~R14

不同模式下,CPU会使用对应模式下特有的寄存器。

R13(SP)寄存器,在ARM汇编指令中通常作为堆栈指针使用,在Thumb工作模式下强制使用SP(R13)作为堆栈指针。

由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化时,一般都要初始化每种模式下的R13,使其指向该运行模式下的栈空间。这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。也就是说五种异常模式、非异常模式(用户模式和系统模式),都有各自独立的堆栈,用不同的堆栈指针来索引。这样当ARM进入异常模式的时候,程序就可以把一般通用寄存器压入堆栈,返回时再出栈,保证了各种模式下程序的状态的完整性。

R14 (LR)寄存器,称为链接寄存器(Link Register),当执行子程序调用指令(BL)时,R14可得到R15(程序计数器PC)的备份.

程序计数器PC(R15)

R15(PC)寄存器,用作程序计数器。在ARM状态下,位[1:0]为0,位[31:2]用于保存PC,在Thumb状态下,位[0]为0,位[31:1]用于保存PC。

由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。

程序状态寄存器R16(CPSR)

寄存器R16用作CPSR(Current Program Status Register,当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。

每一种运行模式下又都有一个专用的物理状态寄存器,称为SPSR(Saved Program Status Register,备份的程序状态寄存器),当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。

由于用户模式和系统模式不属于异常模式,它们没有SPSR,当在这两种模式下访问SPSR,结果是未知的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  arm