[시스템프로그래밍] Assembler 수행 결과물: Assembly Listing file과 Object program

장다희·2025년 4월 10일

시스템프로그래밍

목록 보기
3/9

Assembly Listing file vs Object Program

Assembler는 원래 어셈블리 코드를 읽고 기계어(Object Code)로 바꾸어
(예시: STL RETADR → 141033) ,
생성된 Object Code를 Object Program 형태로 출력 장치(storage 등)에 기록해야 한다.

Object Program은 기계어 코드만 포함되어있어 Loader에 의해 실제 메모리에 적재되어 실행되는 파일로,.obj, .bin 등으로 저장된다.

하지만 Assembler는 프로그램이 어떻게 번역되었는지를 사람이 확인할 수 있도록 원본 어셈블리 코드와 번역된 기계어를 나란히 출력해주는 파일 또한 제공한다.

이것이 바로 Assembly Listing file이다.

각각에 대한 예시는 아래 링크에서 확인할 수 있다.
SIC, SIC/XE Program 해석하기


Object Program for SIC

간단한 오브젝트 프로그램 format은 다음의 3가지 Record로 구성된다.

🟡 Header Record

Col. 1     :  H
Col. 2-7   :  프로그램 이름
Col. 8-13  :  오브젝트 프로그램의 시작 주소 (16진수)
Col. 14-19 :  오브젝트 프로그램의 전체 길이 (바이트 단위, 16진수)

🟡 Text Records

Col. 1     :  T 
Col. 2-7   :  이 레코드에 포함된 오브젝트 코드의 시작 주소 (16진수)
Col. 8-9   :  이 레코드 내 오브젝트 코드의 길이 (바이트 수, 16진수)
Col. 10-69 :  오브젝트 코드 자체 (16진수로 표시, 바이트당 2자리)
  • 텍스트 레코드 1개당 최대 30 bytes (즉, 60 hex digits)까지의 object code만 담을 수 있다.
  • 주소가 연속되지 않는 경우(directives로 인해 중간에 object code가 없는 경우)도 텍스트 레코드를 나누는 기준이 된다.

🟡 End Record

Col. 1     :  E 
Col. 2-7   :  실행이 처음 시작될 명령어의 주소 (16진수)

🟡 Modification Record

Col. 1     :  M
Col. 2-7   :  수정할 주소 필드의 시작 위치 (16진수)
Col. 8-9   :  수정할 주소 필드의 길이 (단위: Half-byte, 즉 4비트 기준, 16진수 1개) (16진수)
  • 수정할 주소 필드의 시작 위치
    → 프로그램 시작 지점을 기준으로 한 위치
    → 여기서 시작 위치는 수정 대상이 되는 주소의 가장 왼쪽 비트를 포함하는 바이트의 위치

Object File for UNIX

UNIX 시스템에서 오브젝트 파일은 6가지 구성 요소를 포함한다.

  • Header
    나머지 5개 구성 요소의 크기 및 위치 정보 설명

  • Text Segment
    기계어 코드(machine language code)가 저장됨

  • Static Data Segment
    프로그램의 생명주기 동안 유지되는 정적 데이터가 저장됨

  • Relocation Information
    프로그램이 메모리에 적재될 때, 절대 주소에 의존하는 명령어나 데이터의 위치를 식별하기 위한 정보

  • Symbol Table
    함수나 전역 변수에 대한 <라벨 – 주소> 쌍의 정보를 포함

  • Debugging Information
    디버거가 기계어 명령어와 C 소스코드를 연결시킬 수 있도록 해주는 심볼릭 정보를 포함
    어떻게 프로그램이 컴파일되었는지에 대한 간결한 설명도 포함

0개의 댓글