手臂皮质 m0 LDR 指令

问题描述 投票:0回答:1

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

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

他们有错吗?

如果它们都没有错,当我可以在第一个表达式中输入第二个表达式时,为什么我要使用第二个从内存加载?

如果第一个意味着从寄存器加载到寄存器,那么第三个呢?

与第二条指令混淆,就好像我使用寄存器一样,我的意思是它的值。

注意:我没有模拟器。

assembly architecture arm cortex-m instruction-set
1个回答
0
投票

您提供的第一个表格是错误的。所有形式的

LDR
STR
(除了
LDR
的标签形式)都使用方括号将用于计算目标地址的表达式括起来。

这在所有表格中都是一致的,一旦您熟悉它们,就可以更轻松地阅读它们。例如,

LDR r0, [r2, #4]

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

LDR r0, [r2], #4

使用r2

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

LDR r0, [r2, #4]!

其作用与第一个示例相同,但在加载后(“预增量”)也将计算出的地址写回到

r2
。感叹号是“写回字符”,也可以选择性地出现在其他一些指令中,例如
LDM
STM

最后,对于寄存器到寄存器的移动,

MOV
是您想要的指令。

有关这些说明的文档非常好(这里适用于 Cortex-M0 等 ARMv6M 设备)。 这里有一张针对所有 Thumb 和 Thumb-2 指令集的快速参考卡,这非常有用,但前提是您可以阅读它,这可能需要首先了解一些有关指令集的知识。

© www.soinside.com 2019 - 2024. All rights reserved.