這篇文章主要介紹了GNU ARM匯編語法原理及操作解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
ARM匯編源程序有兩種風格:
- ARM官方推薦的風格,所有的指令都大寫。常用在windows下的IDE中。
- GNU風格的匯編風格,所有的指令都小寫。常用在與Linux相關的工具中。
注釋符號:
GNU arm匯編所采用的注釋符號是@符號,同樣c語言中的 // 和 /* */ 兩種類型的注釋方法在GNU arm匯編中也被支持。
宏定義:
在GNU arm匯編程序中可以使用偽操作 .equ 來定義宏,但是同樣也支持c語言中的 #define 形式定義的宏。在實際編程中通常都采用#define來定義宏。除了支持#define宏之外,GNU arm匯編還支持 條件編譯 和 #include 的用法。
標號:
在GNU arm匯編中以冒號結尾的符號稱為標號。標號本質上代表著地址。
常用的偽操作:
- .global:用來將標號聲明為外部鏈接屬性,即可以被其他文件使用
- .extern:用來聲明標號為外部標號,和c語言中的extern關鍵字是類似的
- . :用來代表當前指令的地址,常用于實現 死循環 中,如 b .
- .ascii、.word、.short、.byte:用來定義數據,注意 .ascii 偽操作在定義字符串的時候需要在后面添加\0。
- .section:用來自定義段。GNU arm匯編預定義的段名有 .text .data .bss
- .align :.align n 即采用 2^n 字節對齊方式。比如 .align 2 即采用2^2=4字節對齊。具體是指.align后面的指令的地址需要進行2^n字節對齊。
- .balign[wl]:.balign[wl] n, 0xXXXXXXXX 即采用 n 字節對齊方式,并根據[wl]來決定采用幾字節填充。如果沒有w或l,則采用字節填充;如果是w,則采用雙字節填充;如果是l,則采用4字節填充。
- .end:表示整個匯編程序結束
- .arm/.code 32:表示采用的是ARM指令
- .thumb/.code 16:表示采用的是Thumb指令
- .comm:用來在bss段中申請一段內存空間,也就是通過這個偽指令可以讓bss段的大小可以不占用可執行文件的大小,只需利用.comm來記錄需要多大的空間即可。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持html5模板網。
【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!