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

Arm error A1174E: Data transfer offset 0x00002000 out of range. Permitted values are 0xFFFFF001 to 0x00000FFF

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

大会

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> 吗?它在哪里设置?我能控制吗。

这是 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]