GNU ARM匯編語法原理及操作解析
這篇文章主要介紹了GNU ARM匯編語法原理及操作解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
ARM匯編源程序有兩種風(fēng)格:
- ARM官方推薦的風(fēng)格,所有的指令都大寫。常用在windows下的IDE中。
- GNU風(fēng)格的匯編風(fēng)格,所有的指令都小寫。常用在與Linux相關(guān)的工具中。
注釋符號:
GNU arm匯編所采用的注釋符號是@符號,同樣c語言中的 // 和 /* */ 兩種類型的注釋方法在GNU arm匯編中也被支持。
宏定義:
在GNU arm匯編程序中可以使用偽操作 .equ 來定義宏,但是同樣也支持c語言中的 #define 形式定義的宏。在實際編程中通常都采用#define來定義宏。除了支持#define宏之外,GNU arm匯編還支持 條件編譯 和 #include 的用法。
標(biāo)號:
在GNU arm匯編中以冒號結(jié)尾的符號稱為標(biāo)號。標(biāo)號本質(zhì)上代表著地址。
常用的偽操作:
- .global:用來將標(biāo)號聲明為外部鏈接屬性,即可以被其他文件使用
- .extern:用來聲明標(biāo)號為外部標(biāo)號,和c語言中的extern關(guān)鍵字是類似的
- . :用來代表當(dāng)前指令的地址,常用于實現(xiàn) 死循環(huán) 中,如 b .
- .ascii、.word、.short、.byte:用來定義數(shù)據(jù),注意 .ascii 偽操作在定義字符串的時候需要在后面添加\0。
- .section:用來自定義段。GNU arm匯編預(yù)定義的段名有 .text .data .bss
- .align :.align n 即采用 2^n 字節(jié)對齊方式。比如 .align 2 即采用2^2=4字節(jié)對齊。具體是指.align后面的指令的地址需要進行2^n字節(jié)對齊。
- .balign[wl]:.balign[wl] n, 0xXXXXXXXX 即采用 n 字節(jié)對齊方式,并根據(jù)[wl]來決定采用幾字節(jié)填充。如果沒有w或l,則采用字節(jié)填充;如果是w,則采用雙字節(jié)填充;如果是l,則采用4字節(jié)填充。
- .end:表示整個匯編程序結(jié)束
- .arm/.code 32:表示采用的是ARM指令
- .thumb/.code 16:表示采用的是Thumb指令
- .comm:用來在bss段中申請一段內(nèi)存空間,也就是通過這個偽指令可以讓bss段的大小可以不占用可執(zhí)行文件的大小,只需利用.comm來記錄需要多大的空間即可。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
UEFI開發(fā)實戰(zhàn)用戶交互界面使用說明VFR文件
這篇文章主要為大家介紹了UEFI開發(fā)實戰(zhàn)用戶交互界面使用說明VFR文件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06VScode配置匯編語言環(huán)境的實現(xiàn)步驟
本文主要介紹了VScode配置匯編語言環(huán)境的實現(xiàn)步驟,文中通過圖文的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03匯編程序設(shè)計之DOSBox模擬環(huán)境配置
最近在學(xué)習(xí)匯編語言設(shè)計,然后上網(wǎng)找關(guān)于匯編程序的編譯軟件,不負有心人,終于找到了我需要的軟件,值得慶幸2023-08-08匯編語言指令集學(xué)習(xí)條件轉(zhuǎn)移指令詳解
這篇文章主要為大家介紹了匯編語言指令集學(xué)習(xí)條件轉(zhuǎn)移的指令全面總結(jié)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-11-11