본문 바로가기
C.E/SystemProgramming

기본 어셈블러의 기능

by 책읽는구리 2008. 12. 7.
반응형

2.1 기본 어셈블러의 기능

1.연산명령어

2.어셈블러 지시자

-버퍼

2.1.1 단순 SIC 어셈블러

어셈블러의 기능 : hello.s -> hello.o

1.연상명령어

-전방참조 : 나중에 정의되어지는 레이블을 참조하는 것

2.어셈블러 지시자(의사 명령어)

-목적 프로그램에 영향은 주지만, 기계 명령어로 번역은 되지 않는다. 즉 어셈블러 자체의 명령어라고 보면 된다.

-Ex) BYTE, WORD, RESB, RESW, END, START, BASE, NOBASE, LTORG, EQU, ORG

<목적 프로그램의 형식>

-헤더: 프로그램 이름, 시작 주소, 프로그램의 전체 길이

-텍스트: 번역된 명령어, 프로그램 데이터, 프로그램이 로드될 주소 지시

-엔드: 프로그램의 끝을 알리고 프로그램 실행이 시작될 주소(=실행될 첫 번째 명령어 주소)를 알려준다.

* 목적 코드에 RESW, RESB는 나타나지 않는 이유 : 이 영역을 실행핳는 동안 로더에 의해 예약되어 진다.

<어셈블러 두 패스의 일반적인 기능>

패스 1 :

1.프로그램 내의 모든 문에 주소를 배정한다.

2. 레이블에 배정된 주소 값들을 저장 -> SYMTAB에 저장

3.어셈블러 지시자 일부분 처리(RESW, REWB를 고려하면서 주소 배정)

패스 2:

1.명령어 어셈블(=연산자 코드 번역하고 주소를 조사)

2.BYTE, WORD 등으로 정의되는 데이터 값을 생성

3.pass1 동안에는 이루어지지 않는 어셈블러 지시자 처리

4.목적 프로그램과 어셈블러 리스트를 출력한다.

<목적코드 생성후>

-생성된 목적 코드를 출력장치로 보내고, 이 목적 프로그램은 나중에 실행되기 위해 메모리에 로드 된다.

2.1.2 어셈블러 알고리즘과 자료구조

1. OPTAB(연산 코드 테이블)

-연상 명령어를 찾아서 기계어로 번역

-연상 명령어 코드, 해당 기계어 포함

-OPTAB은 보통 연상 명령어 코드를 키로 갖는 해쉬 테이블로 구성

-OPTAB은 어셈블러가 작성될 때 미리 정의된다.

-OPTAB은 명령코드가 추가 또는 삭제될 필요가 없기 때문에 정적 테이블로 구성

-패스1에서 원시 프로그램의 명령 코드를 조사하고 확인하는 데 사용

-패스2에서는 명령어를 기계로 번역하는데 사용된다.

(SIC의 경우)

-위의 패스 1,2가 동시에 함께 이루어질 수 있다.

(복잡한 SIC/XE 경우 WHY. 명령어의 길이가 서로 다르다, 4가지 방식)

-패스1 : 명령어의 길이를 OPTAB로부터 조사하여 명령어 길이만큼 LOCCTR증가

-패스2 : 명령어 형식에 대한 정보와 목적 코드 특성을 알기 위해 OPTAB 조사

*(복잡한 어셈블러) : 명령어 형식, 길이까지 포함

2. SYMTAB(기호 테이블)

-레이블들에 배정된 값(=주소)을 저장하는데 사용

-OPTAB과 마찬가지로 삽입과 검색의 효율을 위해 해쉬 테이블로 구성, SYMTAB은 추가는 빈번하나 삭제는 거의 발생하지 않으므로 삭제의 효율성은 중요치 않다.

-레이블의 이름과 값(=주소), 오류 상태(한 기호가 두 장소에서 정의)를 나타내는 플래그를 포함, 또한 레이블이 붙여진 데이터 영역이나 명령어의 종류, 길이 등에 대한 정보도 포함할 수 있다.

패스 1: 레이블은 원시프로그램에서 만날때마다 배정되는 주소와 함께 SYMTAB에 입력

패스 2: 피연산자로 사용된 기호는 SYMTAB을 조사해 주소를 찾아낸다.

-LOCCTR(위치 계수기) : 주소 배정을 처리하기 위한 변수로 START문에서 나타낸 시작 주소로 초기화된다. 어셈블된 명령어나 생성된 데이터 영역의 길이가 LOCCTR에 더해지고 원시 프로그램에서 레이블을 만날 때 마다 LOCCTR의 현재 값을 레이블의 주소로 배정

-원시 프로그램이 두 패스에 대해 모두 입력으로 사용 가능. 즉 패스 1의 내용을 중간 파일로 저장해 패스 1의 입력으로 사용하면, 패스 1동안에 수행되어지는 작업이 보존되고 패스 2에서 다시 같은 작업을 할 필요가 없다

반응형

댓글