ARM寄存器

ARM共计37个寄存器,包括31个通用寄存器和6个状态寄存器:

通用寄存器包括:未分组(未备份)寄存器、分组(备份)寄存器、程序寄存器(PC)三类;

状态寄存器包括:状态寄存器、备份状态寄存器。

(1)未分组寄存器:R0-R7,共8个;
(2)分组寄存器R8-R14:其中FIQ模式下有单独的一组R8-R12共5个,另外6种模式共用一组R8-R12,共5个;

                                                 USR和SYS模式共用一组R13-R14,共2个,另外5种模式下各有独自的一组R13-R14,共10个;
(3)程序计数器PC即R15寄存器,共1个;
(4)状态寄存器CPSR,和5个备份状态寄存器SPSR,共6个;

3-1 寄存器组织

Usr

System

Supervisor

Abort

Undefined

IRQ

FIQ

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

1.通用寄存器的分类:

1)未备份寄存器,包括R0-R7

对每个未备份寄存器(R0-R7),在所有的模式下都是指同一个物理寄存器(例如:Usr下的R0FIQ下的R0是同一个寄存器)。在异常程序中断造成模式切换时,由于不同模式使用的是相同的物理寄存器。这可能导致数据遭到破坏。未备份寄存器没有被系统作为别的用途,任何场合均可采用未备份寄存器。

2)备份寄存器

对于备份寄存器R8-R12来说,除FIQ模式下其它模式均使用相同的物理寄存器。在FIQ模式下R8_fiqR9_fiqR10_fiqR11_fiqR12_fiq。它有自己的物理寄存器。

对于R13R14寄存器每种模式都有自己的物理寄存器(SystemUsr的寄存器相同)当异常中断发生时,系统使用相应模式下的物理寄存器,从而可以避免数据遭到破坏。

R13也称为SPstack pointer)堆栈指针,用于存放堆栈的栈顶地址的,除了PC外,任何普通寄存器可作为栈指针寄存器。

R14也称为LRLinked register),即链接寄存器。LR是专门用于存放子程序返回地址的。如果子程序调用更下一层的程序,编译器会在更下一层的程序入口处将连接寄存器的值入栈,这样在返回的时候通过出栈便可得到正确的返回结构。

3)程序计数器

R15即为PCprogram counter),即程序计数器。当程序往下执行时,执行完一条指令便会使程序计数器做加一运算,这里的加一可能是多个字节,这样程序继续执行时便可以从程序计数器所指定的位置开始执行。实现流水线后,PC=当前正在执行指令的内在中的地址+8。一条指令只有在完全通过“执行”阶段才被处理。当处理器处于Thumb模式时,pc的值为正在执行指令的地址加4

PC寄存器存储指令地址,由于ARM采用流水机制执行指令,故PC寄存器总是存储下一条指令的地址。又因为ARM是按照字对齐故PC被读取后的值的bit[1:0]总是0b00thumbbit[0]0b0)。

2. 程序状态寄存器

程序状态寄存器包含当前程序状态寄存器和备份状态寄存器。

1CPSR(程序状态寄存器)

当前程序状态寄存器CPSR(Current Program Status Register),于用保存当前程序状态,CPSR在任何处理器模式下都可以被访问。CPSR包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息。每种异常模式都有一个程序状态保存寄存器SPSRSaved Program Status Register)。当异常出现时,SPSR用于保存CPSR的状态。CPSRSPSR的格式如下:

        31  30  29 28                       ---              8  7   6   5      4          3          2          1         0

N

Z

C

V

 

DNM(RAZ)

I

F

T

M4

M3

M2

M1

M0

N(Negative)Z(Zero)C(Carry)以及V(oVerflow)称为条件标志位。ARM指令根据CPSR的条件标志位来选择地执行。

3-2 CPSR条件标志位

条件标志位

含义

N

N=1表示运算结果为负数,N=0表示运算结果为正数

Z

Z=1表示运算结果为0 Z=0表示运算结果为非零

C

C=1表示运算结果产生了进位

V

V=1运算结果的符号位发生了溢出

Q

ARMv5 E系列版本中Q=1表示DSP指令溢出;

ARMv5以前的版本中没有Q标志位。

以下指令会影响CPSR的条件标志位:

a.比较指令,如: CMPCMNTEQTST等。

b.当一些算术逻辑运算的目标寄存器不是PC时,这些指令会影响CPSR的条件标志位。

c. MSRMRS指令可以对CPSR/SPSR进行操作。

d. LDM指令可以将SPSR复制到CPSR中。

CPSR的控制位:

II=1禁用IRO中断

FF=1禁用FIQ中断

TARMv4以上T版本T=0执行ARM指令,T=1执行Thumb指令;

  ARMv5以上非T版本T=0执行ARM指令,T=1表示下一条指令产生未定义指令中断。

Usr

System

Supervisor

Abort

Undefined

IRQ

FIQ

 

3-3 位模式

M[4:0]

模式

可访问的寄存器

10000

Usr

PCR14-R0CPSR

10001

FIQ

PCR14_fiq-R8_fiqR7-R0CPSRSPSR_fiq

10010

IRQ

PCR14_irqR13_irqR12-R0CPSRSPSR_irq

10011

Supervisor

PCR14_svcR13_svcR12-R0CPSRSPSR_svc

10111

Abort

PCR14_abtR13_abtR12-R0CPSRSPSR_abt

11011

Undefined

PCR14_undR13_undR12-R0CPSRSPSR_und

11111

System

PCR14-R0CPSR

2SPSR(保存程序状态寄存器)

保存程序状态寄存器(Saved Program Status Register)SPSR是在发生异常时用于对CPSR的值进行暂时备份的作用。处理完异常便可以通过备份的值来将CPSR恢复。SPSR的结构与CPSR的结构相同,SPSR是用来备份CPSR的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值