ARM汇编几个关键指令-LDR

LDR是大范围的地址读取伪指令。将一个32位的常数或者一个地址值读取到指定寄存器中。

如 LDR R0, =0x5600050 @GPFCON地址 

若地址值不超过MOV或MVN指令中地址的取值范围(一般是4K)  %为什么有取值范围限制?

则直接用MOV指令代替。

若地址值超过范围,则编译器会将该常数放在数据缓冲区,同时用一条基于PC的LDR指令读取该常数。

LDR R1, =0XFFF

汇编后得到:

LDR R1, [PC, OFFSET_TO_LPOOL]

...

LPOOL DCD OXFFF   @DCD伪操作用于分配一段字的内存单元,常用语初始化。

 

注意对于数据缓冲区,通常编译器会将数据缓冲区放在代码段的最后面(下一个代码段之前,或END伪操作之前)。为防止数据缓冲器越界,可以使用LTORG指令对数据缓冲池进行声明。主要用于无条件跳转指令之后,或者子程序返回指令之后,这样编译器就不会错误的将数据缓冲池的数据当做指令来执行。

AREA Example,CODE,READONLY

start  BL  func1

func1

;code

LDR r1, =0x55555555

;code

MOV pc, lr

LTORG

data SPACE 4200 ; 从当前位置开始分配4200字节的内存单元

END.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值