ARM中的跳轉指令

2021-10-02 06:07:39 字數 1592 閱讀 1783

arm中的跳轉指令

arm中b、bl、bx、blx指令的區別

用於實現程式流程的跳轉,在arm程式中有兩種方法可以實現程式流程的跳**

使用專門的跳轉指令

直接向程式計數器pc寫入跳轉位址值

通過向程式計數器pc寫入跳轉位址值,可以實現在4gb的位址空間中的任意跳轉,在跳轉之前結合使用

mov lr,pc

等類似指令,可以儲存將來的返回位址值,從而實現在4gb連續的線性位址空間的子程式呼叫。

— b 跳轉指令

— bl 帶返回的跳轉指令

— blx 帶返回和狀態切換的跳轉指令

— bx 帶狀態切換的跳轉指令

b指令是最簡單的跳轉指令。一旦遇到乙個 b 指令,arm 處理器將立即跳轉到給定的目標位址,從那裡繼續執行。注意儲存在跳轉指令中的實際值是相對當前pc值的乙個偏移量,而不是乙個絕對位址,它的值由彙編器來計算(參考定址方式中的相對定址)。它是 24 位有符號數,左移兩位後有符號擴充套件為 32 位,表示的有效偏移為 26 位(前後32mb的位址空間)。以下指令:

b label ;程式無條件跳轉到標號label處執行

cmp r1,#0 ;當cpsr暫存器中的z條件碼置位時,程式跳轉到標號label處執行

beq label

bl指令的格式為:

bl 目標位址

bl label ;當程式無條件跳轉到標號label處執行時,同時將當前的pc值儲存到r14中

blx指令的格式為:

blx 目標位址

blx指令從arm指令集跳轉到指令中所指定的目標位址,並將處理器的工作狀態有arm狀態切換到thumb狀態,該指令同時將pc的當前內容儲存到暫存器r14中。因此,當子程式使用thumb指令集,而呼叫者使用arm指令集時,可以通過blx指令實現子程式的呼叫和處理器工作狀態的切換。同時,子程式的返回可以通過將暫存器r14值複製到pc中來完成。

bx指令的格式為:

bx 目標位址

bx指令跳轉到指令中所指定的目標位址,目標位址處的指令既可以是arm指令,也可以是thumb指令。

1、b------跳轉指令

跳轉指令b使程式跳轉到指定的位址執行程式。
2、bl-----帶返回的連線跳轉

bl指令用於實現子程式呼叫。子程式的返回可通過將lr暫存器的值複製到pc暫存器來實現。下面的指令可實現子程式返回:(1)、bx   r14            (2)、mov   pc,r14

例:bl func ;跳轉到子程式func處執行,同時將當前pc值儲存到lr中。

3、bx------跳轉並切換狀態

帶狀態切換的跳轉指令bx使程式跳轉到指令中指定的引數rm指定的位址執行程式。若 rm 的 bit[0] 為1,切換到 thumb 指令執行;若 rm 的 bit[0] 為0,切換到 arm 指令執行。
4、blx------帶返回的跳轉並切換狀態

該指令為無條件執行指令。

ARM中跳轉指令的範圍

今天老師講了arm中跳轉指令的範圍,通過查資料和大神的部落格有了自己的見解 首先要知道 b跳轉指令 它是個相對跳轉指令 b指令的編碼是這樣的 31.28 條件碼 27.25 101 24 是否鏈結標誌 將指令中使用24位帶符號的補碼立即數擴充套件為32 擴充套件其符號位 將此32位數左移兩位 將得到...

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跳轉之前會在暫...