当前位置: 首页 > news >正文

【ARM64 常见汇编指令学习 19.2 -- ARM64 地址加载指令 ADR 详细介绍】

文章目录

    • 地址加载指令 ADR
      • ADR 指令
      • 使用场景
      • 例子
      • 注意事项

地址加载指令 ADR

ARMv8 架构引入了一系列的改进和扩展,包括对汇编指令集的更新。在这之中,ADR 指令是一个重要的组成部分,它用于计算并加载一个地址到寄存器。

ADR 指令

ADR 指令用于将一个标签的地址加载到一个寄存器中,而不需要执行内存访问。这是一种非常高效的方式来获取数据或者指令的地址。ADR 指令计算的是当前指令地址与目标地址之间的偏移,这个偏移是相对于当前指令的下一条指令的地址的。
ADR 的基本形式如下:

ADR Xd, label
  • Xd 是目标寄存器,用于存储计算出的地址。
  • label 是在同一代码段中的一个标签,指向要计算地址的目标。

使用场景

ADR 指令在需要引用数据或其他指令地址的时候非常有用。例如,在设置跳转表、引用静态数据、或者是在进行函数指针的初始化时,都可能会用到 ADR

例子

假设有一个简单的 ARMv8 汇编程序段,我们要加载一个数据项的地址到寄存器 X0 中,这个数据项标记为 data_item:

    .section .data
data_item:.word 12345678   // 假设这是一个数据项.section .text.global _start
_start:ADR X0, data_item  // 将 data_item 的地址加载到 X0 寄存器// X0 现在包含 data_item 的地址...

在上面的例子中,ADR 指令计算 data_item 标签的地址,并将其加载到 X0 寄存器中。这样,X0 寄存器就可以被用来访问 data_item 所代表的数据了。

注意事项

  • ADR 指令生成的地址是相对于当前指令地址的偏移,因此它是基于 PC-relative(程序计数器相对)的地址计算方式。
  • ADR 只能用于生成相对于当前位置偏移不太远的地址,对于大范围的地址偏移,可能需要使用其他方法(例如 ADRP + ADD)来加载地址。

ARMv8 的指令集为低级编程和系统级编程提供了广泛的支持,ADR 指令是理解和使用这些功能的基础之一。

相关文章:

  • 高防CDN是如何应对DDoS和CC攻击的
  • 堆排序-调整算法
  • wireshark 标记自己想要的数据包
  • C++ OpenCV 图像分类魔法:探索神奇的模型与代码
  • 【上篇】从 YOLOv1 到 YOLOv8 的 YOLO 物体检测模型历史
  • 用git下载hugging face上的大模型,以Qwen1.5-7B为例
  • webservice、WCF、webAPI、MVC权限认证
  • 型号FM152A,FM148R和利时
  • 【软件工程】第七章
  • Flink⼤状态作业调优实践指南:状态报错与启停慢篇
  • 中缀表达式和前缀后缀
  • “安全生产月”专题报道:AI智能监控技术如何助力安全生产
  • C/C++ 引用和指针的区别及使用场景
  • QT中将资源文件(image、qss、qm等)封装到静态库中,程序该如何引用静态库中的资源文件
  • mysql8 .net sqlsuger 批量插入dbScope.Fastest<T>().PageSize(2000).BulkCopy(T)>
  • 【5+】跨webview多页面 触发事件(二)
  • 2017 年终总结 —— 在路上
  • 2017-09-12 前端日报
  • Bootstrap JS插件Alert源码分析
  • Elasticsearch 参考指南(升级前重新索引)
  • extjs4学习之配置
  • MySQL用户中的%到底包不包括localhost?
  • Vue组件定义
  • 阿里研究院入选中国企业智库系统影响力榜
  • 从PHP迁移至Golang - 基础篇
  • 分布式熔断降级平台aegis
  • 工作手记之html2canvas使用概述
  • 关于Flux,Vuex,Redux的思考
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 坑!为什么View.startAnimation不起作用?
  • 突破自己的技术思维
  • 最近的计划
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​比特币大跌的 2 个原因
  • "无招胜有招"nbsp;史上最全的互…
  • (4)Elastix图像配准:3D图像
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (二)原生js案例之数码时钟计时
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET Core中的去虚
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET正则基础之——正则委托
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @Bean有哪些属性
  • @RequestBody详解:用于获取请求体中的Json格式参数