下载  >  操作系统  >  Linux  > ARMv8架构与指令集.学习笔记

ARMv8架构与指令集.学习笔记 评分:

全面深入介绍ARMv8架构与指令集相关内容,包括 ARM /thumb指令,ARMv8的架构层级与32/64位异常模型跟路由选择等。
ARMv8架构与指令集 第1章ARMv8简介 1.1基础认识 ARMv8的架构继承以往ARM7与之前处理器技术的基础,除了现有的16/32bit的 Thumb2指令支持 外,也向前兼容现有的A32ARM32bit)指令集,基于64bit的Arch64架构,除了新增A64(ARM64bit) 指令集外,也扩充了现有的A32(ARM32bit)和T32( Thumb232bit)指令集,另外还新增加了 CRYPT0(加密)模块支持。 1.2相关专业名词解释 AArch32 描述32 bit Execution State AArch64 描述64 bit execution state A32、T32 AArch32 ISA (Instruction Architecture) A64 AArch64 ISA (Instruct ion Architecture) Interprocess ing 描述 AArch32和 AAr ch64两种执行状态之间的切换 SIMD Sing le- Instruction, Multiple-Data(单指令多数据 (参考文档:ARM8- A Architecture reference manua|-DD10487 Ag armv8arm.pdf) ARMv8架构与指令集 第2章 Execution state 2.1提供两种 Execution state ·ARMv8提供 AArch32 state和 AArch64 state两种 Execut i on State,下面是两种 Execution State对比 Execution State Note 提供13个32bit通用寄存器R0-R12,一个32bitP指针(R15)、堆栈指针SP(R13)、链接 寄存器LR(R14) 提供一个32bit异常链接寄存器ELR,用于 Hyp mode下的异常返回 AAr ch32 提供32个64tSM向量和标量 floating-point支持 提供两个指令集A32(32bit)、T32(16/32bit) 兼容ARM7的异常模型 协处理器只支持CP10\CP110cP14\GP15 提供31个64bit通用寄存器X0-X30(W0-30),其中X30是程序链接寄存器LR 提供一个64bitP指针、堆栈指针SPx、异常链接寄存器ELRx 提供32个128 bit sI mD向量和标量 float ing- point支持 定义ARM8异常等级Eⅹ(x<4),ⅹ越大等级越高,权限越大 AAr ch64 定义一组 PE state寄存器 PSTATE(NcV/ DA I F/CurrentEL/SPse等),用于保存PE当前的 状态信息 没有协处理器概念 2.2决定 Execution state的条件 SPSR EL1.M[4]决定EL0的执行状态,为0=>64bit,否则=>32bit HCR EL2.RN决定EL1的执行状态,为1=>64bit,否则=>32bit SCR EL3RN确定EL2orEL1的执行状态,为1->64bit,否则>32bit AArch3?和 AArch64之间的切换只能通过发生异常或者系统 Reset来实现.(A3?-〉T32之间是通过BX指令切换的 AArch32 AArch64 CRYPTO CRYPTO BX+ Ac dress bit“o"ORR“1 A32 T32 A64 wlth“4" byte algr ment Exception Exception AArch64 Kernel ARMv8架构与指令集 第3章 Exception Leve l ARMv8定义EL0-EL3共4个 Except ion Leve来控制PE的行为 ELⅹ(x<4),ⅹ越大等级越高,执行特权越高 执行在EL0称为非特权执行 EL2没有 Secure state,只有Non- secure state EL3只有 Secure state,实现EL0/EL1的 Secure和Non- secure之间的切换 EL0&EL1必须要实现,EL2/EL3则是可选实现 3. 1 Exception Level 5 Secur ity Exception Level ELOApplication EL1 Linux kerne- OS EL2 Hyperv i sor(可以理解为上面跑多个虚拟0s) EL3 Secure Monitor (ARM Trusted Firmware) Security Non-secure ELO/EL1/EL2.只能访问 Non-secure memory Secure0/13可以访间 Non-secure memory& Secure memo赶到物理屏障安全隔作用 3.1.1EL3使用 AArch64、 AArch32的对比 Note User mode只执行在Non- Secure EL0 or Secure el0 Common SCR EL3Ns决定的是 low level EL的 secur e/non- secure状态,不是绝对自身的 EL2只有Non- secure state EL0既有Non- secure state也有 Secure state 若EL1使用 AArch32,那么Non- Secure{SYS/FlQ/RQ/Svo/ ABORT/UND}模式执行在№ on-secure EL1, EL3 Secure{SYS/FQ/RQ/SV/ aBORt/UND]模式执行在 Secure EL1 Arch64若SRE3Ns=0则切换到 Secure el0状态,否则切换到 Non-secure elo01L1状态 Secure state只有 Secure EL0/EL1/EL3 User mode只执行在Non- Secure EL0 or secure el0 EL3若EL使用Arch32那么Non- Secure SYS/FIQ/RO/SV/ ABORT/UNo}模式执行在 Non-secure EL1 Arch32| Secure SYS/F|/|Ro/swc/ARN模式执行在E3 Secure state只有 Secure EL0/EL3,没有 Secure EL1,要注意和上面的情况不同 当EL3使用 AArch64时,有如下结构组合 5 ARMv8架构与指令集 Non-Secure mode Secure mode AArch32/64 AArch32/6 AArch32/64 AArch32/64 APP #1 APP #2 ELO I Secure APP #sEcure APP#2 Mode Mode Mode Mode User User User User AArch32/64 AArch32/6 AArch32/64 Guest os#1 Guest os#2 Secure os EL1 Mode Mode Mode System, FIQ, IRO, Sva System, FIQ, IRQ svc System, FIQ, IRQ, svC Abort Abort, Undefined Abort, Undefined Undefined AArch32/64 Hypervisor EL2 Mode HYP AArch64 Secure Monitor EL3 Mode Monitor 当EL3使用Arch32时,有如下结构组合 Non-Secure mode Secure mode AArch32 AArch32 APP #1 ELO APP#2i AArch32 AArch32 Secure APP #1 Secure APP #2 Mode Mode Mode User User User User AArch32 AArch32 Guest Os#1 Guest os #2 ELI System, FIQ, IRQ, sVC. System, FIQ, IRQ, SvC. Abort,Undefined Abort, Un defined AArch32 Hypervisor EL2 Mode HYP AArch32 AArch32 Secure Monitor Secure Os EL3 Mode Monitar System, FIQ, IRQ, sVc Abort Undefined 32ELx和 Execution State组合 ·假设EL0-EL3都已经实现,那么将会有如下组合 五类组合 ELO/EL1/EL2/ EL3 = AAr ch64 此两类组合不存在64bit->32bit之间的所谓 ELO/EL1/EL2/EL3 => AArch32 Interprocess ing切换 ARMv8架构与指令集 EL0 = AARCH32. EL1/EL2/EL3=> AAr ch64 此三类组合存在64bit->32bit之间的所谓 ELO/EL1 = AAr 32. EL2/EL3=> AArch64 Interprocess ing切换 ELO/EL1EL2 => AArch32, EL3=> AAr ch64 组合规则 字宽(x)=字宽(L(+1)(x=012)原则:上层字宽不能大于底层字宽 五类经典组合图示 Exception 32-b t compatibility Level ELO plication only AArch32 OSVM level 开}形开 pervisor+ SuPport Application Full AArch64 C? suPport Full AArch32 suP Dorr support I EL2 Monitor+ AArch32 Hypervisor+ S supp M Hypervisor ELS ARMV8-A support Monitor on RESE AArch64 AArch64 AArch64 BArchet AArch32 Native 64-bit support 3.3路由控制 如果EL3使用 AArch64,则有如下异常路由控制 3.3.1路由规则 路由规则如下图所示( from ARMy8 Datasheet) Target Exception level when executing In SCR EL3.EA AMOa SCR EL3IRQ SCR EL3RW IMOa Non-secure Secure SCR EL3 FIQ FM。a ELO EL1 EL2 ELO EL1 0 上工1 ELl EL2 EL ELI E工之 E工2 EL2 ELL 上L1 0 E工l E工I E工l E工5 EL3 a. If EL2 is using AArch54, these are the HCR EL2. (A\O, IMO, FMO) contral bits. If EL2 is using AArch32, these are the HCR(AMO, IMO, FMoI control bits. If HCR EL2TGE or HCR TGE 1 1, these bits are treated as being 1 other than fo a direct read 规则小结如下 若 SPSR EL1M[4]==0,则决定EL0使用 AArch64,否则AAch3 若 SCR EL3RW=1,则决定EL2/EL1是使用 AArch64,否则 AArch32 若 SCR EL3.EA,FIQ,IRQ}=1,则所有相应的 SError\FQ\RQ中断都被路由到EL3 若 HCR EL2.RW=1,则决定EL1使用 AArch64,否则使用 AArch32 ARMv8架构与指令集 若HREL2.{AM0,INo,FM0}==1,则EL1/EL0所有对应的 SError\F0\RQ中断都被路由到EL2,同时使能对应的 虚拟中断VSE,V,VF 若 HCR EL2.TGE=1,那么会忽略HREL2.{AMo,HM0,FM0}的具体值,直接当成1处理,则EL1/EL0所有对应的 SError\FIQ、IRQ中断都被路由到EL2,同时禁止所有虚拟中断 注意: SCR EL3.{EA,FQ,IRQ}bit的优先级高于 HCR EL2.{AMo,IMo,FM}bit优先级,路由优先考虑 SCR EL3 3.3.21RQ/FIQ/ SError路由流程图 (ROFIQ/SEror Exception) EL8三L1 nly EL1 Have el3 EA, IRQ, FIQ EL3 SCR EL3NS SEC-EL1 0? Have EL2 HCR EL2 TGE HCR EL2 IMO, IMO, FMOy EL2 1? NO NNon-sec-EL1 ARMv8架构与指令集 第4章ARMV8寄存器 寄存器名称描述 位宽 分类 32 bit wn(通用 NZR(0寄存器) WSP(堆栈指针) 64-bit Xn(通用) XZR(0寄存器) sp(堆栈指针 4.1 AArch32重要寄存器 奇存器类型Bit 描述 R0R14 32bit通用寄存器,但是ARM不建议使用有特殊功能的R13,R14,R15当做通用寄 存器使用 SP X 32bit通常称R13为堆栈指针,除了User和sys模式外,其他各种模式下都有对 应的$Px寄存器:x={wnd/svc/abt/irq/fiq/hyp/mon LR X 32bit|称R14为链接寄存器,除了User和Sys模式外,其他各种模式下都有对应 的SPx寄存器:x={und/svc/abt/svc/irq/fiq/mon},用于保存程序返回 链接信息地址,Arch32环境下,也用于保存异常返回地址,也就说LR和 ELR是公用一个, AArch64下是独立的 eLR hyp32 bit Hyp mode下特有的异常链接寄存器,保存异常进入 Hyp mode时的异常地址 PC 32bit通常称R15为程序计算器PC指针,Arch32中P指向取指地址,是执行指 令地址+8,Arch64中PC读取时指向当前指令地址 CPSR 32bt记录当前P的运行状态数据, CPSR.M40]记录运行模式,Arch64下使用 PSTATE代替 APSR 3bt应用程序状态寄存器,E0下可以使用APSR访问部分 PSTATE值 SPSR X 32bit是CSR的备份,除了υser和Sys模式外,其他各种模式下都有对应的sPRx 寄存器:x=[und/svc/abt/irq/fia/hpy/mon,注意:这些模式只适用于 32bit运行环境 HCR 32 bitel2特有,HCR{TEG,AMO,MFMO,RN控制ELO/EL1的异常路由 SCR 32 bitEL3特有,SCR.EA,|RQ,F10,R控制EL0/EL1EL2的异常路由,注意EL3 始终不会路由 VBAR 32bit|保存任意异常进入非 Hyp mode&非 Monitor mode F的跳转向量基地址 HVBAR 3bt保存任意异常进入 Hyp mode I的跳转向量基地址 MVBAR 32bit保存任意异常进入 Monitor mode的跳转向量基地址 ESR ELX 32bt保存异常进入Lx时的异常综合信息,包含异常类型EC等,可以通过EC 值判断异常 class PSTATE 不是一个寄存器,是保存当前P状态的一组寄存器统称,其中可访问寄存 器有: PSTATE.{NzcV,DAIF, CurrentEL,SPSe,属于ARMB8新增內容,主要 用于64bit环境下 ARMv8架构与指令集 4.1.1A32状态下寄存器组织 Application level view SYstem level view User System Hy Supervisor Abort UndefinedMonitor丰 IRO FIG Roush R1 R1 usr R2usr R5 usr R6 R6 usr R7 R7 usr R8 R8 usr R8 fig R9usr R9 id R10 R11 R11 usr R11 fig 12 R12usr IR12-f sP usr sP_hyp SP__svc sP_abt SP_und SP_mon SP_irq LR US LR SVE LR abt LR und LR mon LR I LR fq PC PC APSI CPSR sPSR_hyp sPSR_svcSPSR_abt sPsR_und sPSR_mon SPSR_ inq sPSR_fiq LRbp「 所谓的 banked register是指一个寄存器在不同模式下有对应不同的寄存器,比如SP,在 abort 模式下是 SP bat,在Uhnd模式是SP_und,在iqr模式下是sp_irq等,进入各种模式后会自动切 换映射到各个模式下对应的寄存器. R0-R7是所谓的非 banked register,R8-R14是所谓的 banked register 4.1.1T32状态下寄存器组织 A32使用 T32-32bit使用 T32-16bit使用 Rd/Rn编码位宽4位 Rd/Rn编码位宽4位 Rd/Rn编码位宽3位 RO RO RO R1 R1 R2 R2 R2 R3 R3 R3 R4 R4 R4 R5 R5 R5 R6 R6 R6 R7 R7 R7 R8 并不是说T32-16bit下没有 R9 R9 R8~R12,而是有限的指令才 R10 R10 能访问到,16bit指令的 R11 R11 Rd/Rn编码位只有3位,所以 R12 R12 Rx范围是R0-R7 SP(R13 SP (R13 SP (R13) LR (R14) LR(R14)//M LR(R14)//M PC (R15) Pc(R15)//P Pc(R15)//P CPSR CPSR CPSR 10

...展开详情
2016-11-27 上传 大小:2.05MB
举报 收藏 (1)
分享

评论 下载该资源后可以进行评论 共4条

wxjdog armv8架构与指令集.持续更新 中文总结。 感谢分享。
2018-05-13
回复
loveconick 虽然不便宜,但东西是自己总结的中文的
2018-04-02
回复
kzy2358 非常好的总结,详细,到位。
2018-03-18
回复
zhaomengchina 非常好的总结
2017-04-30
回复