我是靠谱客的博主 曾经小松鼠,最近开发中收集的这篇文章主要介绍【ARMv8基础篇】寄存器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

????????????博主主页:MuggleZero ????????????

 《ARMv8架构初学者笔记》专栏地址:《ARMv8架构初学者笔记》

前文:

【ARMv8基础篇】异常等级

AArch64执行状态提供了31×64位的通用寄存器,可以在任何时候和所有异常级别下访问。每个寄存器的宽度为64位,它们通常被称为寄存器X0-X30。

通用寄存器除了用于标准运算和存储之外,还在函数调用过程中有特殊作用:

  • X0~X7

    传递参数和结果

  • X8~X15

    X8:间接结果寄存器

    X9~X15:临时寄存器

  • X16~X18

    ARM平台寄存器

    X16:IP0;

    X17:IP1;

    X18:PR

  • X19~X28

    被调用函数需要保存

  • X29~X30

    X29:FP栈帧寄存器

    X30:链接寄存器

X表示64位通用寄存器,而W表示低32位的数据,例如W0表示X0的低32位。

PSTATE寄存器

AArch64没有直接等同于ARMv7的当前程序状态寄存器(CPSR)。在AArch64中,传统的CPSR的组件是作为字段提供的,可以独立访问。这些被统称为处理器状态(PSTATE)。

AArch64的处理器状态或PSTATE字段有以下定义:

特殊寄存器

除了31个通用寄存器,还提供了多个特殊寄存器。如下图所示,接下来我们会重点介绍其中几个寄存器。

零寄存器

ARMv8有两个0寄存器,分别是WZR和XZR。零寄存器内容为0,可以作为源寄存器,也可以作为目的寄存器。

PC寄存器

PC用来指向当前运行指令的下一条指令的地址。

SP寄存器

每个异常等级都有一个SP寄存器,EL0中的SP可以当做临时寄存器,例如Linux中存放task_struct结构。

CurrentEL寄存器

表示PSTATE中的EL字段,即当前的异常等级。

SPSR寄存器

SPSR保存处理状态寄存器,当发生异常时,处理器状态被存储在相关的保存程序状态寄存器(SPSR)中,其方式类似于ARMv7中的CPSR。SPSR在发生异常之前持有PSTATE的值,在执行异常返回时用于恢复PSTATE的值。SPSR_X表示不同处理器模式下的SPSR寄存器。

ELR寄存器

存放了异常返回地址。

SPSel寄存器

在SP_EL0和SP_ELn中选择SP寄存器。

欢迎关注我的个人微信公众号,一起交流学习嵌入式开发知识!

关注「求密勒实验室」

最后

以上就是曾经小松鼠为你收集整理的【ARMv8基础篇】寄存器的全部内容,希望文章能够帮你解决【ARMv8基础篇】寄存器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部