在 ARM 汇编中编译 MOV 指令时出错
Error while compiling MOV instruction in ARM assembly
我正在使用 RVDS6_13 编译器,我的处理器是 Cortex X1 (HERA)。对于需要进行一些汇编语言编程的测试,我在编译时遇到以下错误:
错误:A1616E:当前指令集不支持指令、偏移量、立即数或寄存器组合
9 00000000 MOV x28,0xD02E7F30
基本上我需要将 0xB41138A4 加载到地址位置 0xD02E7F30,下面是我的代码:
MOV x28,0xD02E7F30
STR x28,0xB41138A4
使用特殊的“文字池”LDR
指令加载值,使用 ADRP
指令加载部分地址(除了低 12 位之外的所有内容)。然后用剩余的地址位作为位移存储:
LDR w28, =0xD02E7F30
ADRP x29, 0xB4113000
STR w28, [x29, 0x8A4]
(我已将您的商店更改为 32 位商店,因为我假设您错误地使用了 64 位商店)
除了 ldr w28, =...
指令,您还可以使用 MOVZ
/MOVK
对来摆脱文字池负载:
MOVZ w28, 0x7F30, LSL #0
MOVK w28, 0xD02E, LSL #16
ADRP x29, 0xB4113000
STR w28, [x29, 0x8A4]
如果您的二进制文件应该与位置无关,您还必须使用 LDR w29, =...
或 MOVZ
/MOVK
加载地址,因为 ADRP
加载PC
-相对地址:
MOVZ w28, 0x7F30, LSL #0
MOVK w28, 0xD02E, LSL #16
MOVZ x29, 0x38A4, LSL #0
MOVK x29, 0XB411, LSL #16
STR w28, [x29]
我正在使用 RVDS6_13 编译器,我的处理器是 Cortex X1 (HERA)。对于需要进行一些汇编语言编程的测试,我在编译时遇到以下错误:
错误:A1616E:当前指令集不支持指令、偏移量、立即数或寄存器组合 9 00000000 MOV x28,0xD02E7F30
基本上我需要将 0xB41138A4 加载到地址位置 0xD02E7F30,下面是我的代码:
MOV x28,0xD02E7F30
STR x28,0xB41138A4
使用特殊的“文字池”LDR
指令加载值,使用 ADRP
指令加载部分地址(除了低 12 位之外的所有内容)。然后用剩余的地址位作为位移存储:
LDR w28, =0xD02E7F30
ADRP x29, 0xB4113000
STR w28, [x29, 0x8A4]
(我已将您的商店更改为 32 位商店,因为我假设您错误地使用了 64 位商店)
除了 ldr w28, =...
指令,您还可以使用 MOVZ
/MOVK
对来摆脱文字池负载:
MOVZ w28, 0x7F30, LSL #0
MOVK w28, 0xD02E, LSL #16
ADRP x29, 0xB4113000
STR w28, [x29, 0x8A4]
如果您的二进制文件应该与位置无关,您还必须使用 LDR w29, =...
或 MOVZ
/MOVK
加载地址,因为 ADRP
加载PC
-相对地址:
MOVZ w28, 0x7F30, LSL #0
MOVK w28, 0xD02E, LSL #16
MOVZ x29, 0x38A4, LSL #0
MOVK x29, 0XB411, LSL #16
STR w28, [x29]