GNU匯編器

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

GNU匯編器
開發者GNU計劃
當前版本
  • toolset version of binutils[1]
編輯維基數據鏈接
編程語言C
平台跨平台
類型匯編器
許可協議GNU通用公共許可證 v3
網站www.gnu.org/software/binutils/

GAS的可執行文件被命名為asUnix匯編器的標準名稱。GAS是跨平台的,可以運行或為不同的計算機系統結構編譯。GAS依據GNU通用公共許可證第三版發布,為自由軟件

通用語法

GAS支持適用於所有支持架構的通用語法。通用語法包括匯編指令和注釋方法。

指令

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

注釋

GAS支持兩種注釋風格:[3]

多行注釋:

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指令使用。[4][5][6]

參見

參考文獻

  1. ^ https://sourceware.org/git/?p=binutils-gdb.git;a=tree; 檢索日期: 2021年2月8日.
  2. ^ The GNU Assembler - Assembler Directives. [2013-10-08]. (原始內容存檔於2012-02-22). 
  3. ^ Red Hat Inc. Using as. [1012-03-11]. (原始內容存檔於2011-06-20). 
  4. ^ GNU Assembler News. [永久失效連結]
  5. ^ AT&T Syntax versus Intel Syntax. Using as, the GNU Assembler. [2013-10-08]. (原始內容存檔於2010-05-29). 
  6. ^ Ram Narayan. Linux assemblers: A comparison of GAS and NASM. IBM DeveloperWorks. 2007-10-17 [2007-10-17]. (原始內容存檔於2009-03-03). 

外部連結