adr,adrl和ldr指令的用法比较
2015-11-16 22:37
239 查看
更多信息参考ARM指令集手册:http://download.csdn.net/detail/qq_21792169/9508718
ADR:
这是一条小范围的地址读取伪指令,它将基于PC的相对偏移的地址值读到目标寄存器中。
使用的格式:ADR register,exper。
在编译源程序时,汇编器首先计算出当前PC到exper的偏移值#offset_to_exper,然后会用一条ADD或者
SUB指令来替换这条伪指令,例如:ADD register,PC,#offset_to_exper。
注意,标号exper与指令必须在同一代码段。
ADRL:
这是一条中等范围的地址读取伪指令,它将基于PC的相对偏移的地址值读到目标寄存器中。
使用的格式:ADRL register,exper。
在编译源程序时,汇编器会用两条合适的指令来替换这条伪指令。
例如:
ADD register,PC,offset1
ADD register,register,offset2
与ADR相比,它能读取更大范围的地址。
注意,标号exper与指令必须在同一代码段。
LDR:
第一种情况:
当LDR用做ARM指令时,它将基于PC的相对偏移地址处存储的值读到目标寄存器中。
应用格式:LDR register,[expr]
第二种情况:
当LDR用做ARM伪指令时,它用于大范围的地址读取。
其实说它用于大范围的读取,还不如说它用于大范围的地址赋值。我们来看一下这条伪指令的应
用格式:LDR register,=expr/label_expr ,显然,我们可以直观的看出,指令的目的就是要将expr或label_expr赋值(=)给register.所以在编译时,当expr或label_expr的值没有超出MOV和MVN的范围时,采用MOV或MVN指令来代替这条伪指令就显得理所当然了。当expr或label_expr的值超出MOV和MVN的范围时,汇编器将expr或label_expr放入文字池中,并使用一条程序相对偏移指令LDR从文字池读出常量。例如:LDR
register,[PC,#offset to literal pool]。
ADR:
这是一条小范围的地址读取伪指令,它将基于PC的相对偏移的地址值读到目标寄存器中。
使用的格式:ADR register,exper。
在编译源程序时,汇编器首先计算出当前PC到exper的偏移值#offset_to_exper,然后会用一条ADD或者
SUB指令来替换这条伪指令,例如:ADD register,PC,#offset_to_exper。
注意,标号exper与指令必须在同一代码段。
ADRL:
这是一条中等范围的地址读取伪指令,它将基于PC的相对偏移的地址值读到目标寄存器中。
使用的格式:ADRL register,exper。
在编译源程序时,汇编器会用两条合适的指令来替换这条伪指令。
例如:
ADD register,PC,offset1
ADD register,register,offset2
与ADR相比,它能读取更大范围的地址。
注意,标号exper与指令必须在同一代码段。
LDR:
第一种情况:
当LDR用做ARM指令时,它将基于PC的相对偏移地址处存储的值读到目标寄存器中。
应用格式:LDR register,[expr]
第二种情况:
当LDR用做ARM伪指令时,它用于大范围的地址读取。
其实说它用于大范围的读取,还不如说它用于大范围的地址赋值。我们来看一下这条伪指令的应
用格式:LDR register,=expr/label_expr ,显然,我们可以直观的看出,指令的目的就是要将expr或label_expr赋值(=)给register.所以在编译时,当expr或label_expr的值没有超出MOV和MVN的范围时,采用MOV或MVN指令来代替这条伪指令就显得理所当然了。当expr或label_expr的值超出MOV和MVN的范围时,汇编器将expr或label_expr放入文字池中,并使用一条程序相对偏移指令LDR从文字池读出常量。例如:LDR
register,[PC,#offset to literal pool]。
相关文章推荐
- 南大软院大神养成计划——html初体验
- JqueryMobile初体验
- 回顾Intent
- NOIP2015 提高组 day1 神奇的幻方
- 【程序员技术练级】学习一门脚本语言 python(三)跟数据库打交道
- 黑马视频-存储过程
- php 基础知识
- android基础--AsyncTask
- 探讨Android中Activity的生命周期和加载模式
- 数据结构--栈(java)
- electron(1)安装和使用
- MySQL数据输到redis
- Android裁剪图片为圆形
- Unity3D将来时:IL2CPP——C#的变迁
- XML基础知识
- web入门第一天
- 1058 A+B in Hogwarts
- POJ 1363(栈)
- 同样带来的是四道java笔试题
- 配置Java开发环境