首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ARM组件中编译MOV指令时出错

在ARM组件中编译MOV指令时出错
EN

Stack Overflow用户
提问于 2021-09-16 06:59:42
回答 1查看 181关注 0票数 0

我正在使用RVDS6_13编译器,我的处理器是Cortex X1 (HERA)。对于一个我需要做一些汇编语言编程的测试,我在编译过程中遇到了以下错误:

错误: A1616E:当前指令集9 00000000 MOV x28,0xD02E7F30不支持指令、偏移、立即或寄存器组合。

基本上,我需要加载0xB41138A4来寻址0xD02E7F30及以下位置,这是我的代码:

代码语言:javascript
复制
 MOV  x28,0xD02E7F30  
 STR  x28,0xB41138A4   
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-16 08:41:14

用特殊的“文字池”LDR指令加载值,用ADRP指令加载部分地址(除低12位外)。然后将剩余的地址位存储为置换:

代码语言:javascript
复制
LDR w28, =0xD02E7F30
ADRP x29, 0xB4113000
STR w28, [x29, 0x8A4]

(我已经将您的存储更改为32位存储,因为我认为您错误地使用了64位存储)

ldr w28, =...指令不同,您还可以使用MOVZ/MOVK对来消除文字池负载:

代码语言:javascript
复制
MOVZ w28, 0x7F30, LSL #0
MOVK w28, 0xD02E, LSL #16
ADRP x29, 0xB4113000
STR w28, [x29, 0x8A4]

如果您的二进制文件应该是独立于位置的,那么在LDR w29, =...MOVZ/MOVK加载PC-relative地址时,还必须使用ADRP加载地址:

代码语言:javascript
复制
MOVZ w28, 0x7F30, LSL #0
MOVK w28, 0xD02E, LSL #16
MOVZ x29, 0x38A4, LSL #0
MOVK x29, 0XB411, LSL #16
STR w28, [x29]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69203735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档