ARM汇编程序设计之: ARM汇编器所支持的伪指令
10.2.4LDR伪指令
(1)语法格式
LDR伪指令装载一个32-bit常数和一个地址到寄存器。
语法格式如下。
LDR{cond}{.W}register,=[expr|label-expr]
①cond
可选的指令执行条件。
②.W
可选项。指定指令宽度(Thumb-2指令集支持)。
③register
目标寄存器。
④expr
32位常量表达式。汇编器根据expr的取值情况,对LDR伪指令做如下处理。
·当expr表示的地址值没有超过MOV或MVN指令的地址取值范围时,汇编器用一对MOV和MVN指令代替LDR指令。
·当expr表示的指令地址值超过了MOV或MVN指令的地址范围时,汇编器将常数放入数据缓存池,同时用一条基于PC的LDR指令读取该常数。
⑤label-expr
一个程序相关或声明为外部的表达式。汇编器将label-expr表达式的值放入数据缓存池,使用一条程序相关LDR指令将该值取出放入寄存器。
当label-expr为声明为外部的表示式时,汇编器将在目标文件中插入链接重定位伪操作,由链接器在链接时生成该地址。
(2)使用说明
当要装载的常量超出了MOV或MVN指令的范围时,使用LDR指令。
由LDR指令装载的地址是绝对地址,即PC相关地址。
当要装载的数据不能由MOV或MVN指令直接装载时,该值要先放入数据缓存池,此时LDR伪指令处的PC值到数据缓存池中目标数据所在地址的偏移量有一定限制。ARM或32-bit的Thumb-2指令中该范围是±4KB,Thumb或16-bit的Thumb-2指令中为0~1KB。
(3)示例
①将常数0xff0读到r1中。
LDRr3,=0xff0;
相当于下面的ARM指令:
MOVr3,#0xff0
②将常数0xfff读到r1中。
LDRr1,=0xfff;
相当于下面的ARM指令:
LDRr1,[pc,offset_to_litpool]
...
litpoolDCD0xfff
③将place标号地址读入r1中。
LDRr2,=place;
相当于下面的ARM指令:
LDRr2,[pc,offset_to_litpool]
...
litpoolDCDplace
![](https://webstorage.eepw.com.cn/images/2014/m/wx.png)
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码