1. 前言

2. 指令运行与异常处理寄存器

ARM体系结构的寄存器分为两类:

(1)系统控制和状态报告寄存器

(2)指令处理寄存器,如累加、异常处理

本部分将主要介绍如上第(2)部分的寄存器,分为AARCH64 state和AARCH32 state

2.1 AARCH64下指令运行与异常处理寄存器

寄存器类型

Bit

描述

X0-X30

64bit

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

V0-V31

128bit

32个浮点寄存器,用于标量的浮点操作和向量或标量的SIMD操作

XZR

64bit

Zero寄存器,写入此寄存器的数据被忽略,读出的数据全为0

WZR

32bit

Zero寄存器的32bit形式

LR (X30)

64bit

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

ELR_ELx

64bit

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

SP_ELx

64bit

每个异常级别都有一个专用的SP寄存器,若PSTATE.M[0] ==1,则每个ELx选择SP_ELx(x={0,1,2,3}),否则选择同一个SP_EL0

PC

64bit

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

SPSR_ELx

32bit

保存进入ELx的PSTATE状态信息(x={1,2,3})

NZCV [31:28]: 允许访问的符号标志位,显示了PSTATE.{N, Z, C, V};

[27:22]:AArch64异常时reserved;

SS [21]:software step

IL[20]: 非法异常状态位,显示了在异常发生的时候PSTATE.IL的值;

[19:10]:AArch64异常时reserved

DAIF[9:6]: 中断使能位:D-Debug,I-IRQ,A-SError,F-FIQ ,逻辑0允许;

Bit[5]: AArch64异常时reserved

M[4]:指示异常捕获时的处理器状态;

M[3:2]:指示异常捕获时的异常等级;

M[1]:reserved

M[0]:为0则SP_EL0 or为1则 SP_ELX

PSTATE

\

不是一个寄存器,是保存当前PE状态的一组寄存器统称(每个PE对应一组PSTATE),属于ARMv8新增内容,可以使用MRS和MSR通过特殊功能寄存器进行访问,可访问寄存器有:

NZCV:对应PSTATE域为N,Z,C,V

DAIF:对应PSTATE域为D,A,I,F

CurrentEl:对应PSTATE域为EL

SpSel:对应PSTATE域为SP

nRW:处理器状态(0-64bit,1-32bit);

SP:栈指针选择(0-SP_EL0,1-SP_ELn)

2.2 AARCH32下指令运行与异常处理寄存器

寄存器类型

BIT

描述

R0-R14

32bit

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

V0-V31

64bit

32个浮点寄存器,用于标量的浮点操作和向量或标量的SIMD操作

PC

32bit

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

SP_x

32bit

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

LR_x

32bit

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

ELR_hyp

32bit

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

CPSR

32bit

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

APSR

32bit

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

SPSR_x

32bit

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

2.3 AArch64与AArch32 寄存器映射

图 AARCH64与AARCH32映射

3. 系统控制和状态寄存器

3.1 AARCH64下系统控制与状态寄存器

系统寄存器主要用作系统配置和状态显示,主要通过MRS和MSR指令进行访问,寄存器的名字数字给出了可以访问的最低异常级别。

寄存器类型

Bit

描述

System

regs

\

备注:

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

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

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

3.2 AARCH32下系统控制与状态寄存器

寄存器类型

BIT

描述

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环境下

4.参考文档

[1] DDI0487A_k_armv8_arm_iss10775.pdf

ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(2)- 寄存器的更多相关文章

  1. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(4)- 其它

    1. 前言 2.可配置的指令使能/禁用控制和trap控制 指令使能/禁用 当指令被禁用,则这条指令就会变成未定义 指令Trap控制 控制某条或某些指令在运行时进入陷阱,进入陷阱的指令会产生trap异常 ...

  2. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(3)- 异常

    1.前言 本文介绍异常相关内容,包括异常类型,异常进入,异常返回,异常层次结构,异常的路由等 2.  RESET ARMV8体系结构支持两种类型的RESET Cold reset:Reset PE所有 ...

  3. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST

    1.前言 ARMV8系统级编程模型主要包括异常级别.运行状态.安全状态.同步异常.异步异常.DEBUG 本文主要对系统级编程模型做一个概要介绍 2. 异常级别 2.1 Exception level概 ...

  4. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之存储模型

    1.前言 关于存储系统体系架构,可以概述如下: 存储系统体系结构的形式 VMSA 存储属性   2. 存储系统体系结构 2.1.    地址空间 指令地址空间溢出 指令地址计算((address_of ...

  5. ARMV8 datasheet学习笔记5:异常模型

    1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文 3. 异常处理路由对比 AArch32.AArch64架 ...

  6. ARMV8 datasheet学习笔记3:AArch64应用级体系结构

    1.前言 本文主要从应用的角度介绍ARMV8的编程模型和存储模型 2. AArch64应用级编程模型 从应用的角度看到的ARM处理器元素: 可见的元素(寄存器/指令) 说明 可见的寄存器 R0-R30 ...

  7. ARMV8 datasheet学习笔记1:预备知识

    1. 前言 ARMv8的架构继承以往ARMv7与之前处理器技术的基础; 除了支持现有的16/32bit的Thumb2指令外,也向前兼容现有的A32(ARM 32bit)指令集. 基于64bit的AAr ...

  8. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之Generic timer

    1.前言 2.generate timer 2.1 概述 提供了一个系统计数器,用来实时测量流逝的时间: 提供了一个虚拟计数器,用来测量某个虚拟机上流逝的虚拟时间: 定时器,每隔一段时间会触发事件,支 ...

  9. ARMV8 datasheet学习笔记2:概述

    1. 前言 本文主要概括的介绍ARMV8体系结构定义了哪些内容,概括的说: ARM体系结构定义了PE的行为,不会定义具体的实现 ARM体系结构也定义了debug体系结构和trace体系结构 ARM体系 ...

随机推荐

  1. Leetcode 268.缺失数字 By Python

    给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数. 示例 1: 输入: [3,0,1] 输出: 2 示例 2: 输入: [9,6,4,2 ...

  2. 自学Zabbix12.2 Zabbix命令-zabbix_get

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix12.2 Zabbix命令-zabbix_get 1. zabbix_get概念 ...

  3. 趣谈生成函数 =v=

    趣谈生成函数 =v= 今天luyouqi在洛谷随机跳题rand出来一道生成函数板子题,然后我给做了(雾 发现小伙伴们还不会生成函数,于是我试着写这篇生成函数简介.(其实我也不怎么会生成函数这么高级的东 ...

  4. luogu2178/bzoj4199 品酒大会 (SA+单调栈)

    他要求的就是lcp(x,y)>=i的(x,y)的个数和a[x]*a[y]的最大值 做一下后缀和,就只要求lcp=i的了 既然lcp(x,y)=min(h[rank[x]+1],..,[h[ran ...

  5. 【模板】堆优化Dijkstra

    Dij的核心思想:全局最小值不会被其他节点更新,因此得到最小值后只需要扩展一次即可. 概念:扩展.出队 注意:vis[ ]数组表示的是每个节点是否扩展过,因此开始时vis[st]不置1. 时间复杂度\ ...

  6. [luogu3197][越狱]

    luogu3197 思路 看了很久没思路,看了题解发现自己好zz.用全部的情况减去不合法的情况就行了.全部的情况就是每个人随便选,总共有\(m^n\)种情况,然后考虑不合法的情况,也就是任意相邻的两个 ...

  7. OpenCv练习

    // ConsoleApplication1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream&g ...

  8. FTP文件乱码和传输模式解释

    转: FTP文件乱码和传输模式解释 2017年02月18日 10:50:03 -Hermes- 阅读数:12112更多 所属专栏: 异常解决方案急诊室   版权声明:大侠,在转载时请注明出处,小弟不胜 ...

  9. CF786B Legacy && 线段树优化连边

    线段树优化连边 要求点 \(x\) 向区间 \([L, R]\) 连边, 一次的复杂度上限为 \(O(n)\) 然后弄成线段树的结构 先父子连边边权为 \(0\) 这样连边就只需要连父亲就可以等效于连 ...

  10. python---生成验证码图片

    工具插件verifycode.py中,记得使用时需要在路由根目录中引入文字资源文件 # coding:utf8 # __author: Administrator # date: // # /usr/ ...