【方辉专栏】ARM64体系结构编程与实践学习笔记(一)ARM64体系结构基础知识

0 评论

1. ARM体系结构是什么?

ARM体系结构,又称ARM架构,是一种硬件规范。主要用来约定指令集、芯片内部体系结构(如内存管理、高速缓存管理)等。

ARM指令集在结构体系中并没有约定每一条指令在硬件描述语言(VHDL或Verilog HDL)中如何实现,而只约定了每条指令的格式、行为规范、参数等。

ARM体系结构从v1版本发展到v9版本,每个版本的体系结构,指令集都有相应的变化。

 

2. Armv8-A体系结构的基本概念

2.1处理机(Processing Element ,PE):处理事务的过程抽象为处理机。

2.2执行状态(Execution State):处理器运行时的环境,包括寄存器的位宽、支持的指令集、异常模型、内存管理以及编程模型等。

Armv8体系结构定义了AArch64和AArch32两个执行状态。

2.2.1  AArch64为64位执行状态

提供31个64位的通用寄存器
提供64位的程序计数指针寄存器(PC)、栈指针寄存器(SP)、异常链接寄存器(ELR).
提供A64指令集
提供64位的内存模型
定义Armv8异常模型,支持EL0-EL3共4个异常等级。
定义一组处理器状态(PSTATE)用来保存处理机(PE)的状态。
2.2.2  AArch32为32位执行状态

提供13个32位的通用寄存器
提供32位的程序计数指针寄存器(PC)、栈指针寄存器(SP)、链接寄存器(LR).
提供A32指令集和T32(Thumb)指令集。
提供32位的虚拟内存访问机制。
定义Armv8异常模型,支持EL0-EL3共4个异常等级。
定义一组处理器状态(PSTATE)用来保存处理机(PE)的状态。
2.3 Armv8指令集

Arm 体系结构根据不同的执行状态会有三种指令集。
A64指令集,运行在AArch64状态下,提供64位指令集支持。
A32指令集,运行在AArch32状态下,提供32位指令集支持。
T32指令集,运行在AArch32状态下,提供Thumb 16位和32位指令集支持。
2.4 系统寄存器命令

在AArch64状态下,一些系统寄存器会根据不同的异常等级提供不同的变种寄存器。例如:SP_EL0表示在EL0下的SP寄存器,SP_EL1表示在EL1下的SP寄存器。

 

如上图所示,

EL0提供用于普通用户的应用。
EL1提供操作系统相关的支持。
EL2提供对非安全操作的虚拟化支持。
EL3提供了两个安全状态之间切换的支持,安全状态和非安全状态。
一个程序可能不包括所有的异常级别,但必须包括EL0和EL1,至于EL2、EL3可选。

 

4. ARMv8支持的数据宽度

ARMv8支持如下几种数据宽度:

字节:8位
半字:16位
字 :32位
双字:64位
四字:128位

 

3. AArch64异常等级

ARMv8-A架构定义了一组异常级别(Exception Level,EL),从EL0到EL3,其中: 如果ELn为异常级别,n的值越大表示软件执行权限越高。

 

相关软件
使用 DS-5,可以轻松地为基于 arm 处理器的平台开发 Linux 应用程序。它降低了学习难度,缩短了开发和测试周期,帮助您快速生成可靠的应用程序。 经济实惠的专业解决方案,适用于以 C/C++ 开发 Linux 和 Android 应
相关阅读