GNU組譯器

維基百科,自由的百科全書
(重新導向自GNU Assembler
跳至導覽 跳至搜尋
GNU組譯器
開發者GNU計劃
目前版本2.37(2021年7月18日,​4年前​(2021-07-18
原始碼庫
  • {{URL|example.com|可选的显示文本}}
Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
程式語言C
引擎
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    平台跨平台
    類型組譯器
    特許條款GNU通用公眾特許條款 v3
    網站www.gnu.org/software/binutils/

    GNU組譯器(英語:GNU assembler),是由GNU計劃所使用的組譯器,一般稱為gas,或依其可執行檔案名稱簡稱為as。它是GCC的預設後端。它用於組譯GNU作業系統Linux內核以及其他各種軟件。它是GNU Binutils包的一部分。

    GAS的可執行檔案被命名為asUnix組譯器的標準名稱。GAS是跨平台的,可以執行或為不同的電腦系統結構編譯。GAS依據GNU通用公眾特許條款第三版釋出,為自由軟件

    通用語法[編輯]

    GAS支援適用於所有支援架構的通用語法。通用語法包括組譯指令和註釋方法。

    指令[編輯]

    GAS使用組譯器指令(也被稱為偽操作),它們作為關鍵字指示開始一個時期,與C語言中的預處理指令表現相同。雖然無論目標架構如何,大多數可用的組譯指令都是有效的,但一些指令仍然因機器不同而不同。[1]

    註釋[編輯]

    GAS支援兩種註釋風格:[2]

    多行註釋:

    C語言類似,以一對斜線-星號對開始和結束:

    /* 
    注释
    */
    

    單行註釋:

    在不同的架構中組譯時,單行註釋有幾種不同的格式。

    • #用於以下平台中:i386,x86-64,i960,68HC11,68HC12,VAX, V850,m32r,M880x0。
    • ;用於以下平台中:AMD 29k family,ARC,H8/300 family,HPPA,PDP-11,picoJava,Motorola,PowerPC。
    • @用於ARM平台。
    • |用於680x0平台。
    • !用於Renesas SH平台。

    用法[編輯]

    作為流行編譯器套件GCC的後端,GNU組譯器在編譯現代開源軟件中有非常廣泛的應用。在Linux系統上,GAS經常用作與其他GNU軟件結合的組譯器。因為OS X,修改後版本的GAS也可以在麥金塔作業系統的開發工具包中找到。

    範例程式[編輯]

    一個標準的「Hello, world!」程式,執行於Linux IA-32

    .globl _start
    
    .text
    _start:
     movl $len, %edx
     movl $msg, %ecx
     movl $1, %ebx
     movl $4, %eax
     int $0x80
    
     movl $0, %ebx
     movl $1, %eax
     int $0x80
    .data
    msg:
     .ascii "Hello, world!\n"
     len = . - msg
    

    批評[編輯]

    那些更習慣於Intel語法的人認為,比起其他組譯器,在x86x86-64平台上不支援使用Intel語法就是一大敗筆。

    然而,自從2.10版本,Intel語法可以通過使用.intel_syntax指令使用。[3][4][5]

    參見[編輯]

    參考文獻[編輯]

    1. ^ The GNU Assembler - Assembler Directives. [2013-10-08]. (原始內容存檔於2012-02-22). 
    2. ^ Red Hat Inc. Using as. [1012-03-11]. (原始內容存檔於2011-06-20). 
    3. ^ GNU Assembler News. [永久失效連結]
    4. ^ AT&T Syntax versus Intel Syntax. Using as, the GNU Assembler. [2013-10-08]. (原始內容存檔於2010-05-29). 
    5. ^ Ram Narayan. Linux assemblers: A comparison of GAS and NASM. IBM DeveloperWorks. 2007-10-17 [2007-10-17]. (原始內容存檔於2009-03-03). 

    外部連結[編輯]