ARM汇编程序设计之: ARM汇编器所支持的伪指令

时间:2013-09-30来源:网络

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

1 2

关键词: ARM 汇编程序 伪指令 装载程序相关 寄存器相关

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版