어셈블리어

어셈블리어는 기계어와 기호를 1 대 1 대응시켜 코드화한 기호 언어이다.

  • 어셈블 : 원시 프로그램을 목적 프로그램으로 바꾼다
  • 사용자가 프로그램을 쉽게 읽고 이해할 수 있음
  • 프로그램에 기호화된 명령 및 주소를 사용한다
  • CPU 마다 사용되는 어셈블리어가 다를 수 있다

어셈블리어 명령

  • 의사 명령(어셈블러 명령)
    • 원시 프로그램을 어셈블할 때 어셈블러가 해야 할 동작을 지시하는 명령
    • 프로그램의 시작과 끝을 나타내는 것, 변수를 위한 기억장소를 확보하는 것, 매크로를 정의하거나 호출하는 것
  • 실행 명령
    • 데이터를 처리하는 명령

어셈블리어의 명령어 형식

  • Label
    • 데이터를 기억할 기억 장소, 분기할 위치, 기호 상수 등에 대한 기호를 기술하는 부분
  • OP
    • 명령어를 기술하는 부분
    • OP-CODE
  • Operand
    • 피연사자가 기술 된다

어셈블러와 어셈블 과정

어셈블 과정은 2 단계로 나누어서 수행된다. 2 개의 Pass를 사용하면 기호를 정의하기 전에 사용할 수 있는 프로그램 작업이 용이하다

  • 첫 번째 Pass에서 프로그램을 한 번 읽기 때문에 두 번째 Pass에서 기호 정의전에 프로그램을 사용할 수 있다.

Table의 종류 및 구성

  • 기계 명령어 테이블
    • 어셈블리어의 실행 명령에 대응하는 기계어에 대한 정보를 가지고 있는 테이블
  • 의사 명령어 테이블
    • 의사 명령과 그 명령을 처리하는 실행 루틴의 주소를 가지고 있는 테이블
  • 기호 테이블
    • 원시 프로그램의 Label 부분에 있는 기호들을 모두 차례로 저장하는 테이블
  • 리터럴 테이블
    • 원시 프로그램의 operand 부분의 literal을 차례로 저장하는 테이블

Pass 단계에 따른 하는 일

Pass 1

  • 기호와 리터럴 정의
  • 기계 명령어의 길이 정의
  • 위치 계수기 관리
  • 기호들의 값을 ST에 기억
  • 해당하는 의사 명령어 처리

Pass 2

  • 기호 번지에 대한 상대 번지를 생성하고 목적 프로그램 생성
  • 기계 명령어 생성
  • ST에서 기호들의 값을 찾음
  • 의사 명령어 처리
  • 리터럴 발생