首页 理论教育ARM嵌入式系统:加载/存储指令解析

ARM嵌入式系统:加载/存储指令解析

【摘要】:加载/存储指令用于在寄存器和存储器之间传输数据,Load指令用于将存储器中数据传输到寄存器中,Store指令用于将寄存器中的数据保存到存储器中。例如:2.STR指令STR{cond},STR指令用于从源寄存器Rd中将一个32位字数据写入指定存储器中。例如:3.LDM和STM指令LDM{cond}{!LDM指令加载多个寄存器,STM指令存储多个寄存器,它们常用于现场保护、数据复制、参数传输等,共有以下8种模式。当Rm和目的寄存器Rd为同一个寄存器时,该指令完成该寄存器和存储器内容的交换。

加载/存储指令用于在寄存器和存储器之间传输数据,Load指令用于将存储器中数据传输到寄存器中,Store指令用于将寄存器中的数据保存到存储器中。

1.LDR指令

LDR{cond}<Rd>,<addr_mode>

LDR(LoaD Register)指令将一个32位字数据传输到目的寄存器Rd中。如果目的寄存器是PC,从存储器中读出的数据将作为目的地址,以实现程序流程的跳转。例如:

2.STR指令

STR{cond}<Rd>,<addr_mode>

STR(STore Register)指令用于从源寄存器Rd中将一个32位字数据写入指定存储器中。例如:

3.LDM和STM指令

LDM(或STM){cond}<addr_mode><Rn>{!},<reglist>{^}

LDM(LoaD Multiple Registers)指令和STM(STore Multiple Registers)指令实现一组寄存器和一片连续存储空间之间的数据传输。LDM指令加载多个寄存器,STM指令存储多个寄存器,它们常用于现场保护、数据复制、参数传输等,共有以下8种模式(mode)。

●IA:每次传送后地址加4。

●IB:每次传送前地址加4。(www.chuimin.cn)

●DA:每次传送后地址减4。

●DB:每次传送前地址减4。

●FD:满递减堆栈

●ED:空递减堆栈。

●FA:满递增堆栈。

●EA:空递增堆栈。

可选后缀{!},选用该后缀,当数据传输完成后,将最后地址写入基址寄存器Rn中,否则基址寄存器Rn中的数值不变;基址寄存器Rn不能为R15(PC),寄存器列表可以是R0~R15的任意组合。

可选后缀{^},当指令为LDM且寄存器列表reglist中有R15(PC),选用该后缀表示除了完成数据传输以外,还将SPSR复制到CPSR。例如:

4.SWP指令

SWP{cond}<Rd>,<Rm>,[Rn]

SWP(SWaP)指令用于将Rn所指向的存储器中的字数据传输到目的寄存器Rd中,同时将Rm中的字数据传输到Rn所指向的存储器中。当Rm和目的寄存器Rd为同一个寄存器时,该指令完成该寄存器和存储器内容的交换。例如: