상대 주소 지정 방식 사용
Download
Report
Transcript 상대 주소 지정 방식 사용
System Programming
제2장 어셈블러
컴퓨터공학부
시스템 프로그래밍
2. 어셈블러
어셈블러의 일반적인 기능
연산 코드와 동등한 기계 코드로의 번역
레이블에 주소 배정
2.1절
일반적인 어셈블러의 기본 기능 소개
기능들의 구현하는 일반적인 방법
2.2절
기본 어셈블러의 확장 기능
SIC/XE
2.3절
기계 구조와 상관없는 일반적인 특징
2.4절
몇 가지 다른 특징 – 1패스 어셈블러
시스템 프로그래밍
2.1 기본 어셈블러 기능
연상 명령어(Mnemonic instruction)
인덱스 주소 지정 방식
피연산자 뒤에 “.X” 추가
“.” : 주석
어셈블러 지시자(Assembler directive)
지시자
설명
START
프로그램의 이름과 시작 주소
END
원시 프로그램의 끝
BYTE
문자 또는 16진수, 필요한 바이트 수만큼 사용 가능
WORD
1 워드의 정수 상수 생성
RESB
바이트 수 만큼 예약
RESW
워드 수 만큼 예약
시스템 프로그래밍
2.1.1 단순 SIC 어셈블러
프로그램의 시작
1000번지부터 시작
목적 코드로 번역하기 위한 기능
연상 연산 코드(mnemonic operation code)를 기계어로 전환
10행 : STL
14(16진수임)
기호 피연산자(symbolic operand)를 동등한 기계어로 전환
10행 : RETADR 1033
한 줄에 하나 씩 밖에 처리 못함
기계 명령어를 적당한 형식으로 맞춤
데이터 상수를 기계 내부 코드로 전환
80행 : EOF 454F46
목적(Object)프로그램과 어셈블러 리스트 작성
시스템 프로그래밍
2.1.1 단순 SIC 어셈블러
전방 참조(Forward Reference)
나중에 정의 되어진 레이블(LABEL)을 참조
10
1000
FIRST
STL
RETADR
두 번의 패스(Pass) 수행
첫 번째 패스
레이블 정의
주소 배정 위한 원시 프로그램 스캔
두 번째 패스
실제적인 번역 작업 수행
어셈블러 지시자의 처리
목적 프로그램에는 영향을 줌
기계 명령어로는 번역되지 않음
시스템 프로그래밍
141033
2.1.1 단순 SIC 어셈블러
목적 프로그램의 형식
헤더 레코드(Header record)
열
열
열
열
1
2-7
8-13
14-19
H
프로그램 이름
목적 프로그램의 시작주소(16진수)
바이트로 표시된 목적 프로그램의 길이
텍스트 레코드(Text record)
열
열
열
열
1
2-7
8-9
10-69
T
레코드에 포함될 목적 코드 시작주소 (16진수)
바이트로 나타낸 이 레코드의 길이(16진수)
16진수로 나타낸 목적 코드(목적 코드 1바이트 당 2개의 열)
엔드 레코드(End record)
열1
열 2-7
시스템 프로그래밍
E
목적 프로그램 중 첫번째로 실행될 명령어의 주소(16진수)
2.1.1 단순 SIC 어셈블러
패스 1 (기호 정의)
프로그램 내의 모든 문에 주소 배정
모든 레이블에 배정된 주소 저장
어셈블러 지시자의 부분적 처리
패스 2 (명령어 번역, 목적 프로그램의 생성)
명령어 어셈블(연산자 코드 번역하고 주소 조사)
BYTE, WORD 등으로 정의되는 데이터 값 생성
패스 1 동안 이루어지지 않은 지시자의 처리
목적 프로그램과 어셈블러 리스트 출력
시스템 프로그래밍
2.1.2 어셈블러 알고리듬과 자료 구조
테이블과 변수
OPTAB(Operation Code Table)
SYMTAB(Symbol Table)
LOCCTR(Location Counter)
OPTAB(Operation Code Table)
연상 명령어 찾아 기계 코드로 번역
연상 명령 코드, 기계어(기본)
명령어의 형식, 길이(복잡한 어셈블러)
역할
패스 1 : 원시 프로그램의 명령 코드 조사
패스 2 : 명령어를 기계어로 번역
SIC : 패스 1 또는 패스 2에서 함께 이루어 질 수 있음
SIC/XE : 패스 1에서 명령어 길이, 패스 2에서는 형식과 목적 코드의
특성 조사
해쉬(Hash) 테이블로 구성
정적 테이블 : 명령 코드의 추가, 삭제 불필요
시스템 프로그래밍
2.1.2 어셈블러 알고리듬과 자료 구조
SYMTAB(Symbol Table)
레이블들에 배정된 주소의 저장
레이블의 이름, 주소, 오류 상태 플래그
역할
패스 1 : 레이블과 배정 주소의 입력
패스 2 : 피연산자로 사용된 레이블의 주소를 명령어에 삽입하기 위해
검색
어셈블
어셈블 과정의 두 패스간에 연결되는 정보 존재
패스 1 ( 중간화일 작성 )
원시 프로그램
배정된 주소
오류 플래그
시스템 프로그래밍
2.2 기계 종속적인 어셈블러 특성
SIC/XE(H/W의 확장된 기계)
설계 및 구현의 영향?
SIC 어셈블러 프로그램의 재작성
간접 주소 지정 방식 : @피연산자(70행)
즉시 주소 지정 방식 : #피연산자(25, 55, 133행)
상대 주소 지정 방식
메모리 참조 명령어 : PC 또는 B(지시자 BASE) 사용
확장 명령어 형식(형식 4) : +연산코드
레지스터-레지스터 명령어의 사용 : 레지스터-메모리 명령어 대신
COMPR A,S COMP ZERO(150행), TIXR T TIX MAXLEN(165행)
SIC/XE의 장점
R-R 명령어가 속도가 빠름
명령어 길이 짧고 메모리 접근보다 레지스터 접근이 속도가 빠름
즉시 주소 지정 방식
추가적인 명령어의 사용 회피(메모리 검색 안 해도 됨)
시스템 프로그래밍
2.2.1 명령어 형식과 주소 지정 방식
START : 프로그램의 주소 0(재배치 가능 프로그램)
R-R 명령어
기본(SIC) 어셈블러의 번역
OPCODE: OPTAB 사용해서 기계 코드로 전환
레지스터 이름 : 대응되는 번호로 번역(패스 2)
SYMTAB에 미로 로드 또는 독립된 테이블로 작성
대부분의 R-M 명령어
PC 또는 B를 이용한 상대 주소 지정 방식 사용
나머지 R-M 명령어
모든 메모리 주소 지정(20bits) : 형식 4
15
0006
CLOOP
+JSUB
프로그래머가 +를 안 하면
RDREC
4B101036
PC 상대 주소 지정 방식으로 번역 시도 B 상대 주소 지정방식으로
번역 시도 오류 메시지
시스템 프로그래밍
2.2.1 명령어 형식과 주소 지정 방식
PC 상대 주소 지정 방식
10
0000
FIRST
STL
RETADR
17202D
PC의 값
명령어(STL)를 페치한 후, 실행되기 전에 PC 값 증가(0003)
명령어(STL)가 참조해야 할 RETADR의 주소
0030 (SYMTAB에서 얻어냄)
명령어 포함되어야 할 변위(displacement)
30(TA) – 3((PC)) = 2D(disp)
왜냐하면 PC 주소 지정 방식의 TA(RETADR) = (PC)+disp
opcode n i x b p e
disp
0001 01 1 1 0 0 1 0 0000 0010 1101
1
시스템 프로그래밍
7
2
0
2
D
2.2.1 명령어 형식과 주소 지정 방식
PC 상대 주소 지정 방식
40
0017
J
CLOOP
3F2FEC
PC의 값 (001A)
명령어(STL)가l 참조해야 할 CLOOP의 주소 (0006)
명령어 포함되어야 할 변위(displacement)
0006(TA) – 001A((PC)) = -0014(disp)
-014를 2의 보수로 표현(12bits)
0000 0001 0100 1111 1110 1011(1의 보수) + 1
1111 1110 1100(2의 보수) FEC
opcode n i x b p e
disp
0011 11 1 1 0 0 1 0 1111 1110 1100
3
시스템 프로그래밍
F
2
F
E
C