【发布时间】:2021-09-16 06:59:42
【问题描述】:
我使用的是 RVDS6_13 编译器,我的处理器是 Cortex X1 (HERA)。对于需要进行一些汇编语言编程的测试,我在编译时遇到以下错误:
错误:A1616E:当前指令集不支持指令、偏移量、立即数或寄存器组合 9 00000000 MOV x28,0xD02E7F30
基本上我需要加载 0xB41138A4 到地址位置 0xD02E7F30,下面是我的代码:
MOV x28,0xD02E7F30
STR x28,0xB41138A4
【问题讨论】:
-
您不需要
mov w28, 0x7F30、movk w28, 0xD02E, lsl 16之类的东西吗?另外,STR在我看来不像 ARM 程序集。通常,您首先将地址加载到寄存器中,然后使用[reg]作为第二个操作数(其中reg是您放置地址的寄存器)。 -
谢谢 Michael,其实我在想如果 x28、x29 是 32 位寄存器,那为什么我不能直接用 32 位字加载地址和数据,然后通过 STR 指令加载地址数据。但似乎虽然这些是 32 位寄存器,但我必须按照您的建议将它分成两个 16 位操作和左移才能有效地获得 32 位操作。
标签: assembly arm64 mov armv8 immediate-operand