ARM 汇编错误 - 修复后常量无效

Tud*_*ers 1 assembly arm

我知道这个问题之前已经被问过,很抱歉再次询问,但我不知道如何解决它。在程序开始时,我尝试将二进制值 101000110000100110000 移动到 R0 中,但收到错误消息“错误:修复后无效常量 (146130)”

        .global _start
_start: 
    mov R0,#0b101000110000100110000
    bl  correct16
    mov R7,#1
    svc 0

correct16:
    push    {R1-R10}

Run Code Online (Sandbox Code Playgroud)

我真的不明白为什么要这样做或如何修复它,因为我以前从未遇到过此错误。

Col*_*lin 5

您尝试使用立即数 0x146130,该mov指令最多可以使用 16 位立即数(尽管这取决于您的体系结构和指令集),因此您尝试执行的操作无法进行编码。您可以加载一个 16 位立即数,然后添加其余部分,或者使用文字池来解决它。

_start: 
    mov R0,#0x6130       
    movt R0,#0x14
    bl  correct16
    mov R7,#1
    svc 0
Run Code Online (Sandbox Code Playgroud)

这会将底部半字加载到 r0 中,然后加载顶部半字。