OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2653|回复: 8

ARM资源分享

[复制链接]

37

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2017-10-31
在线时间
61 小时
发表于 2017-12-19 08:31:31 | 显示全部楼层 |阅读模式

v8架构寄存器组织

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

寄存器名称描述

位宽分类
32-bitWn(通用)WZR(0寄存器)WSP(堆栈指针)
64-bitXn(通用)XZR(0寄存器)SP(堆栈指针)
[size=13.3333px]

AArch32重要寄存器

寄存器类型Bit描述
R0-R1432bit通用寄存器,但是ARM不建议使用有特殊功能的R13,R14,R15当做通用寄存器使用.
SP_x32bit通常称R13为堆栈指针,除了User和Sys模式外,其他各种模式下都有对应的SP_x寄存器:x ={ und/svc/abt/irq/fiq/hyp/mon}
LR_x32bit称R14为链接寄存器,除了User和Sys模式外,其他各种模式下都有对应的SP_x寄存器:x ={ und/svc/abt/svc/irq/fiq/mon},用于保存程序返回链接信息地址,AArch32环境下,也用于保存异常返回地址,也就说LR和ELR是公用一个,AArch64下是独立的.
ELR_hyp32bitHyp mode下特有的异常链接寄存器,保存异常进入Hyp mode时的异常地址
PC32bit通常称R15为程序计算器PC指针,AArch32 中PC指向取指地址,是执行指令地址+8,AArch64中PC读取时指向当前指令地址.
CPSR32bit记录当前PE的运行状态数据,CPSR.M[4:0]记录运行模式,AArch64下使用PSTATE代替
APSR32bit应用程序状态寄存器,EL0下可以使用APSR访问部分PSTATE值
SPSR_x32bit是CPSR的备份,除了User和Sys模式外,其他各种模式下都有对应的SPSR_x寄存器:x ={ und/svc/abt/irq/fiq/hpy/mon},注意:这些模式只适用于32bit运行环境
HCR32bitEL2特有,HCR.{TEG,AMO,IMO,FMO,RW}控制EL0/EL1的异常路由
SCR32bitEL3特有,SCR.{EA,IRQ,FIQ,RW}控制EL0/EL1/EL2的异常路由,注意EL3始终不会路由
VBAR32bit保存任意异常进入非Hyp mode & 非Monitor mode的跳转向量基地址
HVBAR32bit保存任意异常进入Hyp mode的跳转向量基地址
MVBAR32bit保存任意异常进入Monitor mode的跳转向量基地址
ESR_ELx32bit保存异常进入ELx时的异常综合信息,包含异常类型EC等,可以通过EC值判断异常class
PSTATE 不是一个寄存器,是保存当前PE状态的一组寄存器统称,其中可访问寄存器有:PSTATE.{NZCV,DAIF,CurrentEL,SPSel},属于ARMv8新增内容,主要用于64bit环境下
[size=13.3333px]

A32状态下寄存器组织

• 所谓的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位
R0R0R0
R1R1R1
R2R2R2
R3R3R3
R4R4R4
R5R5R5
R6R6R6
R7R7R7
R8R8并不是说T32-16bit下没有R8~R12,而是有限的指令才能访问到,16bit指令的Rd/Rn编码位只有3位,所以Rx范围是R0-R7
R9R9
R10R10
R11R11
R12R12
SP (R13)SP (R13)SP (R13)
LR (R14)LR (R14) //MLR (R14) //M
PC (R15)PC (R15) //PPC (R15) //P
CPSRCPSRCPSR
SPSRSPSRSPSR
[size=13.3333px]

AArch64重要寄存器

寄存器类型Bit描述
X0-X3064bit通用寄存器,如果有需要可以当做32bit使用:WO-W30
LR (X30)64bit通常称X30为程序链接寄存器,保存跳转返回信息地址
SP_ELx64bit若PSTATE.M[0] ==1,则每个ELx选择SP_ELx,否则选择同一个SP_EL0
ELR_ELx64bit异常链接寄存器,保存异常进入ELx的异常地址(x={0,1,2,3})
PC64bit程序计数器,俗称PC指针,总是指向即将要执行的下一条指令
SPSR_ELx32bit寄存器,保存进入ELx的PSTATE状态信息
NZCV32bit允许访问的符号标志位
DIAF32bit中断使能位:D-Debug,I-IRQ,A-SError,F-FIQ ,逻辑0允许
CurrentEL32bit记录当前处于哪个Exception level
SPSel32bit记录当前使用SP_EL0还是SP_ELx,x= {1,2,3}
HCR_EL232bitHCR_EL2.{TEG,AMO,IMO,FMO,RW}控制EL0/EL1的异常路由 逻辑1允许
SCR_EL332bitSCR_EL3.{EA,IRQ,FIQ,RW}控制EL0/EL1/EL2的异常路由  逻辑1允许
ESR_ELx32bit保存异常进入ELx时的异常综合信息,包含异常类型EC等.
VBAR_ELx64bit保存任意异常进入ELx的跳转向量基地址 x={0,1,2,3}
PSTATE 不是一个寄存器,是保存当前PE状态的一组寄存器统称,其中可访问寄存器有:PSTATE.{NZCV,DAIF,CurrentEL,SPSel},属于ARMv8新增内容,64bit下代替CPSR
[size=13.3333px]

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

64-bit32-bit








64-bit OS
Runing
AArch32 App
64-bit32-bit
X0R0X20LR_adt
X1R1X21SP_abt
X2R2X22LR_und
X3R3X23SP_und
X4R4X24R8_fiq
X5R5X25R9_fiq
X6R6X26R10_fiq
X7R7X27R11_fiq
X8R8_usrX28R12_fiq
X9R9_usrX29SP_fiq
X10R10_usrX30(LR)LR_fiq
X11R11_usrSCR_EL3SCR
X12R12_usrHCR_EL2HCR
X13SP_usrVBAR_EL1VBAR
X14LR_usrVBAR_EL2HVBAR
X15SP_hypVBAR_EL3MVBAR
X16LR_irqESR_EL1DFSR
X17SP_irqESR_EL2HSR
X18LR_svc
X19SP_svc
[size=13.3333px]



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

37

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2017-10-31
在线时间
61 小时
 楼主| 发表于 2017-12-19 08:32:30 | 显示全部楼层
回复 支持 反对

使用道具 举报

37

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2017-10-31
在线时间
61 小时
 楼主| 发表于 2017-12-23 17:21:58 | 显示全部楼层
顶一下
回复 支持 反对

使用道具 举报

79

主题

399

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1825
金钱
1825
注册时间
2015-9-21
在线时间
560 小时
发表于 2017-12-23 20:48:11 | 显示全部楼层
汇编指令实在是太多了,想学但是又懒得学!偶尔看看!
回复 支持 反对

使用道具 举报

37

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2017-10-31
在线时间
61 小时
 楼主| 发表于 2017-12-26 11:04:42 | 显示全部楼层
硕果累累 发表于 2017-12-23 20:48
汇编指令实在是太多了,想学但是又懒得学!偶尔看看!

需要什么用什么
回复 支持 反对

使用道具 举报

37

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2017-10-31
在线时间
61 小时
 楼主| 发表于 2017-12-26 16:26:47 | 显示全部楼层
谁能分享个精华版?
回复 支持 反对

使用道具 举报

37

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2017-10-31
在线时间
61 小时
 楼主| 发表于 2017-12-29 07:35:44 | 显示全部楼层
明天就是元旦假期了,想想都觉得幸福!
回复 支持 反对

使用道具 举报

37

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2017-10-31
在线时间
61 小时
 楼主| 发表于 2018-1-5 08:32:38 | 显示全部楼层
回复 支持 反对

使用道具 举报

37

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2017-10-31
在线时间
61 小时
 楼主| 发表于 2018-1-25 09:22:41 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 22:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表