例如,LDR r0,[r1, #4]!
,r1
值将更改为r1+4
,然后将值加载到r0
,
但是,当我尝试使用LDR r0,[r1, r2]!
时,r1
没有改变。
我正在使用TM4C123GH6PGE和CCS 5.4
答案 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]!