android arm 寄存器,ARM-v8架构寄存器组织

ARM-v8架构寄存器组织

时间:2017-12-05     来源:星创客

ARM-v8架构属于64位架构,向下兼容ARM-v7架构。ARM-v8架构支持两种类型的ARM指令集,一种是Aarch64位指令集,一种是Aarch32位指令集。不管是那种类型的指令集,每条指令依然都是字(4字节)对齐。两种类型指令集的本质区别是工作寄存器的位数不同,Aarch32位指令集使用32bit工作寄存器,二Aarch64位指令集使用64bit工作寄存器。

寄存器名称描述

位宽

分类

32-bit

Wn(通用)

WZR(0寄存器)

WSP(堆栈指针)

64-bit

Xn(通用)

XZR(0寄存器)

SP(堆栈指针)

AArch32重要寄存器

寄存器类型

Bit

描述

R0-R14

32bit

通用寄存器,但是ARM不建议使用有特殊功能的R13,R14,R15当做通用寄存器使用.

SP_x

32bit

通常称R13为堆栈指针,除了User和Sys模式外,其他各种模式下都有对应的SP_x寄存器:x ={ und/svc/abt/irq/fiq/hyp/mon}

LR_x

32bit

称R14为链接寄存器,除了User和Sys模式外,其他各种模式下都有对应的SP_x寄存器:x ={ und/svc/abt/svc/irq/fiq/mon},用于保存程序返回链接信息地址,AArch32环境下,也用于保存异常返回地址,也就说LR和ELR是公用一个,AArch64下是独立的.

ELR_hyp

32bit

Hyp mode下特有的异常链接寄存器,保存异常进入Hyp mode时的异常地址

PC

32bit

通常称R15为程序计算器PC指针,AArch32 中PC指向取指地址,是执行指令地址+8,AArch64中PC读取时指向当前指令地址.

CPSR

32bit

记录当前PE的运行状态数据,CPSR.M[4:0]记录运行模式,AArch64下使用PSTATE代替

APSR

32bit

应用程序状态寄存器,EL0下可以使用APSR访问部分PSTATE值

SPSR_x

32bit

是CPSR的备份,除了User和Sys模式外,其他各种模式下都有对应的SPSR_x寄存器:x ={ und/svc/abt/irq/fiq/hpy/mon},注意:这些模式只适用于32bit运行环境

HCR

32bit

EL2特有,HCR.{TEG,AMO,IMO,FMO,RW}控制EL0/EL1的异常路由

SCR

32bit

EL3特有,SCR.{EA,IRQ,FIQ,RW}控制EL0/EL1/EL2的异常路由,注意EL3始终不会路由

VBAR

32bit

保存任意异常进入非Hyp mode & 非Monitor mode的跳转向量基地址

HVBAR

32bit

保存任意异常进入Hyp mode的跳转向量基地址

MVBAR

32bit

保存任意异常进入Monitor mode的跳转向量基地址

ESR_ELx

32bit

保存异常进入ELx时的异常综合信息,包含异常类型EC等,可以通过EC值判断异常class

PSTATE

不是一个寄存器,是保存当前PE状态的一组寄存器统称,其中可访问寄存器有:PSTATE.{NZCV,DAIF,CurrentEL,SPSel},属于ARMv8新增内容,主要用于64bit环境下

A32状态下寄存器组织

88570201d1fb70c7b818f07f895c2fcf.png

• 所谓的banked register 是指一个寄存器在不同模式下有对应不同的寄存器,比如SP,在abort模式下是SP_bat,在Und模式是SP_und,在iqr模式下是SP_irq等,进入各种模式后会自动切换映射到各个模式下对应的寄存器.

• R0-R7是所谓的非banked register,R8-R14是所谓的banked register

4.1.1 T32状态下寄存器组织

A32使用

Rd/Rn编码位宽4位

T32-32bit使用

Rd/Rn编码位宽4位

T32-16bit使用

Rd/Rn编码位宽3位

R0

R0

R0

R1

R1

R1

R2

R2

R2

R3

R3

R3

R4

R4

R4

R5

R5

R5

R6

R6

R6

R7

R7

R7

R8

R8

并不是说T32-16bit下没有R8~R12,而是有限的指令才能访问到,16bit指令的Rd/Rn编码位只有3位,所以Rx范围是R0-R7

R9

R9

R10

R10

R11

R11

R12

R12

SP (R13)

SP (R13)

SP (R13)

LR (R14)

LR (R14) //M

LR (R14) //M

PC (R15)

PC (R15) //P

PC (R15) //P

CPSR

CPSR

CPSR

SPSR

SPSR

SPSR

AArch64重要寄存器

寄存器类型

Bit

描述

X0-X30

64bit

通用寄存器,如果有需要可以当做32bit使用:WO-W30

LR (X30)

64bit

通常称X30为程序链接寄存器,保存跳转返回信息地址

SP_ELx

64bit

若PSTATE.M[0] ==1,则每个ELx选择SP_ELx,否则选择同一个SP_EL0

ELR_ELx

64bit

异常链接寄存器,保存异常进入ELx的异常地址(x={0,1,2,3})

PC

64bit

程序计数器,俗称PC指针,总是指向即将要执行的下一条指令

SPSR_ELx

32bit

寄存器,保存进入ELx的PSTATE状态信息

NZCV

32bit

允许访问的符号标志位

DIAF

32bit

中断使能位:D-Debug,I-IRQ,A-SError,F-FIQ ,逻辑0允许

CurrentEL

32bit

记录当前处于哪个Exception level

SPSel

32bit

记录当前使用SP_EL0还是SP_ELx,x= {1,2,3}

HCR_EL2

32bit

HCR_EL2.{TEG,AMO,IMO,FMO,RW}控制EL0/EL1的异常路由 逻辑1允许

SCR_EL3

32bit

SCR_EL3.{EA,IRQ,FIQ,RW}控制EL0/EL1/EL2的异常路由  逻辑1允许

ESR_ELx

32bit

保存异常进入ELx时的异常综合信息,包含异常类型EC等.

VBAR_ELx

64bit

保存任意异常进入ELx的跳转向量基地址 x={0,1,2,3}

PSTATE

不是一个寄存器,是保存当前PE状态的一组寄存器统称,其中可访问寄存器有:PSTATE.{NZCV,DAIF,CurrentEL,SPSel},属于ARMv8新增内容,64bit下代替CPSR

64、32位寄存器的映射关系

64-bit

32-bit

64-bit OS

Runing

AArch32 App

64-bit

32-bit

X0

R0

X20

LR_adt

X1

R1

X21

SP_abt

X2

R2

X22

LR_und

X3

R3

X23

SP_und

X4

R4

X24

R8_fiq

X5

R5

X25

R9_fiq

X6

R6

X26

R10_fiq

X7

R7

X27

R11_fiq

X8

R8_usr

X28

R12_fiq

X9

R9_usr

X29

SP_fiq

X10

R10_usr

X30(LR)

LR_fiq

X11

R11_usr

SCR_EL3

SCR

X12

R12_usr

HCR_EL2

HCR

X13

SP_usr

VBAR_EL1

VBAR

X14

LR_usr

VBAR_EL2

HVBAR

X15

SP_hyp

VBAR_EL3

MVBAR

X16

LR_irq

ESR_EL1

DFSR

X17

SP_irq

ESR_EL2

HSR

X18

LR_svc

X19

SP_svc

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值