ARM汇编-STR/LDR指令详细介绍

指令介绍

【LDR】:从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取32位的字数据到通用寄存器,然后对数据进行处理。

当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转

// 格式:LDR{条件} 目的寄存器,<存储器地址>
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

【STR】:从源寄存器中将一个32位的字数据传送到存储器中,使用方式可参考指令LDR

// 格式:STR{条件} 源寄存器,<存储器地址>
STR R0,[R1],#8  // 将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1
STR R0,[R1,#8]  // 将R0中的字数据写入以R1+8为地址的存储器中

案例介绍

STR指令

在这里插入图片描述

图 1

如下即是图1红色箭头所标识的指令

STR             R0, [SP,#0x10+var_4]

简单解析一下这条指令:将R0寄存器中的值,存贮到地址为[SP,#0x10+var_4]的存储器中,这个地址是多少呢?我们计算一下

SP寄存器的地址为0xFFBEF930,图1右边中间的红色框有标注,#0x10为立即数,var_4的值图1左上角有标注,为-4,计算的结果如图2所示FFBEF93C

在这里插入图片描述

图 2

简言之,执行完这条指令之后,地址为FFBEF93C的存储器中存储的值为R0寄存器中的值,即图1右上角红框标识处的值F51D6BA0

F8执行,结果如下:
在这里插入图片描述

图 3

LDR指令

LDR             R0, [SP,#0x10+var_C]

在这里插入图片描述

图 4

LDR指令案例大家可以自行计算一下,结果如下图所示

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值