首页 > 其他分享 >Arm V8 - ADRP指令

Arm V8 - ADRP指令

时间:2024-08-04 20:28:18浏览次数:13  
标签:ADRP 0000 字节 FFFF 1111 指令 寄存器 V8 Arm

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页的大小

标签:ADRP,0000,字节,FFFF,1111,指令,寄存器,V8,Arm
From: https://www.cnblogs.com/KBin/p/18342154

相关文章

  • 重燃代码之光:在PyCharm中恢复自动高亮的秘籍
    重燃代码之光:在PyCharm中恢复自动高亮的秘籍在编程的世界里,代码高亮是一项基本而重要的特性,它不仅增强了代码的可读性,还帮助开发者快速识别不同的代码元素。然而,在PyCharm中,有时可能会遇到代码不自动高亮的问题。本文将详细探讨这一问题的原因,并提供多种解决方案,确保你的Py......
  • ARM 架构硬件新趋势:嵌入式领域的未来
    目录目录一、ARM架构概述二、新趋势一:AI加速器集成三、新趋势二:更高效的电源管理四、新趋势三:安全性增强五、结语随着物联网(IoT)和边缘计算的发展,ARM架构在嵌入式系统中的应用越来越广泛。从智能手机到智能家居设备,ARM处理器因其低功耗、高性能的特点而备受青睐......
  • 白骑士的PyCharm教学高级篇 3.5 团队协作与集成开发
    系列目录上一篇:        在现代软件开发中,团队协作和集成开发环境(IDE)的使用至关重要。PyCharm不仅提供了强大的个人开发支持,还为团队协作和集成开发提供了丰富的功能和工具。本文将详细介绍如何在PyCharm中搭建集成开发环境,以及如何利用团队协作工具和实践,提高团队开......
  • 【香橙派系列教程】(四)基于ARM-Linux架构的语音控制刷抖音项目
    【四】基于ARM-Linux架构的语音控制刷抖音项目文章目录【四】基于ARM-Linux架构的语音控制刷抖音项目1.语音模块配置1.创建产品2.引脚配置3.词条定义4.添加控制5.发布版本6.烧录固件2.编程实现语音和开发板通信3.手机接入Linux热拔插1.dmesg命令2.adb调试踩坑问题3.总......
  • YOLOv8模型:从YAML文件到模型定义(代码逐行解析)
    鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)YOLOv8模型:从YAML文件到模型定义(代码逐行解析)简介YOLOv8是目前最先进的目......
  • Python+Pycharm下载安装教程,基础知识(详细教程)
    这是一篇针对初学者的 Python 基础教程,只要你认真阅读,花费30分钟即可快速了解Python。这篇Python入门教程讲解的知识点包括:Python编程环境的搭建、Python基本操作入门、Python数据类型、Python语句和函数。Python环境下载和配置根据Windows版本(64位/32位)从P......
  • Spearman 相关系数
    Spearman相关系数Spearman相关系数是一种用来衡量两个变量之间关系强弱的统计方法。它的核心思想是看两个变量的等级(或者说顺序)是不是按照相同的方式变化。具体来说,它不关心变量的具体数值,而是关注它们的排序顺序是否一致。举个例子,假设我们有一组学生,我们对他们的数学成绩和......
  • 使用 YOLOv8 进行大量错误检测
    我试图使用VisualCodeStudio运行YOLOv8。安装了ultralytics并在vscode终端上运行yolopredictmodel=yolov8n.ptsource='https://ultralytics.com/images/bus.jpg'但是我收到的输出是2persons,1bicycle,5cars,10motorcycles,73boats,3stopsi......
  • Ubunut 22.04 Pycharm后端环境搭建
    要在Ubuntu上安装PyCharm,可以通过以下步骤进行:1.通过Snap安装(推荐)打开终端。输入以下命令以安装PyCharm:社区版(免费版):sudosnapinstallpycharm-community--classic专业版(付费版):sudosnapinstallpycharm-professional--classic2.通过Ubuntu软件中心安装打开......
  • Ubuntu 22.04 + Pycharm + Flask 配置 Flask 项目
    1.安装Flask及相关依赖在虚拟环境中安装Flask和MySQL相关的库:pipinstallFlaskFlask-MySQLdb2.创建Flask项目结构创建一个基本的Flask项目结构:mkdirmy_flask_appcdmy_flask_appmkdirapptouchapp/__init__.pyapp/routes.py3.配置Fla......