어셈블리어, 어셈블러 언어는 기계여와 일대일 대응이 되는 컴퓨터 프로그래밍 저급 언어. 컴퓨터 구조에 따라 사용하는 기계어가 달라지며, 대응되어 만들어지는 어셈블리어에도 차이가 있다. CPU마다 지원하는 오퍼레이션의 타입과 개수는 제각각이며, 레지스터의 크기와 개수, 저장된 데이터 형의 표현도 각기 다르기 때문.
모든 범용 컴퓨터는 기본적으로 동일한 기능을 수행, 기능을 어떤 과정을 거쳐 수행하는지는 차이가 있으며, 이런 차이는 어셈블리어에 반영된다.
개념
- 어셈블러
어셈블러(assembler)는 어셈블리어를 기계어 형태의 오브젝트 코드로 해석해 주는 컴퓨터 언어 프로그램이다. 어셈블러는 기본 컴퓨터 명령어를 프로세서가 기본 연산을 수행하는데 사용할 수 있는 비트 패턴으로 변환시킨다.
기계어를 어셈블리어로 바꾸는 것을 역 어셈블러(disassembler)라고 한다. 고급 언어와 달리 어셈블리어는 간단한 문장에 대해 기계어와 일대일 대응 관계를 가지지만, 자주 쓰이는 몇 명령은 둘 이상의 기계어 명령을 묶어 하나의 엄셈블리 명령어에 대응시키기도 한다.
어셈블리 명령 부호를 오피코드(operation code)로 해석할 뿐 아니라, 메모리의 위치들을 이름으로 표시하는 기능, 매크로를 통한 문장 치환 기능을 함께 제공한다. 높은 수준의 어셈블러는 고급 제어 구조, 높은 수준의 프로시져, 함수 선언 및 호출, 높은 수준의 자료형 추상화 같은 높은 수준의 언어 추상화 기능을 제공하기도 한다.
- 패스의 수
어셈블러에는 두 가지 종류가 있다. 이는 실행 프로그램을 만들기 까지 얼마나 많은 패스가 소스를 거치는지에 따라 결정.
1. 1패스(one-pass) 어셈블러는 소스 코드를 한 번만 거침.
2. 다중 패스(multi-pass) 어셈블러는 처음 패스에서 모든 기호와 관련 값이 포함된 테이블 하나를 만들고, 추후 패스에서 테이블을 이용하여 코드를 만들어냄. 다중 패스 어셈블러는 링크 프로세스(linker)를 더 빠르게 하는 장점이 있다.