1、.section
1.1、語法格式
.section section_name[,"1.2、作用flags
"[,%type[,flag_specific_arguments]]]
定義乙個段,每乙個段以段名為開始,以下乙個段名或者檔案結尾為結束。
elf格式允許的段標誌: a:可分配
w:可寫段
x:執行段
1.3、舉例
.section .mysection @自定義資料段,段名為「.mysection」2、預定義段 .text、.data、.bss
2.1、語法格式
.text2.2、作用.data @初始化資料段
.bss
.text、.data和.bss將彙編系統預定義的段名編譯到相應的**段、資料段和bss段。
注意:源程式中.bss段應該在.text之前。
2.3、說明
bss段通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域 資料段通常是指用來存放程式中已初始化的全域性變數的一塊記憶體區域
2.4、舉例
.section .data3、.code16、code32、.thumb、.arm.section .bss
.section .text .
global
_start
_start:
3.1、語法格式
.code16、code323.2、作用.thumb
.arm
用來選擇arm或者thumb指令集,.thumb偽操作等同於.code16,表明使用thumb指令類似的.arm等同於.code32
4、.end
4.1、語法格式
.end
4.2、作用
表明原始檔的結束,如果該標號之後還有**,不會被編譯到執行檔案中
5、.include
5.1、語法格式
.include "5.2、作用filename
"
可以將指定的檔案在使用位置處展開,一般是標頭檔案
6、.incbin
6.1、語法格式
.incbin "6.2、作用file
"[,skip[,count]]
可以將原封不動的乙個二進位制檔案編譯到當前檔案中。其中,skip表明是從檔案開始跳過skip個位元組開始讀取檔案,count是讀取的字數
7、.if、.else/.endif
7.1、語法格式
.if8、.ifdef,.else和endif條件表示式
**段1
.else
**段2
.endif
8.1、語法格式
.ifdef 條件表示式9、.macro、.exitm和.endm**段1
.else
**段2
.endif
9.1、語法格式
.macro 巨集名 引數名列表 @偽操作.macro定義乙個巨集9.2、說明巨集體 .endm @.endm表示巨集結束
如果巨集使用引數,那麼在巨集體中使用該引數時新增字首「\」。巨集定義時的引數還可以使用預設值,可以使用.exitm偽指令來退出巨集
9.3、舉例
.macro shiftleft a,b10、.byte.if \b<0
mov \a,\a,asr #-\b
.exitm
.endif
mov \a,\a,lsl #\b
.endm
10.1、語法格式
.byte 表示式...10.2、作用
定義單位元組
10.3、舉例
.byte11、.short、.hword1,2,'
s',0x34
11。1、語法格式
.short/.hword 表示式...11.2、作用
定義雙位元組資料
11.3、舉例
.short 0x1234
12、.long、.word、.int
12.1、語法格式
.long/.word/.int 表示式...12.2、作用
.long、.word和.int定義4位元組資料
13、.quad
13.1、語法格式
quad 表示式...13.2、作用
.quad定義8位元組資料
14、.string/.asciz/.ascii
14.1、語法格式
.string/.asciz/.ascii 表示式...14.2、作用
.string/.asciz/.ascii定義多個字串。
注意:ascii偽操作定義的字串需要自動新增結尾字元'\0'
14.3、舉例
.string15、.zero、.space、.skip"abcd
","hello
"
15.1、語法格式
.zero15.2、作用.space/.skip
分配number_of_bytes位元組的資料空間,.zero偽操作用0填充記憶體,.space/.skip用值為fill_byte填充記憶體,若未指定該值,預設填充0
16、.rept、.endr
16.1、語法格式
.rept 重複次數16.2、作用資料定義
.endr @結束重複定義
.rept及.endr用於重複定義偽操作
16.3、舉例
.rept 317、.equ、.set.byte
0x23
.endr
17.1、語法格式
.equ(.set)常量名,表示式17.2、作用
.equ和.set用於為程式中標號定義名稱
17.3、舉例
.equ abc 318、.global/.globl@讓abc=3
18.1、語法格式
.global/.globl symbol18.2、作用
.global和.globl用來定義乙個全域性的符號
19、.extern
19.1、語法格式
.extern label19.2、作用
.extern用於宣告乙個外部標號
20、.ltorg、.pool
20.1、語法格式
.ltorg/.pool20.2、作用
.ltorg和.pool用於宣告乙個資料緩衝池的開始,它可以分配很大的空間
GNU ARM指令偽操作
偽操作 語法格式 作用 常量編譯控制 byte byte expr 分配一段位元組記憶體單元,並用expr初始化 hword short hword expr 分配一段半字記憶體單元,並用expr初始化 ascii ascii expr 定義字串expr 非零結束符 asciz string asc...
ADS ARM 彙編和GNU ARM彙編
linux unix核心源 用的編譯器是gcc,而gcc採用的是at t的彙編格式,這與ads下使用的彙編格式是不同的。兩種彙編格式的部分對比如下 gnu arm彙編 ads arm彙編 或 include get.equ equ.global export extern import long d...
GNU ARM彙編快速入門
以前用arm的ide工具,使用的是arm標準的組合語言。現在要使用gnu的工具,當然要了解一點gnu arm彙編的不同之處。其實非常的簡單,瀏覽一下文件然後再看看程式就完全可以搞定了,或者你硬著頭皮看gnu arm的匯程式設計序,用不了多少時間你就就可以無師自通了。個人比較健忘,還是把文件翻譯了一下...