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(浮点状态寄存器)。

 




相关推荐

作用是把pc寄存器和立即数按照一定的规则计算后赋值给寄存器。  

一、概述 1、目前常用的arm汇编环境有以下两种: (1)arm asm: arm公司的汇编器,适合于windows平台下使用。 (2)gnu arm asm:gnu交叉编译工具链中的汇编器,适合于l

Move to Register from Status Register 用于将程序状态寄存器内容传输到通用寄存器。  

一、AREA 1、语法 AREA 段名  属性1,属性2,...... AREA伪指令用于定义一个代码段或数据段。若段名以数字开头,则该段

stp指令是str的变种指令,p可以理解成pair的意思,可以同时操作两个寄存器。 例如 stp x2

一、概述 1、LSL=Logic Shift Left 2、LSR=Logic Shift Right 3、ASL=Arithmatic Shift

一、概述 Condition execution是根据运行结果更新Conidtion flags,来判断Condition code是否可以执行。 通过给汇编指令

全称Prefetch from memory。 1、PLD = prefetch for load 2、PST = prefetch for store 3、L1表示一级缓存,L2表示二级存,L3表示

Vector Base Address Register,在开启MMU的系统,vbar中写入的是虚拟地址。 armv8定义了vbarel1、vbarel2、vbarel3三个基址寄存器。 当中断产生

当访问零寄存器时,所有写操作都被忽略,所有读操作返回0。因为操作寄存器的速度是最快的,这个寄存的作用是提供0这个值,避免操作内存。 零寄存器当用作源寄存器时读操作的结果为零,当用作目标寄存器时则将结果