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