어셈블리어와 어셈블러
어셈블리어
어셈블리어는 기계어와 기호를 1 대 1 대응시켜 코드화한 기호 언어이다.
- 어셈블 : 원시 프로그램을 목적 프로그램으로 바꾼다
- 사용자가 프로그램을 쉽게 읽고 이해할 수 있음
- 프로그램에 기호화된 명령 및 주소를 사용한다
- CPU 마다 사용되는 어셈블리어가 다를 수 있다
어셈블리어 명령
- 의사 명령(어셈블러 명령)
- 원시 프로그램을 어셈블할 때 어셈블러가 해야 할 동작을 지시하는 명령
- 프로그램의 시작과 끝을 나타내는 것, 변수를 위한 기억장소를 확보하는 것, 매크로를 정의하거나 호출하는 것
- 실행 명령
- 데이터를 처리하는 명령
어셈블리어의 명령어 형식
- Label
- 데이터를 기억할 기억 장소, 분기할 위치, 기호 상수 등에 대한 기호를 기술하는 부분
- OP
- 명령어를 기술하는 부분
- OP-CODE
- Operand
- 피연사자가 기술 된다
어셈블러와 어셈블 과정
어셈블 과정은 2 단계로 나누어서 수행된다. 2 개의 Pass를 사용하면 기호를 정의하기 전에 사용할 수 있는 프로그램 작업이 용이하다
- 첫 번째 Pass에서 프로그램을 한 번 읽기 때문에 두 번째 Pass에서 기호 정의전에 프로그램을 사용할 수 있다.
Table의 종류 및 구성
- 기계 명령어 테이블
- 어셈블리어의 실행 명령에 대응하는 기계어에 대한 정보를 가지고 있는 테이블
- 의사 명령어 테이블
- 의사 명령과 그 명령을 처리하는 실행 루틴의 주소를 가지고 있는 테이블
- 기호 테이블
- 원시 프로그램의 Label 부분에 있는 기호들을 모두 차례로 저장하는 테이블
- 리터럴 테이블
- 원시 프로그램의 operand 부분의 literal을 차례로 저장하는 테이블
Pass 단계에 따른 하는 일
Pass 1
- 기호와 리터럴 정의
- 기계 명령어의 길이 정의
- 위치 계수기 관리
- 기호들의 값을 ST에 기억
- 해당하는 의사 명령어 처리
Pass 2
- 기호 번지에 대한 상대 번지를 생성하고 목적 프로그램 생성
- 기계 명령어 생성
- ST에서 기호들의 값을 찾음
- 의사 명령어 처리
- 리터럴 발생
Comment