상대 주소 지정 방식 사용

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