ARMV8学习笔记之AArch64通用寄存器

目录

摘自白皮书——

摘自编程指南Programmer’s Guide for ARMv8-A第四章


摘自白皮书——

        任何一个汇编器或是编译器的作者都会注意到的A64指令集的众多不同之一,就是30个通用寄存器的访问。每个寄存器都是64bit宽,在汇编语言中称作X0到X30,这总共有31个寄存器,但是X30不是严格意义上的通用,因为它被用作PLR(Procedure Link Register)。

        不同于AArch32环境中,每种操作状态都有一组banked寄存器,在AArch64中只有SP(Stack Pointer)、ELR(Exception Link Register)和SPSR(Saved Process State Register)被banked。同样异于AArch32中的当前处理器状态(在AArch64中称为PState),当前处理器状态是分类独立访问的,比如要访问flag bits。因此不再需要原子地读写/修改寄存器内的某个位域。

        ARMV8学习笔记之AArch64通用寄存器_第1张图片

        因此64位OS或监视器可以操作一个32位环境,这些寄存器间也存在一种架构性的关系。所有的32位寄存器都可以简单地映射到每个64位寄存器的低32位。

摘自编程指南Programmer’s Guide for ARMv8-A第四章

 AArch64提供了31*64bit通用寄存器,可在任何时刻,任何异常级别进行访问。

每个寄存器(X0-X30)都有一个32位的格式(W0-W30)。32位W寄存器构成了对应的64位X寄存器的低半截。也就是说,W0映射为X0的低32位,W1映射为X1的低32位。

读取W寄存器,对应X寄存器的高32位保持不变。写W寄存器将对应X寄存器的高32位置为0。也就是向W0写入0xFFFF FFFF则会设置X0为0x0000 0000 FFFF FFFF。

你可能感兴趣的:(arm,arm,寄存器)