【方辉专栏】ARM64体系结构编程与实践学习笔记(四) A64指令集介绍及编码格式
发布时间:2022-07-22

摘要: 本文主要对A64指令集和编码格式进行介绍。

关键字:A64指令集、Armv8、体系结构、ARM架构、 编码格式


1. A64指令集介绍

指令集是处理器体系结构设计的重点之一。每种新型的架构在设计时就规定了一系列与其硬件电路相配合的指令系统。指令集的先进与否,关系到MCU性能发挥。指令集的完善也是提高微处理器效率的最有效的工具。


ARM指令集一直在变化和发展中。Armv8体系结构最大的改变是增加了一个新的64位指令集,这是对原来指令集的有益补充和增强。A64指令集可以处理64位宽的寄存器和数据,并使用64位的指针来访问内存。


Armv8架构在AArch64运行状态下使用A64指令集,在AArch32运行状态下使用A32指令集。A64指令集和A32 指令集是不兼容的,它们是两套完全不一样的指令集,它们的指令编码是不一样的。


注意:A64指令集的指令宽度是32位,而不是64位;只能运行在AArch64状态下。


A64汇编指令需要注意以下4点:

A64支持指令助记符和寄存器名称全是大写或全是小写字母。

使用立即数操作时,立即数前面可以加“#”,也可以不加。

“//”用于注释汇编代码。

通用寄存器前面的“W”表示寄存器低32位,“X”表示64位通用寄存器。


A64指令集分类:

内存加载和存储指令

多字节内存加载和存储指令

算术和移位指令

移位操作指令

位操作指令

条件操作指令

跳转指令

独占访问指令

内存屏蔽指令

异常处理指令


2. A64指令编码格式

A64指令集中每条指令的宽度为32位,其中第25-28位用来识别指令的分类,如下图所示:




A64指令集支持64位宽的数据和地址寻址,为什么指令的编码宽度只有32位?

因为A64指令集基于寄存器加载和存储的体系结构设计,所有的数据加载、存储以及处理都是在通用寄存器中完成的。

ARM64一共有31个通用寄存器,即X0-X30,因此在指令编码中使用5位宽度,这样可以索引32个通用寄存器。


例如立即数加载指令格式:LDR <Xt> , [ <Xn|SP> ], # <simm>



第0-4位为Rt字段,用来描述目标寄存器Xt,可以从X0-X30中选择。

第5-9位为Rn字段,用来描述基地址寄存器Xn,可以从X0-X30中选择。也可以选择SP寄存器为第31个寄存器。

第12-20位为imm9字段,用于偏移量simm.

第21-29位用于指令分类。

第30-31位为size字段,当为“11”时表示64位数据宽度,当为“10”时表示32位。


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


关于亿道电子

亿道电子技术有限公司(英文名称:Emdoor Electronics Technology Co.,Ltd)是国内资深的研发工具软件提供商,公司成立于 2002 年,面向中国广大的制造业客户提供研发、设计、管理过程中使用的各种软件开发工具,致力于帮助客户提高研发管理效率、缩短产品设计周期,提升产品可靠性。

20 年来,先后与 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立战略合作伙伴关系,并作为他们在中国区的主要分销合作伙伴服务了数千家中国本土客户,为客户提供从芯片级开发工具、EDA 设计工具、软件编译以及测试工具、结构设计工具、仿真工具、电气设计工具、以及嵌入式 GUI 工具等等。亿道电子凭借多年的经验积累,真正的帮助客户实现了让研发更简单、更可靠、更高效的目标。

欢迎关注“亿道电子”公众号

了解更多研发工具软件知识