ARM Cortex-A系列编程指南之ARMv8 A -- 第四章 ARMv8寄存器

1、通用寄存器

AArch64运行环境提供了31个64bit的通用寄存器:X0~X31,同时他们也都有32bit的形式:W0~W31,他们对应映射到64bit寄存器的低32位。

读取W寄存器,将会只读X的低32位;

写W寄存器,将会将X的高32位写为0。也就是说设置W0为0xFFFFFFFF,结果设置X0为0x00000000FFFFFFFF。

2、AArch64特殊寄存器

 除了31个核心寄存器外,还有一些特殊寄存器。

在AArch64运行状态,异常返回的状态,保存在每个异常等级的ELR和SPSR寄存器 (EL0不用异常返回,所以这个异常等级没有ELR和SPSR寄存器)。

2.1 XZR/WZR寄存器(零寄存器)

读的时候返回0,写的时候忽略写的值。

2.2 SP寄存器(堆栈指针)

每个异常等级都有自己的SP寄存器(SP_EL0, SP_EL1, SP_EL2, SP_EL3)。但是,除了EL0以外,其它异常等级都有两个选择,或者用自己等级的SP_ELn,或者用EL0等级的SP_EL0;EL0就只能用SP_EL0了。

异常等级 选项
EL0 EL0t
EL1 EL1t, EL1h
EL2 EL2t, EL2h
EL3 EL3t, EL3h

t表明选择了SP_EL0寄存器,h表明选择了SP_ELn寄存器。

2.3 PC寄存器(程序计数)

ARMv7有个R15寄存器,就是PC(程序计数)寄存器,是可以作为通用寄存器使用的。

但是ARMv8这里不一样了,不能被当做有名字的寄存器来访问了。

2.4 ELR(异常连接)寄存器

 保存异常返回的地址。

2.5 SPSR寄存器(保存的进程状态寄存器)

当异常发生时,处理器的状态就被保存在SPSR寄存器里,和ARMv7中的CPSR类似。SPSR保存了处理异常前的PSTATE,当异常返回前需要将PSTATE设回来。

 3、处理器状态(PSTATE)

AArch64没有像ARMv7的CPSR寄存器,需要通过PSATE,其各个字段定义如下:

其中N、Z、C、V可以在EL0访问,其他字段在EL0是未定义状态,需要在EL1或者更高级访问或执行。

在AArch64运行状态,通过执行ERET指令从异常返回,从而导致SPSR_ELn被拷贝到了PSTATE。

4、系统寄存器(System Registers)

在AArch64运行状态,使用MSR和MRS指令,通过系统寄存器(System Registers)来进行系统的配置。而在ARMv7上,使用协处理器CP15。之前的ARM版本都使用协处理器进行系统配置,但是AArch64不支持协处理器。

寄存器的名字,指出了其能被访问的最低的异常等级。比如:

TTBR0_EL1可以在EL1、EL2、EL3访问;

TTBR0_EL2可以在EL2、EL3访问。

访问这些寄存器的汇编指令(M代表move,R代表寄存器,S代表系统寄存器):

MRS x0, TTBR0_EL1 // 将TTBR0_EL1内容写进x0
MSR TTBR0_EL1, x0 // 将x0内容写进TTBR0_EL1
系统寄存器总结如下表:
名字 寄存器 描述 n的值
ACTLR_EL n

赋值控制寄存器

Auxiliary Control Register

控制处理器特有的feature 1,2,3
CCSIDR_EL n
当前缓存大小ID寄存器
Current Cache Size ID Register
提供当前选中的缓存信息 1
CLIDR_EL n
缓存等级ID寄存器
Cache Level ID Register
缓存的类型 1,2,3
CNTFRQ_EL n
计数时钟频率寄存器
Counter-timer Frequency Register
系统时钟的频率 0
CNTPCT_EL n
计数时钟的物理计数寄存器
Counter-timer Physical Count Register
64bit的时钟的物理计数 0
CNTKCTL_EL n
计数时钟的内核控制寄存器
Counter-timer Kernel Control Register
控制从虚拟计数器产生的事件。
Also controls access from EL0 to the physical counter,
virtual counter, EL1 physical timers, and the virtual timer.
1
CNTP_CVAL_EL n
Counter-timer Physical Timer Compare Value Register
Holds the compare value for the EL1 physical timer.
0
CPACR_EL n
Coprocessor Access Control Register
Controls access to Trace, floating-point, and NEON
functionality
1
CSSELR_EL n
Cache Size Selection Register
Selects the current Cache Size ID Register, CCSIDR_EL1, by
specifying the required
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值