LDM/STM指令主要用于现场保护,数据复制,参数传送等。
STMFD指令
STMFD Rn{!},{reglist}{^}
举例说明:
STMFD SP!,{R0-R7,LR}
对于这条指令伪代码的解释,大体是这样的:
SP = SP - 9×4; address = SP; for i = 0 to 7 Memory[address] = Ri; address = address + 4; Memory[address] = LR;
假设此时SP地址为: 0x40000460,由前面解释伪代码可得下图(蓝色填充区为地址)
LDMFD 指令
LDMFD Rn{!},{reglist}{^}
这条指令的意思是以Rn为基址(起始地址),取值写入寄存器列表。
举例说明:
LDMFD SP!,{R0-R7,PC}^
对于这条指令伪代码的解释,大体是这样的:
address = SP; for i = 0 to 7 Ri = Memory[address ,4] address = address + 4; SP = address;
假设此时SP地址为: 0x4000043C,由前面解释伪代码可得下图(蓝色填充区为地址):
蓝色标注的SP为执行指令前的SP地址,红色标注的SP是执行指令后的SP地址。