LDR指令

基本用法:

LDR/STR指令寻址非常灵活,它由两部分组成,其中一部分为一个基址寄存器,可以为任一个通用寄存器;另一部分为一个

地址偏移量。地址偏移量有以下3种格式:

立即数

立即数可以是一个无符号的数值这个数据可以加到基址寄存器,也可以从基址寄存器中减去这个数值

如:LDR R1,[R0,#0x12] R1<-[R0+0x12]

寄存器

寄存器中的数值可以加到基址寄存器,也可以从基址寄存器中减去这个数值

如:LDR R1,[R0,R2] ; R1<-[R0+R2]

LDR R1,[R0,-R2] ; R1<-[R0-R2]

寄存器及移位常数

寄存器移位后的值可以加到基址寄存器,也可以从基址寄存器中减去这个数值

如:LDR R1,[R0,R2,LSL #2] ;R1<-[R0+R2*4]

从寻址方式的地址计算方法分,加载/存储指令有以下4种格式:

零偏移 如:LDR Rd,[Rn]

前索引偏移 如:LDR Rd,[Rn,#0x04]!

程序相对偏移 如:LDR Rd,labe1

后索引偏移 如:LDR Rd,[Rn],#-0x04

注意必须保证字数据操作的地址是32位对齐的。

与伪指令的区别:

ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令。

 (1)LDR   r0,=name,像这种带等号的是伪指令,而不是ARM指令,LDR 伪指令用于加载立即数或一个地址值到指定寄存器. 

         *如果name是立即数的话:LDR R0,=0X123;//将0X123存入R0

         *如果name是个标识符:LDR R0,=NAME;//将NAME的地址存入R0

         相当于: LDR R0,LABEL;

         当然,两者的前提都是LABEL DCB NAME;//分配内存并用NAME初始化(LABEL为内存的起始地址?)

(2)LDR R1,[R0] ;如果没有等号,LDR 指令用于从内存中读取数据放入寄存器中.该指令是 将R0 地址处的数据读出,保存到R1 中(零偏移)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值