一:arm指令集的分類:
arm指令集可以分為六類:跳轉指令,資料處理指令,程式狀態暫存器傳輸指令,load/store指令,協處理器指令和異常中斷指令。
第一篇:跳轉指令
在arm中有兩種方式來實現程式的跳**
一種是直接向pc暫存器(r15)中寫入目標位址值
一種是跳轉指令
通過
直接向pc暫存器寫入目標位址可以實現在4g的位址空間的任意跳轉,這種跳轉指令又稱為長跳轉。如果在長跳轉指令之前使用 mov lr pc 等指令,可以儲存將來返回的位址值,這樣就實現了在4g的位址空間的的子程式呼叫。
二:跳轉指令:
arm的跳轉指令有以下四種
b 跳轉指令
bl 帶返回的跳轉指令
blx 帶返回和狀態切換的的跳轉指令
bx 帶狀態切換的跳轉指令
1:b和bl指令
b指令和bl指令均可以跳轉到指令中的目標位址,二者也可以根據cpsr中條件標誌位的值與指令中的執行條件決定是否執行跳轉操作,b指令僅僅執行跳轉操作,bl同時還將pc 暫存器的值儲存到lr暫存器中。
bl指令用於實現子程式的呼叫,子程式的返回可以通過將lr暫存器的值複製到pc暫存器中來實現。通常有下面的三種方式來實現
(1): bx r14
(2):mov pc r14
(3):當子程式的入口使用了stmfd r13!, 時,可以使用指令ldmfd r13!, 如:
b lable ;程式調到lable處去執行
bll lable ;當cpsr暫存器中的c標誌位為1時,程式調到lable處去執行
bl func_1;程式跳轉到子程式func_1處執行,同時將pc的值儲存到lr中
2:blx(1)
第1中格式的的blx指令記做blx(1),blx(1)指令從arm指令集跳轉到指令中指定的目標位址,並將程式的狀態切換為thumb狀態,該指令同時將pc暫存器的內容複製到lr暫存器中。
當子程式為thumb指令集,呼叫者為arm指令集時,可以通過blx指令實現程式呼叫和程式狀態的切換,子程式的返回可以通過將lr暫存器的(r14)的值複製到pc暫存器中來實現,通常有兩種方法:
(1):bx r14;
(2):當子程式的入口中使用了push時,可以使用指令pop。
3:blx(2) 第2種格式的blx(2)。blx(2)指令從arm指令集跳轉到指令指定的目標位址,目標位址的指令可以使arm指令,也可以是thumb指令。
目標位址放在指令中的暫存器中,該位址的bit[0]值為0。目標位址處的指令由cpsr中的t位決定,該指令同時將pc 的值儲存到lr暫存器中。
4:bx指令
bx指令跳轉到制定的目標位址,目標位址處的指令可以是arm指令,也可以是thumb指令,目標位址值為指令的值和0xfffffffe做與操作的結果,目標位址處的指令型別由暫存器中的bit[0]決定。
ARM組合語言
指令stmfd和ldmfd分析 根據atpcs規則,我們一般使用fd full descending 型別的資料棧!所以經常使用的指令就有stmfd和ldmfd,通過arm對於棧操作和批量load store指令定址方式,可以知道指令stmfd和ldmfd的位址計算方法 stmfd指令的定址方式為事...
ARM 組合語言程式設計
教材 嵌入式系統及應用,羅蕾 李允 陳麗蓉等,電子工業出版社 迴圈程式設計 子程式及其呼叫 匯程式設計序訪問全域性 c 變數 普通分支程式 多分支 散轉 程式 程式分支點上有多於兩個以上的執行路徑的程式叫做多分支程式。利用條件測試指令或跳轉表可以實現多分支程式 帶 arm thumb 狀態切換的分支...
ARM彙編指令
b或bl指令引起處理器轉移到 子程式名 也就是位址 處開始執行,這兩個指令都是相對跳轉指令。兩者的不同之處在於bl指令在轉移到子程式執行之前,將其下一條指令的位址拷貝到r14 lr,鏈結暫存器 由於bl指令儲存了下條指令的位址,因此使用指令 mov pc lr 即可實現子程式的返回。而b指令則無法實...