{{위키데이터 속성 추적}}
{{소프트웨어 정보
| name                   = GNU 어셈블러
| logo                   = Heckert GNU white.svg
| latest release version = GNU Binutils {{wikidata|property|reference|edit|Q1144975|P348}}
| latest release date = {{start date and age|{{wikidata|qualifier|Q1144975|P348|P577}}}}
| developer              = [[GNU 프로젝트]]
| latest release date    = {{시작 날짜와 나이|2016|8|3||br=yes}}
| programming language   = [[C (프로그래밍 언어)|C]]
| platform               = [[크로스 플랫폼]]
| genre                  = [[어셈블러]]
| license                = [[GNU 일반 공중 사용 허가서]] v3
| website                = {{url|https://www.gnu.org/software/binutils/}}
}}

'''GNU 어셈블러'''(GNU Assembler, 보통 '''gas''' 또는 간단히 '''as'''로 불리는)는 [[GNU 프로젝트]]에서 사용되는 [[어셈블러]]이다. 이것은 [[GCC]]의 기본 [[백엔드]]이며 [[GNU 운영 체제]]와 [[리눅스 커널]] 그리고 다양한 다른 소프트웨어를 어셈블하는데 사용된다. GNU 어셈블러는 [[GNU 바이너리 유틸리티]]의 한 부분이다.

GAS [[실행 파일]]은 이름이 as이며 [[유닉스]] 어셈블러의 표준 이름이다. GAS는 [[크로스 플랫폼]]이며 여러 다양한 컴퓨터 구조에서 실행되고 어셈블을 할 수 있다. [[GNU 일반 공중 사용 허가서]] v3 하에 배포되며 도한 [[자유 소프트웨어]]이다.

== 일반적인 문법 ==
GAS는 지원되는 모든 구조에서 동작하는 일반 문법을 지원한다. 이 일반 문법은 어셈블러 지시자와 주석의 방식을 포함한다.

=== 지시자 ===
GAS는 [[C 언어]]에서 전처리문과 비슷하게 동작하는, 키워드인 어셈블러 지시자를 사용한다. 대부분의 사용 가능한 어셈블러 지시자들이 대상 구조와 상관 없이 사용 가능하지만 몇몇 지시자들은 기계에 의존적이기도 하다.<ref>{{웹 인용
 |title=The GNU Assembler - Assembler Directives
 |url=http://sources.redhat.com/binutils/docs-2.12/as.info/Pseudo-Ops.html#Pseudo%20Ops
 |확인날짜=2016-05-30
 |archive-date=2012-02-22
 |archive-url=https://web.archive.org/web/20120222005603/http://sources.redhat.com/binutils/docs-2.12/as.info/Pseudo-Ops.html#Pseudo%20Ops
 |url-status=
 }}</ref>

=== 지원하는 주석 ===
GAS는 두 스타일의 주석을 지원한다:<ref>{{웹 인용
 |last=레드햇
 |title=Using as
 |url=http://sources.redhat.com/binutils/docs-2.12/as.info/Comments.html#Comments
 |accessdate=Jan 10, 2013
 |archive-date=2011-06-20
 |archive-url=https://web.archive.org/web/20110620054223/http://sources.redhat.com/binutils/docs-2.12/as.info/Comments.html#Comments
 |url-status=
 }}</ref>

==== 다중 라인 주석 ====
C 멀티 라인 주석처럼 사선과 별표 쌍을 사용해 시작과 끝을 표시한다:
 <nowiki>
 /*
 주석
 */
 </nowiki>

==== 단일 라인 주석 ====
단일 라인 주석은 어셈블되는 아키텍처에 따라서 몇몇의 다른 포맷들이 존재한다.
* [[해시 기호]](#)는 다음과 같은 플랫폼에서 사용된다: [[인텔 80386|i386]], [[x86-64]], [[인텔 i960|i960]], 68HC11, 68HC12, VAX, V850, M32R, [[파워PC]], [[MIPS 아키텍처|MIPS]] 그리고 M880x0.
* [[쌍반점]](;)은 다음에서 사용된다: AMD 29k 패밀리, ARC, H8/300 패밀리, [[PA-RISC|HPPA]], PDP-11, picoJava, 모토롤라, 그리고 [[르네사스 테크놀로지|M32C]].
* [[골뱅이표]](@)는 ARM 플랫폼에서 사용된다.
* 쌍 [[빗금]](//)은 [[ARM 아키텍처|AArch64]] 플랫폼에서 사용된다.

== 사용 ==
GCC라는 유명한 컴파일러의 백엔드로서 GNU 어셈블러는 현대 오픈 소스 소프트웨어를 컴파일할 때 매우 폭넓게 사용된다. GAS는 GNU 소프트웨어와 함께 GNU/리눅스 운영 체제에서 어셈블러로 사용된다. GAS의 수정된 버전은 또한 [[매킨토시]] 운영 체제의 개발 툴 패키지에서도 볼 수 있다.

== 예시 프로그램 ==
[[IA-32]] [[리눅스]]에서 표준 AT&T 문법을 사용하는 표준 “Hello, world!” 프로그램:<syntaxhighlight lang="asm">
.global	_start

.text
_start:
	movl $4, %eax
	movl $1, %ebx
	movl $msg, %ecx
	movl $len, %edx
	int $0x80

	movl $1, %eax
	movl $0, %ebx
	int $0x80
.data
msg:
	.ascii "Hello, world!\n"
	len = . - msg
</syntaxhighlight>

== 비판 ==
인텔 문법에 익숙한 이들은 [[x86]]과 [[x86-64]] 플랫폼에서의 어셈블리에 대한 인텔 문법을 지원하지 않는 다는 것이 문제가 된다고 주장한다.

그러나 버전 2.10부터 인텔 문법이 <code>.intel_syntax</code> 지시자의 사용을 통해 사용 가능해 졌다.<ref>{{웹 인용
 |title=GNU Assembler News
 |url=http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/NEWS?rev=1.93&content-type=text/x-cvsweb-markup&cvsroot=src
 }}{{깨진 링크|url=http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/NEWS?rev=1.93&content-type=text%2Fx-cvsweb-markup&cvsroot=src }}</ref><ref>{{웹 인용
 |title=AT&T Syntax versus Intel Syntax
 |url=http://sources.redhat.com/binutils/docs-2.12/as.info/i386-Syntax.html
 |accessdate=28 July 2014
 |archive-date=2011-06-20
 |archive-url=https://web.archive.org/web/20110620054249/http://sources.redhat.com/binutils/docs-2.12/as.info/i386-Syntax.html
 |url-status=
 }}</ref><ref>{{웹 인용
 |title=Linux assemblers: A comparison of GAS and NASM
 |author=Ram Narayan
 |date=2007-10-17
 |publisher=IBM DeveloperWorks
 |url=http://www.ibm.com/developerworks/linux/library/l-gas-nasm.html
 |archiveurl=https://web.archive.org/web/20090303224539/http://ibm.com/developerworks/linux/library/l-gas-nasm.html
 |archivedate=3 Mar 2009
 |accessdate=28 July 2014
}}</ref>

== 같이 보기 ==
* [[GNU 툴체인]]
* [[바이너리 파일 디스크립터 라이브러리]]

== 각주 ==
{{각주}}

== 외부 링크 ==
* {{공식 웹사이트}}
* [http://sourceware.org/binutils/docs/as/ Gas manual]
* {{Man|1|as|die.net|the portable GNU assembler}}

{{GNU}}

[[분류:어셈블러]]
[[분류:GNU 프로젝트 소프트웨어]]
[[분류:유닉스 프로그래밍 도구]]
[[분류:자유 컴파일러와 인터프리터]]