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

MJ *_*LIM 2 assembly arm texas-instruments cortex-m

例如,LDR r0,[r1, #4]!,r1值将变为r1+4然后负载值r0,但是,当我试图用LDR r0,[r1, r2]!,r1并没有改变.

我正在使用TM4C123GH6PGE和CCS 5.4

Joh*_*han 5

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


Pet*_*des 5

当您尝试组装不可编码的东西时,请使用一个更好的汇编程序,它不会以静默方式扭曲您的代码.或者,如果它确实打印了警告消息,请不要忽略警告!

.syntax unified
.thumb
LDR r0,[r1, #4]!
LDR r0,[r1, r2]!
LDR r0,[r1, r2]
Run Code Online (Sandbox Code Playgroud)

组装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支持整个的Thumb2指令集,和天然气知道这一点.我不认为有一种方法来直接与包括名称的任何选项来启用的Thumb2 thumb2,只能用-mthumb.thumb-mcpu=CPU-march支持的Thumb2.)


它在ARM模式下组装良好,LDR r0,[r1, r2]!可编码:

   0:   e5b10004        ldr     r0, [r1, #4]!
   4:   e7b10002        ldr     r0, [r1, r2]!
   8:   e7910002        ldr     r0, [r1, r2]
Run Code Online (Sandbox Code Playgroud)