任何人都知道为什么LDR r0,[r1,r2]!工作不正常? (用拇指2)

时间:2018-04-12 04:33:48

标签: assembly arm cortex-m texas-instruments

例如,LDR r0,[r1, #4]!r1值将更改为r1+4,然后将值加载到r0, 但是,当我尝试使用LDR r0,[r1, r2]!时,r1没有改变。

我正在使用TM4C123GH6PGE和CCS 5.4

2 个答案:

答案 0 :(得分:5)

根据架构参考手册,当使用寄存器作为偏移时,不支持回写。

答案 1 :(得分:5)

当您尝试组合无法编码的内容时,请使用一个不会使代码静默扭曲的更好的汇编程序。或者,如果它确实打印了警告信息,请不要忽略警告!

.syntax unified
.thumb
LDR r0,[r1, #4]!
LDR r0,[r1, r2]!
LDR r0,[r1, r2]

arm-none-eabi-as -mthumb -mcpu=cortex-m4 arm.S汇总:GAS说 arm.S:4: Error: Thumb does not support register indexing with writeback -- 'ldr r0,[r1,r2]!' ,而不是将其汇总到ldr r0,[r1, r2]或其他内容。

Cortex-M4 supports the entire Thumb2 instruction set,气体知道这一点。我不认为直接使用任何名称包含{{1}的选项启用Thumb2的方式只有thumb2-mthumb以及支持Thumb2的.thumb-mcpu=CPU。)

它在ARM模式下组装良好,其中-march是可编码的:

LDR r0,[r1, r2]!