ARM微处理器所支持批量数据加载/存储指令可以一次在一片连续的存储单元和多个寄存器之间传送数据,批量加载指令用于将一片连续的存储器中的数据传送到多个寄存器,批量数据存储指令则完成相反的操作。常用的加载存储指令如下。
LDM:批量数据加载指令。
STM:批量数据存储指令。
LDM(或STM){条件}{类型}基址寄存器{!},寄存器列表{∧}
LDM(或STM)指令用于从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄存器之间传送数据,该指令的常见用途是将多个寄存器的内容入栈出栈。其中,{类型}为以下几种情况。
IA:每次传送后地址加1。
IB:每次传送前地址加1。
DA:每次传送后地址减1。
DB:每次传送前地址减1。
FD:满递减堆栈。
ED:空递减堆栈。
FA:满递增堆栈。
EA:满空递增堆栈。
{∶}为可选后缀,若迭用该后缀,则当数据传递完毕之后,将最后的地址写入基址寄存器,否则基址寄存器的内容不变。
{∧}为可选后缀,当指令为LDM且寄存器列表中包含R15,选用该后缀时表示,除了正常的数据传送之外,还将SPSR复制到CPSR。同时,该后缀还表示传入或传出的是用户模式下的寄存器,而不是当前模式下的寄存器。
指令示例:
STMFD RB!,{RO,R4-R12,LR};将寄存器列表的寄存器(RO,R4到R12,LR) 存入堆栈
LDMFD RB!,{RO R4-R12,LR};将堆栈内容恢复到寄存器(RO,R4到R12,LR)