跳轉指令用於實現程式流程的跳轉,在 arm 程式中有兩種方法可以實現程式流程的跳**
(1) 使用專門的跳轉指令。
(2) 直接向程式計數器 pc 寫入跳轉位址值。
通過向程式計數器 pc 寫入跳轉位址值,可以實現在 4gb 的位址空間中的任意跳轉,在跳轉之前結合使用
mov lr , pc
等類似指令,可以儲存下一條指令位址作為將來的返回位址值,從而實現在 4gb 連續的線性位址空間的子程式呼叫。
b、bl、bx、blx 和 bxj:
跳轉、帶鏈結跳轉(帶返回的跳轉)、跳轉並切換指令集、帶鏈結跳轉並切換指令集(帶返回的跳轉並切換指令集)、跳轉並轉換到 jazelle 狀態。
b 指令的格式為:
b 目標位址
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指令。
語法op1 label
op2 rm
其中:op1是下列項之一:
b跳轉。
bl帶鏈結跳轉
blx帶鏈結跳轉並切換指令集。
op2是下列項之一:
bx跳轉並切換指令集。
blx帶鏈結跳轉並切換指令集。
bxj跳轉並轉換為 jazelle 執行。
cond
是乙個可選的條件**。 cond 不能用於此指令的所有形式。
.w是乙個可選的指令寬度說明符,用於強制要求在 thumb-2 中使用 32 位 b 指令。
label
是乙個程式相對的表示式。
rm是乙個暫存器,包含要跳轉到的目標位址。
操作bx 和 blx 指令可將處理器的狀態從 arm 更改為 thumb,或從 thumb 更改為 arm。
blx label 無論何種情況,始終會更改處理器的狀態。
bx rm和blx rm可從rm 的位 [0]推算出目標狀態:
如果 rm 的位 [0] 為 0,則處理器的狀態會更改為(或保持在)arm 狀態
如果 rm 的位 [0] 為 1,則處理器的狀態會更改為(或保持在)thumb 狀態。
bxj 指令會將處理器的狀態更改為 jazelle
彙編中的操作指令
不太會搞,將就著看吧。說明 小括號裡是指令格式,後面是指令的功能,opd是目的運算元,ops是源運算元1 加法指令 add加法 add opd,ops opd opd ops adc帶進製加法 adc opd,ops opd opd ops cf inc加1 inc opd opd的內容加 opd可...
彙編中的重複指令
duprep是字串操作指令movs,cmps等的字首,在cx不等於0的情況下,對字串執行重複操作。rep的重複次數也存在cx中,但是其實cx本身不具有讓cx 1的功能,一般是rep後面跟著的指令執行之後自動讓cx 1 還可以擴充套件出 repe 相等時重複 repne 不相等時重複 repz 為零時...
GNU ARM中的彙編指令 word
gnu arm中的彙編 指令.word 彙編中的標號通常情況下是用來標明程式段的起始位址的,如 start b reset ldr pc,undefined instruction ldr pc,software interrupt ldr pc,prefetch abort ldr pc,data...