在組合語言中包含有兩種指令,分別為:
在編寫組合語言時,指令不區分大小寫,即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...