ARM LOAR-STORE指令

Posted YYPapa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于ARM LOAR-STORE指令的主要内容,如果未能解决你的问题,请参考以下文章

Thumb指令集与ARM指令集的差别

arm汇编b指令是绝对地址还是相对地址跳转?

如何实现对ARM汇编指令的调试?

ARM - 如何从 C 函数中执行单个汇编指令(机器代码)

ARM指令和THUMB指令有啥区别

ARM汇编指令特点