簡體   English   中英

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

[英]Moving a 32 bit constant in ARM Arch64 register

我正在尋找一種方法來移動arch64寄存器X1中任何32位常數。

有沒有辦法執行相同的操作

MOV X1,#imm32

imm32可以是任何隨機32位值,如0xaf41d32c

我知道如何使用MOVW和MOVT在A32中完成。 我不想使用LDR X1,= 0xaf41d32c,因為我不直接編寫匯編代碼,而是通過在內存中寫入32位ARM編碼來將指令存儲在緩存中。 所以我基本上不能形成LDR X1的編碼,= 0xaf41d32c。

例如=>根據ARMv7 ref手動編碼指令ADD R1,R1,#1是0xe2811001。 所以我將它存儲在I Cache中的某個位置,然后從該位置開始執行。

是否存在A64等效的MOVW和MOVT? 你能建議一個解決方案嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM