基本用法:
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
*如果name是立即数的话:LDR R0,=0X123;//将0X123存入R0
(2)LDR R1,[R0] ;如果没有等号,LDR 指令用于从内存中读取数据放入寄存器中.该指令是 将R0 地址处的数据读出,保存到R1 中(零偏移)。