jkg*_*jkg 4 assembly arm arm64
我正在寻找一种方法来移动 arch64 寄存器 X1 中的任何 32 位常量。
有没有办法执行等效操作
MOV X1,#imm32
imm32 可以是任何随机 32 位值,例如 0xaf41d32c
我知道如何在 A32 中使用 MOVW 和 MOVT 来完成。我不想使用 LDR X1, =0xaf41d32c,因为我不是直接编写汇编代码,而是通过在内存中写入 32 位 ARM 编码来将指令存储在缓存中。所以我基本上无法形成LDR X1,=0xaf41d32c的编码。
例如 => 根据 ARMv7 参考手册,指令 ADD R1, R1, #1 的编码为 0xe2811001。所以我将其存储在缓存中的某个位置,然后从该位置开始执行。
MOVW 和 MOVT 的 A64 等效项是否存在?你能建议一个解决方案吗?
请参阅movk。
$ echo "long foo() {return 0xaf41d32c;}" | aarch64-linux-android-gcc -O2 -S -o- -xc -
.cpu generic+fp+simd
.file ""
.text
.align 2
.global foo
.type foo, %function
foo:
mov x0, 54060
movk x0, 0xaf41, lsl 16
ret
.size foo, .-foo
.ident "GCC: (GNU) 4.9 20140827 (prerelease)"
.section .note.GNU-stack,"",%progbits
Run Code Online (Sandbox Code Playgroud)