栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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了。

异常等级选项
EL0EL0t
EL1EL1t, EL1h
EL2EL2t, EL2h
EL3EL3t, 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。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/656965.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号