Assembler 실행 → object 파일 만들어짐 → memory에 올림 (loading) : 실행하기 위해 loading 하는 것
Mnemonic code를 각 할당된 기계어로 변환하기
→ translate STL to 14
symbolic operands를 기계어로 변환하기
→ translate RETADR to 1033
Build the machine instructions in the propler format
Convert the data constants in the source program into their internal machine representations
→ translate EOF to 454F46
Write the object program : 실행하기 위해 작성하는 것

START
END
BYTE ( SIC에서는 모든 게 다 3byte)
WORD : generates one-word (3byte) integer constant
// Ex)
THREE WORD 3
//THREE 라는 번지에 '3'이라는 상수를 WORD단위로 집어넣는다
//BYTE와 WORD명령은 상수를 생성하는 것
RESB : 주어진 상수 양 만큼의 BYTE 할당을 예약
RESW : 주어진 상수 양 만큼의 WORD 할당을 예약
// Ex)
ALPHA RESW 30
//ALPHA 번지에 word 단위의 공간 30개를 예약한다는 것
//값을 제외한 공간만 생성함
실행하기 위해서는 Object Program가 만들어져야 함
어셈블리어로 작성된 코드를 2번 순회하면서 첫 번째 순회때 부족한 부분을 채워준다는 의의가 있음
JEQ ENDFIL
ENDFIL LDA EOF
첫 번째 순회 때는 ‘JEQ ENDFIL’에서 ENDFIL이 뭔지 모르는데 ENDFIL을 어딘가에 저장해 두고 2번째 순회를 하면 또 나왔을 때 알 수 있을 것
| 정의해야하는 symbol | location count |
|---|---|
| ENDFIL | 1015 |
| EOF | 102A |
첫 번째 Pass 단계에서는 찾으려는 값이 어디에 위치해있는지 저장이 되며 Symbol table이 만들어질 것이다 (실제 위치만 저장되있고 명령어 코드는 완성되지 않았을 것)
8084 : adr r1, **msg** -> 8084 : adr r, **pc#(msg-808c)**
//808c를 빼주는 이유는 PC를 빼줘야 해서임
/*
adr이란 것을 실제 정의되있는 명령어가 아니라,
실제로 어셈블러를 만들고자 하면 우리가 직접 만들어야 함
*/
→ msg 주소 값은 상대주소로 가져와야 하기 때문에 현재 PC와 msg 절대 주소 값의 차이를 PC에 더해줘야 함
(현재는 8084가 맞지만 pc는 다음에 실행할 명령어인 808c이다)