ARMV8的64位指令

一、介绍

ARMv8 体系结构最大的改变是增加了一个新的 64 位的指令集,这是早前 ARM 指令集
的有益补充和增强。它可以处理 64 位宽的寄存器和数据并且使用 64 位的指针来访问内存。这
个新的指令集称为 A64 指令集,运行在 AArch64 状态。 ARMv8 兼容旧的 32 位指令集——A32
指令集,它运行在 AArch32 状态。注意:A64 指令集的指令宽度是 32 位,而不是 64 位。
 

二、分类

A64 指令集可以分成如下几类:

  • ‰ 内存加载和存储指令;
  • ‰ 多字节内存加载和存储指令;
  • ‰ 算术和移位指令;
  • ‰ 移位操作指令;
  • ‰ 位操作指令;
  • ‰ 条件操作指令;
  • ‰ 跳转指令;
  • ‰ 独占访存指令;
  • ‰ 内存屏障指令;
  • ‰ 异常处理指令

A64 指令汇编需要注意的地方如下:
‰A64 支持指令助记符和寄存器名全是大写字母或者全是小写字母的书写方式。不过,程序和数据标签是区分大小写的。
‰在使用立即操作数时前面可以使用“#”或者不使用“#”。
‰ 通用寄存器前面使用“w”表示仅使用通用寄存器的低 32 位,“x”表示 64 位通用寄存器。

三、A64 指令编码格式

A64 指令集中每条指令的宽度为 32 位, 其中第 24~28 位用来识别指令的分类, 如图 3.1 所示。

表中, x 表示该位可以是 1 或者 0。以加载与存储指令为例,第 25 位必须为 0,第 27 位为
1,其他 3 位可以是 0 或者 1。
当根据 op0 字段确定了指令的分类之后,还需要进一步确定指令的细分类别。以加载与存
储指令为例,加载与存储指令的格式如图 3.2 所示。

如图 3.2 所示,加载与存储指令格式可以细分为 op0、 op1、 op2、 op3 以及 op4 这几个字段。
这些字段不同的编码又可以对加载与存储指令继续细分,如表 3.2 所示

 为什么指令的编码宽度只有 32 位?
因为 A64 指令集基于寄存器加载和存储的体系结构设计,编码宽度32位足够了。使用op1+op2字段,一共五位。在指令编码中使用 该5 位宽,这样一共可以索引 32(25 = 32)个通用寄存器。ARM64 一共有 31 个通用寄存器,即 X0~X30,另外,在下面的条件下,我们还可以描述第 31 个寄存器。

  • ‰ 当使用寄存器作为基地址时,把 SP(栈指针)寄存器当作第 31 个通用寄存器。
  • ‰ 当用作源寄存器操作数时,把 XZR 当作第 31 个通用寄存器
     

四、具体的指令

MOV:数据传送指令,将一个寄存器的值复制到另一个寄存器。
    MOV R0, R1 ; 将R1的值复制到R0

LDR:从内存加载数据到寄存器

    LDR R0, [R1] ; 将R1指向的内存地址中的值加载到R0

算术运算指令

ADD:加法指令,将两个寄存器的值相加,结果存入第三个寄存器。
    ADD R0, R1, R2 ; R0 = R1 + R2

SUB:减法指令,从一个寄存器中减去另一个寄存器的值,结果存入第三个寄存器。
    SUB R0, R1, R2 ; R0 = R1 - R2

 BIC: 指定位清零指令
          BIC{S}<c> <Rd>, <Rn>, #<const>;将rn中的字数据const为1的比特清零,把结果放入rd    

orr:  指定位置位指令:

        ORR{S}<c> <Rd>, <Rn>, #<const>
S后缀

汇编指令的s后缀,几乎所有的汇编指令都可以在指令后面加上s后缀,s后缀的含义是在指令执行过程中会更新cpsr寄存器的N,V,C,Z位

N:在结果是有符号的二进制补码情况下,如果结果为负数,则N=1;如果结果为非负数,则N=0

Z:如果结果为0,则Z=1;如果结果为非零,否则Z=0

C:是针对无符号数最高有效位向更高位进位时C=1;减法中运算结果的最高有效位从更高位借位时C=0

V:该位是针对有符号数的操作,会在下面两种情形变为1,两个最高有效位均为0的数相加,得到的结果最高有效位为1;两个最高有效位均为1的数相加,得到的结果最高有效位为0;除了这两种情况以外V位为0
 

参考:

参考:

ARM汇编指令_arm指令-CSDN博客

ARM指令集详解-CSDN博客

汇编指令入门级整理-CSDN博客

ARM全汇编指令(详细)整理附实例快速掌握_arm指令集-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/73096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性代数之矩阵特征值与特征向量的数值求解方法

文章目录 前言1. 幂迭代法&#xff08;Power Iteration&#xff09;幂法与反幂法求解矩阵特征值幂法求最大特征值编程实现补充说明 2. 逆幂迭代法&#xff08;Inverse Iteration&#xff09;移位反幂法 3. QR 算法&#xff08;QR Algorithm&#xff09;——稠密矩阵理论推导编程…

VScode:运行程序停止后,频繁出现终端进程被终止

VScode里面powershell被迫关闭 bug场景排查原因解决办法 bug场景 系统&#xff1a;Windows IDE&#xff1a;Visual Studio Code 停止运行程序后&#xff0c;按向上箭头想要执行上一步命令&#xff0c;忽然终端页面强行关闭&#xff0c;并报错如下&#xff1a; 终端进程 &quo…

[MERN] 使用 socket.io 实现即时通信功能

[MERN] 使用 socket.io 实现即时通信功能 效果实现如下&#xff1a; MERN-socket.io 实现即时聊天 Github 项目地址:https://github.com/GoldenaArcher/messenger-mern 项目使用了 MERN(MongoDB, Express, React, Node.js) socket.io 实现即时通信功能&#xff0c;并且使用了…

【菜鸟飞】Conda安装部署与vscode的结合使用

介绍 Conda 是一个跨平台的开源工具&#xff0c;用于管理软件包和环境。最初由 Anaconda 公司开发&#xff0c;它的设计目标是支持数据科学和机器学习领域&#xff0c;但其功能不仅局限于此。 以下是 Conda 的核心特点&#xff1a; 包管理&#xff1a;安装、更新、卸载各种库…

《Android应用性能优化全解析:常见问题与解决方案》

目录 一、UI卡顿/掉帧 二、内存泄漏&#xff08;Memory Leak&#xff09; 三、ANR&#xff08;Application Not Responding&#xff09; 四、列表滑动卡顿&#xff08;RecyclerView/ListView&#xff09; 五、冷启动耗时过长 六、内存抖动&#xff08;Memory Churn&#x…

【MySQL是怎么运行的】0、名词解释

聚簇索引&#xff1a;聚簇索引和数据在一起&#xff0c;又名主键索引&#xff0c;是主键id构建的一颗B树&#xff0c;非叶节点是主键id&#xff0c;叶子节点是真实数据。其他索引统称二级索引&#xff0c;也称为非聚簇索引。覆盖索引&#xff1a;查找的数据就在索引树上&#x…

深入解析 TCP 协议【真题】

传输控制协议&#xff08;TCP&#xff09;解析与题目解析 题目解析 关于传输控制协议&#xff08;TCP&#xff09;表述不正确的是&#xff1f; A. 主机寻址 B. 进程寻址 C. 流量控制 D. 差错控制 TCP&#xff08;Transmission Control Protocol&#xff09;是面向连接、可靠传…

单例模式的五种实现方式

1、饿汉式 ①实现&#xff1a;在类加载的时候就初始化实例 ②优点&#xff1a;线程安全 ③缺点&#xff1a;实例在类加载的时候创建&#xff0c;可能会浪费资源 //饿汉式 public class EagerSingleton{private EagerSingleton(){} //私有构造方法private static EagerSingle…

SwiftUI 让视图自适应高度的 6 种方法(四)

概览 在 SwiftUI 的世界里&#xff0c;我们无数次都梦想着视图可以自动根据布局上下文“因势而变”‌。大多数情况下&#xff0c;SwiftUI 会将每个视图尺寸处理的井井有条&#xff0c;不过在某些时候我们还是得亲力亲为。 如上图所示&#xff0c;无论顶部 TabView 容器里子视图…

小程序SSL证书过期怎么办?

SSL证书就像小程序的“安全锁”&#xff0c;一旦过期&#xff0c;用户访问时会被提示“不安全”&#xff0c;轻则流失客户&#xff0c;重则数据泄露&#xff01;作为企业负责人&#xff0c;如何快速解决证书过期问题&#xff1f;又该如何避免再次踩坑&#xff1f;这篇指南给你答…

ClickHouse优化技巧实战指南:从原理到案例解析

目录 ​ClickHouse优化核心思想​表结构设计优化​查询性能优化技巧​数据写入优化方案​系统配置调优实战​高可用与集群优化​真实案例解析​总结与建议 1. ClickHouse优化核心思想 ClickHouse作为OLAP领域的明星引擎&#xff0c;其优化需遵循列式存储特性&#xff0c;把握…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_02带边框和斑马纹的固定表头表格

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

服务自动被kill掉的原因和查看

服务在运行一段时间后被自动kill掉可能是由多种原因引起的,包括系统资源限制、进程管理策略、应用程序错误等。以下是一些常见的原因以及定位问题的过程: 常见原因 系统资源限制: 内存不足:如果服务消耗了过多的内存,系统可能会kill掉该进程以释放内存资源。CPU使用过高:…

基础算法——顺序表

一、询问学号 题⽬来源&#xff1a;洛⾕ 题⽬链接&#xff1a;P3156 【深基15.例1】询问学号 - 洛谷 难度系数&#xff1a;★ 1. 题目描述 2. 算法原理 直接⽤ vector 或者数组模拟即可。 3. 参考代码 #include <iostream> #include <vector>using namespace st…

Ubuntu用户安装cpolar内网穿透

前言 Cpolar作为一款体积小巧却功能强大的内网穿透软件&#xff0c;不仅能够在多种环境和应用场景中发挥巨大作用&#xff0c;还能适应多种操作系统&#xff0c;应用最为广泛的Windows、Mac OS系统自不必多说&#xff0c;稍显小众的Linux、树莓派、群辉等也在起支持之列&#…

C#实现高性能异步文件下载器(支持进度显示/断点续传)

一、应用场景分析 异步文件下载器用处很大&#xff0c;当我们需要实现以下功能时可以用的上&#xff1a; 大文件下载&#xff08;如4K视频/安装包&#xff09; 避免UI线程阻塞&#xff0c;保证界面流畅响应多任务并行下载 支持同时下载多个文件&#xff0c;提升带宽利用率后台…

Oracle比较好的几本书籍

1.《Oracle专家高级编程》 2.《Oracle高效设计》 3.《Oracle9i&10g&11g编程艺术深入数据库体系结构》 4.《让Oracle跑的更快》(1/2) ....... n.《Oracle官方文档的阅读》下面包括这几个部分&#xff0c;可以跟进研读一下&#xff1a; &#xff08;1&#xff09;《…

js和java中方法重载(js本身是不支持方法重载,方便对比学习)

js如果需要实现方法重载 示例 1&#xff1a;根据参数数量实现重载 function overloadExample() {if (arguments.length 1) {console.log(一个参数:, arguments[0]);} else if (arguments.length 2) {console.log(两个参数:, arguments[0], arguments[1]);} else {console.l…

Android : Camera之CHI API

来自&#xff1a; https://www.cnblogs.com/szsky/articles/10861918.html 一、CAM CHI API功能介绍&#xff1a; CHI API建立在Google HAL3的灵活性基础之上&#xff0c;目的是将Camera2/HAL3接口分离出来用于使用相机功能&#xff0c;它是一个灵活的图像处理驱动程序&#…

Netty基础—2.网络编程基础四

大纲 1.网络编程简介 2.BIO网络编程 3.AIO网络编程 4.NIO网络编程之Buffer 5.NIO网络编程之实战 6.NIO网络编程之Reactor模式 5.NIO网络编程之Buffer (1)Buffer的作用 Buffer的作用是方便读写通道(Channel)中的数据。首先数据是从通道(Channel)读入缓冲区&#xff0c;从…