ARM寄存器

Posted konf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

以上是关于ARM寄存器的主要内容,如果未能解决你的问题,请参考以下文章

ARM寄存器

ARM寄存器

ARM处理器寄存器

ARM 寄存器

ARM PC寄存器

学习总结之ARM处理器的运行模式及ARM寄存器