ARM指令浅析2(adrp、b)

本文分析了ARM架构下GCC编译器如何利用adrp指令减少汇编指令数量,以及b指令在程序跳转中的作用。通过示例解释了adrp如何获取4KB页基址并进行地址计算,以及b指令实现程序跳转的过程。
摘要由CSDN通过智能技术生成

其实这篇文章的初衷是分析alpha架构下和arm架构下,为什么相同的用例arm生成的汇编指令会少一些,由于工作的保密性,暂时不介绍alpha生成的指令,因此先来主要分析一下,arm架构之所以少生成汇编指令的原因——adrp指令。

 

环境依然是ARM架构下的gcc编译器,编译选项为 -O2。

 

 

4.Adrp指令

 

 

再来看一下arm编译器中的adrp指令

在了解adrp指令之前,首先要了解adr指令。以下是arm白皮书中对PC相关地址的计算描述——

 

 

 

ADR

 

作用:小范围的地址读取指令。ADR 指令将基于PC 相对偏移的地址值读取到寄存器中。

 

原理:将有符号的21位的偏移,加上PC, 结果写入到通用寄存器,可用来计算 +/- 1MB范围的任意字节的有效地址。

 

ADRP

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪笨是念来过倒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值