当前位置: 星创客 > 学习资源 > 讲师博文 > 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状态下寄存器组织

//img.blog.csdn.net/20161001144650185

• 所谓的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    
 
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2018 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号,京公海网安备11010802025203号
返回

讲师博文

星创客 - 华清远见旗下高端IT培训品牌

当前位置: 星创客 > 学习资源 > 讲师博文 >

ARM-v8架构寄存器组织
来源: 星创客 作者: 星创客 时间:2017-12-05

ARM-v8架构属于64位架构,向下兼容ARM-v7架构。ARM-v8架构支持两种类型的ARM指令集,一种是Aarch64位指令集,一种是Aarch32位指令集。不管是那种类型的指令集,每条指令依然都是字(4字节)对齐。两种类型指令集的本...

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状态下寄存器组织

//img.blog.csdn.net/20161001144650185

• 所谓的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    
 

相关推荐

全国咨询热线:400-611-6270

?2004-2018华清远见教育科技集团 版权所有 京ICP备16055225号 京公海网安备11010802025203号