【发布时间】:2017-08-24 10:26:57
【问题描述】:
我正在尝试理解这个关于 LDM 和 STM 指令的示例,但是 我对最终结果有疑问,这里是示例:
PRE
r0 = 0x00009000
r1 = 0x00000009
r2 = 0x00000008
r3 = 0x00000007
STMIB r0!, {r1 - r3}
MOV r1, #1
MOV r2, #2
MOV r3, #3
PRE(2)
r0 = 0x0000900C
r1 = 0x00000001
r2 = 0x00000002
r3 = 0x00000003
LDMDA r0!, {r1 - r3}
POST
r0 = 0x00009000
r1 = 0x00000009
r2 = 0x00000008
r3 = 0x00000007
我已经这样做了,我得到了:
r0 = 0x00009000
r1 = 0x00000007
r2 = 0x00000008
r3 = 0x00000009
我不知道我错在哪里,我能想到的唯一可能是STM指令从R3开始而不是从R1开始
【问题讨论】:
-
寄存器总是按数字顺序从低地址到高地址传输。
-
@Jester 谢谢!所以
{r1 - r3}没有指定任何顺序?只需按照地址的数字顺序? -
是的。另请注意,如果您将这些视为堆栈操作 push 和 pop(只要使用匹配模式),则会更容易。
stmib/ldmda实现了“完全升序”堆栈,因此它们是stmfa/ldmfa的别名。另见Stack implementation using LDM and STM