注册 登录
自由的生活_软路由 返回首页

11的个人空间 https://bbs.routerclub.com/?499 [收藏] [复制] [分享] [RSS]

日志

关于ARM的B,BL跳转指令

已有 2085 次阅读2013-3-31 22:40

假设跳转指令处的地址是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的值刚好为目标处的地址值,即目标地址指令进入取指,流水线前两级被清空

bl test;
未连接时的二进制形式是f7fffffe,连接后是f936f003.我知道偏移大概是0x3280左右。
问题是f936f003这个怎么表示的偏移大概0x3280,左移什么的都对不上。
详细过程。
f003 = 1111000000000011 表示偏移地址的高位,为第一条指令:
后11为偏移地址:00000000011 补0  0000000000000011 = 0003
f936 = 1111100100110110 表示偏移地址的低位,为第二条指令
后11为偏移地址:00100110110 补0  0000000100110110 = 0136
0003 <<12 = 0011 0000 0000 0000 = 3000
0136 <<1  = 0000 0010 0110 1100 = 026c
0011 0000 0000 0000 | 0000 0010 0110 1100 = 326c

http://www.decell.org/article.asp?id=2
http://read.pudn.com/downloads114/sourcecode/embed/480189/h/arch/arm/dsmArmLib.h__.htm
http://bbs.csdn.net/topics/290014122

路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-4-28 14:27 , Processed in 0.044738 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2023 Discuz! Team.

返回顶部