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

时间:2017-07-06 12:38:38

标签: assembly arm64

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

乍一看,人们可能会认为BR后跟LDR x9, [PC, #0x8]; BR x9 .dword 0xBADC0FFEE0DDF00D 是可能的,即:

PC

但由于{{1}}不再是 AArch64 上的通用注册,因此不是。

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

1 个答案:

答案 0 :(得分:4)

您可以照常使用编译器生成的文字池:

LDR x9, =0xBADC0FFEE0DDF00D
BR x9

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

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

  

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

因此你可以这样做:

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

可读性较差但没有标签:

LDR x9, .+8
BR x9
.dword 0xBADC0FFEE0DDF00D