Bit: 기억 단위에서 가장 작은 단위인 컴퓨터의 기억 장치의 기본으로 0과 1 2개의 정보를 가진다. n개의 비트는 총 2n개의 정보를 저장한다.
Byte: 의미를 가지는 기억 단위로써 8 bit로 구성이 된다. 2^8개의 정보(256개)를 저장한다. 정수를 표현하면 0 ~ 255까지의 숫자 표현 가능
Word: 컴퓨터에서 연산의 기본 단위가 되는 정보의 양을 뜻한다. 일정한 수의 비트로 이루어지며 컴퓨터의 모든 명령들은 이 word를 단위로 수행한다.
16 비트 컴퓨터, 32 비트 컴퓨터처럼 이 word의 크기는 CPU와 범용 레지스터의 길이에 따라 달라질 수 있다. (16 bit 컴퓨터에서의 워드는 2 byte로 명령 수행)
Memory : 24 bit word, 32,768(2^15) bytes
Register : 24 bits 크기의 레지스터가 5개 (A, X, L, PC, SW)
A : 계산을 함, X : Index와 같은 위치를 저장, L : Sub routine을 하기 위한 주소 기억, PC : 다음에 실행할 명려어 주소를 기억, SW : compare후 결과를 저장
Data Formats : Integer (24), Character (8)
-- SIC의 확장 버전 (차이점)
Memory : 32,768(2^15) bytes에서 1 megabyte(2^20)으로 크기 확장, 더 복잡한 주소 지정이 가능하다.
Register : 기존 레지스터에서 4개의 레지스터가 추가됨 (B, S, T, F)
B: base 레지스터, S, T: 일반 수행 레지스터, F: 부동 소수점 누산기 (48 비트)
Data Formats : 부동 소수 형식이 추가됨 (48 비트)
SIC -
Format 1 (1 byte)
Format 2 (2 bytes)
SIC/XE -
Format 3 (3 bytes)
Format 4 (4 bytes)
SIC는 직접, 인덱스 주소 지정 방식만을 지원함
SIC/XE는 base와 pc를 기반으로 한 상대 주소 지정 방식, 즉시 주소 지정, 간접 주소 지정 방식을 지원함.
1 pass:
1. 프로그램내의 모든 문장에 주소를 배정한다.
(명령어의 크기 = 3 byte, (ex. 1000, 1003, 1006, 1009, 100C, ...))
2. Pass 2에서 사용하기 위한 모든 레이블에 배정된 주소 값들을 저장한다.
(Symbol Table 생성)
3. 어셈블러 지시자들에 관련된 처리를 부분적으로 행한다.
(BYTE, RESW등에 의해 정의되는 데이터 영역 길이 결정)
2 pass:
1. 명령어를 어셈블한다. (명령어 코드를 번역하고 주소를 조사한다)
2. BYTE, WORD등으로 정의되는 데이터 값을 생성한다.
3. PASS1에서 이루어지지 않은 어셈블러 지시자를 처리한다.
(아마도 전방참조에 의해서 저장하지 못하였던 주소들?)
4. 목적 프로그램과 어셈블러 리스트를 출력한다. (실직적 결과물)
레코드: 필드(field)의 집합으로, 데이터로 다루어지는 단위. 처리의 기본 단위라 할 수 있음. 이 레코드의 집합 단위가 파일(file)임.
어셈블러: 소스 프로그램을 가지고,
Pass 1을 통해서 결과 파일을 생생한다. 이때 주소 배정을 처리하기 위한 변수 LOCCTR을 이용하여서 각 SYMBOL들의 이름, 주소, flag 같은 것을 저장하는 SYMTAB을 생성하고, 연상 명령어를 찾아 기계어로 변역하는 OPTAB을 생성한다.
Pass 2를 통해서 결과 파일과 OPTAB, SYMTAB을 이용하여서 최종적으로 OBJECT PROGRAM을 생성한다.
링킹 로더:
어셈블러로 부터 생성된 오브젝트 프로그램 (제어섹션)을 이용하여, PASS 1을 통해 CSADDR (제어섹션 주소값 연산)을 하고 각 외부 Symbol에 주소를 배정하여 ESTAB을 생성한다.
그리고 PASS2에서 해당 ESTAB을 통해 relocation, linking을 실행하고 loading을 통해 실질적인 메모리에 업로드 한다.
ESTAB: 외부 Symbol table
이름, 주소, 어떤 제어섹션에 정의 되어 있는지 정보가 저장되어진 Hash 구성이다.
PROGADDR (Program Load Address):
링크드 프로그램이 로드될 메모리 상의 시작 주소이다. (운영체제로 부터 제공)
CSADDR (Control Section Address):
로더에 의해 읽어진 제어섹젼읜 시작 주소이다. 제어섹션에 있는 상대주소를 더함으로써 CSADDR을 계산한다.
Absolute Loader : 절대 로더로써 링킹, 재배치가 필요없다. 1 Pass로 실행이 된다. (절대 로더의 종류 = 부트스트랩 로더)
절대 로더의 단점:
1. 프로그래머가 메모리에 로드될 실제 주소를 명시해주어야하며,
2. 여러 프로그램을 동시에 실행하기 힘들다.
3. 그리고 서브 루틴 라이브러리 사용이 힘들다.
해결법:
1) 프로그램 재배치
재배치로더, 상대로더에 의해서 재배치가 이루어진다. 재배치의 수가 적을 때는 수정 레코드 방식이 효율적이고, 재배치의 수가 많을 때는 재배치 비트가 더 효율적이다. 이는 고정된 형식과 직접 주소 모드가 필요한다.
2) 프로그램 링킹
로더에 의해서 제어섹션들이 링크, 재배치, 로드된다. 외부 참조를 하기 위해서는 메모리에 로드가 먼저 되어야한다.
재배치 비트 : 명령어 형식이 지정되어있을 땐, 재배치 비트를 통해서 각 명령어들을 연관 지을 수 있다. 각각의 재배치 비트들은 bit mask로 모여서 Text record에 저장 될 수 있다.