批量加载/存储指令格式:
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.