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

时间:2019-04-23 14:24:58

标签: assembly arm

我知道之前曾有人问过这个问题,所以很抱歉再次询问,但我不知道如何解决。在我的程序开始时,我尝试将二进制值101000110000100110000移入R0,但收到错误消息“修正后的错误:无效常量(146130)”

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

correct16:
    push    {R1-R10}

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

1 个答案:

答案 0 :(得分:2)

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

_start: 
    mov R0,#0x6130       
    movt R0,#0x14
    bl  correct16
    mov R7,#1
    svc 0

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