armv8 寄存器
阅读数:311 评论数:0
跳转到新版页面分类
硬件/嵌入式
正文
一、armv8概述
ARM架构版本号从1-8,ARMv8架构支持以下两种执行状态:
1、aarch64
(1)提供31个64位通用寄存器(其中x30被用来做链接寄存器LR(函数返回地址)),一个64位程序计数器PC、栈帧SPs、异常链接寄存器ELRs。
(2)提供32个128位寄存器用于SIMD向量和标量浮点计算 。
(3)仅支持指令集A64
(4)4个异常等级EL0-EL3
(5)Defines a number of Process state (PSTATE) elements that hold PE state. The A64 instruction set includes instructions that operate directly on various PSTATE elements.
(6)使用后缀为每个系统寄存器命名,用于指示访问此寄存器所需要的最低异常级别。
2、aarch32
(1)提供13个32位通用寄存器,和一个32位PC、SP和链接寄存器LR,LR还兼有ELR功能。
(2)提供32个64位寄存器用于SIMD向向和标题浮点计算 。
(3)支持两种指令A32(32位编码的定长指令集)和T32(使用16位和32位编码的变长指令集)。
二、ARM64通用寄存器
通用寄存器就是在任何时间任何特权级下都可以使用的寄存器。每个寄存器可以用为64位的通用寄存器,我们叫他们(x0~x30),也可以作为32位的通用寄存器(w0~w30)。
寄存器 |
描述 |
x0-x7 |
参数寄存器,用于子程序调用时的参数传递,X0还用于返回值传递 |
x8-x15 |
临时寄存器,也叫可变寄存器,子程序使用时不需要保存。 |
x16-x17 |
子程序内部调用寄存器(intra-procedure-call),使用时不需要保存,尽量不要使用 |
x18 |
平台寄存器,它的使用与平台相关,尽量不要使用。 |
x19-x28 |
临时寄存器,子程序使用时必须保存。 |
x29/fp |
指向当前方法的栈底部,使用时必须保存。 |
x30/LR |
存放的是函数的返回“地址”。当ret指令执行时刻,会寻找x30寄存器保存的“地址值”! |
SP |
用于指向每个函数的栈顶。32位栈帧使用WSP。 |
XZR |
零寄存器。32位零寄存器为WZR |
x0-x30是31个通用整形寄存器,每个寄存器可以存取一个64位大小的数,当使用x0-x30访问时,它就是一个64位的数,当使用w0-x30访问时,访问的是这些寄存器的低32位。
三、32个SIMD&FP寄存器
每个寄存器根据实际使用长度,命名会有所不同。
A 128-bit register named Q0 to Q31.
A 64-bit register named D0 to D31.
A 32-bit register named S0 to S31.
A 16-bit register named H0 to H31.
An 8-bit register named B0 to B31.
另外还有两个SIMD&FP控制寄存器FPCR(浮点控制寄存器)、FPSR(浮点状态寄存器)。