我有一个简单的程序集,它会产生以下错误
汇编
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>
是什么?它在哪里设置?我能控制它吗?
答案 0 :(得分:2)
这是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]