批量加载/存储指令格式:

LDMXX|STMXX{条件符}{寻址模式}Rb{!},{寄存器列表}

其中XX表示IA/IB/DA/DB.

LDMIA/STMIA    访问/存储后地址递增(Increment After)

LDMIB/STMIB    访问/存储前地址递增(Increment Before)

LDMDA/STMDA    访问/存储后地址递减(Decrement After)

LDMDB/STMDB    访问/存储前地址递减(Decrement Before)

{寄存器列表}的列表顺序可随意,低编号的寄存器对应低地址空间,高编号的寄存器对应高地址空间。

该指令常用来实现堆栈的操作

eg:

   LDMIA SP!, {RO-R12,LR}

   STMDB SP!, {R0-R12,PC}^

有以下四种堆栈工作方式:

(1)空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址推进

(2)满递增堆栈:堆栈指针指向最后压入的数据的位置,且由低地址向高地址推进

(3)空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址推进

(4)满递减堆栈:堆栈指针指向最后压入的数据的位置,且由高地址向低地址推进

STMFD(Full Decerement)堆栈push操作,对应STMDB

LDMFD堆栈pop操作,对应LDMIA.