arm v8汇编指令

2024-06-14 17:08
文章标签 指令 arm v8 汇编

本文主要是介绍arm v8汇编指令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

A64指令 提供同A32和T32指令类似的功能, 也提供如下新功能

1)一个清晰的,固定长度的指令集: 指令是32位宽度, 寄存器字段(fields)是 在固定位置的 连续的位,  立即数 通常也是占用连续的位

2) 更多通用寄存器(r0-r30), 每个寄存器长度扩展为64位。  通用寄存器 编码在 5个位域

寄存器r31是一个特殊的寄存器:

Zero Register: 在大多数情况下,作为源寄存器使用时, r31读出来的值 是0; 作为目标寄存器使用时, 丢弃结果。   WZR(word zero rigiser)或者XZR(64位)

Stack Register: 当 用作load/store 的base register时, 或者 一些算术指令中, r31提供当前的stack pointer    WSP或者 SP

3) PC寄存器 不能直接读写。用来指明当前程序执行的位置

4)过程调用 链接寄存器(LR)  是 r30

异常处理 有个 ELR系统寄存器

PC不是通用寄存器的一部分,不能通过寄存器号 来引用, 所以 不能作为 算术指令的源地址或者目标地址。
也不能作为 内存存取的 基础(base), 索引(index)或者传输(transfer)寄存器。
能够读取PC寄存器内容的 指令是 PC相对寻址 指令(ADR, ADRP, 常量加载, 直接跳转等指令)
跳转和链接指令,将PC保存到链接寄存器(BL和BLR)
能够修改PC的唯一的方式,使用 隐式的控制流指令(条件跳转,无条件跳转,异常生成,异常返回)
值得注意的是:PC 被这些指令 读出来时,其值 就是 该指令所在的地址,而不像 A32和T32中,要加上4或者8的偏移(历史上的原因,两级流水
向后两条指令,如果是16位长度的thumb指令, 那就是PC+4;32位长的arm指令,就是PC+8)

内存数据存取

A32和T32中的LDM,STM, PUSH和POP指令,在A64中并不存在

又有一对新的指令LDP和 STP 用来从内存中存取数据到寄存器。

地址生成

ADRP  Xd, lable

(Address Page)

符号扩展一个21位的offset,  向左移动12位

PC的值的低12位 清零, 然后  把 这两者相加, 结果写入到Xd寄存器

用来得到一块含有 lable的4KB对齐 内存区域的base地址 (也就是说lable所在的地址,一定落在这个4KB的内存区域里,  指令助记符里Page也就是这个意思), 可用来寻址 +/- 4GB的范围

ADR X

(Address)

将有符号的21位的偏移,加上PC, 结果写入到Xd寄存器

可用来计算 +/- 1MB范围的 任意字节粒度的有效地址

转自:http://zhiwei.li/text/2014/05/arm64-指令/

这篇关于arm v8汇编指令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1061008

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

工作常用指令与快捷键

Git提交代码 git fetch  git add .  git commit -m “desc”  git pull  git push Git查看当前分支 git symbolic-ref --short -q HEAD Git创建新的分支并切换 git checkout -b XXXXXXXXXXXXXX git push origin XXXXXXXXXXXXXX

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

Android中如何实现adb向应用发送特定指令并接收返回

1 ADB发送命令给应用 1.1 发送自定义广播给系统或应用 adb shell am broadcast 是 Android Debug Bridge (ADB) 中用于向 Android 系统发送广播的命令。通过这个命令,开发者可以发送自定义广播给系统或应用,触发应用中的广播接收器(BroadcastReceiver)。广播机制是 Android 的一种组件通信方式,应用可以监听广播来执行

mysql中导入txt文件数据的操作指令

1 表tt的格式:    CREATE TABLE `tt` (   `ind` int NOT NULL auto_increment,   `name` char(100) default NULL,   PRIMARY KEY  (`ind`)  )   2 文件d.txt的内容示例:  1,a  2,b  3,c

可选择的反思指令微调

论文:https://arxiv.org/pdf/2402.10110代码:GitHub - tianyi-lab/Reflection_Tuning: [ACL'24] Selective Reflection-Tuning: Student-Selected Data Recycling for LLM Instruction-Tuning机构:马里兰大学, Adobe Research领

bash: arm-linux-gcc: No such file or directory

ubuntu出故障重装了系统,一直用着的gcc使用不了,提示bash: arm-linux-gcc: No such file or directorywhich找到的命令所在的目录 在google上翻了一阵发现此类问题的帖子不多,后来在Freescale的的LTIB环境配置文档中发现有这么一段:     # Packages required for 64-bit Ubuntu

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte

驱动安装注册表指令

HKCR: HKEY_CLASSES_ROOT HKCU: HKEY_CURRENT_USER HKLM: HKEY_LOCAL_MACHINE HKU: HEKY_USER HER: 相对根键

汇编:嵌入式软件架构学习资源

成为嵌入式软件架构设计师需要掌握多方面的知识,包括嵌入式系统、实时操作系统、硬件接口、软件设计模式等。 以下是一些推荐的博客和网站,可以帮助你深入学习嵌入式软件架构设计: ### 1. **Embedded.com**    - **网址**: [Embedded.com](https://www.embedded.com/)    - **简介**: 这是一个专注于嵌入式系统设计的专业网