【发布时间】:2015-01-27 06:09:05
【问题描述】:
Arm 系统开发人员指南一书中的以下示例显示了在指令前递增 STM,然后在指令后递减 LDM。
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
STMIB 指令将值 7、8、9 存储到内存中。然后我们将寄存器 r1 损坏为 r3。 LDMDA 重新加载原始值并恢复基指针 r0。
但是,r1,r2,r3的内存已经被1,2,3覆盖了。然后,如何恢复以前的值。它在哪里保存旧值?
【问题讨论】:
标签: assembly arm cpu-registers instruction-set