WIPIVERSE

GNU 어셈블러

GNU 어셈블러(GNU Assembler)는 GNU 프로젝트에서 개발한 어셈블러로, 일반적으로 gas 또는 간단히 as라고 불린다. GNU 컴파일러 모음(GCC)의 기본 백엔드(back-end)로 동작하며, 코드 생성기가 출력한 어셈블리 언어를 기계어(machine code)로 변환하는 최종 단계를 담당한다.

개요

GNU 어셈블러는 GNU 바이너리 유틸리티(GNU Binutils) 패키지의 일부로 배포된다. 실행 파일 이름은 as이며, 이는 유닉스 시스템에서 어셈블러의 표준 이름을 따른 것이다. 크로스 플랫폼을 지원하여 여러 컴퓨터 아키텍처에서 실행될 수 있고, 다양한 아키텍처를 대상으로 바이너리를 생성할 수 있다. GNU 일반 공중 사용 허가서(GNU GPL v3) 하에 배포되는 자유 소프트웨어이다.

역사

GNU 어셈블러의 첫 번째 버전은 1986년에서 1987년 사이에 발표되었다. 딘 엘스너(Dean Elsner)가 작성했으며 초기에는 VAX 아키텍처를 지원했다.

주요 특징

  • 크로스 플랫폼: 다양한 CPU 아키텍처(x86, x86-64, ARM, AArch64, MIPS, PowerPC, RISC-V 등)를 지원한다.
  • 문법: 기본 문법은 AT&T 문법(AT&T syntax)을 사용한다. 버전 2.10부터는 .intel_syntax 지시어를 통해 인텔 문법(Intel syntax)도 사용할 수 있다.
  • 어셈블러 지시어(Directive): 마침표(.)로 시작하는 키워드를 사용하며, C 언어의 전처리기 지시어와 유사하게 동작한다. 대부분의 지시어는 대상 아키텍처와 관계없이 사용할 수 있으나 일부는 아키텍처에 종속적이다.
  • 주석(Comment): 다중 행 주석은 C 언어와 동일하게 /* ... */ 형식을 사용한다. 단일 행 주석은 아키텍처에 따라 #(i386, x86-64), ;(ARC, HPPA), @(32비트 ARM), //(AArch64) 등 다양한 형식을 지원한다.

사용 용도

GNU 어셈블러는 GCC의 최종 단계로 동작하기 때문에 현대의 많은 자유·오픈소스 소프트웨어를 컴파일하는 과정에서 광범위하게 사용된다. 리눅스 운영체제에서 다른 GNU 소프트웨어와 함께 어셈블러로 자주 사용되며, 수정된 버전이 macOS 개발 도구 패키지에도 포함되어 있다. GNU 운영체제와 리눅스 커널, 다양한 소프트웨어의 어셈블리 언어 부분을 기계어로 변환하는 데 사용된다.

기타

GNU 어셈블러에 대한 공식 매뉴얼은 sourceware.org의 GNU Binutils 문서 페이지에서 확인할 수 있으며, 다양한 아키텍처별 사용법과 지시어 목록이 상세히 문서화되어 있다. NASM(Netwide Assembler)과의 비교 역시 개발자들 사이에서 자주 논의되는 주제이다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기