어셈블러의 비교는 어셈블리어 소스 코드를 이진 프로그램(기계어)으로 변환하는 소프트웨어인 어셈블러들을 체계적으로 대조·정리한 목록이다. 위키백과의 'Comparison of assemblers' 문서를 한국어로 번역·정리한 항목으로, 컴퓨터 공학 분야에서 어셈블러의 종류와 특성을 이해하기 위한 참조 자료로 활용된다.
개요
어셈블러는 어셈블리어로 작성된 소스 코드를 대상 컴퓨터 프로세서의 기계어 명령어로 변환하는 프로그램이다. 어셈블러의 비교는 이들 각각이 지원하는 명령어 집합, 호스트 플랫폼, 오픈 소스 여부, 라이선스, 개발 상태(개발 중 여부) 등의 기준으로 분류하여 제시한다.
일부 어셈블러는 고급 프로그래밍 언어용 컴파일러 시스템의 구성 요소로서, 해당 컴파일러 밖에서는 독립적으로 사용할 수 없는 경우도 있다. 또한 일부 어셈블러는 대상 프로세서와 운영 체제 위에서 직접 실행되는 반면, 크로스 어셈블러(cross-assembler)는 대상과 무관한 다른 운영 체제나 프로세서 위에서 실행되며 대상 아키텍처용 코드를 생성한다.
주요 분류 기준
어셈블러의 비교에서 다루는 주요 분류 기준은 다음과 같다.
- 오픈 소스 여부: 소스 코드가 공개되어 있는지 여부
- 라이선스: GNU GPL, BSD, 사유(proprietary) 등 배포 조건
- 명령어 집합: 지원하는 프로세서 아키텍처(예: x86, ARM, 6502, 680x0, Z80 등)
- 호스트 플랫폼: 해당 어셈블러가 실행되는 운영 체제 및 하드웨어
- 개발 상태: 현재도 유지·개발이 이루어지고 있는지 여부
컴파일러 제품군의 일부로서의 어셈블러
고급 언어 컴파일러의 구성 요소로 내장된 어셈블러로는 다음이 있다.
- GNU 어셈블러(gas): GNU 프로젝트의 어셈블러로, GCC 컴파일러와 함께 사용되며 다수의 대상 명령어 집합을 지원한다.
- ASxxxx 크로스 어셈블러: 여러 대상 아키텍처를 지원하는 크로스 어셈블러이다.
- 암스테르담 컴파일러 킷(ACK): 네덜란드 암스테르담 자유대학교에서 개발된 컴파일러 도구 모음으로, 다양한 대상 기계어 생성을 지원한다.
- LLVM: 모듈식 컴파일러 인프라스트럭처로, 자체 어셈블러 기능을 포함한다.
- 이 외에도 Go, 프리 파스칼(Free Pascal), SBCL 등 자체 호스팅 방식의 네이티브 대상 언어 구현체들은 다수의 대상을 지원하기 위한 자체 어셈블러를 갖추고 있다.
아키텍처별 어셈블러 분류
어셈블러 비교 목록은 대상 아키텍처에 따라 세분화되어 있다.
680x0 어셈블러
모토로라 680x0 계열 프로세서(코모도어 아미가, 아타리 ST, 애플 매킨토시 등에 사용)를 대상으로 하는 어셈블러들이다. 대표적으로 A68K, ASM-One, PhxAss, vasm 등이 있으며, 대부분 단종되었으나 vasm은 오픈 소스로 현재까지 개발이 유지되고 있다.
x86 어셈블러
x86 계열 프로세서를 대상으로 하는 어셈블러들은 가장 많은 수를 차지한다. 대표적인 예로 다음이 있다.
- FASM: 오픈 소스(BSD + 카피레프트)로, x86-64를 지원하며 현재까지 개발 중이다. 자체 호스팅(self-assembling) 방식으로 동작한다.
- GAS: GNU 어셈블러로, 유닉스 계열 운영 체제에서 널리 사용되며 x86-64를 지원한다. AT&T 문법을 기본으로 사용한다.
- MASM: 마이크로소프트의 매크로 어셈블러로, 사유 라이선스이며 1981년부터 오랫동안 사용되어 왔다.
- NASM: 오픈 소스(BSD) 어셈블러로, 인텔 문법을 사용하며 x86-64를 지원한다. 넷와이드 어셈블러(Netwide Assembler)의 약자이다.
- TASM: 볼랜드(Borland)의 터보 어셈블러로, 사유 라이선스이며 과거 마이크로소프트 윈도우와 도스 환경에서 사용되었다.
- HLA: High Level Assembly의 약자로, 고급 언어 수준의 구문을 지원하는 어셈블러이다.
- 이 외에도 Yasm, Open Watcom 계열(JWASM, HJWASM), A86/A386, GoAsm, TCCASM 등이 있다.
IBM 메인프레임 어셈블러
IBM 시스템/360과 System/370, z/아키텍처를 대상으로 하는 어셈블러들이다. BAL, HLASM(사유), IBM 어셈블러 D, F, H, XF, Dignus Systems/ASM 등이 포함된다. HLASM은 현재 IBM z/OS 환경에서 사실상 표준으로 사용되는 어셈블러이다.
기타 아키텍처 어셈블러
6502, ARM, 파워 아키텍처, 자일로그 Z80, PDP-10, PDP-11, VAX, PIC 마이크로컨트롤러 등 다양한 아키텍처를 대상으로 하는 어셈블러들이 분류되어 있다. 이 중 vasm은 Z80, 모토로라 6800 계열 등 여러 명령어 집합을 지원하는 다목적 크로스 어셈블러로 현재까지 개발이 유지되고 있다.
한계와 특이사항
어셈블러의 비교 목록은 완전하지 않으며, 실제로도 완전성을 보장하기 어렵다. 어셈블러 수가 많고, 개별 어셈블러마다 지원하는 플랫폼과 기능이 상이하며, 일부는 역사적으로만 가치가 있는 단종된 제품이기 때문이다. 또한 위키백과에 기술된 정보 중 일부 어셈블러(예: FASM의 ARM 크로스 어셈블러인 FASMARM)는 ARM 코드를 생성하되 x86 프로세서 위에서 실행되는 크로스 어셈블러라는 점 등 관련 참조 사항이 각주로 설명되어 있다.
결론
어셈블러의 비교는 어셈블러라는 소프트웨어 도구를 아키텍처, 라이선스, 플랫폼, 개발 상태 등의 기준으로 체계적으로 정리한 백과사전적 목록 자료이다. 사용자가 특정 프로세서 아키텍처를 대상으로 한 어셈블러를 선택하거나, 어셈블러들의 역사적·기술적 특성을 파악하는 데 참고 자료로 활용될 수 있다.