12_ARM汇编自学笔记指令系统之加载存储指令

加载/存储指令

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

— LDR 字数据加载指令

— LDRB  字节数据加载指令

— LDRH  半字数据加载指令

— STR 字数据存储指令

— STRB  字节数据存储指令

— STRH  半字数据存储指令

1、LDR指令

LDR指令的格式为:LDR{条件} 目的寄存器,<存储器地址>

LDR指令用于从存储器中将一个 32 位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取 32位的字数据到通用寄存器,然后对数据进行处理。当程序计数器 PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。该指令在程序设计中比较常用,且寻址方式灵活多样,请读者认真掌握。指令示例:

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

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

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

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

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

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

LDR R0,[R1,R2,LSL#2]!  ;将存储器地址为 R1+R2×4 的字数据读入寄存器 R0,并将新地址 R1+R2×4 写入 R1。

LDR R0,[R1],R2,LSL#2 ;将存储器地址为 R1 的字数据读入寄存器 R0,并将新地址 R1+R2×4 写入 R1。

2、LDRB指令

LDRB指令的格式为:LDR{条件}B 目的寄存器,<存储器地址>

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

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

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

3、LDRH指令

LDRH指令的格式为:LDR{条件}H 目的寄存器,<存储器地址>

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

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

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

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

4、STR指令

STR指令的格式为:STR{条件} 源寄存器,<存储器地址>

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

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

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

5、STRB指令

STRB指令的格式为:STR{条件}B 源寄存器,<存储器地址>

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

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

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

6、STRH指令

STRH指令的格式为:STR{条件}H 源寄存器,<存储器地址>

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

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

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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值