ARM組合語言常用知識

2021-08-29 16:30:09 字數 1365 閱讀 4699

在組合語言中包含有兩種指令,分別為:

在編寫組合語言時,指令不區分大小寫,即mov與mov意義相同,**風格保持一致即可。一般在windows中常採用大寫,在gnu中採用小寫。

在組合語言中,段落的注釋採用

/** 注釋 **/
單句的注釋採用符號@,例如:

mov r1,r2 @注釋
cmp: 比較

eq: 相等

ne: 不相等

mov:將乙個暫存器的值賦給另乙個暫存器,或者將乙個常數賦值給暫存器。例如:

mov r1,r2 @ r1=r2

mov r1,#128 @r1=128

需要注意的是,mov指令傳送的常數必須是立即數。

ldr r1,=4095
利用該指令有乙個缺點是效率。

ldr:從記憶體中讀取資料到暫存器(load register)

ldr r1, [r2, #4]	/*將位址為r2+4的記憶體單元資料讀取到r1中*/

ldr r1, [r2] /*將位址為r2的記憶體單元資料讀取到r1中*/

ldr r1,[r2],#4 /*將位址為r2的記憶體單元資料讀取到r1中,然後r2=r2+4*/

str:將暫存器的值儲存到記憶體中(store register)

str r1, [r2,#4]	/*將r1的資料儲存到位址為r2+4的記憶體單元中*/

str r1,[r2] /*將r1的資料儲存到位址為r2的記憶體單元中*/

str r1,[r2],#4 /*將r1的資料儲存到位址為r2的記憶體單元中,然後r2=r2+4*/

add:加指令

sub:減指令

add r1, r2, #1	@r1=r2+1

sub r1, r2, #1 @r1=r2-1

cmp 運算元1, 運算元2
用於比較兩個運算元,進行運算元1-運算元2,根據計算結果對標誌暫存器進行設定。其主要是設定cpsr(程式狀態暫存器)的z位(zero result from alu)。當運算元1=運算元2時,z位置1,當運算元1 != 運算元2時,z位置0。

配合bne和beq可以實現跳**

bne a1	@當運算元1 != 運算元2(即z位為0時),跳轉到a1

beq a2 @當運算元1 == 運算元2(即z位為1時),跳轉到a2

.extern:定義乙個外部符號

.text:表示下面的語句屬於**段

注:未完成,不斷更新。。。

ARM組合語言

指令stmfd和ldmfd分析 根據atpcs規則,我們一般使用fd full descending 型別的資料棧!所以經常使用的指令就有stmfd和ldmfd,通過arm對於棧操作和批量load store指令定址方式,可以知道指令stmfd和ldmfd的位址計算方法 stmfd指令的定址方式為事...

ARM 組合語言程式設計

教材 嵌入式系統及應用,羅蕾 李允 陳麗蓉等,電子工業出版社 迴圈程式設計 子程式及其呼叫 匯程式設計序訪問全域性 c 變數 普通分支程式 多分支 散轉 程式 程式分支點上有多於兩個以上的執行路徑的程式叫做多分支程式。利用條件測試指令或跳轉表可以實現多分支程式 帶 arm thumb 狀態切換的分支...

b halt 彙編 arm常用幾個組合語言的程式

一。從一數到十 count equ 0x30003100 定義變數 count 的基位址 area example1,code,readonl y 宣告 段 example1 為唯讀entry 標識程式入口 code32宣告位 arm指令 start ldr r1,count 將0x30003100...