ARM中跳轉指令的範圍

2021-07-28 04:33:43 字數 1030 閱讀 9752

今天老師講了arm中跳轉指令的範圍,通過查資料和大神的部落格有了自己的見解

首先要知道 b跳轉指令:它是個相對跳轉指令

b指令的編碼是這樣的

31..28:條件碼

27..25:101

24:是否鏈結標誌

將指令中使用24位帶符號的補碼立即數擴充套件為32(擴充套件其符號位);將此32位數左移兩位;將得到的值加到pc暫存器中,即得到跳轉的目標位址。

舉個例子:

1.text

2.global   _start 

3_start:

4         b step1 

5 step1: 

6         ldr pc,  =step2 

7 step2:

8         b step2  

反彙編**: 0:  eaffffff     b   0x4 

4:  e59ff000     ldr pc, [pc, #0] ; 0xc 

8:  eafffffe     b   0x8 

c:  30000008     tsteq r0, #8  ; 0x8

>24位帶符號為0xffffff,將它擴充套件為32得到:0xffffffff 

2>將此32位數左移兩位得到:0xfffffffc,其值就是-4(0xfffffffc符號位不變,其餘位取反再加1得到-4); 

3>pc的值是當前指令的下兩條(下一條的下一條)指令的位址,加上步驟2得到的-4(pc-4,即pc回退4個位元組,剛好指向當前指令的下一條指令上),這恰好是第二條指令step1的位址。

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有一位符號位)

ARM中的跳轉指令

arm中的跳轉指令 arm中b bl bx blx指令的區別 用於實現程式流程的跳轉,在arm程式中有兩種方法可以實現程式流程的跳 使用專門的跳轉指令 直接向程式計數器pc寫入跳轉位址值 通過向程式計數器pc寫入跳轉位址值,可以實現在4gb的位址空間中的任意跳轉,在跳轉之前結合使用 mov lr,p...

ARM的B,BL跳轉指令

b跳轉指令 它是個相對跳轉指令,其機器碼格式如下 31 28 位是條件碼 27 24 位為 1010 0xeaffffff 時 表示b 跳轉指令 為 1011 時,表示 bl跳轉指令 23 0 表示偏移位址。使用b 或bl跳轉時,下一條指令的位址是這樣計算的 將指令中 24位帶符號的補碼立即數擴充套...

ARM指令集中的跳轉指令

arm程式中如何實現跳轉 1.使用專門的跳轉指令 2.直接向pc寫人要跳轉的位址 向pc寫人位址在可以任意可以定址的範圍內任意跳轉,然而跳轉指令只能在當前指令向前或向後的32m的位址空間跳轉 跳轉指令包括 1.b b指令是最簡單的跳轉,跳到給定的目標位址,從那裡繼續執行 2.bl bl跳轉之前會在暫...