没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
ARMv8/ARMv9指令集概述
· 作者:代码改变世界ctw
Release history
1 前言
为什么要写这篇文档
我们要学习什么?
推荐序
2 简介
3 A64概述
3.1 32位和64位之类的区别
3.2 条件指令
3.3 寻址功能
3.3.1 寄存器变址寻址
3.3.2 PC 相对寻址
3.4 程序计数器 (PC)
3.5 内存加载-存储
3.5.1 批量传输
3.5.2 独占访问
3.5.3 Load-Acquire, Store-Release
3.6 整数乘法/除法
3.7 浮点数
3.8 高级 SIMD
4 A64汇编语言
4.1 基本结构
4.2 指令助记符
4.3 条件代码
4.4 寄存器名称
4.4.1 通用寄存器
4.4.2 FP/SIMD 寄存器
4.5 加载/存储寻址模式
5 A64指令集
5.1 控制流程
5.1.1 条件分支
5.1.2 无条件分支(立即数)
5.1.3 无条件分支(寄存器)
5.2 内存访问
5.2.1 加载-存储单个寄存器
5.2.2 加载-存储单个寄存器(未缩放的偏移量)
5.2.3 加载单个寄存器(pc-relative,literal load)
5.2.4 加载-存储一对寄存器
5.2.5 加载-存储Non-temporal Pair
5.2.6 加载-存储非特权
5.2.7 加载存储独占
5.2.8 Load-Acquire / Store-Release
5.2.8.1 Non-exclusive
5.2.8.2 Exclusive
5.2.9 预取内存
5.3 数据处理(立即数)
5.3.1 算术(立即数)
5.3.2 逻辑(立即数)
5.3.3 Move (wide immediate)
5.3.3.1 Move (immediate)
5.3.4 地址生成(Address Generation)
5.3.5 位域操作
5.3.6 提取(立即数)-- Extract (immediate)
5.3.7 Shift(立即数)
5.3.8 符号/零扩展
5.4 数据处理(寄存器)
5.4.1 算术(移位寄存器)
5.4.2 算术(扩展寄存器)
5.4.3 逻辑(移位寄存器)
5.4.4 变体位(Variable Shift)
5.4.5 位运算
5.4.6 条件数据处理
5.4.7 条件比较
5.5 整数乘法/除法
5.5.1 乘法
5.5.2 除法
5.6 标量浮点
5.6.1 浮点/SIMD 标量内存访问
5.6.2 浮点移动(寄存器)
5.6.3 浮点移动(立即)
5.6.4 浮点转换
5.6.5 浮点四舍五入到积分
5.6.6 浮点算术(1 个来源)
5.6.7 浮点算术(2 个来源)
5.6.8 浮点最小值/最大值
5.6.9 浮点乘加
5.6.10 浮点比较
5.6.11 浮点条件选择
5.7 高级SIMD
5.7.1 概述
5.7.2 高级 SIMD 助记符
5.7.3 数据移动
5.7.4 向量算术
5.7.5 标量算术
5.7.6 向量加宽/收窄算法
5.7.7 标量加宽/收窄算法
5.7.8 向量一元算术
5.7.9 标量一元算术
5.7.10 逐元素算术
5.7.11 标量逐元素算术
5.7.12 向量置换
5.7.13 向量立即数
5.7.14 向量移位(立即)
5.7.15 标量移位(立即)
5.7.16 向量浮点/整数转换
5.7.17 标量浮点/整数转换
5.7.18 向量缩减(跨车道)
5.7.19 向量成对算术
5.7.20 标量归约(成对)
5.7.21 向量表查找
5.7.22 向量加载存储结构
5.7.23 AArch32 等效高级 SIMD 助记符
5.7.24 加密扩展
5.8 系统说明
5.8.1 异常的产生和返回
5.8.1.1 Non-debug exceptions
5.8.1.2 Debug exceptions
5.8.2 系统寄存器访问
5.8.3 系统管理
5.8.4 hints
5.8.5 Barriers和CLREX
6 A32和T32指令集
6.1 部分弃用 的之类
6.2 加载-获取/存储-释放
6.2.1 非排他性
6.2.2 独占
Data Author Change
2022/03/28 代码改变世界ctw Beta draft v1.0
6.3 VFP 标量浮点
6.3.1 浮点条件选择
6.3.2 浮点minNum/maxNum
6.3.3 浮点转换(浮点到整数)
6.3.4 浮点转换(半精度到/从双精度)
6.3.5 浮点取整
6.4 高级 SIMD 浮点
6.4.1 浮点minNum/maxNum
6.4.2 浮点转换
6.4.3 浮点取整到积分
6.5 加密扩展
6.6 系统说明
6.6.1 停止调试
6.6.2 Barriers 和 Hints
Release history
1 前言
为什么要写这篇文档
ARMV8都出来10年了,可是一本中文的手册都没用。真的很好奇,为什么没有人翻译这类文档呢。 (不
过最近好像有相关中文的文档了).
本文仅仅是翻译ARM的一篇官方的指令集文档,仅仅是指令集文档哦,不会介绍架构等知识。说实话,
你不理解的是汇编吗?你是看不懂指令吗? 不你的瓶颈是硬件架构知识吧
(本文大多数都是直译吧,翻译的也不是太好,浪费时间。另外遗留了一些章节没有翻译,懒得弄了。如
果你有兴趣可联系我,我给你markdown原文,一起补充下剩余的章节吧)
我们要学习什么?
这些指令,咋一看,真简单,也不多吗,大几十个? 但是算上变体等,那就有数百个甚至好几千个了。
很多指令有和具体的feature和架构相关,很难去记住。 所以呢,我们可以学习一些基本的指令集,其
余的使用的时候再查阅即可。如下列举了指令的分类,我们只要对着这个分类,学习一些基础的指令即
可。
推荐序
TODO
(联系方式)
2 简介
本文档概述了 ARMv8 指令集。大部分文档描述了处理器在 AArch64 寄存器宽度状态下运行时使用的新
A64 指令集,并定义了其首选的
架构汇编语言。
下面的第 6 节列出了 ARMv8 对 A32 和 T32 指令集(在 ARMv7 中分别称为 ARM 和 Thumb 指令集)引
入的扩展,这些扩展在处理器在
AArch32 寄存器宽度状态下运行时可用。 A32 和 T32 汇编语言语法与 ARMv7 相同。
在下面的语法描述中,使用了以下约定:
UPPER UPPER‐CASE文本是固定的,而小写文本是可变的。所以寄存器名 Xn 表示‘X’是必需的,后
跟可变寄存器编号,例如 X29。
<> 由 < > 括起来的任何项目都是对用户在该位置提供的值类型的简短描述。项目的较长描述通
常由后续文本提供
{ } 任何用花括号 { } 括起来的项目都是可选的。项目的描述以及它的存在或不存在如何影响指
令通常由后续文本提供。在某些情
剩余39页未读,继续阅读
资源评论
- 夏天的雨水2023-09-12感谢资源主的分享,很值得参考学习,资源价值较高,支持!
代码改变世界ctw
- 粉丝: 5w+
- 资源: 44
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功