arm 跳轉指令跳轉範圍

B 和 BL 指令都是 相對跳轉(短跳轉) 指令,通過偏移量跳轉, 最大跳轉距離是 ±32M
使用 mov pc, <>可以實現 對跳轉(長跳轉)(不會保存當前 PC 值)

關於B指令和BL指令最大跳轉距離是 ±32M:
  ARM彙編每條指令佔用 4byte,生成機器碼 B 、BL存放在bits[31:24], bits[23:0]是立即數空間,可以表示 2^24個地址。由於每條彙編指令佔用4byte字節(最低兩位都爲 0),因此可以使用 24位二進制數來表示 26 位的尋址空間。

B指令和BL指令的區別:
B指令在使用時不會對當前 PC 值進行保存,爲保證跳轉指令執行後能正常返回,要手動對其進行保存
BL (帶連接的跳轉指令)能夠在跳轉時對當前 PC 值自動進行保存。

Thumb的B系列指令跳轉範圍只有256字節,然而大多數情況下跳轉範圍都會大,所以一般inlinehhok採用LDR PC, [PC, ?]構造跳轉指令。

B,BL指令保存的是偏移地址,這個地址的計算方法是:
假設跳轉指令處的地址是A,跳轉目標處的地址是B.
1.B-(A+8).A+8是因爲ARM的流水線使得指令執行到A處時,PC實際的值是A+8.
2.第一步得到的值是4的倍數,因爲ARM的指令是4對齊的,即最低兩位爲00.於是將這個值右移兩位.
3.得到最終偏移
所以跳轉的範圍爲正負32M(-2^25 ~ 2^25有一位符號位)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章