关于ARM的B,BL跳转指令
2016-04-23 18:33
357 查看
.text:00001260 A3 04 00 EB BL sub_24F4
当前地址+ (偏移 << 2 + 8) = 目标地址
0x1260 + 0x4A3 * 4 + 8 = 24F4
偏移 = (目标地址 - 当前地址 - 8) >> 2
偏移 = (0x24F4 - 0x1260 - 8) / 4 = 0x4A3
假设跳转指令处的地址是A,跳转目标处的地址是B.
B,BL指令保存的是偏移地址,这个地址的计算方法是:
1.B-(A+8).A+8是因为ARM的流水线使得指令执行到A处时,PC实际的值是A+8.
2.第一步得到的值是4的倍数,因为ARM的指令是4对齐的,即最低两位为00.于是将这个值右移两位.
3.得到最终偏移
执行时:
1.取出偏移
2.左移两位
3.加入PC,这时PC的值刚好为目标处的地址值,即目标地址指令进入取指,流水线前两级被清空 http://www.decell.org/article.asp?id=2
相关文章推荐
- HDU5673 Robot 默慈金数
- 商业研究(11):金融招聘,大有可为?
- 商业研究(11):金融招聘,大有可为?
- 商业研究(11):金融招聘,大有可为?
- 使用Retrofit2.0实现GoogleDrive相关API
- Android网络开源库-Retrofit(三) 批量上传及上传进度监听
- 跳台阶
- java 类,变量,方法上注解值的获取
- 经纬度坐标数据处理——基于R
- Oracle中分页查询语句的写法
- spring+mybatis项目启动报错Initializing Spring root WebApplicationContext
- IDA 远程调试 Android so
- 《虚基类,虚函数,纯虚函数》
- 杭电ACM2003
- 数据库 mysql 语句
- 杭电ACM2002
- [Android]XworkView使用
- Android 插件化 动态升级
- Masonry适配——(4)UIScrollView的设置
- 2015第六届蓝桥杯决赛--方格填数(DFS)