1.语法格式
LDR伪指令装载一个32位的常数和一个地址到寄存器。
其语法格式如下:
(1){cond}:可选的指令执行条件。
(2){.W}:可选项,指定指令宽度(Thumb-2指令集支持)。
(3)register:目标寄存器。
(4)expr:32位常量表达式。
ARM汇编器根据expr的取值情况,对LDR伪指令作如下处理:
①当expr表示的地址值没有超过MOV指令或MVN指令的地址取值范围时(即有效立即数),ARM汇编器用MOV或MVN指令代替LDR指令。
②当expr表示的指令地址值超过了MOV指令或MVN指令的地址范围时,ARM汇编器将常数放入数据缓存池,同时用一条基于PC的LDR指令读取该常数。
(5)label-expr:基于PC地址的表达式或外部的表达式。当label-expr为基于PC地址的表达式时,ARM汇编器将label-expr表达式的值放入数据缓存池,同时使用一条基于PC的LDR指令加载该值。当label-expr被声明为外部的表达式时,ARM汇编器将在目标文件中插入链接重定位伪操作,由链接器在链接时生成该地址。(www.xing528.com)
2.使用说明
当要装载的常量超出了MOV指令或MVN指令的范围时,使用LDR伪指令。由LDR伪指令装载的地址是绝对地址,即PC相关地址。
当要装载的数据不能由MOV指令或MVN指令直接装载时,该值要先放入数据缓存池,此时LDR伪指令处的PC值到数据缓存池中目标数据所在地址的偏移量有一定限制。ARM或32位的Thumb-2指令中该范围是-4~4 KB,Thumb或16位的Thumb-2指令中该范围是0~1 KB。
3.示例
(1)将常数0xff0读到R1中。
相当于下面的ARM指令:
(2)将常数0xfff读到R1中。
相当于下面的ARM指令:
(3)将place标号地址读入R1中。
相当于下面的ARM指令:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。