能力值:
( LV4,RANK:50 )
|
-
-
2 楼
(目的地址-源地址 -8)/4
|
能力值:
( LV3,RANK:30 )
|
-
-
3 楼
SrcAddr + (x << 2 + 8) = DstAddr
x = ((DstAddr - SrcAddr) - 8) >> 2
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
你好啊,安装你的这个方法(107C5C-E8070-8)/4=0x7EFB 怎么不一样啊
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
看一下我以前实验:
计算B/BL偏移
目标地址-(当前地址+8) >>2
.text:00637C80 E5 34 42 EB BL __mulsf3
.text:016C501C EXPORT __mulsf3
016C501C-(00637C80+8) >>2
00637C80+8=637C88
016C501C-637C88=108D394
108D394 >>2 = 0x4234E5
高低对换:
E5 34 42 -->对换之后偏移
EB ->BL
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
关于ARM的B,BL跳转指令:
假设跳转指令处的地址是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
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
遇到同样的问题,看看
|
|
|