Arm V8 - ADRP指令
ADRP指令
- 作用
- 将当前指令所在页的基地址加/减去字节差,并写入目标寄存器
- 字节差:与目标地址页基地址的间隔字节数,其为PAGE_SIZE的整数倍
- 此时的字节差就是指令所操作的立即数
- 该指令通常配合add指令来向目标寄存器写入完整的地址
- 最后通过br、blr实现长跳转
- 将当前指令所在页的基地址加/减去字节差,并写入目标寄存器
- 字节码对应关系
- Adrp指令字节码案例
0x90 0xFF 0xFF 0xE1
- 对应二进制
1001 0000 1111 1111 1111 1111 1110 0001
- 寄存器位 4-0
0 0001-> 表示x1寄存器- 如果是
0 0000-> 则表示x0寄存器 - 以此类推
0 0010-> x20 0011-> x3n nnnn-> x...
- 立即数位(高19位) 23-5
1111 1111 1111 1111 111
- adr指令位 28-24
10000- 至于为什么是adr指令位而不是adrp指令位,是因为我发现两者是相同的
- adr与adrp的差异在于第31位是否为1
- 立即数位(低2位) 30-29
00
- 64位操作位 31
1- 当该位为1时表示adrp指令,当为0时表示adr指令
- Adrp指令字节码案例
- 对照表
1 00 10000 1111 1111 1111 1111 111 00001
|31| 30-29 | 28-24 | 23-5 | 4-0 |
|sf| immlo | | immhi | rd |
ADRP指令操作数的推导过程
- 在armv8指令手册中是这么写的
- SignExtend(immhi:immlo:Zeros(12), 64);
- 字面理解就是
- 有符号扩展(操作数高位:操作数低位:12个0,总长64位)
- 根据上述案例配合表达式进行计算
- 拼接结果
- =
1111 1111 1111 1111 111 00 0000 0000 0000 - = 0x1 FFFF C000
- =
- 符号扩展步骤及结果
- = 0x1 FFFF C000 << 31 >>31
- = 0xFFFF FFFF FFFF C000
- = -16384
- 也就是说,要在当前指令所在页基地址基础上减去16384字节
- -16384/PAGE_SIZE = -4, 也就是4页的大小
- 拼接结果
Arm V8 - ADRP指令的更多相关文章
- 基于arm v8搭建区块链环境
服务器信息: cpu:华为鲲鹏 cpu架构:arm v8 系统:CenOS-AltArch 7.6 相关工具安装 yum更新 yum update 安装vim/gcc/git/curl工具软件 yum ...
- ARM的栈指令
ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长 ...
- ARM的栈指令(转)
ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长 ...
- ARM指令集—SWP指令
ARM指令集-SWP指令 SWP和SWPB是ARM指令集中对存储单元的原子操作.即对存储单元的一次读和一次不可被切割. SWP和SWPB分别完毕存储器和寄存器之间 一个字(32bit)和一个字节(8b ...
- (二十三)ARM平台NEON指令的编译和优化
ARM平台NEON指令的编译和优化 本文介绍了ARM平台基于ARM v7-A架构的ARM Cortex-A系列处理器(Cortex-A5, Cortex-A7,Cortex-A8, Cortex-A9 ...
- ARM指令集----杂项指令
ARM指令集可以分为6类,即是跳转指令,数据处理指令,程序状态传输指令,Load.Store指令,协处理器指令和异常中断指令 跳转指令: 在ARM中有两种方式可以实现程序的跳转,一种是跳转指令,另一种 ...
- ARM指令集——数据处理指令
ARM汇编指令集 ARM汇编文件的组成 指令:编译完成后作为一条指令(机器码)存储在内存单元中,CPU执行时能够完成处理的操作 伪指令:在编译时替换成能被识别的ARM指令 伪操作:知道编译器进行编译, ...
- [国嵌笔记][027][ARM协处理器访问指令]
协处理器作用 协处理器用于执行特定的处理任务,如数学协处理器可以执行控制数字处理,以减轻处理器的负担.ARM处理器最多可以支持16个协处理器,其中CP15是最重要的一个协处理器 CP15的作用 CP1 ...
- ARM 常用汇编指令
ARM 汇编程序的框架结构 .section .data <初始化的数据> .section.bss <未初始化的数据> .section .text .global _sta ...
- ARM 内核 汇编指令 的 8种 寻址方式
str: store register ->指令将寄存器内容存到内存空间中, ldr: load register 将内存内容加载到通用寄存器, ldr/str 组合来实现ARM CPU 和内 ...
随机推荐
- 国产大模型参加高考,同写2024年高考作文,及格分(通义千问、Kimi、智谱清言、Gemini Advanced、Claude-3-Sonnet、GPT-4o)
大家好,我是章北海 今天高考,上午的语文结束,市面上又要来一场大模型参考的文章了. 我也凑凑热闹,让通义千问.Kimi.智谱清言一起来写一下高考作文. 公平起见,不加任何其他prompt,直接把题目甩 ...
- VMware搭建集群环境
集群地址分配 名称 IP 子网掩码 网关 DNS flink01 192.168.22.211 255.255.255.0 192.168.22.2 114.114.114.114 flink02 1 ...
- xtrabackup备份工具
为什么要学这个工具 背景 一个合格的运维工程师或者dba工程师,如果有从事数据库方面的话,首先需要做的就是备份,如果没有备份,出现问题的话,你的业务就会出问题,你的工作甚至会... 所以备份是重要的, ...
- Mybatis中#{}和${}的区别:
简单来说 #{} 会在将参数加上引号,例如: SELECT * FROM user WHERE username=#{username} ; 带上参数后的SQL语句即: SELECT * ...
- OceanBase 金融项目优化案例
领导让我帮忙支持下其他项目的SQL优化工作,呦西,是收集案例的好时机. 下面SQL都是在不能远程的情况下,按照原SQL的逻辑等价改写完成否发给现场同事验证. 案例一 慢SQL,4.32秒: SELEC ...
- 如何解决Win10删除文件慢的办法
问题:最近使用KMS激活了一些工具,今天删除不需要的文件时发现删除文件很慢很慢,删除一个几百k的文件都很慢. 解决办法通过控制面板→管理工具→服务→找到该进程并设为禁用就OK了.
- js沙雕排序之睡眠排序&随机排序
1.睡眠排序,只要睡的时间多少就可以排序出来不要在乎时间多少 var arr=[4,77,741,41,142,52,244]; var sleepSort=function(arr,callback ...
- SQL索引优化,菜单列表优化
SQL索引优化,菜单列表优化 现象:在系统中几个数据量大的列表页面,首次进入页面未增加筛选条件,导致进入的列表查询速度非常慢.分析:通过SQL查看,是做了count求和查询,然后根据总的记录数来做分页 ...
- SpringBoot 3.x 结合 Swagger3 (Knife4j )踩坑实录
SpringBoot 3.x + Swagger3 踩坑实录 我的是springboot 版本是:3.2.2 <parent> <groupId>org.springframe ...
- GuavaCache、EVCache、Tair、Aerospike 缓存框架比较
Guava Cache.EVCache.Tair.Aerospike 是不同类型的缓存解决方案,它们各有特点和应用场景.下面我会逐一分析这些缓存系统的优势.应用场景,并提供一些基本的代码示例. Gua ...