ARMv8是ARM版本升级以来最大的一次改变,ARMv8的架构继承以往ARMv7与之前处理器技术的基础,除了现有的16/32bit的Thumb2指令支持外,也向前兼容现有的A32(ARM 32bit)指令集,扩充了基于64bit的AArch64架构,除了新增A64(ARM 64bit)指令集外,也扩充了现有的A32(ARM 32bit)和T32(Thumb2 32bit)指令集;

ARMv8拥有两种执行模式(two execution modes):

AArch64 :64-bit registers and memory accesses, new instruction set;

AArch32 : backwards compatible with ARMv7-A;

(一)A64新的指令和寄存器固定大小32位操作码,清除基于5位寄存器说明符的解码表;

可以拥有32位或者64位参数;

地址设定为64位,主要针对LP64和LLP64数据模型;

比AArch32拥有更少的条件指令,条件指令有:分支,比较,选择;

没有LDM/STM(用于批量从内存中读取或者写入数据)指令,添加LDP/STP指令来操作以降低复杂性及功耗;

支持先进的SIMD(Single-Instruction,Multiple-Data:单指令多数据)和(FP浮点);

支持加密技术;

可随时访问31个通用的64位寄存器 (X0-X30),没有banked(banked是指一个寄存器不同模式下会对应不同的物理地址)的通用寄存器,堆栈指针(SP),PC不是通用寄存器,附加专用的零寄存器(Xzr);

AArch32状态是使用CPSR来存储当前process执行状态,AArch64定义了一组PSTATE寄存器用以保存PE(Processing Element)状态;

AArch64 – Unbanked Registers:

左边的通用寄存器用于:32位或者64位的整数运算或者64位的寻址,右边的用于浮点运算;

AArch64 Banked Registers:

AArch64不在根据之前通过不同模式来区别banked寄存器,而是通过exception level;

下图为AArch32和AArch64通用寄存器对应关系:

(二)AArch64 Exception Model

AArch64 Exception Model:

Exception model nomenclature:

总共分为4 exception levels: EL3-EL0,在这种特权模式下EL0位权限最低模式,也就是用户模式,Monitor(EL3)和Supervisor(EL2),分别用于security扩展和virtualization扩展;;低level向高level切换通过exception的方式转换,有如下exceptions:Interrupts, page faults etc.

SVC for transition to EL1 (system calls)

HVC for transition to EL2 (hypervisor:超级监督者 calls)

SMC for transition to EL3 (secure monitor call)

Dedicated ELR register for the return address (banked at each EL);

而高level向低level则通过ERET指令;

低level的寄存器位宽不能大于高level:E.g. no 64-bit EL0 with 32-bit EL1;

对异常的处理:

1. Exception Link Register written on exception entry;

2. 异常有可能发生任何在exception level,EL1, EL2, and EL3有不同的向量表地址,之前的arm版本只有一个向量表地址;

3. 向量的区分是根据Exception type(synchronous, IRQ, FIQ or System Error)或者Exception origin (same or lower exception level) and register width;

4. Syndrome 寄存器提供了exceptions信息;

AArch32 and AArch64之间切换

AArch32和AArch64之间的切换只能通过发生异常或者系统Reset来实现,A32 -> T32之间是通过BX指令切换的;

不同level之间的组合:

AArch32 /AArch64 relationship:Changes between AArch32 and AArch64 occur on exception/exception return only;

Allows AArch32 applications under AArch64 OS Kernel;

Allows AArch32 guest OS under AArch64 Hypervisor;

Allows AArch32 Secure side with AArch64 Non-secure side

(二)AArch64 MMU Support

在ARMv8 64bit出现之前,我们用的都是32位寻址,每个地址单位对应内存一个字节单元(B),所以我们最大的寻址范围为2^32B = 4GB,但是实际当中,内存设备有可能远远大于4GB内存空间,以前是通过LPAE(大物理地址扩展)实现地址的扩展,可以支持最大2^40的地址寻址范围,ARMv8理论上最高可以提供提供了2^64个虚拟地址,但是超过16 Exabyte (2^4 * 2^60)意义并不大,所以选择跟x86一样,可以使用最大支持2^48虚拟地址的寻址范围就足够;

ARM 32bits下会用TTBR0存储User-Space行程所在的Page Table (也就是0xC0000000以下的存储空间),并用TTBR1存储Kernel Space所在的Page Table (也就是0xC0000000以上的存储空间).

在ARMv8 64bits架构下,会通过EL1的TTBR0 (ttbr0_el1, in /arch/arm64/mm/proc).存储User-Space行程所在的Page Table,与EL1的TTBR1存储Kernel Space所在的Page Table,并会依据Page Size与32/64bits行程而有不同的存储空间配置. 參考如下圖所示:

由于ARM 64bit Kernel分页大小为4kb和64kb两种,通过设置TASK_SIZE_64 (/arch/arm64/include/asm/memory.h)来设定,当分页大小为4KB的时候,决定TASK_SIZE_64大小的VA_BITS会等于39,也就是2^39大小的Task空间(=512GB),若分页大小为64KB时,则TASK_SIZE_64对应的VA_BITS等于 42,也就是2^42大小的Task空间(=4TB).

同时kernel空间也根据分页大小来划分内核空间,可以参考下面的图来区分:

aarch64指令集_ARMv8-AArch64简述相关推荐

  1. aarch64指令集_AArch64应用程序级编程模型

    根据实现选择,体系结构支持多级执行特权,由从EL0到EL3的不同异常级别表示.EL0对应于最低的特权级别,通常被描述为无特权.应用层程序员模型是在EL0上执行软件的程序员模型. 系统软件决定异常级别, ...

  2. ARMv8(aarch64)指令集特性

    有了之前mips系统架构的基础,再了解arm64就相对轻松多了.所谓体系架构,核心就是寄存器.指令集和abi(即寄存器和指令集的使用规范).下面就分这几方面展开做的学习笔记. 目录 一.armv8概览 ...

  3. 【汇编优化】之ARM32与AARCH64指令集优化总结

    序 前文<arm64>.<arm32>已经介绍arm,aarch64优化的一些基本知识,本文着重介绍优化过程中容易混淆的点,或需注意的点. 1. 关于指令编码长度 1.1 aa ...

  4. aarch64指令集_ARM与AARCH64指令集优化总结

    标签: 序 前文<arm64>.<arm32>已经介绍arm,aarch64优化的一些基本知识,本文着重介绍优化过程中容易混淆的点,或需注意的点. 1. 关于指令编码长度 1. ...

  5. linux aarch64 yum,安装aarch64的centos的yum源

    更新yum 发现总是报错 Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&a ...

  6. 第七章 ARM 反汇编基础(七)(AArch64 汇编指令集)

    文章目录 AArch64 汇编指令集 AArch64 指令编码 AArch64 指令格式解析 AArch64 汇编指令集 arm64-v8a 对应两套架构的指令集 AArch32(简称"A3 ...

  7. x86-64、amd64、arm、aarch64 都是些什么?

    参考 X86和X86_64和AMD64的由来 关于x86.x86_64.x64.amd64和arm64.aarch64 下载软件时的amd64.x86.x86-64是什么,该怎么选? 简述 架构 指令 ...

  8. Aarch64汇编语言

    从ARMv8-A开始出现了64位的ARM指令集, ARM官方将64位的ARM指令集叫做Aarch64 Aarch64汇编中寄存器 Aarch64微处理器中,程序员可以使用31个64位的通用寄存器x0 ...

  9. 关于x86、x86_64/x64、amd64和arm64/aarch64

    关于x86.x86_64/x64.amd64和arm64/aarch64 转自:https://www.jianshu.com/p/2753c45af9bf 为什么叫x86和x86_64和AMD64? ...

最新文章

  1. Sizeof与Strlen的区别与联系(转)
  2. VS2010/MFC编程入门之十七(对话框:文件对话框)
  3. 深度学习基础入门(一):基本概念和术语解读
  4. java 动态编译 canino_java动态编译
  5. GDCM:从ELSCINT1读取Wave Information标签的测试程序
  6. 因为虚拟机导致的错误
  7. EduCoder 机器学习 决策树
  8. routine tortoisesvn operations-1
  9. codeforces E. Jamie and Tree LCA+dfs序+线段树
  10. 到底什么是API经济
  11. android webview recyclerview,文章详情页的实现——WebView和RecyclerView混合
  12. IntelliJ IDEA、Kotlin 背后公司 JetBrains 在俄罗斯停服
  13. torchvision.transforms
  14. IDEA(2018)导入项目报错解决方案
  15. 【手写数字识别】基于matlab GUI BP神经网络手写数字识别【含Matlab源码 868期】
  16. 12306 脱库疑云:410 万用户数据仅售 20 美元!
  17. 如何注册海外邮箱?如何进行邮箱注册163,这些技巧交给你
  18. 特征向量和特征值的物理意义
  19. 振耀退休感言及海辉执行董事长视频访谈
  20. 批处理 b站视频批量合并

热门文章

  1. 解决TV安装第三方app不能横屏问题(uni-app)
  2. 一文看懂现金流量表的八种类型
  3. 吉大400+计算机软件人工智能考研攻略
  4. 缅怀C语言发明人丹尼斯·里奇(Dennis Ritchie )
  5. android字体安装失败,字体管家安装字体失败插件
  6. 编写一个方法去掉数组里面重复的内容 var arr=['abc','abcd','sss','2','d','t','2','ss','f','22','d'];...
  7. 基于STM32的汇编程序
  8. 用Flutter做桌上弹球?聊聊绘图(CanvasCustomPaint)API
  9. 概率论与数理统计 第一章 概率论的基本概念 要点复习笔记
  10. jmeter两种设置中文方法