GNU 어셈블러

GNU 어셈블러
개발자GNU 프로젝트
안정화 버전
GNU Binutils 2.43.1[1] 위키데이터에서 편집하기 / 2016년 8월 3일
(8년 전)
(2016-08-03)
프로그래밍 언어C
플랫폼크로스 플랫폼
종류어셈블러
라이선스GNU 일반 공중 사용 허가서 v3
웹사이트www.gnu.org/software/binutils/

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

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

일반적인 문법

[편집]

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

지시자

[편집]

GAS는 C 언어에서 전처리문과 비슷하게 동작하는, 키워드인 어셈블러 지시자를 사용한다. 대부분의 사용 가능한 어셈블러 지시자들이 대상 구조와 상관 없이 사용 가능하지만 몇몇 지시자들은 기계에 의존적이기도 하다.[2]

지원하는 주석

[편집]

GAS는 두 스타일의 주석을 지원한다:[3]

다중 라인 주석

[편집]

C 멀티 라인 주석처럼 사선과 별표 쌍을 사용해 시작과 끝을 표시한다:

 /*
 주석
 */
 

단일 라인 주석

[편집]

단일 라인 주석은 어셈블되는 아키텍처에 따라서 몇몇의 다른 포맷들이 존재한다.

  • 해시 기호(#)는 다음과 같은 플랫폼에서 사용된다: i386, x86-64, i960, 68HC11, 68HC12, VAX, V850, M32R, 파워PC, MIPS 그리고 M880x0.
  • 쌍반점(;)은 다음에서 사용된다: AMD 29k 패밀리, ARC, H8/300 패밀리, HPPA, PDP-11, picoJava, 모토롤라, 그리고 M32C.
  • 골뱅이표(@)는 ARM 플랫폼에서 사용된다.
  • 쌍 빗금(//)은 AArch64 플랫폼에서 사용된다.

사용

[편집]

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

예시 프로그램

[편집]

IA-32 리눅스에서 표준 AT&T 문법을 사용하는 표준 “Hello, world!” 프로그램:

.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

비판

[편집]

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

그러나 버전 2.10부터 인텔 문법이 .intel_syntax 지시자의 사용을 통해 사용 가능해 졌다.[4][5][6]

같이 보기

[편집]

각주

[편집]
  1. “GNU Binutils 2.43.1 released”. 2024년 8월 17일. 2024년 8월 18일에 확인함. 
  2. “The GNU Assembler - Assembler Directives”. 2012년 2월 22일에 원본 문서에서 보존된 문서. 2016년 5월 30일에 확인함. 
  3. 레드햇. “Using as”. 2011년 6월 20일에 원본 문서에서 보존된 문서. 2013년 1월 10일에 확인함. 
  4. “GNU Assembler News”. [깨진 링크(과거 내용 찾기)]
  5. “AT&T Syntax versus Intel Syntax”. 2011년 6월 20일에 원본 문서에서 보존된 문서. 2014년 7월 28일에 확인함. 
  6. Ram Narayan (2007년 10월 17일). “Linux assemblers: A comparison of GAS and NASM”. IBM DeveloperWorks. 2009년 3월 3일에 원본 문서에서 보존된 문서. 2014년 7월 28일에 확인함. 

외부 링크

[편집]