ARM aarch64汇编学习笔记(一):ARMv8架构

第一期专辑,主要写下自己学习如何在window下使用NDK-BUILD来实现ARM aarch64架构汇编编程。

为何要引入ARMV8:

  1. 考虑到ARMV7被市场广泛接受,以及形成的成熟的生态,因此后续的体系结构升级需要做到向后兼容;
  2. 另外要让厂商能够愿意将软件系统迁移到新的体系结构,新的体系结构一定要有原体系结构不具有的优势
  3. 为了解决旧有架构遗留的问题,提供一种更加清晰的架构,同时考虑到将来的发展趋势,采用一种全新的架构来实现

ARMV8架构的属性:

  1. ARMV8目前只定义了Application profile
  2. ARMV8定义了48bit符号虚拟地址和达到48bit物理地址
  3. ARMV8采用了新的指令集A64
  4. ARMV8兼容ARMV7的指令
  5. A32和A64的转换只能发生在异常级别转换时

A64指令集:

  1. A64下的每条指令被定义为固定32bit
  2. A32和A64分别解码,这样可以简化解码表,单独的解码表可以允许更多更先进的分支预测技术
  3. 通用目的寄存器增加到31个
  4. A64删除了LDM/STM指令,因为LDM/STM实现比较复杂
  5. 更少的条件指令,因为实现复杂,并且没有明显的好处
  6. 浮点单元硬件支持
  7. SIMD支持,针对A64做了专门修订,引入了双精度浮点支持

异常级别:

ARM aarch64汇编学习笔记(一):ARMv8架构_第1张图片

  1. A32和A64之间的转换有一个严格的规则集合
  2. 异常级别增加,可以保持A32或升级到A64
  3. A64引入了专门的寄存器ELR,用于记录异常返回地址,在所有的异常入口会进行设置
  4. 在异常入口,中断mask会自动置位
  5. 每个异常级别都有自己的向量基址寄存器,每个向量被按照类型区分:synchronous,IRQ,FIQ或Error
  6. 关于异常的详细细节在syndrome register

 内存管理单元:

  1. 支持48bit虚拟地址和物理地址,这样可以简化硬件,可以只支持到4级页表;
  2. 支持4K和64K页
  3. 提供了两种基地址,分别是内核空间和用户空间
  4. 用户空间虚拟地址到物理地址的转换需要经过两个阶段,分别是VA->IPA,IPA->PA

程序寄存器:

  1. 30个通用寄存器(X0-X30),每个寄存器使64bits,其中X30是LR寄存器
  2.  只有一个SP寄存器和ELR寄存器
  3. SPSR
  4. Pstate

DEBUG:

  1. 可以通过debugger调试器直接发送指令,处理器可以提取
  2. 两种类型的debug:self-host和halt mode debug

你可能感兴趣的:(ARM aarch64汇编学习笔记(一):ARMv8架构)