ARM LOAR-STORE指令
| 变址模式 | 数据 | 基址寄存器 | 示例 |
| 回写前变址 | mem[base+offset] | 基址寄存器加上偏移 | LDR r0,[r1,#4]! |
| 前变址 | mem[base+offset] | 不变 | LDR r0,[r1,#4] |
| 后变址 | mem[base] | 基址寄存器加上偏移 | LDR r0,[r1],#4 |
PRE
r0=0x00000000 r1=0x00009000 mem32[0x00009000]=0x01010101 mem32[0x00009004]=0x02020202
回写前变址:
LDR r0,[r1,#4]!
POST(1)
r0=0x02020202 r1=0x00009004
前变址:
LDR r0,[r1,#4]
POST(2)
r0=0x02020202 r1=0x00009000
后变址:
LDR r0,[r1],#4
POST(3)
r0=0x01010101
r1=0x00009004
| 寻址模式 | 指令 | r0= | r1+= |
| 回写前变址 |
LDR r0,[r1,#4]! LDR r0,[r1,r2]! LDR r0,[r1,r2,LSR#4]! |
mem32[r1+0x4] mem32[r1+r2] mem32[r1+(r2 LSR 0x4)] |
0x4 r2 (r2 LSR 0x4) |
| 前变址 |
LDR r0,[r1,#4] LDR r0,[r1,r2] LDR r0,[r1,-r2,LSR#4] |
mem32[r1+0x4] mem32[r1+r2] mem32[r1-(r2 LSR 0x4)] |
0 0 0 |
| 后变址 |
LDR r0,[r1],#4 LDR r0,[r1],r2 LDR r0,[r1],r2,LSR#4 |
mem32[r1] mem32[r1] mem32[r1] |
0x4 r2 (r2 LSR 0x4) |
多寄存器:
<LDM|STM>{<cond>}<寻址模式>Rn{!},<Registers>{r^}
| 寻址模式 | 描述 | 起始地址 | 结束地址 | Rn! |
| IA | 执行后增加 | Rn | Rn+4*N-4 | Rn+4*N |
| IB | 执行前增加 | Rn+4 | Rn+4*N | Rn+4*N |
| DA | 执行后减少 | Rn-4*N+4 | Rn | Rn-4*N |
| DB | 执行前减少 | Rn-4*N | Rn-4 | Rn-4*N |
r0=0x00080010
LDMIA=r0!,{r1-r3}
0x00080020 0x00000000b
---->0x0008001C 0x00000000a
0x00080008 0x000000009---->r3
0x00080004 0x000000008---->r2
r0 ---->0x00080010 0x000000007---->r1
0x0008000C 0x000000006
LDMIB=r0!,{r1-r3}
0x00080020 0x00000000b
---->0x0008001C 0x00000000a---->r3
0x00080008 0x000000009---->r2
0x00080004 0x000000008---->r1
r0 ---->0x00080010 0x000000007
0x0008000C 0x000000006
LDMDA=r0!,{r1-r3}
0x00080020 0x000000005
---->0x0008001C 0x000000004---->r3
0x00080008 0x000000003---->r2
0x00080004 0x000000002---->r1
r0 ---->0x00080010 0x000000001
0x0008000C 0x000000000

浙公网安备 33010602011771号