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

     

  • 相关阅读:
    怎么对Navicat for Oracle 调试
    老版本的java代码与新代码如何找出差异
    Oracle 外部表是做什么用的
    如何在Navicat 中编辑和记录
    如何使用文件对比工具文件夹比较会话菜单
    哪些工具可以用来进行Bug管理
    5类开发者须知的工具
    怎么找出代码之间的差异
    Beyond Compare不仅可以修改网页代码
    文件对比工具有哪些用途
  • 原文地址:https://www.cnblogs.com/smartjourneys/p/6845180.html
Copyright © 2011-2022 走看看