Assembly 在ARM Arch64寄存器中移动32位常量

Assembly 在ARM Arch64寄存器中移动32位常量,assembly,arm,arm64,Assembly,Arm,Arm64,我正在寻找一种方法来移动arch64寄存器X1中的任何32位常量 是否有一种方法来执行的等效操作 MOV X1#imm32 imm32可以是任意32位随机值,如0xaf41d32c 我知道如何在A32中使用MOVW和MOVT来完成。我不想使用LDR X1,=0xaf41d32c,因为我不是直接编写汇编代码,而是通过将指令的32位ARM编码写入内存来将指令存储在缓存中。所以我基本上无法为ldrx1,=0xaf41d32c形成编码 对于eg=>根据指令的ARMv7 ref手动编码,添加R1,R1,#

我正在寻找一种方法来移动arch64寄存器X1中的任何32位常量

是否有一种方法来执行的等效操作

MOV X1#imm32

imm32可以是任意32位随机值,如0xaf41d32c

我知道如何在A32中使用MOVW和MOVT来完成。我不想使用LDR X1,=0xaf41d32c,因为我不是直接编写汇编代码,而是通过将指令的32位ARM编码写入内存来将指令存储在缓存中。所以我基本上无法为ldrx1,=0xaf41d32c形成编码

对于eg=>根据指令的ARMv7 ref手动编码,添加R1,R1,#1为0xe2811001。因此,我将其存储在某个位置的i缓存中,然后从该位置开始执行

是否存在64种等效的MOVW和MOVT?您能提出解决方案吗?

请参阅


为什么标签在这里?我不知道AArch64,但您可以从like加载任何常量(在MIPS中,但在ARM中也使用类似的方法,特别是ARM 32)
$ 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