原创 加载/存储指令 批量数据加载/存储指令

2009-3-3 12:31 1969 7 7 分类: MCU/ 嵌入式

加载/存储指令


ARM 微处理器支持加载/存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。常用的加载存储指令如下:


LDR   字数据加载指令


LDRB  字节数据加载指令


LDRH  半字数据加载指令


STR   字数据存储指令


STRB  字节数据存储指令


STRH  半字数据存储指令


1LDR 指令


LDR 指令的格式为:


LDR{条件} 目的寄存器,<存储器地址>


LDR 指令用于从存储器中将一个 32 位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取 32 位的字数据到通用寄存器,然后对数据进行处理。当程序计数器 PC 作为目的寄存器时,


指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。该指令在程序设计中比较常用,且寻址方式灵活多样。


指令示例:


LDR  R0[R1]              ;将存储器地址为R1的字数据读入寄存器R0


LDR  R0[R1R2]         ;将存储器地址为R1+R2的字数据读入寄存器R0


LDR  R0[R1,#8]         ;将存储器地址为R1+8的字数据读入寄存器R0


LDR  R0[R1R2]         ;将存储器地址为R1+R2的字数据读入寄存器R0,并将新地址R1R2写入R1


LDR  R0[R1,#8]         ;将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R18写入R1


LDR  R0[R1]R2         ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1R2写入R1


LDR  R0[R1R2LSL2]  ;将存储器地址为R1R2×4的字数据读入寄存器R0,并将新地址R1R2×4写入R1


LDR  R0[R1]R2LSL2   ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1R2×4写入R1


2LDRB 指令


LDRB 指令的格式为:


LDR{条件}B 目的寄存器,<存储器地址>


LDRB 指令用于从存储器中将一个 8 位的字节数据传送到目的寄存器中,同时将寄存器的高 24位清零。该指令通常用于从存储器中读取 8 位的字节数据到通用寄存器,然后对数据进行处理。当程序计数器 PC 作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。


指令示例:


LDRB  R0[R1]       ;将存储器地址为R1的字节数据读入寄存器R0,并将R0的高24位清零。


LDRB  R0[R1,#8]     ;将存储器地址为R18的字节数据读入寄存器R0,并将 R0的高24位清零。


3LDRH 指令


LDRH 指令的格式为:


LDR{条件}H 目的寄存器,<存储器地址>


LDRH 指令用于从存储器中将一个 16 位的半字数据传送到目的寄存器中,同时将寄存器的高 16位清零。该指令通常用于从存储器中读取 16 位的半字数据到通用寄存器,然后对数据进行处理。当程序计数器 PC 作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。


指令示例:


LDRH  R0[R1]       ;将存储器地址为R1的半字数据读入寄存器R0,并将R0的高16位清零。


LDRH  R0[R1,#8]     ;将存储器地址为R18的半字数据读入寄存器R0,并将 R0的高16位清零。


LDRH  R0[R1R2]     ;将存储器地址为R1R2的半字数据读入寄存器R0,并将R0的高16位清零。


4STR 指令


STR 指令的格式为:


STR{条件} 源寄存器,<存储器地址>


STR 指令用于从源寄存器中将一个 32 位的字数据传送到存储器中。该指令在程序设计中比较常用,且寻址方式灵活多样,使用方式可参考指令 LDR


指令示例:


STR R0[R1],#8  ;将R0中的字数据写入以R1 为地址的存储器中,并将新地址R18写入 R1


STR R0[R1,#8]  ;将R0中的字数据写入以R18为地址的存储器中。


5STRB 指令


STRB 指令的格式为:


STR{条件}B 源寄存器,<存储器地址>


STRB 指令用于从源寄存器中将一个 8 位的字节数据传送到存储器中。该字节数据为源寄存器中的低 8 位。


指令示例:


STRB  R0[R1]       ;将寄存器R0中的字节数据写入以R1为地址的存储器中。


STRB  R0[R1,#8]     ;将寄存器R0中的字节数据写入以R18为地址的存储器中。


6STRH 指令


STRH 指令的格式为:


STR{条件}H 源寄存器,<存储器地址>


STRH 指令用于从源寄存器中将一个 16 位的半字数据传送到存储器中。该半字数据为源寄存器中的低 16 位。


指令示例:


STRH  R0[R1]          ;将寄存器R0中的半字数据写入以R1为地址的存储器中。


STRH  R0[R1,#8]     ;将寄存器R0中的半字数据写入以R18为地址的存储器中。


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


批量数据加载/存储指令


ARM 微处理器所支持批量数据加载/存储指令可以一次在一片连续的存储器单元和多个寄存器之间传送数据,批量加载指令用于将一片连续的存储器中的数据传送到多个寄存器,批量数据存储指令则完成相反的操作。常用的加载存储指令如下:


LDM   批量数据加载指令


STM   批量数据存储指令


LDM(或 STM)指令的格式为:


LDM(或 STM{条件}{类型} 基址寄存器{},寄存器列表{^}


LDM(或 STM)指令用于从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄存器之间传送数据,该指令的常见用途是将多个寄存器的内容入栈或出栈。其中,{类型}为以下几种情况:


IA  每次传送后地址加 1


IB  每次传送前地址加 1


DA  每次传送后地址减 1


DB  每次传送前地址减 1


FD  满递减堆栈;


ED  空递减堆栈;


FA  满递增堆栈;


EA  空递增堆栈;


{}为可选后缀,若选用该后缀,则当数据传送完毕之后,将最后的地址写入基址寄存器,否则基址寄存器的内容不改变。 基址寄存器不允许为 R15,寄存器列表可以为 R0R15 的任意组合。 {^}为可选后缀,当指令为 LDM 且寄存器列表中包含 R15,选用该后缀时表示:除了正常的数据传送之外,还将 SPSR 复制到 CPSR。同时,该后缀还表示传入或传出的是用户模式下的寄存器,而不是当前模式下的寄存器。


指令示例:


STMFD  R13!{R0R4-R12LR}   ;将寄存器列表中的寄存器(R0R4 R12LR)存入堆栈。


LDMFD  R13!{R0R4-R12PC}   ;将堆栈内容恢复到寄存器(R0R4R12PC)。


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条