Two Pass Assmebling
on System
어셈블리 언어로 작성된 소스코드(원시 코드)를 기계어에 해당하는 목적 코드로 바꿔주는 작업을 Assembling 이라고 하며, 이를 수행하는 시스템 소프트웨어가 Assembler 이다.
기계어를 만드는 과정으로 사람들이 전통적으로 사용해오며 정형화시킨 방법이 있는데, 이를 Two Pass Assembling
이라고 한다.
Two Pass Assmebler
어셈블리어로 작성된 원시 코드를 2번 훑으면서 어셈블 하기 때문에 Two-Pass 라는 이름이 붙었다.
첫번째 순회에서는 Symbol Table
을 만들고, 두번째 순회에서는 심볼 테이블을 가지고 기계어로 일대일 대응되는 명령어를 조립한다.
- 주소를 지정하는 ORG 에 맞게 각 명령어들이 들어갈 주소가 지정된다.
- 명령어를 조립하기 위한 OP Code 와 Symbol 을 사람이 보기 편하게 나뉘어 작성되어 있기 때문에, OP Code Table 과 Symbol Table 을 구성한다.
- OP Code Table 에는 Load 와 같은 1XX 뿐만 아니라, 500, 501 등 모든 니모닉 명령 코드를 담는다.
1-Pass
과정에서 Symbol 부분을 위에서 아래로 훑으며 각 심볼들이 위치할 주소값을 테이블에 담는다.2-Pass
과정에서는, 만들어진 OP Code Table 과 Symbol Table 을 통해 명령어를 기계어로 조립한다. 예를 들어 (LDA, i) 는 테이블을 참조했을 때 190 으로 변환되고, (SUBA, ZERO) 는 499 로, (IN, ) 은 500 으로 변환되는 것이다.
OP Code Table | Symbol Table | addr | ||
---|---|---|---|---|
LDA | 1__ | i | 90 | |
STA | 2__ | N | 91 | |
ADDA | 3__ | tmp | 92 | |
SUBA | 4__ | ONE | 98 | |
COB | 500 | ZERO | 99 | |
IN | 501 | |||
OUT | 502 | |||
JMP | 6__ |