Assembler는 원래 어셈블리 코드를 읽고 기계어(Object Code)로 바꾸어
(예시: STL RETADR → 141033) ,
생성된 Object Code를 Object Program 형태로 출력 장치(storage 등)에 기록해야 한다.
Object Program은 기계어 코드만 포함되어있어 Loader에 의해 실제 메모리에 적재되어 실행되는 파일로,.obj, .bin 등으로 저장된다.
하지만 Assembler는 프로그램이 어떻게 번역되었는지를 사람이 확인할 수 있도록 원본 어셈블리 코드와 번역된 기계어를 나란히 출력해주는 파일 또한 제공한다.
이것이 바로 Assembly Listing file이다.
각각에 대한 예시는 아래 링크에서 확인할 수 있다.
SIC, SIC/XE Program 해석하기
간단한 오브젝트 프로그램 format은 다음의 3가지 Record로 구성된다.
Col. 1 : H
Col. 2-7 : 프로그램 이름
Col. 8-13 : 오브젝트 프로그램의 시작 주소 (16진수)
Col. 14-19 : 오브젝트 프로그램의 전체 길이 (바이트 단위, 16진수)
Col. 1 : T
Col. 2-7 : 이 레코드에 포함된 오브젝트 코드의 시작 주소 (16진수)
Col. 8-9 : 이 레코드 내 오브젝트 코드의 길이 (바이트 수, 16진수)
Col. 10-69 : 오브젝트 코드 자체 (16진수로 표시, 바이트당 2자리)
Col. 1 : E
Col. 2-7 : 실행이 처음 시작될 명령어의 주소 (16진수)
Col. 1 : M
Col. 2-7 : 수정할 주소 필드의 시작 위치 (16진수)
Col. 8-9 : 수정할 주소 필드의 길이 (단위: Half-byte, 즉 4비트 기준, 16진수 1개) (16진수)
UNIX 시스템에서 오브젝트 파일은 6가지 구성 요소를 포함한다.

Header
나머지 5개 구성 요소의 크기 및 위치 정보 설명
Text Segment
기계어 코드(machine language code)가 저장됨
Static Data Segment
프로그램의 생명주기 동안 유지되는 정적 데이터가 저장됨
Relocation Information
프로그램이 메모리에 적재될 때, 절대 주소에 의존하는 명령어나 데이터의 위치를 식별하기 위한 정보
Symbol Table
함수나 전역 변수에 대한 <라벨 – 주소> 쌍의 정보를 포함
Debugging Information
디버거가 기계어 명령어와 C 소스코드를 연결시킬 수 있도록 해주는 심볼릭 정보를 포함
어떻게 프로그램이 컴파일되었는지에 대한 간결한 설명도 포함
