Chinaunix首页 | 论坛 | 博客
  • 博客访问: 161721
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 376
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-22 18:00
文章存档

2014年(16)

2013年(27)

我的朋友

分类: C/C++

2014-07-28 21:57:47

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为地址的存储器中。

阅读(918) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~