본문 바로가기
Computer Science/시스템 프로그래밍

어셈블러의 작동과정 및 오브젝트 코드 생성 과정, 어셈블러 동작 메커니즘

by 큌 2024. 4. 19.
반응형

2024.03.03 - [Computer Science/시스템 프로그래밍] - SIC/XE 아키텍처: 기본 구조에서 명령어 집합까지 (2)

 

SIC/XE 아키텍처: 기본 구조에서 명령어 집합까지 (2)

Translating and Starting a Program 컴퓨터의 초창기에 프로그래머들은 기계 코드 코딩 (다른 것이 없었기 때문에) 기계 코드는 이진 코드(예: 11100110000001100001100101110000)이며, 사람이 읽을 수 없지만(극도

perfect-occasion.co.kr

Fig. 2.2: Program from Fig. 2.1 with Object Code

  • 그림 2.1과 동일한 프로그램, 각 문장에 대해 생성된 객체 코드
    • 'Loc' 열은 조립된 프로그램의 각 부분에 대한 기계 주소(16진수)를 제공
      • 프로그램은 주소 1000에서 시작한다고 가정
    • 소스 프로그램을 오브젝트 코드로 변환하는 데 필요한 여러 기능:
      1. 니모닉 연산 코드를 해당하는 기계어 코드로 변환
      2. → [예: STL을 14로 번역(10행)]
      3. 기호 피연산자해당 기계 주소로 변환
      4. → [예: RETADDR을 1033으로 변환(10행)]
      5. 적절한 형식으로 기계 명령어를 작성(어드레싱 모드 포함)
      6. 소스 프로그램에 지정된 데이터 상수를 내부 기계 표현으로 변환
      7. → [예: EOF를 454F46으로 변환(80행)]
      8. object 프로그램과 어셈블리 목록 파일 작성
        • 어셈블리 목록 파일은 프로그램 번역 방법을 확인하는 데 사용
      9. → [예를 들어, 그림 2.3은 목적 프로그램을 나타내고 어셈블리 목록은 그림 2.2와 유사함]

어셈블리 코드가 어떻게 오브젝트 코드로 변환되는지에 대한 내용

위 슬라이드의 5가지 함수가 작업을 통해 각각의 작업을 적절하게 변환

최종적으로 오브젝트 프로그램과 어셈블리 리스트 파일을 얻음

그림. 2.2에서 각 statement가 어떻게 object 프로그램으로 변환되는 지확인 가능

오브젝트 프로그램은 3가지 레코드로 구성

오브젝트의 일부 청크가

스타팅 어드레스는 청크가 어디서 로드되는지, 이후 동그라이는 길이

Fig. 2.2 (Continued)

  • 위의 모든 기능은 소스 프로그램을 한 줄씩 순차적으로 처리하여 쉽게 수행할 수 있으나, 주소를 번역하는 두 번째 기능에는 문제가 있음
    • <10행> 문장을 고려 → 이 명령어는 forward reference 정방향 참조를 포함
  • 이 때문에 대부분의 어셈블러는 소스 프로그램을 두 번 통과
    • 첫 번째 패스는 레이블에 주소를 할당하는 동안 레이블 정의에 대해 소스 프로그램을 스캔
    • 두 번째 패스는 앞에서 설명한 실제 번역의 대부분을 수행

오브젝트 코드 직접 분석해보기

이러한 함수를 분석해서 어셈블러가 작업

아직 정의되지 않은 기호를 사용할경우 어셈블러가 이것을 처리하지 못함 EX) RETADR

이것을 해결하기 위해 투패스 알고리즘 사용

Fig. 2.3: Object Program corresponding to Fig. 2.2

  • 어셈블러는 생성된 object 코드를 일부 출력 장치(즉, 저장 장치)에 작성해야 하며 이 object 프로그램은 나중에 실행을 위해 메모리에 로드
  • 사용된 단순 개체 프로그램 형식에는 3가지 유형의 레코드가 포함
    • Header record에는 프로그램 이름, 시작 주소 및 길이가 포함
    • Text records에는 프로그램의 번역된 지침 및 데이터와 함께 로드될 주소 표시가 포함
    • End record는 목적 프로그램의 끝을 표시하고 실행이 시작될 프로그램의 주소를 지정

Three Types of Records

  • Header record
    • Col. 1 H
    • Col. 2-7 프로그램 이름
    • Col. 8-13 object 프로그램의 시작 주소(hex)
    • Col. 14-19 byte 단위의 object 프로그램 길이(hex)
  • Text record
    • Col. 1 T
    • Col. 2-7 이 레코드의 object 코드 시작 주소(hex)
    • Col. 8-9 이 레코드의 byte 단위의 object 코드 길이 (hex)
    • Col. 10-69 Object 코드, 16진수로 표시 (object 코드 byte 당 2열)
  • End record
    • Col.1 E
    • Col.2-7 object 프로그램에서 실행 가능한 첫번째 명령어 주소(hex)

Fig. 2.3

  • 기호 ^는 필드를 시각적으로 구분하는 데 사용됨
    • 물론 실제 목적 프로그램에는 이러한 기호가 존재하지 않음
  • 주소 1033-2038에 해당하는 개체 코드가 없음, 이 저장소는 실행 중에 프로그램에서 사용하기 위해 로더에 의해 단순히 예약

1033-2038의 오브젝트 코드는 포함 안됨

이 영역은 RESW나 RESB로 정의된 지시문 영역

메모리 할당은 어셈블러가 하지 않음, 로더가 하는 작업 그렇기 때문에 오브젝트 코드를 만들 필요가 없음

프로그램 파일에 포함 X

The Object File for UNIX (1/2) 1

  • UNIX 시스템용 object 파일에는 일반적으로 다음과 같은 6개의 개별 부분이 존재
    • Header, object 파일의 다른 5개 영역의 크기 및 위치를 설명
    • 기계어 코드를 포함하는 Text Segment
    • 프로그램의 수명 동안 할당된 데이터를 포함하는 Static Data Segment
      • UNIX를 통해 프로그램은 static data 정적 데이터(프로그램 전체에 할당됨)와 dynamic data 동적 데이터(프로그램에서 필요에 따라 증가하거나 축소할 수 있음)를 모두 사용 가능

 


Static Data Segment: 스태틱 변수 혹은 상수

The Object File for UNIX (1/2) 2

  • UNIX 시스템용 개체 파일에는 일반적으로 다음과 같은 6개의 개별 부분이 존재
    • Header, 오브젝트 파일의 다른 5개 영역의 크기 및 위치를 설명
    • 기계어 코드를 포함하는 Text Segment
    • 프로그램의 수명 동안 할당된 데이터를 포함하는 Static Data Segment
      • UNIX를 통해 프로그램은 static data 정적 데이터(프로그램 전체에 할당됨)와 dynamic data 동적 데이터(프로그램에서 필요에 따라 증가하거나 축소할 수 있음)를 모두 사용 가능

 


다이나믹 데이터는 malloc과 유사

그림은 메모리 레이아웃을 표현한 것

스테틱 데이터는 스테틱 변수나 상수, 이것이 스테틱 데이터에 로드

런타임 메모리 영역은 프로그램의 필요에 따라 유동적으로 조정, 힙과 스택

The Object File for UNIX (2/2)

  • UNIX 시스템용 개체 파일에는 일반적으로 다음과 같은 6개의 개별 부분이 있습니다.
    • Relocation Information, 프로그램이 메모리에 로드될 때 절대 주소에 의존하는 명령어 및 데이터 단어 식별
    • Symbol Table, 함수 및 전역 변수에 대한 <lable – address> 정보를 포함
    • Debugging Information, 디버거가 기계 명령어를 C 소스 파일과 연결할 수 있도록 기호 정보를 포함
      • 프로그램 모듈이 어떻게 컴파일되었는지에 대한 간략한 설명 

 


Symbol Table: <lable – address> 매핑 진행 → 어셈블러 내부에서 진행

로더가 사용하는 리로케이션 인포메이션

유닉스는 운영체제가 심볼 테이블을 가짐

SIC에는 심볼 테이블이 없음 → 어셈블러 내부에서 관리

디버깅 정보도 보유

2-pass Assembler (1/2)

  • Pass 1: Define symbols 기호 정의
    • 어셈블리 코드 줄에서 Read a statement 명령문 읽기
    • 이 명령문에 Assign an address 주소 할당: LOCCTR(위치 카운터)을 사용하여 N(워드 주소 지정 또는 바이트 주소 지정)으로 주소 증가
    • Pass 2에서 사용하기 위해 모든 레이블(Symbol Tables에서)에 할당된 Save address values 주소 값 저장
    • 상수 선언 또는 공간 예약과 같은 Perform some processing of assembler directives 어셈블러 지시문 처리를 수행
      • 여기에는 BYTE, RESW 등에 의해 정의된 데이터 영역의 길이를 결정하는 것과 같이 주소 할당에 영향을 미치는 처리가 포함
    → Pass 1은 일반적으로 할당된 주소, 오류 표시기 등과 함께 각 소스 문을 포함하는 intermediate file 중간 파일을 작성

첫번째 패스에서는 오브젝트 파일이 들어옴

어셈블러가 한줄씩 읽의면서 정의하고 배치함

address values는 로케이션 카운터라는 전역 변수로 관리

로케이션 카운터를 통해 할당하고, N만큼 업데이트

N은 바이트, 워드 어드레싱에 따라 달라짐

N은 앞의 어드레싱을 어사인한 스테이트먼트 길이에 따라 달라짐

심볼릭 레이블과 어사인 어드레싱 벨류를 심볼테이블로 만들어줌

데이터를 정의하는 지시문을 처리, 이러한 명령어도 어드레이스 벨류를 가져야하기 때문

처리하며 주소 할당

중간파일이 만들어짐

소스 스테이트먼트와 에러 인디케이터들을 포함

2-pass Assembler (2/2)

  • Pass 2: Assemble instructions & generate object program 명령어 조립 및 목적 프로그램 생성
    • Read in a line of code 한 줄의 코드 읽기: 1차 패스에서 생성된 중간 파일을 2차 패스의 입력으로 사용
    • OP Code Table을 사용하여 Translate operation code 작업 코드 번역
    • Symbol Table을 사용하여 Change labels to addresses 레이블을 주소로 변경
    • 패스 1 동안 수행되지 않은 Perform processing of assembler directives 어셈블러 지시문 처리 수행
    • Produce object program 목적 프로그램 생성

앞에서 만든 파일들이 인풋으로 들어옴

오브젝트 파일을 만들고 프로그램을 만드는 것을 목적

명령어 테이블과 심볼 테이블로 니모닉 코드를 변환

Two Data Structures of SIC Assembler (1/2)

  • Operational Code Table(OPTAB) 운영 코드 테이블
    • 니모닉 연산 코드와 이에 상응하는 기계어를 포함
      • 또한 가변 크기의 명령어 형식과 길이를 포함 가능(더 복잡한 어셈블러의 경우)
    • Pass 1에서는 니모닉 코드를 조회하고 유효성을 검사하는 데 사용
    • Pass 2에서 op 코드를 기계어로 번역하는 데 사용
    • 일반적으로 해시 테이블로 구성
      • 키: 니모닉 코드
      • 최소한의 검색으로 빠른 검색
      • 한번 준비된 OPTAB은 변경되지 않음

오피코드 테이블은 절대 변하지 않은 읽기 전용

패스1에서는 제대로된 니모닉 코드를 사용하는지 검증에 사용

패스2에서는 실제로 변환하는데에 사용

그 테이블을 보고 어셈블러가 변환

해쉬 테이블 사용, 키는 니모닉 코드

Two Data Structures of SIC Assembler (2/2)

  • Symbol Table (SYMTAB) 기호 테이블
    • 소스 프로그램의 각 레이블에 대한 이름 및 값(주소)을 플래그(오류 조건)와 함께 포함
      • 또한 유형이나 길이와 같은 다른 정보를 포함 가능
    • Pass 1에서 레이블은 할당된 주소(LOCCTR: 위치 카운터)와 함께 SYMTAB에 입력
    • Pass 2에서 피연산자로 사용된 기호는 SYMBOL에서 조회되어 어셈블된 명령어에 삽입될 주소 얻음
    • 일반적으로 해시 테이블
      • 효율적인 삽입 및 검색이 필요

 


심볼릭 레이블과 할당한 주소에 매핑을 가지고 있음

추가적인 에러 플래그나 길이 타임같은 추가 적인 정보를 가짐, 시스템 마다 다르다

패스1에서는 이러한 테이블 구성이 목적

패스2에서는 테이블을 사용하여 니모닉 코드를 번역해 오브젝트 코드를 만듬

심볼테이블도 해쉬테이블로 구성

Algorithm for pass 1,2 of Assembler

  • Fig. 2.4(a): Algorithm for Pass 1 of assembler
  • Fig. 2.4(b): Algorithm for Pass 2 of assembler

2024.04.20 - [Computer Science/시스템 프로그래밍] - SIC/XE Assembly Program with Object Code

 

SIC/XE Assembly Program with Object Code

2024.04.19 - [Computer Science/시스템 프로그래밍] - 어셈블러의 작동과정 및 오브젝트 코드 생성 과정, 어셈블러 동작 메커니즘 어셈블러의 작동과정 및 오브젝트 코드 생성 과정, 어셈블러 동작 메커

perfect-occasion.co.kr

 

반응형