You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM汇编MOV指令编译报错:RVDS6_13编译Cortex X1代码出现A1616E错误

错误原因
  • 第一个编译报错来自MOV x28,0xD02E7F30:AArch64架构的通用MOV指令仅支持最多16位的无符号立即数,或可通过左移16/32/48位得到的16位立即数,0xD02E7F30是32位随机值,不符合MOV的立即数编码规则,因此触发A1616E错误。
  • 原有代码第二行STR x28,0xB41138A4存在语法错误:AArch64的STR存储指令不支持直接使用立即数作为目标内存地址,必须先将地址加载到通用寄存器,通过寄存器间接寻址完成内存写入。
修复方案

以下两种方案均可在RVDS6_13编译器下正常编译,适配Cortex X1处理器:

方案1:使用LDR伪指令(代码更简洁)

编译器会自动将常量放入文字池,通过PC相对寻址完成加载,不需要手动拆分立即数:

; 加载目标内存地址0xD02E7F30到x28寄存器
LDR x28, =0xD02E7F30
; 加载待写入的32位值0xB41138A4到w0寄存器
LDR w0, =0xB41138A4
; 将w0的值写入x28指向的内存地址
STR w0, [x28]

如果需要写入64位值,将w0替换为x0即可。

方案2:使用MOVZ+MOVK手动拼接立即数(无文字池依赖)

适合对代码段位置有严格要求,不需要额外文字池的场景:

; 拆分加载地址0xD02E7F30到x28:低16位0x7F30,高16位0xD02E左移16位
MOVZ x28, #0x7F30
MOVK x28, #0xD02E, LSL #16
; 拆分加载待写入值0xB41138A4到w0:低16位0x38A4,高16位0xB411左移16位
MOVZ w0, #0x38A4
MOVK w0, #0xB411, LSL #16
; 写入内存
STR w0, [x28]

内容的提问来源于stack exchange,提问作者user3565150

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:36:00