【问题标题】:ARM assembly error - invalid constant after fixupARM 程序集错误 - 修复后常量无效
【发布时间】:2019-04-23 14:24:57
【问题描述】:

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

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

correct16:
    push    {R1-R10}

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

【问题讨论】:

  • 查阅指令集参考,特别是mov 的允许立即数范围。 TL;DR:使用ldr r0, =0b101000110000100110000 PS:下次指定您使用的汇编程序

标签: assembly arm


【解决方案1】:

您正在尝试使用 0x146130 的立即数,mov 指令最多可以占用 16 位的立即数(尽管这取决于您的架构和指令集),所以您尝试执行的操作可以t被编码。您可以加载 16 位立即数,然后添加其余部分,或者使用文字池来解决它。

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

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

【讨论】:

    猜你喜欢
    • 2012-05-02
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多