aarch64汇编指令集介绍

文摘   2025-01-07 17:24   辽宁  

1、ARM架构的发展

ARM架构(Advanced RISC Machine)是一种基于精简指令集计算(RISC)原理的微处理器架构,最初由英国Acorn计算机公司于1980年代末期设计并推出。ARM架构的演进历程如下:

1.1. 初期发展(1980s-1990s)

  • 1985年:Acorn公司为了提高其计算机性能,开始研发基于RISC架构的处理器,并推出了第一款ARM处理器——ARM1。该处理器主要用于Acorn Archimedes计算机。

  • 1987年:推出ARM2处理器,性能相比ARM1有所提升,并用于Acorn的Archimedes系列电脑。

  • 1990年:Acorn公司成立了ARM公司,开始将ARM架构授权给其他公司使用,这为ARM架构的商业化铺平了道路。

1.2. 快速扩展(1990s-2000s)

  • 1991年:ARM公司推出了ARM6系列处理器(如ARM610、ARM620),这款处理器在手机和嵌入式设备中开始获得应用。

  • 1994年:ARM7架构发布,标志着ARM架构在低功耗、高性能嵌入式市场的成功应用。ARM7系列处理器被广泛用于手机、游戏机和家电等设备。

  • 1999年:ARM9系列问世,进一步提升了性能和多核支持,成为了智能手机和消费电子领域的重要基础。

1.3. 向移动领域扩展(2000s-2010s)

  • 2000年:ARM推出了ARM10架构,处理器开始支持更高的时钟频率和更强大的浮点运算能力。

  • 2005年:苹果公司宣布其iPod使用基于ARM架构的处理器,这成为ARM在消费电子领域的重要标志。

  • 2007年:ARM推出了Cortex-M系列和Cortex-A系列处理器,Cortex-A系列主要用于智能手机和高性能计算设备,而Cortex-M系列则用于微控制器和低功耗应用。

1.4. 智能手机和移动设备的主导地位(2010s至今)

  • 2011年:ARM Cortex-A9处理器被广泛用于智能手机,尤其是苹果的A系列芯片开始使用ARM架构。ARM架构的高性能和低功耗特性使其成为移动设备(如智能手机、平板电脑)的首选处理器架构。

  • 2017年:ARM推出了Cortex-A75和A55架构,进一步提高了性能和能效,使其在高端智能手机和服务器领域得到了广泛应用。

  • 2020年:ARM推出了Cortex-X系列,专为高性能计算设计,进一步向数据中心和高端计算市场扩展。

1.5. 未来发展和生态扩展

2020年代:ARM在物联网、智能汽车、云计算、人工智能等领域得到更广泛应用。随着NVIDIA计划收购ARM(尽管尚未完成),ARM也在全球半导体产业链中的地位愈发重要。

2、A64/A32/T32

AArch64 :指的是架构

A64 : 指的是指令集

arm64 :指的是Linux Kernel中的aarch64体系

2.1. A64指令集(ARMv8-A中的64位指令集)

A64是ARM架构中的64位指令集,首次出现在ARMv8-A架构中。它是64位的ARM指令集,旨在提供更高的性能和扩展性。


  • 64位支持:A64支持64位的数据处理、寻址和寄存器操作,能够处理更大内存地址空间(高达16 EB)。

  • 兼容性:与ARMv7及其之前的32位指令集不兼容,因此需要专门的支持来向后兼容(通过A32模式或者提供翻译层)。

  • 性能提升:A64指令集在性能上进行了优化,适用于高性能计算任务,如服务器、桌面计算和高端移动设备。

  • 应用场景:A64指令集广泛应用于现代的ARM64处理器,如苹果的A系列芯片、Qualcomm的Snapdragon 8系列、以及许多基于ARM架构的服务器和嵌入式设备。


2.2. A32指令集(ARMv7及以前的32位指令集)

A32是ARM架构中的32位指令集,通常也被称为ARM(经典ARM指令集)。它主要出现在ARMv7和更早版本的ARM处理器中。


  • 32位支持:A32指令集设计为32位,能够处理4 GB以内的内存地址空间。

  • 兼容性:A32指令集向后兼容,支持在ARMv7及之前版本的ARM处理器上运行32位应用。

  • 应用广泛:A32指令集具有较低的功耗,并且能够执行相对简单的指令,因此在早期的嵌入式系统和智能手机中非常流行。

  • 应用场景:A32指令集被广泛用于低功耗、嵌入式、智能手机等设备。许多基于ARMv7的处理器(如早期的Snapdragon和Exynos处理器)都使用了A32指令集。


2.3. T32指令集(Thumb-2指令集)

T32指令集是ARM架构中的一种混合型32位指令集,也称为Thumb-2。它是A32指令集的扩展,能够在性能和代码密度之间提供更好的平衡。


3、aarch64和aarch32对比总结

AArch64,64位执行状态:


  • 提供31个64位通用寄存器,其中X30用作过程链接寄存器。

  • 提供64位程序计数器(PC)、堆栈指针(SPs)和异常链接寄存器(ELRs)。

  • 为SIMD向量和标量浮点支持提供32个128位寄存器。

  • 提供单个指令集A64

  • 定义了ARMv8异常模型,有四个异常级别,EL0 - EL3,提供了一个执行特权层次结构,

  • 提供对64位虚拟寻址的支持。

  • 定义许多包含PE状态的进程状态(PSTATE)元素。A64指令集包括直接操作各种PSTATE元素的指令

  • 使用表示可以访问寄存器的最低异常级别的后缀来命名每个系统寄存器。


AArch32,32位执行状态:


  • 提供13个32位通用寄存器,以及一个32位PC、SP和link寄存器(LR)。LR同时用作ELR和过程链接寄存器。其中一些寄存器具有多个存储实例,用于不同的PE模式。

  • 为从Hyp模式返回的异常提供一个ELR。

  • 为高级SIMD向量和标量浮点支持提供32个64位寄存器。

  • 提供两个指令集,A32和T32。

  • 支持基于PE模式的ARMv7-A异常模型,并将其映射到基于异常级别的ARMv8异常模型。

  • 提供对32位虚拟寻址的支持。

  • 定义许多包含PE状态的进程状态(PSTATE)元素。A32和T32指令集包括直接操作各种PSTATE元素的指令,以及使用应用程序状态寄存器(APSR)或当前程序状态寄存器(CPSR)访问PSTATE的指令。

4、全局角度来看先学汇编还是先学架构

  • 学汇编的都是耍流氓

  • 当您看一段汇编代码时,你看不懂的是汇编指令吗?你困惑的应该是你不懂架构原理、硬件原理,不懂寄存器

  • mov,str,ldr,add谁不会?

  • 算上变体指令,有上千条指令,你学一个或背一个我看看

  • 学习方向

Arm精选
ARMv8/ARMv9架构、SOC架构、Trustzone/TEE安全、终端安全、SOC安全、ARM安全、ATF、OPTEE等
 最新文章