表1.1 ARM公司重大的历史事宜
时 间
重 大 事 件
1978年
在英国剑桥创办了CPU(Cambridge Processing Unit)公司
1985年
第一款ARM处理器问世,它采取RISC架构,简称ARM(Acorn RISC Machine)
1995年
发布ARM7处理器核心,它支持3级流水线和ARMv4指令集
1997年
发布了ARM9处理器核心,它支持5级流水线,支持ARMv4T指令集,支持MMU内存管理以及指令/数据高速缓存。兼容ARMv4T指令集的处理器核心有ARM920T,范例SoC芯片是三星S3C2410
2003年
发布ARM11处理器,它支持8级流水线和ARMv6指令集,范例的IP核心有ARM1176JZF
2005年
发布Cortex-A8处理器核心,第一个引入超标量技能的ARM处理器
2007年
发布Cortex-A9处理器核心,它引入了乱序实行和预测实行机制,并扩大了L2高速缓存的容量
2010年
发布Cortex-A15处理器核心,它的最高主频可以到2.5 GHz,最多可支持8个处理器内核,单个簇最多支持4个处理器内核
2012年
发布64位Cortex-A53和Cortex-A57处理器内核
2015年
发布Cortex-A72处理器内核。树莓派4B开拓板采取Cortex-A72处理器内核
2019年
发布Neoverse系列处理器,它细分为E系列、N系列和V系列。V系列适用于性能优先的场景,例如高性能打算(HPC)。N系列适用于须要均衡的CPU设计优化的场景,例如网络运用、智能网卡、5G运用等,以供应出色的能耗比。E系列适用于高性能与低功耗的场景,例如网络数据平面处理器、5G低功耗网关等
2021年
发布ARMv9体系构造。Cortex-X2处理器支持ARMv9.0体系构造
ARM体系构造是一种硬件规范,紧张是用来约定指令集、芯片内部体系构造(如内存管理、高速缓存管理)等。以指令集为例,ARM体系构造并没有约定每一条指令在硬件描述措辞(Verilog或VHDL)中该当如何实现,它只约定每一条指令的格式、行为规范、参数等。为了降落客户基于ARM体系构造开拓处理器的难度,ARM公司常日在发布新版本的体系构造之后,根据不同的运用需求开拓出兼容体系构造的处理器IP,然后授权给客户。客户得到处理器IP之后,再用它来设计不同的SoC芯片。以ARMv8体系构造为例,ARM公司先后开拓出Cortex-A53、Cortex-A55、Cortex-A72、Cortex-A73等多款处理器IP。
ARM公司一样平常有两种授权办法。
体系构造授权。客户可以根据这个规范自行设计与之兼容的处理器。处理器IP授权。ARM公司根据某个版本的体系构造来设计处理器,然后把处理器的设计方案授权给客户。从最早的ARM处理器开始,ARM体系构造已经从v1版本发展到目前的v8版本。在每一个版本的体系构造里,指令集都有相应的变革,其紧张变革如表1.2所示。
表1.2 ARM体系构造的变革
ARM体系构造版本
范例处理器核心
主 要 特 性
v1
—
仅支持26位地址空间
v2
—
新增乘法指令和乘加法指令、支持协处理器指令等
v3
—
地址空间扩展到32位,新增SPSR和CPSR等
v4
ARM7TDMI/ARM920T
新增Thumb指令集等
v5
ARM926EJ-S
新增Jazelle和VFPv2扩展
v6
ARM11 MPCore
新增SIMD、TrustZone以及Thumb-2扩展
v7
Cortex-A8/Cortex-A9
增强NEON和VFPv3/v4扩展
v8
Cortex-A72
同时支持32位以及64位指令集的处理器体系构造
v9
Cortex-X2
支持可伸缩矢量扩展打算、机密打算体系构造
ARM体系构造又根据不同的运用处景分成如下3种系列。
A系列:面向性能密集型系统的运用场置器内核。R系列:面向实时运用的高性能内核。M系列:面向各种嵌入式运用的微掌握器内核。2 ARMv8体系构造根本知识2.1 ARMv8体系构造ARMv8是ARM公司发布的第一代支持64位处理器的指令集和体系构造。它在扩充64位寄存器的同时供应了对上一代体系构造指令集的兼容,因此它供应了运行32位和64位运用程序的环境。
ARMv8体系构造除了提高了处理能力,还引入了很多吸引人的新特性。
具有超大物理地址(physical address)空间,供应超过4 GB物理内存的访问。具有64位宽的虚拟地址(virtual address)空间。32位宽的虚拟地址空间只能供4 GB大小的虚拟地址空间访问,这极大地限定了桌面操作系统和做事器等的运用。64位宽的虚拟地址空间可以供应更大的访问空间。供应31个64位宽的通用寄存器,可以减少对栈的访问,从而提高性能。供应16 KB和64 KB的页面,有助于降落TLB的未命中率(miss rate)。具有全新的非常处理模型,有助于降落操作系统和虚拟化的实现繁芜度。具有全新的加载-获取指令(Load-Acquire Instruction)、存储-开释指令(Store-Release Instruction),专门为C++11、C11以及Java内存模型设计。ARMv8体系构造一共有8个小版本,分别是ARMv8.0、ARMv8.1、ARMv8.2、ARMv8.3、ARMv8.4、ARMv8.5、ARMv8.6、ARMv8.7,每个小版本都对体系构造进行小幅度升级和优化,增加了一些新的特性。
2.2 采取ARMv8体系构造的常见处理器内核下面先容市情上常见的采取ARMv8体系构造的处理器(简称ARMv8处理器)内核。
Cortex-A53处理器内核:ARM公司第一批采取ARMv8体系构造的处理器内核,专门为低功耗设计的处理器。常日可以利用1~4个Cortex-A53处理器组成一个处理器簇或者和Cortex-A57/Cortex-A72等高性能处理器组成大/小核体系构造。Cortex-A57处理器内核:采取64位ARMv8体系构造的处理器内核,而且通过AArch32实行状态,保持与ARMv7体系构造完备后向兼容。除ARMv8体系构造的上风之外,Cortex-A57还提高了单个时钟周期的性能,比高性能的Cortex-A15赶过了20%~40%。它还改进了二级高速缓存的设计和内存系统的其他组件,极大地提高了性能。Cortex-A72处理器内核:2015年年初正式发布的基于ARMv8体系构造并在Cortex-A57处理器上做了大量优化和改进的一款处理器内核。在相同的移动设备电池寿命限定下,Cortex-A72相对付基于Cortex-A15的设备具有3.5倍的性能提升,展现出了精良的整体功效。2.3 ARMv8体系构造中的基本观点ARM处理器实现的是精简指令集体系构造。在ARMv8体系构造中有如下一些基本观点和定义。
处理机(Processing Element,PE):在ARM公司的官方技能手册中提到的一个观点,把处理器处理事务的过程抽象为处理机。实行状态(execution state):处理器运行时的环境,包括寄存器的位宽、支持的指令集、非常模型、内存管理以及编程模型等。ARMv8体系构造定义了两个实行状态。AArch64:64位的实行状态。供应31个64位的通用寄存器。供应64位的程序计数(Program Counter,PC)指针寄存器、栈指针(Stack Pointer,SP)寄存器以及非常链接寄存器(Exception Link Register,ELR)。供应A64指令集。定义ARMv8非常模型,支持4个非常等级,即EL0~EL3。供应64位的内存模型。定义一组处理器状态(PSTATE)用来保存PE的状态。AArch32:32位的实行状态。供应13个32位的通用寄存器,再加上PC指针寄存器、SP寄存器、链接寄存器(Link Register,LR)。支持两套指令集,分别是A32和T32(Thumb指令集)指令集。支持ARMv7-A非常模型,基于PE模式并映射到ARMv8的非常模型中。供应32位的虚拟内存访问机制。定义一组PSTATE用来保存PE的状态。ARMv8指令集:ARMv8体系构造根据不同的实行状态供应不同指令集的支持。A64指令集:运行在AArch64状态下,供应64位指令集支持。A32指令集:运行在AArch32状态下,供应32位指令集支持。T32指令集:运行在AArch32状态下,供应16位和32位指令集支持。系统寄存器命名:在AArch64状态下,很多系统寄存器会根据不同的非常等级供应不同的变种寄存器。系统寄存器的利用方法如下。<register_name>_Elx //末了一个字母 x 可以表示0、1、2、3
如SP_EL0表示在EL0下的SP寄存器,SP_EL1表示在EL1下的SP寄存器。
本书重点先容ARMv8体系构造下的AArch64实行状态以及A64指令集,对AArch32实行状态、A32以及T32指令集不做过多先容,感兴趣的读者可以阅读ARMv8干系技能手册。
2.4 A64指令集指令集是处理器体系构造设计的重点之一。ARM公司定义与实现的指令集一贯在变革和发展中。ARMv8体系构造最大的改变是增加了一个新的64位的指令集,这是早前ARM指令集的有益补充和增强。它可以处理64位宽的寄存器和数据并且利用64位的指针来访问内存。这个新的指令集称为A64指令集,运行在AArch64状态下。ARMv8兼容旧的32位指令集——A32指令集,它运行在AArch32状态下。
A64指令集和A32指令集是不兼容的,它们是两套完备不一样的指令集,它们的指令编码是不一样的。须要把稳的是,A64指令集的指令宽度是32位,而不是64位。
2.5 ARMv8处理器实行状态ARMv8处理器支持两种实行状态——AArch64状态和AArch32状态。AArch64状态是ARMv8新增的64位实行状态,而AArch32是为了兼容ARMv7体系构造的32位实行状态。当处理器运行在AArch64状态下时,运行A64指令集;而当运行在AArch32状态下时,可以运行A32指令集或者T32指令集。
如图1.1所示,AArch64状态的非常等级(exception level)确定了处理器当前运行的特权级别,类似于ARMv7体系构造中的特权等级。
EL0:用户特权,用于运行普通用户程序。EL1:系统特权,常日用于操作系统内核。如果系统使能了虚拟化扩展,运行虚拟机操作系统内核。EL2:运行虚拟化扩展的虚拟机监控器(hypervisor)。EL3:运行安全天下中的安全监控器(secure monitor)。▲图1.1 AArch64状态的非常等级
ARMv8体系构造许可切换运用程序的运行模式。如在一个运行64位操作系统的ARMv8处理器中,我们可以同时运行A64指令集的运用程序和A32指令集的运用程序,但是在一个运行32位操作系统的ARMv8处理器中就不能运行A64指令集的运用程序了。当须要运行A32指令集的运用程序时,须要通过一条管理员调用(Supervisor Call,SVC)指令切换到EL1,操作系统会做任务的切换并且返回AArch32的EL0,从而为这个运用程序准备好AArch32状态的运行环境。
2.6 ARMv8支持的数据宽度ARMv8支持如下几种数据宽度。
字节(byte):8位。半字(halfword):16位。字(word):32位。双字(doubleword):64位。四字(quadword):128位。3 ARMv8寄存器3.1 通用寄存器AArch64实行状态支持31个64位的通用寄存器,分别是X0~X30寄存器,而AArch32状态支持16个32位的通用寄存器。
除用于数据运算和存储之外,通用寄存器还可以在函数调用过程中起到分外浸染,ARM64体系构造的函数调用标准和规范对此有所约定,如图1.2所示。
在AArch64状态下,利用X(如X0、X30等)表示64位通用寄存器。其余,还可以利用W来表示低32位的数据,如W0表示X0寄存器的低32位数据,W1表示X1寄存器的低32位数据,如图1.3所示。
▲图1.2 AArch64状态的31个通用寄存器
▲图1.3 64位通用寄存器和低32位数据
3.2 处理器状态AArch64体系构造利用PSTATE寄存器来表示当前处理器状态(processor state),如表1.3所示。
表1.3 PSTATE寄存器
分 类
字 段
描 述
条件标志位
N
负数标志位。在结果是有符号的二进制补码的情形下,如果结果为负数,则N=1;如果结果为非负数,则N=0
Z
0标志位。如果结果为0,则Z=1;如果结果不为0,则Z=0
C
进位标志位。当发生无符号数溢出时,C=1。其他情形下,C=0
V
有符号数溢出标志位。 对付加/减法指令,在操作数和结果是有符号的整数时,如果发生溢出,则V=1;如果未发生溢出,则V=0。 对付其他指令,V常日不发生变革
实行状态掌握
SS
软件单步。该位为1,解释在非常处理中使能了软件单步功能
IL
不合法的非常状态
nRW
当前实行状态。 0:处于AArch64状态。 1:处于AArch32状态
实行状态掌握
EL
当前非常等级。 0:表示EL0。 1:表示EL1。 2:表示EL2。 3:表示EL3
SP
选择SP寄存器。当运行在EL0时,处理器选择EL0的SP寄存器,即SP_EL0;当处理器运行在其他非常等级时,处理器可以选择利用SP_EL0或者对应的SP_ELn寄存器
非常掩码标志位
D
调试位。使能该位可以在非常处理过程中打开调试断点和软件单步等功能
A
用来屏蔽系统缺点(SError)
I
用来屏蔽IRQ
F
用来屏蔽FIQ
访问权限
PAN
特权模式禁止访问(Privileged Access Never)位是ARMv8.1的扩展特性。 1:在EL1或者EL2访问属于EL0的虚拟地址时会触发一个访问权限缺点。 0:不支持该功能,须要软件来仿照
UAO
用户访问覆盖标志位,是ARMv8.2的扩展特性。 1:当运行在EL1或者EL2时,没有特权的加载存储指令可以和有特权的加载存储指令一样访问内存,如LDTR指令。 0:不支持该功能
3.3 分外寄存器ARMv8体系构造除支持31个通用寄存器之外,还供应多个分外的寄存器,如图1.4所示。
▲图1.4 分外寄存器
1.零寄存器ARMv8体系构造供应两个零寄存器(zero register),这些寄存器的内容全是0,可以用作源寄存器,也可以用作目标寄存器。WZR是32位的零寄存器,XZR是64位的零寄存器。
2.PC指针寄存器PC指针寄存器常日用来指向当前运行指令的下一条指令的地址,用于掌握程序中指令的运行顺序,但是编程职员不能通过指令来直接访问它。
3.SP寄存器ARMv8体系构造支持4个非常等级,每一个非常等级都有一个专门的SP寄存器SP_ELn,如处理器运行在EL1时选择SP_EL1寄存器作为SP寄存器。
SP_EL0:EL0下的SP寄存器。SP_EL1:EL1下的SP寄存器。SP_EL2:EL2下的SP寄存器。SP_EL3:EL3下的SP寄存器。当处理器运行在比EL0高的非常等级时,处理器可以访问如下寄存器。
当前非常等级对应的SP寄存器SP_ELn。EL0对应的SP寄存器SP_EL0可以当作一个临时寄存器,如Linux内核利用该寄存器存放进程中task_struct数据构造的指针。当处理器运行在EL0时,它只能访问SP_EL0,而不能访问其他高等的SP寄存器。
4.备份程序状态寄存器当我们运行一个非常处理程序时,处理器的备份程序会保存到备份程序状态寄存器(Saved Program Status Register,SPSR)里。当非常将要发生时,处理器会把PSTATE寄存器的值暂时保存到SPSR里;当非常处理完成并返回时,再把SPSR的值规复到PSTATE寄存器。SPSR的格式如图1.5所示。SPSR的主要字段如表1.4所示。
▲图1.5 SPSR的格式
表1.4 SPSR的主要字段
字 段
描 述
N
负数标志位
Z
零标志位
C
进位标志位
V
有符号数溢出标志位
DIT
与数据无关的指令时序(Data Independent Timing),ARMv8.4的扩展特性
UAO
用户访问覆盖标志位,ARMv8.2的扩展特性
PAN
特权模式禁止访问位,ARMv8.1的扩展特性
SS
表示是否使能软件单步功能。若该位为1,解释在非常处理中使能了软件单步功能
IL
不合法的非常状态
D
调试位。使能该位可以在非常处理过程中打开调试断点和软件单步等功能
A
用来屏蔽系统缺点
I
用来屏蔽IRQ
F
用来屏蔽FIQ
M[4]
用来表示非常处理过程中处于哪个实行状态,若为0,表示AArch64状态
M[3:0]
非常模式
5.ELRELR存放了非常返回地址。
6.CurrentEL寄存器该寄存器表示PSTATE寄存器中的EL字段,个中保存了当前非常等级。利用MRS指令可以读取当前非常等级。
0:表示EL0。1:表示EL1。2:表示EL2。3:表示EL3。7.DAIF寄存器该寄存器表示PSTATE寄存器中的{D,A,I,F}字段。
8.SPSel寄存器该寄存器表示PSTATE寄存器中的SP字段,用于在SP_EL0和SP_ELn中选择SP寄存器。
9.PAN寄存器PAN寄存器表示PSTATE寄存器中的PAN(Privileged Access Never,特权禁止访问)字段。可以通过MSR和MRS指令来设置PAN寄存器。当内核态拥有访问用户态内存或者实行用户态程序的能力时,攻击者就可以利用漏洞轻松地实行用户的恶意程序。为了修复这个漏洞,在ARMv8.1中新增了PAN特性,防止内核态恶意访问用户态内存。如果内核态须要访问用户态内存,那么须要主动调用内核供应的接口,例如copy_from_user()或者copy_from_user()函数。
PAN寄存器的值如下。
0:表示在内核态可以访问用户态内存。1:表示在内核态访问用户态内存会触发一个访问权限非常。10.UAO寄存器该寄存器表示PSTATE寄存器中的UAO(User Access Override,用户访问覆盖)字段。我们可以通过MSR和MRS指令设置UAO寄存器。UAO为1表示在EL1和EL2实行这非特权指令(例如LDTR、STTR)的效果与特权指令(例如LDR、STR)是一样的。
11.NZCV寄存器该寄存器表示PSTATE寄存器中的{N,Z,C,V}字段。
3.4 系统寄存器除上面先容的通用寄存器和分外寄存器之外,ARMv8体系构造还定义了很多的系统寄存器,通过访问和设置这些系统寄存器来完成对处理器不同的功能配置。在ARMv7体系构造中,我们须要通过访问CP15协处理器来间接访问这些系统寄存器,而在ARMv8体系构造中没有协处理器,可直接访问系统寄存器。ARMv8体系构造支持如下7类系统寄存器:
通用系统掌握寄存器;调试寄存器;性能监控寄存器;活动监控寄存器;统计扩展寄存器;RAS寄存器;通用定时器寄存器。系统寄存器支持不同的非常等级的访问,常日系统寄存器会利用“Reg_ELn”的办法来表示。
Reg_EL1:处理器处于EL1、EL2以及EL3时可以访问该寄存器。Reg_EL2:处理器处于EL2和EL3时可以访问该寄存器。大部分系统寄存器不支持处理器处于EL0时访问,但也有一些例外,如CTR_EL0。程序可以通过MSR和MRS指令访问系统寄存器。
mrs X0, TTBR0_EL1 //把TTBR0_EL1的值复制到X0寄存器msr TTBR0_EL1, X0 //把X0寄存器的值复制到TTBR0_EL1
4 Cortex-A72处理器先容
基于ARMv8体系构造设计的处理器内核有很多,例如常见的Cortex-A53、Cortex-A55、Cortex-A72、Cortex-A77以及Cortex-A78等。本书的实验环境采取树莓派4B开拓板,内置了4个Cortex-A72处理器内核,因此我们重点先容Cortex-A72处理器内核。
Cortex-A72是2015年发布的一个高性能处理器内核。它最多可以支持4个内核,内置L1和L2高速缓存,如图1.6所示。
Cortex-A72处理器支持如下特性。
采取ARMv8体系构造规范来设计,兼容ARMv8.0协议。超标量处理器设计,支持乱序实行的流水线。基于分支目标缓冲区(BTB)和全局历史缓冲区(GHB)的动态分支预测,返回栈缓冲器以及间接预测器。支持48个表项的全相连指令TLB,可以支持4 KB、64 KB以及1 MB大小的页面。支持32个表项的全相连数据TLB,可以支持4 KB、64 KB以及1 MB大小的页面。每个处理器内核支持4路组相连的L2 TLB。48 KB的L1指令高速缓存以及32 KB的L1数据高速缓存。可配置大小的L2高速缓存,可以配置为512 KB、1 MB、2 MB以及4 MB大小。基于AMBA4总线协议的ACE(AXI Coherency Extension)或者CHI(CoherentHubInterface)。支持PMUv3体系构造的性能监视单元。支持多处理器调试的CTI(Cross Trigger Interface)。支持GIC(可选)。支持多电源域(power domain)的电源管理。▲图1.6 Cortex-A72处理器内部体系构造
1.指令预取单元指令预取单元用来从L1指令高速缓存中获取指令,并在每个周期向指令译码单元最多发送3条指令。它支持动态和静态分支预测。指令预取单元包括如下功能。
L1指令高速缓存是一个48 KB大小、3路组相连的高速缓存,每个缓存行的大小为64字节。支持48个表项的全相连指令TLB,可以支持4 KB、64 KB以及1 MB大小的页面。带有分支目标缓冲器的2级动态预测器,用于快速天生目标。支持静态分支预测。支持间接预测。返回栈缓冲器。2.指令译码单元指令译码单元对以下指令集进行译码:
A32指令集;T32指令集;A64指令集。指令译码单元会实行寄存看重命名,通过肃清写后写(WAW)和读后写(WAR)的冲突来实现乱序实行。
3.指令分派单元指令分派单元掌握译码后的指令何时被分派到实行管道以及返回的结果何时终止。它包括以下部分:
ARM核心通用寄存器;SIMD和浮点寄存器集;AArch32 CP15和AArch64系统寄存器。4.加载/存储单元加载/存储单元(LSU)实行加载和存储指令,包含L1数据存储系统。其余,它还处理来自L2内存子系统的同等性等做事要求。加载/存储单元的特性如下。
具有32 KB的L1数据高速缓存,两路组相连,缓存行大小为64字节。支持32个表项的全相连数据TLB,可以支持4 KB、64 KB以及1 MB大小的页面。支持自动硬件预取器,天生针对L1数据高速缓存和L2缓存的预取。5.L1内存子系统L1内存子系统包括指令内存系统和数据内存系统。
L1指令内存系统包括如下特性。
具有48 KB的指令高速缓存,3路组相连映射。缓存行的大小为64字节。支持物理索引物理标记(PIPT)。高速缓存行的更换算法为LRU(Least Recently Used)算法。L1数据内存系统包括如下特性。
具有32 KB的数据高速缓存,两路组相连映射。缓存行的大小为64字节。支持物理索引物理标记。对付普通内存,支持乱序发射、预测以及非壅塞的加载要求访问;对付设备内存,支持非预测以及非壅塞的加载要求访问。高速缓存行的更换算法为LRU算法。支持硬件预取。6.MMUMMU用来实现虚拟地址到物理地址的转换。在AArch64状态下支持长描述符的页表格式,支持不同的页面粒度,例如4 KB、16 KB以及64 KB页面。
MMU包括以下部分:
48表项的全相连的L1指令TLB;32表项的全相连的L1数据TLB;4路组相连的L2 TLB;TLB不仅支持8位或者16位的ASID,还支持VMID(用于虚拟化)。
7.L2内存子系统L2内存子系统不仅卖力处理每个处理器内核的L1指令和数据高速缓存未命中的情形,还通过ACE或者CHI连接到内存系统。其特性如下。
可配置L2高速缓存的大小,大小可以是512 KB、1 MB、2 MB、4 MB。缓存行大小为64字节。支持物理索引物理标记。具有16路组相连高速缓存。缓存同等性监听掌握单元(Snoop Control Unit,SCU)。具有可配置的128位宽的ACE或者CHI。具有可选的128位宽的ACP接口。支持硬件预取。5 ARMv9体系构造先容2021年ARM公司发布ARMv9体系构造。ARMv9体系构造在兼容ARMv8体系构造的根本上加入了一些新的特性,个中:
ARMv9.0兼容ARMv8.5体系构造;ARMv9.1兼容ARMv8.6体系构造;ARMv9.2兼容ARMv8.7体系构造。ARMv9体系构造新加入的特性包括:
全新的可伸缩矢量扩展(Scalable Vector Extension version 2,SVE2)打算;机密打算体系构造(Confidential Compute Architecture,CCA),基于硬件供应的安全环境来保护用户敏感数据;分支记录缓冲区扩展(Branch Record Buffer Extension,BRBE),它以低本钱的办法捕获掌握路径历史的分支记录缓冲区;内嵌跟踪扩展(Embedded Trace Extension,ETE)以及跟踪缓冲区扩展(Trace Buffer Extension,TRBE),用于增强对ARMv9处理器内核的调试和跟踪功能;事务内存扩展(Transactional Memory Extension,TME)。其余,ARMv9体系构造对AArch32实行环境的支持发生了变革。在EL0中,ARM64体系构造对AArch32状态的支持是可选的,取决于芯片设计;而在EL1/EL2/EL3中,ARM64体系构造将不再供应对AArch32状态的支持。
本文摘自:ARM64体系构造编程与实践
1.内容系统,突出动手实践基于树莓派4B开拓板,系统先容ARM64体系构造,内容由浅入深,帮助读者开拓运行小型的OS2.以问题为导向,提高学习效率深入浅出的问题导向式学习方法,各大公司高频口试题,提高读者阅读兴趣3.意见意义案例,常见陷阱总结基于树莓派4B开拓板和QEMU实验平台,总结了浩瀚一线工程师在实际项目中碰着的陷阱与履历,让你不再害怕踩雷4.海量资源随书赠予本书赠予配套VMware开拓环境,Linux软件包,QEMU+ARM64实验平台仓库,芯片资料,实验参考代码和配套资料以及配套传授教化视频供读者参考学习
然后讲述了ARM64指令集中的加载与存储指令、算术与移位指令、比较与跳转等指令以及ARM64指令集中的陷阱,接着谈论了GNU汇编器、链接器、链接脚本、GCC内嵌汇编代码、非常处理、中断处理、GIC-V2,末了阐发了内存管理、高速缓存、缓存同等性、TLB管理、内存樊篱指令、原子操作、操作系统等内容。本书适宜嵌入式开拓职员阅读。