ARM程序集错误 - 修复后无效的常量

问题描述 投票:0回答:1

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

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

correct16:
    push    {R1-R10}

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

assembly arm
1个回答
2
投票

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

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

这会将下半字加载到r0,然后加载到上半字。

© www.soinside.com 2019 - 2024. All rights reserved.