★★★ 个人博客导读首页—点击此处 ★★★
.
说明:
在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位
.
自制ARMv8 aarch64 register学习视频:

文章目录

  • 通用寄存器
    • 1、X0-X31
    • 2、特殊寄存器:
    • 3、aarch32 register
  • System registers
    • 1、Special-purpose registers
    • 2、Base system registers
    • 3、VMSA-specific registers
    • 4、Address translation system instructions
    • 5、TLB maintenance system instructions
    • 6、Cache maintenance system instructions
    • 7、Generic timer registers
    • 8、RAS registers
    • 9、Debug registers
    • 10、Performance monitors registers
    • 11、ID registers
    • 12、Prediction restriction System instructions
    • 13、必备寄存器总结

通用寄存器

1、X0-X31

ARMv8有31个通用寄存器X0-X30, 还有SP、PC、XZR等寄存器
下面详细介绍写这些通用寄存器(general-purpose registers):

  • X0-X7 用于参数传递
  • X9-X15 在子函数中使用这些寄存器时,直接使用即可, 无需save/restore. 在汇编代码中x9-x15出现的频率极低
    在子函数中使用这些寄存器时,直接使用即可, 无需save/restore. 在汇编代码中x9-x15出现的频率极低
  • X19-X29 在callee子函数中使用这些寄存器时,需要先save这些寄存器,在退出子函数时再resotre
    在callee子函数中使用这些寄存器时,需要先save这些寄存器,在退出子函数时再resotre
  • X8, X16-X18, X29, X30 这些都是特殊用途的寄存器
    – X8: 用于返回结果
    – X16、X17 :进程内临时寄存器
    – X18 :resrved for ABI
    – X29 :FP(frame pointer register)
    – X30 :LR

2、特殊寄存器:


部分寄存器还可以当作32位的使用

sp(Stack pointer)

EL1t: t表示选择SP_EL0
EL1h:h表示选择SP_ELx(x>0)

PC(Program Counter)
在armv7上PC是一个通用寄存器R15,在armv8上PC不在是一个寄存器,它不能直接被修改。必需使用一些隐式的指令来改变,如PC-relative load

SPSR

  • N Negative result (N flag).
  • Z Zero result (Z) flag.
  • C Carry out (C flag).
  • V Overflow (V flag).
  • SS Software Step. Indicates whether software step was enabled when an exception was taken.
  • IL Illegal Execution State bit. Shows the value of PSTATE.IL immediately before the exception was taken.
  • D Debug mask:watchpoint,breakpoint
  • A SError (System Error) mask bit.
  • I IRQ mask bit.
  • F FIQ mask bit.
  • M[4] Execution state that the exception was taken from. A value of 0 indicates AArch64.
  • M[3:0] Mode or Exception level that an exception was taken from

PSTATE (Processor state)
在aarch64中,调用ERET从一个异常返回时,会将SPSR_ELn恢复到PSTATE中,将恢复:ALU的flag、执行状态(aarch64 or aarch32)、异常级别、processor branches
PSTATE.{N, Z, C, V}可以在EL0中被修改,其余的bit只能在ELx(x>0)中修改

3、aarch32 register

执行状态的切换(aarch64/aarch32)

当从aarch32切换到aarch64时:
1、一些64位寄存器的高32bit,曾经被map到aarch32中的一些寄存器。这些高32bit是unknown状态
2、一些64位寄存器的高32bit,在aarch32中没有使用,这些高32bit还是以前的值;
3、如果是跳转到EL3,EL2是aarch32,那么ELR_EL2的高32bit是unknown
4、以下寄存器,不会再aarch32中使用到
— SP_EL0.
— SP_EL1.
— SP_EL2.
— ELR_EL1

aarch64到aarch32的map:

PSTATE at AArch32

System registers

AArch64 registers:
• Special-purpose registers.
• Base system registers
• VMSA-specific registers
• ID registers on page
• Performance monitors registers
• Debug registers
• RAS registers
• Generic timer registers
• Cache maintenance system instructions
• Address translation system instructions
• TLB maintenance system instructions
• Prediction restriction System instructions

1、Special-purpose registers

3个ELR, 4个SP, 8个SPSR

2、Base system registers

118个base system registers

3、VMSA-specific registers

24个VMSA寄存器

4、Address translation system instructions

14个地址翻译指令

AT S12E0R
AT S12E0W
AT S12E1R
AT S12E1W
AT S1E0R
AT S1E0W
AT S1E1R
AT S1E1RP
AT S1E1W
AT S1E1WP
AT S1E2R
AT S1E2W
AT S1E3R
AT S1E3W

5、TLB maintenance system instructions

78个TLB一致性指令

TLBI ALLE1
TLBI ALLE1IS
TLBI ALLE1OS
TLBI ALLE2
TLBI ALLE2IS
TLBI ALLE2OS
TLBI ALLE3
TLBI ALLE3IS
TLBI ALLE3OS
TLBI ASIDE1
TLBI ASIDE1IS
TLBI ASIDE1OS
TLBI IPAS2E1
TLBI IPAS2E1IS
TLBI IPAS2E1OS
TLBI IPAS2LE1
TLBI IPAS2LE1IS
TLBI IPAS2LE1OS
TLBI RIPAS2E1
TLBI RIPAS2E1IS
TLBI RIPAS2E1OS
TLBI RIPAS2LE1
TLBI RIPAS2LE1IS
TLBI RIPAS2LE1OS
TLBI RVAAE1
TLBI RVAAE1IS
TLBI RVAAE1OS
TLBI RVAALE1
TLBI RVAALE1IS
TLBI RVAALE1OS
TLBI RVAE1
TLBI RVAE1IS
TLBI RVAE1OS
TLBI RVAE2
TLBI RVAE2IS
TLBI RVAE2OS
TLBI RVAE3
TLBI RVAE3IS
TLBI RVAE3OS
TLBI RVALE1
TLBI RVALE1IS
TLBI RVALE1OS
TLBI RVALE2
TLBI RVALE2IS
TLBI RVALE2OS
TLBI RVALE3
TLBI RVALE3IS
TLBI RVALE3OS
TLBI VAAE1
TLBI VAAE1IS
TLBI VAAE1OS
TLBI VAALE1
TLBI VAALE1IS
TLBI VAALE1OS
TLBI VAE1
TLBI VAE1IS
TLBI VAE1OS
TLBI VAE2
TLBI VAE2IS
TLBI VAE2OS
TLBI VAE3
TLBI VAE3IS
TLBI VAE3OS
TLBI VALE1
TLBI VALE1IS
TLBI VALE1OS
TLBI VALE2
TLBI VALE2IS
TLBI VALE2OS
TLBI VALE3
TLBI VALE3IS
TLBI VALE3OS
TLBI VMALLE1
TLBI VMALLE1IS
TLBI VMALLE1OS
TLBI VMALLS12E1
TLBI VMALLS12E1IS
TLBI VMALLS12E1OS

6、Cache maintenance system instructions

31个cache一致性指令

DC CGDSW
DC CGDVAC
DC CGDVADP
DC CGDVAP
DC CGSW
DC CGVAC
DC CGVADP
DC CGVAP
DC CIGDSW
DC CIGDVAC
DC CIGSW
DC CIGVAC
DC CISW
DC CIVAC
DC CSW
DC CVAC
DC CVADP
DC CVAP
DC CVAU
DC GVA
DC GZVA
DC IGDSW
DC IGDVAC
DC IGSW
DC IGVAC
DC ISW
DC IVAC
DC ZVA
IC IALLU
IC IALLUIS
IC IVAU

7、Generic timer registers

22个generic Timer寄存器

CNTFRQ_EL0
CNTHV_CTL_EL2
CNTHV_CVAL_EL2
CNTHV_TVAL_EL2
CNTHVS_CTL_EL2
CNTHVS_CVAL_EL2
CNTHVS_TVAL_EL2
CNTKCTL_EL1
CNTP_CTL_EL0
CNTP_CVAL_EL0
CNTP_TVAL_EL0
CNTPCT_EL0
CNTPCTSS_EL0
CNTPOFF_EL2
CNTPS_CTL_EL1
CNTPS_CVAL_EL1
CNTPS_TVAL_EL1
CNTV_CTL_EL0
CNTV_CVAL_EL0
CNTV_TVAL_EL0
CNTVCT_EL0
CNTVCTSS_EL0

8、RAS registers

16个RAS寄存器

DISR_EL1
ERRIDR_EL1
ERRSELR_EL1
ERXADDR_EL1
ERXCTLR_EL1
ERXFR_EL1
ERXMISC0_EL1
ERXMISC1_EL1
ERXMISC2_EL1
ERXMISC3_EL1
ERXPFGCDN_EL1
ERXPFGCTL_EL1
ERXPFGF_EL1
ERXSTATUS_EL1
VDISR_EL2
VSESR_EL2

9、Debug registers

23个debug寄存器

DBGAUTHSTATUS_EL1
DBGBCR_EL1
DBGBVR_EL1
DBGCLAIMCLR_EL1
DBGCLAIMSET_EL1
DBGDTR_EL0
DBGDTRRX_EL0
DBGDTRTX_EL0
DBGPRCR_EL1
DBGVCR32_EL2
DBGWCR_EL1
DBGWVR_EL1
DLR_EL0
DSPSR_EL0
MDCCINT_EL1
MDCCSR_EL0
MDRAR_EL1
MDSCR_EL1
OSDLR_EL1
OSDTRRX_EL1
OSDTRTX_EL1
OSECCR_EL1
OSLAR_EL1

10、Performance monitors registers

19个performance寄存器

PMCCFILTR_EL0
PMCCNTR_EL0
PMCEID0_EL0
PMCEID1_EL0
PMCNTENCLR_EL0
PMCNTENSET_EL0
PMCR_EL0
PMEVCNTR_EL0
PMEVTYPER_EL0
PMINTENCLR_EL1
PMINTENSET_EL1
PMMIR_EL1
PMOVSCLR_EL0
PMOVSSET_EL0
PMSELR_EL0
PMSWINC_EL0
PMUSERENR_EL0
PMXEVCNTR_EL0
PMXEVTYPER_EL0

11、ID registers

40个ID寄存器

CCSIDR2_EL1
CCSIDR_EL1
CLIDR_EL1
CSSELR_EL1
CTR_EL0
DCZID_EL0
GMID_EL1
ID_AA64AFR0_EL1
ID_AA64AFR1_EL1
ID_AA64DFR0_EL1
ID_AA64DFR1_EL1
ID_AA64ISAR0_EL1
ID_AA64ISAR1_EL1
ID_AA64MMFR0_EL1
ID_AA64MMFR1_EL1
ID_AA64MMFR2_EL1
ID_AA64PFR0_EL1
ID_AA64PFR1_EL1
ID_AFR0_EL1 ID_AFR0_EL1
ID_DFR0_EL1 ID_DFR0_EL1
ID_DFR1_EL1 ID_DFR1_EL1
ID_ISAR0_EL1
ID_ISAR1_EL1
ID_ISAR2_EL1
ID_ISAR3_EL1
ID_ISAR4_EL1
ID_ISAR5_EL1
ID_ISAR6_EL1
ID_MMFR0_EL1
ID_MMFR1_EL1
ID_MMFR2_EL1
ID_MMFR3_EL1
ID_MMFR4_EL1
ID_MMFR5_EL1
ID_PFR0_EL1
ID_PFR1_EL1
ID_PFR2_EL1
MIDR_EL1
MPIDR_EL1
REVIDR_EL1

12、Prediction restriction System instructions

3个预测限制寄存器

13、必备寄存器总结

PSTATE:程序状态寄存器

SP_ELx(x>0):在EL1/EL2/EL3 level中,如果spsel=0,则使用SP_ELx(x>0)
SP_EL0 :在所有level中,如果spsel=1, 则使用SP_EL0

SPSR :save program status register 备份的程序状态寄存器

ELR_ELx(x>0):异常链接寄存器,记录着异常时程序的返回地址

ESR_ELx(x>0) :同步异常, 异常特征寄存器
FAR_ELx(x>0): 同步异常, 异常时的错误地址

VBAR_ELx(x>0): 向量表基地址寄存器

TTBRn_ELx(n=1,2、x>0): 地址翻译基地址寄存器
MAIR_ELx(x>0) :内存属性寄存器

PAR_EL1: 物理地址寄存器, 当使用指令操作MMU进行VA到PA的转换时,物理地址由PAR_EL1输出.

SCR_EL3 :安全配置寄存器
SCTLR_ELx(x>0): 系统控制寄存器
TCR_ELx(x>0): 地址翻译控制寄存器


欢迎添加微信、微信群,多多交流

[register]-ARMV8系统中通用寄存器和系统寄存器的介绍和总结相关推荐

  1. 在一个请求分页系统中,假定系统分配给一个作业的物理块数为 3,并且此作业的页面走向为 2、3、2、1、5、2、4、5、3、2、5、2。试用 FIFO和 LRU 两种算法分别计算出程序访问过程中所发生

    页面置换算法 题目: 在一个请求分页系统中,假定系统分配给一个作业的物理块数为 3,并且此作业的页面走向为 2.3.2.1.5.2.4.5.3.2.5.2.试用 FIFO和 LRU 两种算法分别计算出 ...

  2. 苹果双系统怎么切换_Mac如何删除双系统中的windows系统

    01.需求分析 客户在使用刚买的苹果电脑,由于使用苹果系统不习惯.不顺手.导致很多买了苹果电脑的朋友,都会在苹果电脑上安装一个windows系统,所以苹果的双系统就出现了. 有些客户在使用了一段苹果系 ...

  3. QT中QDatetime中文系统中获取英文系统的结果

    QT中QDatetime中文系统中获取英文系统的结果 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 我们在中文系统下开发QT程序,如 ...

  4. 现代IM系统中的消息系统架构 - 架构篇

    前言 IM全称是『Instant Messaging』,中文名是即时通讯.在这个高度信息化的移动互联网时代,生活中IM类产品已经成为必备品,比较有名的如钉钉.微信.QQ等以IM为核心功能的产品.当然目 ...

  5. 进程在linux系统中原理,Linux系统原理知识 进程切换的概念介绍

    一.tast_struct结构 它是一个数据结构,可以说,它代表了一个进程.它有很多字段,大体有一下几种: 标识号:进程标识.用户标识.组标识. 状态: Linux的进程的四种基本状态 调度信息:优先 ...

  6. 系统页面升级系统中_国产系统哪家强?华为EMUI系统大升级,拿下最强指日可待...

    国内手机厂商林立,每家厂商都有自己的操作系统,并且这些操作系统在功能性.设计思路上往往并不同.但是目前国内手机厂商所用的系统其实都是基于安卓系统修改而来的,可谓"一种菜,百样做法" ...

  7. linux系统中变量,Linux系统中的环境变量知识详解

    对于没有使用过linux系统的用户来说,有很多术语和功能都很陌生.本文就介绍了linux系统中的环境变量的相关知识,具体内容如下所述. linux是一个多用户的操作系统.每个用户登录系统后,都会有一个 ...

  8. 关于阿里飞天系统中分布式系统底层各服务的介绍

    一.协调服务(女蜗) 女娲(Nuwa)系统为飞天提供高可用的协调服务(Coordination Service),是构建各类分布式应用的核心服务,它的作用是采用类似文件系统的树形命名空间来让分布式进程 ...

  9. python能不能在win10系统中使用_win10系统下如何安装Python软件

    Python是一门受广大用户所喜爱欢迎的.使用广泛的语言.最近,就有一些升级win10系统的用户反映自己想要在新系统中安装Python软件,但是又不知道该如何操作.接下来,小编就为大家分享win10系 ...

最新文章

  1. Bag of Tricks for Image Classification
  2. 路由器的×××流量过滤
  3. pytorch中的pre-train函数模型引用及修改(增减网络层,修改某层参数等)
  4. 遍历聚合对象中的元素——迭代器模式
  5. 测试邮件系统需要做的准备工作
  6. 【移植Linux 3.4.2内核之四】修改内核代码支持YAFFS文件系统
  7. JEECG 3.6.5版本发布,企业级JAVA快速开发平台
  8. 树形结构 —— 树与二叉树
  9. 医疗设备-监护仪-数据解析(协议、通信)
  10. c++层次遍历_数据结构与算法,弄懂图的两种遍历方式
  11. 视频app scheme参数和app name
  12. 计算机最大化快捷键,Win7笔记本电脑窗口最大化和最小化的快捷键是什么
  13. python爬取基金净值_Python爬虫周记之案例篇——基金净值爬取(上)
  14. 西南航空创始人:82岁,我心依旧狂野
  15. 手机2020 QQ 群文件下载存储路径
  16. python第三周测试_第三周作业 - 作业 - 信息与计算17数31SWE - 班级博客 - 博客园...
  17. 普京签署法案禁止美公民收养俄儿童
  18. “与真实情况不一致”,数禾科技“打脸”母公司分众传媒
  19. Surfer网格文件的VC读写代码​
  20. 如何使用ttf字体文件

热门文章

  1. 学机械可以转计算机吗,本人合工大车辆工程大一新生,但是机械类前景都不太好,我要不要转计算机,求教?...
  2. 数据中心成投资新宠 今年或再创历史纪录
  3. 数据中心管理:从DCIM过渡到DMAAS
  4. 配电技术——配电线路系统电气设备详解
  5. 空调水系统的节能方式与水泵调节
  6. cartographer坐标系_cartographer 调参(1)-lua文件配置参考文档
  7. android的文件操作,Android文件操作概要1.ppt
  8. 成功解决ValueError: With n_samples=0, test_size=0.3 and train_size=None, the resulting train set will be
  9. AI:2020年6月22日北京智源大会演讲分享之11:30-12:20Jorge教授《Zero-Order Optimization Methods with Applications to RL》
  10. ML之分类预测之ElasticNet之PLoR:在二分类数据集上调用Glmnet库训练PLoR模型(T2)