zoukankan      html  css  js  c++  java
  • ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(2)- 寄存器

    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

     

  • 相关阅读:
    ubuntu远程windows桌面
    spring boot 给返回值加状态 BaseData
    spring boot 拦截异常 统一处理
    IntelliJ IDEA spring boot 远程Ddbug调试
    IntelliJ IDEA 常用插件
    spring boot 请求地址带有.json 兼容处理
    spring boot 接口返回值去掉为null的字段
    spring boot 集成disconf
    Spring boot 自定义拦截器
    Linux下安装MySQL
  • 原文地址:https://www.cnblogs.com/smartjourneys/p/6845180.html
Copyright © 2011-2022 走看看