彙編中的指令

2021-09-11 08:09:11 字數 1874 閱讀 5656

跳轉指令用於實現程式流程的跳轉,在 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 rmblx 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...