文档介绍:数据块传输(LDM,STM)
数据块传输指令用于加载(LDM)或者存储(STM)当前有效寄存器的任意子集。
它们支持所有可能的堆栈模式,维持空或者满的堆栈,此堆栈可以向上或者向下,在保存或者恢复内容,移动主存储器的大数据块是非常有效的。
汇编语法
<LDM|STM>{cond}<FD|ED|FA|EA|IA|IB|DA|DB> Rn{!},<Rlist>{^}
{cond} 条件代码
Rn 计算有效寄存器序号的表达式
<Rlist> 寄存器列表,寄存器范围包含在{}(比如{R0,R2-R7,R10})
{!} 如果存在,表示请求回写(W=1),否则,W=0
{^}如果存在,置位S,加载CPSR和PC,在管理模式,强制传送用户bank地址模式命名
寄存器列表
此指令可以导致当前bank中的任意寄存器传输(非用户模式程序可以传送或者接收用户bank)。
在指令中,寄存器列表占用了16位,每一位对应了一个寄存器,如果位0为’1’,将导致R0被传输,为’0 ‘R0将不被传送,以此类推。
地址模式命名
对于每一个不同的地址模式有不同的汇编标识方法,依据指令是否用于支持堆栈或者其它用途。
不同的指令名称和相应的位的对应关系列于下表:
堆栈请求格式,FD,ED,FA,EA定义了前/后向索引和上/下位,F,E表示堆栈满或者空。A 和D 定义堆栈是递增还是递减,如果递增,STM将向上,LDM向下,如果递减,则相反。
当LDM/STM没有被用于堆栈,而只是简单地表示地址前向增加,后向增加,前向减少,后向减少时,由IA,IB,DA,DB控制。
寄存器的任意子集或者所有的寄存器都可以被指定,唯一的限制是寄存器列表不应该为空。
任何时候R15被存储到MEM中,存储的值是指令地址加12。
地址模式
传输地址是由Rn中的内容和前/后向索引位,上/下位决定的,寄存器的传输按照从低向高的顺序
如果寄存器列表中有R15,则R15在最后一个被传输。序号低的寄存器对应于存储器的低地址。