ArmV8 寄存器简单概念:
OverView
PSTATE不是一个寄存器,是保存当前PE状态的一组寄存器统称,其中可访问寄存器有:PSTATE.{NZCV,DAIF,CurrentEL,SPSel},属于ARMv8新增内容,64bit下代替CPSR
注:
没有名为X31或W31的寄存器。 一些指令被编码了,以使数字31代表零寄存器ZR(WZR / XZR)。 还有一组受限制的指令,其中一个或多个参数被编码,以使数字31代表堆栈指针(SP).
Exception levels:
ARMv8定义了四种异常类型, EL0-EL3, 级别依次从低到高。
EL0为普通用户程序
EL1是操作系统内核相关
EL2是Hypervisor, 可以理解为上面跑多个虚拟OS
EL3是Secure Monitor(ARM Trusted Firmware)
link registers:
链接寄存器(LR)在进行子程序调用时存储返回地址。如果返回地址存储在堆栈中,它也可以用作通用寄存器, LR会映射到寄存器X30.
有三个异常链接寄存器,ELR_EL1,ELR_EL2和ELR_EL3,对应3个异常级别。当发生异常时,目标异常级别的异常链接寄存器存储在异常处理完成后跳转到的返回地址。如果异常取自AArch32状态,则ELR中的前32位都设置为零。异常级别内的子程序调用使用LR存储子程序的返回地址。
例如,当异常级别从EL0更改为EL1时,返回地址存储在ELR_EL1中。
在异常级别中,如果启用使用相同异常级别的中断,则必须确保将ELR存储在堆栈中,因为在执行中断时将使用新的返回地址覆盖它。
stack pointer registers:
堆栈指针(SP)是一个指向堆栈顶部的寄存器。 选择使用的堆栈指针在某种程度上与“异常”级别是分开的。 默认情况下,发生异常时会为目标异常级别选择堆栈指针(SP_ELn)。 例如,发生EL1异常时选择SP_EL1。 每个异常级别都有自己的堆栈指针。
但是,当在AArch64中,异常级别的不是E0时,处理器可以使用下面中的任何一种:
与该异常级别(SP_ELn)关联的64位堆栈指针,或者,
与EL0(SP_EL0)关联的堆栈指针。 EL0只能访问SP_EL0。
SP不能被大多数指令引用。 但是,一些算术指令,例如ADD指令,可以读写当前的堆栈指针来调整函数中的堆栈指针。 例如:
ADD SP, SP, #0x10 // 将SP调整为当前值之前的0x10字节
ADD SP, SP, #256 // SP = SP + 256
saved program status registers:
当异常发生时,PSTATE在SPSR里面保存。
N:负于或小于
Z:零
C:进位或借位或扩展
V:溢出
上一篇:[register]-04-ARMv8的寄存器简介和总结
下一篇:ARM aarch64汇编学习笔记(一):搭建编译环境
推荐阅读最新更新时间:2024-11-05 13:51
设计资源 培训 开发板 精华推荐
- 使用 Analog Devices 的 LTC1556IGN 的参考设计
- LTC2294IUP 演示板,DeMUX 双路 ADC,+3.0V,80Msps 12 位 70MHz
- LT1171IT、5V/2.5A 正电流升压降压转换器的典型应用
- AD8532ARZ-REEL7 A 单电源、2 路有源分频器的典型应用
- SG3846电流模式PWM控制器典型应用电路
- SY87701AL,用于 SONET 的 SY87701AL PLL 时钟发生器的评估板
- X-NUCLEO-IHM05A1,基于 L6208 的双极步进电机驱动器扩展板,用于 STM32 Nucleo
- RD-400,使用 FSL138MRT 100W、CCCV、多通道 LED 电源的参考设计,适用于工业照明应用
- 使用 ROHM Semiconductor 的 BD45482 的参考设计
- 【训练营】机械狗学习项目
- 精选PI InnoSwitch 产品系列文档,为您的设计添光溢彩! 下载有好礼!
- 有奖直播:是德科技100G/400G 光通信测试解决方案
- 安全的革新,全新的验证方式 下载富士通 《频谱验证解决方案 》白皮书 好礼送!
- KOL实战分享|无刷直流电机(BLDC)的驱动及控制方法
- 国产FPGA安路科技研讨会-北京站 火热报名中,参会赢京东卡!
- 2024 DigiKey 应用说:蓝牙5.4新特性解读和实例演示
- 力源带你了解安森美半导体开发神器——高度灵活的物联网开发套件( IDK )!看视频轻松答题享好礼!
- Littelfuse第4期:新型车载以太网保护
- 解锁【W5500-EVB-Pico】,探秘以太网底层,得捷Follow me第4期来袭!