【方辉专栏】ARM64体系结构编程与实践学习笔记(四) A64指令集介绍及编码格式

蓝图分享网 2022-11-05 06:57:54 434阅读 0评论

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位用来识别指令的分类,如下图所示:

【方辉专栏】ARM64体系结构编程与实践学习笔记(四) A64指令集介绍及编码格式 第1张

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

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

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

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

【方辉专栏】ARM64体系结构编程与实践学习笔记(四) A64指令集介绍及编码格式 第2张

第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位。

免责声明:

1、本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

2、本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。

3、本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

4、侵权违法和不良信息举报 举报邮箱:cnddit@qq.com

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
验证码
评论列表 (暂无评论,434人围观)

还没有评论,来说两句吧...