armv8 特殊寄存器 程序状态寄存器 SPSR
阅读数:193 评论数:0
跳转到新版页面分类
硬件/嵌入式
正文
当异常发生时,(cpsr)当前程序状态寄存器中的处理器状态将保存在相关的程序状态保存寄存器中(spsr),spsr保存着异常发生之前pstate的值,用于在异常返回时恢复(pstate)处理器状态的值。
PSTATE中的{N,Z,C,V}字段可以在el0级别访问,其他字段可以在el1或更高级访问。
AArch64下各bit的含义:
bit | 含义 |
---|---|
N | 负数标志位,如果结果为负数,则N=1;如果结果为非负数,则N=0。 |
Z | 零标志位,如果结果为零,Z=1,否则Z=0。 |
C | 进位状态标志位 |
V | 溢出状态标志位 |
SS | 软件步进标志位 ,表示当一个异常发生时,软件步进是否开启 |
IL | 非法执行状态位 |
D | 程序状态调试掩码,在异常发生时的异常级别下,来自监视点、断点和软件单步调试事件中的调试异常是否被屏蔽。 |
A | SError(系统错误)掩码位 |
I | IRQ掩码位 |
F | FIQ掩码位 |
M[4] | 异常发生时的执行状态 ,0表示AArch64 |
M[3:0] | 异常发生时的mode或异常级别 |
在armv8中,写入spsr依赖于异常级别,如果异常发生在el1,则使用spsr_el1.
在armv8架构中表面上我们是操作SPSR寄存器,实际上我们是操作下面的一堆寄存器,因为在armv8中已经没有了这个寄存器的实体,他里面的数据全部来自与下图的某个寄存器的某个位。
相关推荐
一、概述
1、目前常用的arm汇编环境有以下两种:
(1)arm asm: arm公司的汇编器,适合于windows平台下使用。
(2)gnu arm asm:gnu交叉编译工具链中的汇编器,适合于l
一、armv8概述
ARM架构版本号从1-8,ARMv8架构支持以下两种执行状态:
1、aarch64
(1)提供31个64位通用寄存器(其中x30被用来做链接寄存器LR(函数返回地址)),一个64位
全称Prefetch from memory。
1、PLD = prefetch for load
2、PST = prefetch for store
3、L1表示一级缓存,L2表示二级存,L3表示
Vector Base Address Register,在开启MMU的系统,vbar中写入的是虚拟地址。
armv8定义了vbarel1、vbarel2、vbarel3三个基址寄存器。
当中断产生
当访问零寄存器时,所有写操作都被忽略,所有读操作返回0。因为操作寄存器的速度是最快的,这个寄存的作用是提供0这个值,避免操作内存。
零寄存器当用作源寄存器时读操作的结果为零,当用作目标寄存器时则将结果