assembly 手臂皮质m0 LDR指令

xxb16uws  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(79)

ARM Cortex M0中的这些指令之间有什么区别?

LDR r1, r2 
LDR r1, [r2]
MOV r1, r2

字符串
有错的吗?
如果没有一个是错的,那么当我可以在第一个表达式中输入它时,为什么要使用第二个从内存中加载呢?
如果第一个意味着从寄存器加载到寄存器,那么第三个呢?
与第二条指令混淆,如果我使用寄存器,我的意思是它的值。
注意:我没有模拟器。

qcuzuvrc

qcuzuvrc1#

您给予的第一种形式是错误的。所有形式的LDRSTR(除了标签形式的LDR)都使用方括号括住用于计算目标地址的表达式。
这在所有表单中都是一致的,一旦您熟悉了表单,这将使阅读它们变得更容易。例如,

LDR r0, [r2, #4]

字符串
r2的内容加4,然后从计算出的地址加载到r0中。另一方面,

LDR r0, [r2], #4


使用r2的 * 未修改的 * 内容作为加载地址,然后 * 将4加到r2(“后增量”)。为了完整起见,最终的常量偏移形式为

LDR r0, [r2, #4]!


这与第一个例子相同,但在加载后也会将计算出的地址写回r2(“预增量”)。感叹号是“写回字符”,也可以在其他一些指令中出现,如LDMSTM
最后,对于寄存器到寄存器的移动,MOV是您想要的指令。
关于这些指令的文档非常好(here适用于Cortex-M0等ARMv 6 M设备)。有一个快速参考卡here适用于所有Thumb和Thumb-2指令集,这非常有用,但前提是您可以阅读它,这可能需要先了解一些关于指令集的知识。

相关问题