码迷,mamicode.com
首页 > 其他好文 > 详细

关于ARM的B,BL跳转指令

时间:2016-01-05 12:41:40      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

.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

 

关于ARM的B,BL跳转指令

标签:

原文地址:http://www.cnblogs.com/dacainiao/p/5101658.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!