赞
踩
在学习ARM寄存器之前要先理解ARM CPU Mode的演变,因为逻辑寄存器通常会因为CPU Mode的不同有多个物理寄存器备份。本节以ARMv8体系结构为例,因为它包含了32位和64位的体系结构。
目标:
- 搞清楚ARM PL/EL的区别和联系
PL(Privilege Level)
ARMv8的PL继承自前身版本,分为PL0代表用户态和PL1代表系统态;此外,ARM将PL又划分为7种详细的Mode,其中1种(usr)属于PL0,另外6种属于PL1分别为:
在ARMv7-A种引入了security扩展和虚拟化扩展
security扩展:支持可信赖的执行环境(trust execution environment, TEE)而引入。security扩展将ARM运行环境分成Secure World和Non-Secure(或Normal) World。
为了实现这两个World的切换,在原PL基础上增加了Monitor Mode。Mon应属于Secure World的PL1
虚拟化扩展:可以在一个物理硬件平台虚拟出多个虚拟化硬件平台供不同的用户使用。ARM为了支持虚拟化扩展,新增了一个PL等级PL2,并新增了Hypervisor Mode,Hyp仅存在于Non-Secure World
ARM32 CPU Mode
在ARM32种,mode有着十分重要的作用。PL只是一个虚拟出来的概念,在体系结构中并没有明确的结果表明为何种PL级别,而是通过不同的mode来标识级别。
EL(Exception Level)
ARMv8体系结构中,统一使用EL来进行权限描述,不仅包括AArch64,还包括32位体系结构AArch32。而对于纯64位体系结构,只有EL;对于32位体系结构因为要被64位兼容,则继续保留了mode、PL和EL。
EL和PL的基础上变化,主要体现在:
由于EL2的Hypervisor是虚拟扩展引入的,只存在于Non-Secure,所以得出EL模型如下:
EL只会在以下情况之一发生的时候才会发生Level Change
ARM将PL和EL这两个架构统称为PE
Exception Level有四个等级:EL0, EL1, EL2, EL3
AArch32 modes有:User, Monitor, System, Supervisor, Abort, Undefined, IRQ和FIQ
在Secure状态:
总结来说:
在Non-secure状态:
得出下图所示(copy自ARM手册)
目标:
- 学习ARM32通用寄存器及其不同CPU Mode下的映射关系
- 学习ARM32基本状态寄存器
ARM32有16个32位通用寄存器,其中:
ARM32 通用寄存器与物理寄存器映射表如下(copy自ARM手册)
ARM64通用寄存器不再像ARM32那样根据CPU mode设置相应的物理备份,而是所有EL下共享一堆通用寄存器,如下图:
ARM64共有31个64位通用寄存器,PC寄存器属于特殊寄存器,需要使用特殊指令进行访问
栈指针寄存器
ARM64通用寄存器可以分别当作64位和32位的寄存器使用
ARM64使用PSTATE(Process State)来替换ARM32中的CPSR
ARM64一共有3个SPSR,分别为SPSR_EL1,SPSR_EL2,SPSR_EL3
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。