语法:

ldm{条件}{寻址方式} 基址寄存器{!} 目的寄存器列表

参数:

  • {条件} 可选项
  • {寻址方式} 可选项
    可参见: https://www.softool.cn/read/arm_assembly/iaibdadb.html
  • 基址寄存器 作为被复制数据的源
  • {!} 可选项
    如果有该感叹号,则在指令被执行之后,将 pc 的地址更新给基址寄存器;
    如果无该感叹号,则基址寄存器的值不发生变化;
  • 目的寄存器列表

数据复制方向:

\dashrightarrow

功能:

将 基址寄存器 记录地址附近的数据 复制到 目的寄存器列表 中;

示例:

假设下面 SMRDATA 标号的地址为 0x32000360

adr r13, SMRDATA
;//执行动作分解: 向前走(递增地址来完成复制数据)
;//先将 基址寄存器 记录的地址 0x32000360 复制给 pc
;//
;//pc 将 0x32000360 地址的数据先复制给 r0
;//pc = pc + 4 = 0x32000364
;//pc 将 0x32000364 地址的数据先复制给 r1
;//pc = pc + 4 = 0x32000368
;//pc 将 0x32000368 地址的数据先复制给 r2
;//pc = pc + 4 = 0x3200036C
;//此时的 pc 的地址不会更新给 r13, 所以 r13 的地址依然为 0x32000360
ldmia r13, {r0-r2}