어셈블러의 설계 알고리즘과 자료구조
본 내용은
"
시스템프로그래밍 ) 어셈블러의 설계 알고리즘과 자료구조에 대하여 조사하고, 어셈블러는 이중패스로 설계해야 하는 이유를 쓰시오
"
의 원문 자료에서 일부 인용된 것입니다.
2023.08.12
문서 내 토픽
  • 1. 어셈블러의 설계 알고리즘
    어셈블러는 두 개의 패스로 구성됩니다. 패스 1은 명령어 표를 참조하여 명령어들의 상대 주소를 결정하고, 기호표를 작성하여 기호의 재배치 여부를 결정하는 역할을 합니다. 패스 2는 명령어를 2진 코드로 대체하고 명령어의 기호를 기호표에 있는 값으로 대체하는 역할을 합니다.
  • 2. 어셈블러의 자료구조
    패스 1과 패스 2는 각각 다른 역할을 수행하므로 연관된 데이터베이스도 달라 각각의 자료구조를 갖습니다. 패스 1은 원시 프로그램, 명령어 및 지시어 표를 입력으로 받고 기호 표를 출력합니다. 패스 2는 패스 1의 입력과 기호 표를 입력으로 받아 기계어 코드로 작성된 목적 프로그램을 출력합니다.
  • 3. 이중패스로 설계해야 하는 이유
    어셈블러는 입력 받은 원시 프로그램을 두 번 읽게 되는 이중패스 구조로 설계됩니다. 단일 패스로 설계할 경우 기호를 정의하기 전 기호를 사용하는 호이스팅(전향 참조)이 발생하게 되므로, 이를 방지하기 위해 이중패스 구조를 사용합니다.
Easy AI와 토픽 톺아보기
  • 1. 어셈블러의 설계 알고리즘
    어셈블러의 설계 알고리즘은 매우 중요한 부분입니다. 어셈블러는 기계어 코드를 생성하는 프로그램으로, 이를 위해서는 효율적이고 정확한 알고리즘이 필요합니다. 어셈블러 알고리즘은 크게 두 가지 부분으로 나뉩니다. 첫째, 소스 코드를 파싱하여 명령어와 피연산자를 분리하는 부분입니다. 이 부분에서는 문법 분석과 토큰화 등의 기술이 사용됩니다. 둘째, 분리된 명령어와 피연산자를 이용하여 기계어 코드를 생성하는 부분입니다. 이 부분에서는 명령어 테이블 검색, 주소 계산, 레지스터 할당 등의 기술이 사용됩니다. 이러한 알고리즘은 어셈블러의 성능과 정확성에 직접적인 영향을 미치므로, 설계 시 많은 고려가 필요합니다.
  • 2. 어셈블러의 자료구조
    어셈블러의 자료구조는 어셈블러의 핵심적인 부분입니다. 어셈블러는 소스 코드를 분석하고 기계어 코드를 생성하는 과정에서 다양한 자료구조를 사용합니다. 대표적인 자료구조로는 기호 테이블, 명령어 테이블, 피연산자 스택 등이 있습니다. 기호 테이블은 소스 코드에 정의된 기호(레이블, 변수 등)와 해당 주소를 저장하는 자료구조입니다. 명령어 테이블은 기계어 명령어와 해당 정보(피연산자 개수, 피연산자 타입 등)를 저장하는 자료구조입니다. 피연산자 스택은 명령어의 피연산자를 저장하는 자료구조입니다. 이러한 자료구조들은 어셈블러의 핵심 기능을 구현하는 데 필수적이며, 설계 시 성능과 메모리 효율성을 고려해야 합니다.
  • 3. 이중패스로 설계해야 하는 이유
    어셈블러를 이중패스로 설계해야 하는 이유는 다음과 같습니다. 첫째, 소스 코드에 정의된 기호(레이블, 변수 등)의 주소를 결정하기 위해서입니다. 소스 코드에 정의된 기호는 기계어 코드로 변환되는 과정에서 주소가 결정되어야 하는데, 이를 위해서는 소스 코드 전체를 한 번 분석해야 합니다. 둘째, 명령어와 피연산자의 크기를 결정하기 위해서입니다. 명령어와 피연산자의 크기는 기계어 코드의 크기를 결정하므로, 이를 정확히 계산하기 위해서는 소스 코드 전체를 한 번 분석해야 합니다. 이와 같이 이중패스 방식은 소스 코드 분석과 기계어 코드 생성을 분리함으로써 보다 정확하고 효율적인 어셈블러 설계가 가능합니다.
주제 연관 리포트도 확인해 보세요!