微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM寄存器简介

ARM寄存器简介

时间:11-20 来源:互联网 点击:
ARM处理器含有37个寄存器,这些寄存器包括以下两类寄存器。

(1)31个通用寄存器:包括程序计数器PC等,这些寄存器都是32位寄存器。

(2)6个状态寄存器:状态寄存器也是32位的寄存器,但是只使用了其中的12位。

1.通用寄存器
在ARM处理器的7种模式下都有一组对应的寄存器组。在任意时刻,可见的寄存器组包括15个通用寄存器R0~R14、一个或两个状态寄存器和PC。在所有的寄存器中,有些是各种模式下共用的同一个物理寄存器,有些是各种模式自己独立拥有的物理寄存器。详细如表1-3所示。

表1-3 ARM物理寄存器

用户模式

系统模式

特权模式

中止模式

未定义指令模

外部中断模

快速中断模

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

R7

R7

R7

R7

R7

R7

R7

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_irq

R13_fiq

R14

R14

R14_svc

R14_abt

R14_und

R14_irq

R14_fiq

PC

PC

PC

PC

PC

PC

PC

CPSR

CPSR

CPSR

CPSR

CPSR

CPSR

CPSR

SPSR_svc

SPSR_abt

SPSR_und

SPSR_irq

SPSR_fiq

通用寄存器通常又可以分为下面3类。

n 未备份寄存器:包括R0~R7。

n 备份寄存器:包括R8~R14。

n 程序计数器PC:即R15。

1)未备份寄存器R0~R7

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

2)备份寄存器R8~R14

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

对于备份寄存器R13、R14来说,每个寄存器对应于6个不同的物理寄存器,其中的一个是用户模式和系统模式共用的,另外的5个则对应于其他5种处理器模式,采用下面的方法来标识。

R13_,

其中是usr、svc、abt、und、irq和fiq的一种。

R13通常用做堆栈指针。每一种模式都拥有自己的物理R13。程序初始化R13,使其指向该模式专用的栈地址。当进入该模式时,可以将需要使用的寄存器保存在R13所指的栈中,当退出该模式时,将保存在R13所指的栈中的寄存器值弹出。这样就实现了程序的现场保护。

寄存器R14又被称为连接寄存器(LR),在ARM中有下面两种特殊用途。

① 每一种处理器模式在自己的物理R14中存放当前子程序的返回地址。当通过BL或者BLX指令调用子程序时,R14被设置成该子程序的返回地址。在子程序中,当把R14的值复制到程序计数器PC中时,就实现了子程序返回。

可以通过下面两种方式实现这种子程序的返回操作。

◆执行下面任何一条指令

MOV pc, LR

BX LR

◆在子程序入口使用下面指令将PC保存到栈中:

STMFD SP!, {registers}, LR}

相应地,下面的指令可以实现子程序的返回:

LDMFD SP!, { registers}, LR }

② 当发生异常中断的时候,该模式下的特定物理R14被设置成该异常模式将要返回的地址。对于某些异常,R14的值可能与将返回的地址有一个常数的偏移量。具体的返回方式与上面的子程序返回方式基本相同。

3)程序计数器PC→R15

程序计数器R15又被记作PC。它虽然可以作为一般的通用寄存器使用,但是有一些指令在使用R15时有一些特殊限制。当违反了这些限制时,该指令执行的结果将是不可预料的。

由于ARM采用了流水线机制,当正确读取了PC的值时,该值为当前指令地址值加8个字节。也就是说,对于ARM指令集来说,PC指向当前指令的下两条指令的地址。由于ARM指令是字对齐的,PC值的第0位和第1位总为0。
需要注意的是,当使用指令STR/STM保存R15时,保存的可能是当前指令地址值加8字节,也可能保存的是当前指令地址加12字节。到底是哪种方式,取决于芯片具体设计方式。无论如何,在同一芯片中,要么采用当前指令地址加8,要么采用当前指令地址加12,不能有些指令采用当前指令地址加8,另一些指令采用当前指令地址加12。因此对于用户来说,尽量避免使用STR/STM指令来保存R15的值。当不可避免这种使用方式时,可以先通过一些代码来确定所用的芯片使用的是哪种实现方式。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top