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 -> x2
        • 0 0011 -> x3
        • n 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指令
  • 对照表
   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指令的更多相关文章

  1. 基于arm v8搭建区块链环境

    服务器信息: cpu:华为鲲鹏 cpu架构:arm v8 系统:CenOS-AltArch 7.6 相关工具安装 yum更新 yum update 安装vim/gcc/git/curl工具软件 yum ...

  2. ARM的栈指令

    ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长 ...

  3. ARM的栈指令(转)

    ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长 ...

  4. ARM指令集—SWP指令

    ARM指令集-SWP指令 SWP和SWPB是ARM指令集中对存储单元的原子操作.即对存储单元的一次读和一次不可被切割. SWP和SWPB分别完毕存储器和寄存器之间 一个字(32bit)和一个字节(8b ...

  5. (二十三)ARM平台NEON指令的编译和优化

    ARM平台NEON指令的编译和优化 本文介绍了ARM平台基于ARM v7-A架构的ARM Cortex-A系列处理器(Cortex-A5, Cortex-A7,Cortex-A8, Cortex-A9 ...

  6. ARM指令集----杂项指令

    ARM指令集可以分为6类,即是跳转指令,数据处理指令,程序状态传输指令,Load.Store指令,协处理器指令和异常中断指令 跳转指令: 在ARM中有两种方式可以实现程序的跳转,一种是跳转指令,另一种 ...

  7. ARM指令集——数据处理指令

    ARM汇编指令集 ARM汇编文件的组成 指令:编译完成后作为一条指令(机器码)存储在内存单元中,CPU执行时能够完成处理的操作 伪指令:在编译时替换成能被识别的ARM指令 伪操作:知道编译器进行编译, ...

  8. [国嵌笔记][027][ARM协处理器访问指令]

    协处理器作用 协处理器用于执行特定的处理任务,如数学协处理器可以执行控制数字处理,以减轻处理器的负担.ARM处理器最多可以支持16个协处理器,其中CP15是最重要的一个协处理器 CP15的作用 CP1 ...

  9. ARM 常用汇编指令

    ARM 汇编程序的框架结构 .section .data <初始化的数据> .section.bss <未初始化的数据> .section .text .global _sta ...

  10. ARM 内核 汇编指令 的 8种 寻址方式

    str: store register ->指令将寄存器内容存到内存空间中, ldr:  load register 将内存内容加载到通用寄存器, ldr/str 组合来实现ARM CPU 和内 ...

随机推荐

  1. ETL工具-nifi干货系列 第十讲 处理器RouteOnAttribute(数据流路由)

    1.今天我们一起来学习下处理器RouteOnAttribute,此处理器的作用是根据属性值进行路由进而来控制数据流的走向.类似于java中的if-else或者switch-case.如下图所示. Ge ...

  2. 如何监控文件变化,比如密码修改导致 shadow 文件变化

    原始需求是如果系统的密码被修改,或者创建了新用户,就告警出来.本质上,只需要监控 /etc/shadow 文件变化即可.但是在指标监控体系里,这个事情就比较棘手,只能把文件的 mtime 作为指标的值 ...

  3. vue饼图

    结果图 原型 1 <template> 2 <!-- 左右柱状图 --> 3 <div ref="rankEcharts" :style=" ...

  4. 解锁LLMs的“思考”能力:Chain-of-Thought(CoT) 技术推动复杂推理的新发展

    解锁LLMs的"思考"能力:Chain-of-Thought(CoT) 技术推动复杂推理的新发展 1.简介 Chain-of-Thought(CoT)是一种改进的Prompt技术, ...

  5. 燕千云 YQCloud 数智化业务服务管理平台 发布1.13版本

    2022年6月10日,燕千云 YQCloud 数智化业务服务管理平台发布1.13版本.本次燕千云1.13版本新增了远程桌面.知识库多人在线协作.移动端疫苗核酸信息管理.单据委托代理.技能管理.产品自助 ...

  6. 『手撕Vue-CLI』自动安装依赖

    开篇 经过『手撕Vue-CLI』拷贝模板,实现了自动下载并复制指定模板到目标目录.然而,虽然项目已复制,但其依赖并未自动安装,可能需要用户手动操作,这并不够智能. 正如前文所述,我们已经了解了业务需求 ...

  7. Unity 利用Cache实现边下边玩

    现在手机游戏的常规更新方案都是在启动时下载所有资源更新,游戏质量高的.用户粘性大的有底气,先安装2个G,启动再更新2个G,文件小了玩家还觉得品质不行不想玩. 最近在做微信.抖音小游戏,使用他们提供的资 ...

  8. 【动手学深度学习】第三章笔记:线性回归、SoftMax 回归、交叉熵损失

    这章感觉没什么需要特别记住的东西,感觉忘了回来翻一翻代码就好. 3.1 线性回归 3.1.1 线性回归的基本元素 1. 线性模型 \(\boldsymbol{x}^{(i)}\) 是一个列向量,表示第 ...

  9. .NET 个人博客系统

    前言 之前通过github学习了一个.net core的博客项目,最近也是完成了博客的备案,完善了一下.该项目是传统的MVC项目,可以进行主题的切换,采用Bootstrap进行前台页面的展示,有配套的 ...

  10. 【论文阅读】Learning to drive from a world on rails

    引用与参考 代码地址:https://github.com/dotchen/WorldOnRails 论文地址:https://arxiv.org/abs/2105.00636 论文部分 已看完 写在 ...