gun注釋以「@」開始,或者「/* ……*/」
1.常量定義偽操作.equ或.set
語法格式:
.equ symbol, expr
.set symbol, expr
其中:symbol 為要指定的名稱,它可以是以前定義過的符號;
expr 表示數字常量或程式中的標號。
2.常量定義偽操作.equiv
語法格式:
.equiv symbol, expr
其中:symbol 為要指定的名稱,它不可以是以前定義過的符號;
expr 表示數字常量或程式中的標號。
3.宣告全域性常量偽操作.global或.globl
語法格式:
.global symbol
.globl symbol
其中:symbol 為要宣告的全域性變數名稱
4.宣告外部變數偽操作.extern
語法格式:
.extern symbol
其中:symbol 為要宣告的外部變數名稱
實現在當前的程式中使用乙個在其它檔案中宣告的外部變數main,可以使用以下語句進行宣告:
.extern main
5.位元組定義.byte
語法格式:
.byte expr …
其中:expr 數字表示式或程式中的標號。
分配一段位元組記憶體單元,並用25, 0x11, 031, 『x』,0x36進行初始化。
.byte 25, 0x11, 031, 『x』,0x36
6.半字定義.hword或.short
語法格式:
.hword expr ….
.short expr …
其中:expr 數字表示式或程式中的標號。
分配一段半字記憶體單元,並用12, 0xffe0,0xaabb進行初始化。
.hword 12, 0xffe0,0xaabb
也可以用.short來定義:
.short 12, 0xffe0,0xaabb
7.字定義.word或.int或.long
語法格式:
.word expr ….
.int expr …
.long expr …
其中:expr 數字表示式或程式中的標號。
8.字串定義.ascii和.asciz或.string
語法格式:
.ascii expr …
.asciz expr …
.string expr …
其中:expr 表示字串。
9.雙字定義.quad
語法格式:
.quad expr …
其中:expr 數字表示式。
10.四字定義.octa
語法格式:
.octa expr …
其中:expr 數字表示式。
11.單精度浮點數定義.float或.single
語法格式:
.float expr ….
.single expr ….
其中:expr 為32位的 ieee 單精度浮點數。
12.雙精度浮點數定義.double
語法格式:
.double expr …
其中:expr 為32位的 ieee 單精度浮點數
13.重複記憶體單元定義.fill
語法格式:
.fill repeat
其中:repeat 重複填充的次數;
size 每次所填充的位元組數;
value 所填充的資料。
14.宣告資料緩衝池.ltorg
語法格式
.ltorg
宣告乙個資料緩衝池用來儲存0xaabbccdd
ldr r0, = 0xaabbccdd
eor r1, r1, r0
b sub_pro
.ltorg @此處定義資料緩衝池,存放0xaabbccdd
段起始宣告偽操作
具體的語法格式如下:
.text
.data
.bss
1.條件編譯偽操作.if
語法格式:
.if logical_expression
程式**段a
.endif
2. 巨集定義偽操作.macro
語法格式:
.macro
…}程式**段
.endm其中:
3.檔案包含偽操作.include
.include偽操作用於將乙個原始檔包含到當前的原始檔中,所包含的檔案在.include指令的位置處進行彙編處理。
語法格式:
.include "file_name"
arm組合語言源程式的基本結構
.global _start /*gnu格式彙編*/
.text
.equ num,20 /*設定將要複製的字數*/
_start: ldr r0,=src /*r0暫存器指向源資料區src*/
ldr r1,=dst /*r1暫存器指向目標資料區dst*/
mov r2,#num /*指定將要複製的字數*/
mov sp,#0x31000000 /*設定資料棧指標(r13),用於儲存工作暫存器數值*/
blockcopy: movs r3,r2,lsr #3 /*需要進行的以8個字為單位的複製次 數beq copywords 對於剩下不足8個字的資料,跳轉到
copywords,以字為單位複製*/
stmfd sp!, /*儲存工作暫存器,壓棧*/
octcopy: ldmia r0!, /*從源資料區讀取8個字的數*/
/*據,放到8個暫存器中,並更新目標資料區指標r0*/
stmia r1!, /*將這8個字資料寫入到目標數*/
/*據區中,並更新目標資料區指標r1*/
subs r3,r3,#1 /*將塊複製次數減1*/
bne octcopy /*迴圈,直到完成以8個字為單位的塊複製*/ ldmfd sp!, /*恢復工作暫存器值,出棧*/
copywords: ands r2,r2,#7 /*剩下不足8個字的資料的字數*/ beq stop /*資料複製完成*/
wordcopy: ldr r3,[r0],#4 /*從源資料區讀取1個字的資料,*/
/*放到r3暫存器中,並更新目標資料區指標r0,後索引偏移*/
str r3,[r1],#4 /*將這r3中資料寫入到目標資料區中*/
/*並更新目標資料區指標r1,後索引偏移*/
subs r2,r2,#1 /*將字數減1*/
bne wordcopy /*迴圈,直到完成以字為單位的資料複製*/
stop: b stop
.ltorg /*宣告文字池,可以通過ldr指令讀取裡面的內容*/
src:
.long 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4
/*定義源資料區src及目標資料區dst*/
dst:
.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.end
go基本語法 golang基本語法
匯入包 import fmt import fmt os 函式外申明變數 var a int 函式內申明變數 a slice申明 slice本質是指向陣列的指標 var s int var s int make int,3 s make int,3 基於陣列建立slice a 3 int s a 3...
語法 C 基本語法
標頭檔案 在程式設計競賽中,我們常見乙個標頭檔案 include 發現它是部分c 中支援的乙個幾乎萬能的標頭檔案,包含所有的可用到的c 庫函式,如 在程式設計競賽中,使用這個標頭檔案是乙個好的想法,特別是當你在選擇標頭檔案時想減少時間,我們更加專注於找到演算法解決問題而不是軟體工程。而從軟體工程的視...
基本if語法
if 如果 else 否則 案例 絕對值 輸入乙個數,如果這個數是正數,那麼輸出它本身 如果這個數是負數,那麼輸出它的相反數 案例 計算三角形面積 改 要求能夠判斷出三條邊是否能構成三角形 如果不能,輸出 請正確輸入 案例 判斷乙個數是否為水仙花數 案例 獻血 根據性別和體重計算輸血量女性體重不超過...