代码之家  ›  专栏  ›  技术社区  ›  rockstar

防护错误A1174E:数据传输偏移量0x00002000超出范围。允许的值为0xFFFFF001至0x00000FFF

  •  -1
  • rockstar  · 技术社区  · 9 年前

    我有一个简单的程序集,它生成了以下错误

    装配

    LDR r14,[r12,#0x00002000]
    

    错误

    testspeed.s(23): error: A1174E: Data transfer offset 0x00002000 out of range.  Permitted values are 0xFFFFFF01 to 0x00000FFF
    

    抬头看 ARM guide 我看到错误的原因了

     A1174E: Data transfer offset 0x<val> out of range. Permitted values are 0x<mini> to 0x<maxi>
    

    谁都知道这是什么 0x<mini> 0x<maxi> ? 它设置在哪里?我能控制它吗。

    1 回复  |  直到 9 年前
        1
  •  2
  •   Raymond Chen    9 年前

    这是ARM指令集的限制。每 the documentation :

    Instruction           Immediate offset     Pre-indexed      Post-indexed     Arch.
    ARM, word or byte [1] -4095 to 4095        -4095 to 4095    -4095 to 4095    All 
    

    (由于某些原因,文档中缺少减号。)

    您的偏移量太大,不能用作立即数。你必须想出其他方法来访问内存,比如说,把它分成两条指令。

    ADD r14, r12, #0x00002000
    LDR r14, [r14]