• ARM寄存器


    ARMv8-A把64位架构支持引入到ARM结构中,包括:
    A、31个64位通用寄存器:X0~X30;其中,X30也作为过程连接寄存器PLR(Produce Link Register)使用;
    B、栈指针寄存器SP(Stack Pointer);
    C、程序计数器PC(Program Counter);
    D、64位数据处理和扩展的虚拟寻址;
    E、两种主要的执行状态:
       AArch64: 64位执行状态,包括该状态异常模型、内存模型、程序员模型和指令集支持;
       AArch32: 32位执行状态,包括该状态异常模型、内存模型、程序员模型和指令集支持;
    F、ARMv8-A的两种执行状态(AArch64AArch32)主要支持三种指令集:
       A32: 32位定长ARM指令集,需要4字节边界对齐;通过不同架构变体增强部分,32位架构执行环境现称为AArch32;
       T32: 16位定长Thumb指令集,需要2字节边界对齐,在Thumb2技术中增强为16位和32位混合长度指令集;部分32位架构执行环境现称为AArch32;
       A64: 32位定长指令集,提供与ARM和Thumb指令集的功能类似,是一种支持AArch64执行状态的全新32位固定长度指令集;随着ARMv8-A一起引入,是一种AArch64指令集;
       ARM-ISA不断改进,在ARMv8-A中,对A32和T32进行了一些增补,以保持与A64指令集一致;

    AArch64特征:
    1、提供31个64位通用寄存器:X0~X30;其中,X30也可用作过程连接寄存器PLR(Produce Link Register);
    2、提供64位的程序计数器PC(Program Counter)、栈指针寄存器SP(Stack Pointer)和异常链接寄存器ELR(Exception Link Register);
    3、提供32个128位的SIMD Vector和标量浮点寄存器SFP(Scalar Floating Point):V0~V31,也可用作64位寄存器;所有向量寄存器都是128位;双精度标量浮点使用Vx[63:0],单精度标量浮点使用Vx[31:0];
    4、定义了4个执行级别寄存器(Executing Level):EL0、EL1、EL2、EL3;
    5、支持64位的虚拟寻址(Virtual Addressing);
    6、定义一组PSTATE,用以保存PE(Processing Element)状态;

    AArch32特征:
    1、提供31个32位通用寄存器:X0~X30;其中R3用作栈指针SP,R14用作链接寄存器LR,R15用作程序计数器PC,且R14需同时供异常链接寄存器ELR与过程连接寄存器PLR之用;
    2、提供1个异常链接寄存器ELR,用以作为从HpyerVisior-Mode的异常返回之用;
    3、提供32个64位的高级SIMD Vector和标量浮点寄存器(Scalar Floating Point);
    4、提供A32与T32两种指令集;
    5、支持32位虚拟寻址(Virtual Addressing);
    6、只使用CPSR保存PE(Processing Element)状态;
    7、提供1个32位异常特征寄存器ESR(Exception Syndrome Register),这个寄存器有自己特有的编码格式,且按照不同的执行级别EL(Executing Level)划分,每个执行级别都有一个ESR,名字分别记作:ESR_EL0、ESR_EL1、ESR_EL2、ESR_EL3;

    A64通用寄存器:
    X0~X7  : 参数/结果寄存器;
    X8     : 直接结果位置寄存器;
    X9~X15 : 临时寄存器;
    X16    : 第1个内部过程调用寄存器或临时寄存器IP0;
    X17    : 第2个内部过程调用寄存器或临时寄存器IP1;
    X18    : 平台寄存器/临时寄存器;
    X19~X28: 程序计数器/调用备份寄存器;
    X29    : 用作帧指针寄存器FP;
    X30    : 用作过程链接寄存器PLR(Produce Link Register)
    SP     : 栈指针寄存器;

    A32通用寄存器:
    R0~R3 : 参数/结果寄存器;
    R4~R11: 临时寄存器;
    R12   : 内部过程调用寄存器或临时寄存器IP;
    R13   : 栈指针寄存器SP;
    R14   : 链接寄存器LR;
    R15   : 程序计数器PC;

    ARMv8支持的数据类型:
    字节/B: 8位,Byte;
    半字/H: 16位,HalfWord;
    单字/S: 32位,SingleWord;
    双字/D: 64位,DoubleWord;
    四字/V: 128位,QuadWord;

    使用这几种数据类型时,ARMv8的通用寄存器可区分为32位和64位两种,可供程序使用:
    64位寄存器用作32位寄存器时记作:Wn; (W:Word)
    64位寄存器用作64位寄存器时记作:Xn;

    128位的浮点向量寄存器可分为5种:
    用作8位寄存器时记作  :Bn; (Byte,字节)
    用作16位寄存器时记作 :Hn; (Half Word,半字)
    用作32位寄存器时记作 :Sn; (Single Word,单字)
    用作64位寄存器时记作 :Dn; (Double Word,双字)
    用作128位寄存器时记作:Qn; (Quad Word,四字)
    n=0 ... 30;

  • 相关阅读:
    getchar,putchar函数
    强制类型转换和整数常量的数据类型及转换
    c语言整型的隐式数据 类型转换
    c语言整型数据输出格式声明
    c语言整型变量的储存空间,以及所表示的整数范围
    c语言常量
    c语言求回文数
    Android4.0源码目录结构详解
    MTK Android源代码目录
    Comparator 和 Comparable
  • 原文地址:https://www.cnblogs.com/konf/p/9213487.html
Copyright © 2020-2023  润新知