使用PC相对数据源(AArch64)进行绝对跳转

问题描述 投票:1回答:1

在使用相对于程序计数器的数据源时,如何使用尽可能少的指令在AArch64上执行绝对跳转(64位双字)?

乍一看,可以假设一个LDR,然后是BR,即:

LDR x9, [PC, #0x8];
BR x9
.dword 0xBADC0FFEE0DDF00D

但由于PC不再是AArch64的通用注册,它不是​​。

那么如何用尽可能少的指令来完成呢?

assembly arm64
1个回答
4
投票

您可以像往常一样依赖编译器生成的文字池:

LDR x9, =0xBADC0FFEE0DDF00D
BR x9

这是可读的,并且基本上生成相同的代码。

如果你想要精确控制,你可以使用LDR literal版本,手册说:

加载寄存器(文字)根据PC值和立即偏移计算地址,从存储器加载字,并将其写入寄存器。

你可以这样做:

LDR x9, foo
BR x9
foo: .dword 0xBADC0FFEE0DDF00D

或者可读性较低但没有标签:

LDR x9, .+8
BR x9
.dword 0xBADC0FFEE0DDF00D
© www.soinside.com 2019 - 2024. All rights reserved.