如何在AArch64上以尽可能少的指令执行绝对跳转(64位dword),同时使用相对于程序计数器的数据源?
乍一看,人们可能会假设LDR
后面跟着BR
是可能的,即:
LDR x9, [PC, #0x8];
BR x9
.dword 0xBADC0FFEE0DDF00D
但是,由于PC
不再是AArch64上的通用寄存器,所以它不是。
那么,如何在尽可能少的指令下做到这一点呢?
发布于 2017-07-06 12:54:51
您可以像往常一样依赖编译器生成的文字池:
LDR x9, =0xBADC0FFEE0DDF00D
BR x9
这是可读的,基本上会生成相同的代码。
如果你想要有精确的控制,你可以使用LDR literal
版本,手册上写着:
Load寄存器(文字)从PC值和立即偏移量计算一个地址,从内存中加载一个单词,并将其写入寄存器。
因此,你可以:
LDR x9, foo
BR x9
foo: .dword 0xBADC0FFEE0DDF00D
或可读性较低但没有标签的:
LDR x9, .+8
BR x9
.dword 0xBADC0FFEE0DDF00D
https://stackoverflow.com/questions/44949124
复制相似问题