BUFEND-BUFFER

Download Report

Transcript BUFEND-BUFFER

2.3.2 기호 정의문
 EQU
 프로그래머 기호 정의하고 그 값 지정
기호
EQU 값
 기호 정의
 SYMTAB에 입력, 기호에 지정된 값을 배정
 기호 값
 상수, 수식
예
+LDT
#4096
MAXLEN EQU 4096
+LDT #MAXLEN
시스템 프로그래밍
( SYMTAB  MAXLEN, 4096 )
( MAXLEN에 대한 값을 피연산자로 사용)
컴퓨터공학부
2.3.2 기호 정의문
 EQU의 다른 사용(레지스터 이름)
 어셈블러의 명령어(RMO) 가정
 가정: RMO 0, 1(가능), RMO A, X(불가능)
 EQU의 사용 : 위의 불가능한 가정이 가능하게 됨(SYMTAB 이용)
A EQU 0
X EQU 1
L EQU 2
.
 다른 예
BASE
EQU R1
COUNT EQU R2
INDEX EQU R3
시스템 프로그래밍
컴퓨터공학부
2.3.2 기호 정의문
 ORG
 어셈블러 위치계수기 값의 재설정
ORG
값
 값은 상수 또는 수식
 레이블 정의에 유용하게 사용될 수 있음
 ORG 사용 예
 기호 테이블( STAB 100 항목)
SYMBOL
VALUE
FLAGS
6
3
2
 EQU 문의 사용
STAB
RESB
1100
SYMBOL
VALUE
FLAGS
EQU
EQU
EQU
STAB
STAB + 6
STAB + 9
시스템 프로그래밍
컴퓨터공학부
2.3.2 기호 정의문
 ORG의 사용
STAB
SYMBOL
VALUE
FLAGS
RESB
ORG
RESB
RESW
RESB
ORG
1100
STAB
6
1
2
STAB + 1100
(LOCCTR 재설정)
(LOCCTR의 복귀)
 어셈블러 지시자(EQU, ORG)의 제약
 오른쪽의 기호는 이전에 프로그램에서 먼저 나타나야 함
ALPHA
RESW
1
BETA
EQU
ALPHA
BETA
ALPHA
시스템 프로그래밍
EQU
RESW
ALPHA
1
컴퓨터공학부
2.3.2 기호 정의문
 전방 참조(forward reference)
ALPHA
BETA
DELTA
EQU
EQU
EQU
BETA
DELTA
1
 위의 문장은 보통 2중 패스 어셈블러에 의해서는 해결될 수 없음
시스템 프로그래밍
컴퓨터공학부
2.3.3 수식
 수식




대부분의 어셈블러에서 허용
단일 피연산자의 주소나 값을 생성
산술 연산(+, -, *, /)
특수항(*)
160
BUFEND EQU *
 절대 수식(absolute expressions)
 절대항으로 이루어진 경우
 상대항의 쌍이 다른 부호를 갖을 경우
 상대값을 갖는 경우는 곱셈과 나눗셈 불가
107
MAXLEN
EQU
BUFEND-BUFFER
 상대 수식(relative expressions)
 한 개의 상대항을 제외한 모든 항이 쌍을 이루어야 함
 곱셈과 나눗셈 연산은 불가
시스템 프로그래밍
컴퓨터공학부
2.3.3 수식
 수식의 유형
 수식의 유형 결정을 위해 기호와 유형의 파악
 SYMTAB에 저장(기호 이름, 플래그, 값)
기호
유형
값
RETADR
R
0030
BUFFER
R
0036
BUFEND
R
1036
MAXLEN
A
1000
시스템 프로그래밍
컴퓨터공학부
2.3.4 프로그램 블록
 프로그램 블록
 원시 프로그램과 목적 프로그램의 유연성 지원
 독립적인 프로그램의 부분 생성
 독자성의 유지
 로더에 의해 개별적으로 다루어짐
 프로그램 블록의 예(그림 2.11)
 3개의 블록
 이름없는 블록(default 블록) : 실행 가능한 명령어
 CDATA 블록 : 길이가 몇 개의 워드, 작은 데이터 영역
 CBLKS 블록 : 메모리의 커다란 영역
 USE 지시자 사용
 독립적인 블록의 명시(92행:USE CDATA, 123행:USE CBLKS)
 USE (183행) : default 블록의 다시 시작
시스템 프로그래밍
컴퓨터공학부
2.3.4 프로그램 블록
 패스1
 각 프로그램 블록 : 독립적인 계수기 사용
 논리적 코드의 재배열
 프로그램 블록 시작시 계수기 0으로 초기화
 각 레이블은 프로그램 블록으로부터 상대적 주소 배정
 패스 1의 끝 : 위치 계수기의 값(블록의 길이)
블록 이름
블록 번호
주소
길이
Default
0
0000
0066
CDATA
1
0066
000B
CBLKS
2
0071
1000
 패스 2
 코드 생성
 목적 프로그램의 시작 위치부터의 상대 주소가 필요
 SYMTAB에서 발견
시스템 프로그래밍
컴퓨터공학부
2.3.4 프로그램 블록
20
0006
 목표 주소(TA)
0
LDA
LENGTH
032060
 0003(CDATA로부터의 상대 주소) + 0066(CDATA의 시작주소)
= 0069
 PC의 값 : 0009
 변위(disp) = TA-(PC) = 0069-0009 = 0060
 프로그램의 복잡성 해결
 형식 4의 사용 배제
35
000F
0
JSUB
WRREC
4B203B
 목표 주소(TA)
 004D(default로부터의 상대 주소)+0000(default의 시작주소) = 004D
 PC의 값 : 0012
 변위(disp) = TA-(PC) = 004D-0012 = 003B
시스템 프로그래밍
컴퓨터공학부
2.3.4 프로그램 블록
 프로그램의 복잡성 해결
 리터럴의 위치 지정 문제의 해결
 CDATA에 위치 시킴
 큰 데이터 영역 보다 확실히 앞에 위치 시킴
시스템 프로그래밍
컴퓨터공학부
5
원시프로그램
Default(1)
70
95
CDATA(1)
100
105 CBLKS(1)
125
Default(2)
180
185 CDATA(2)
목적프로그램
메모리에 로드된
프로그램
0000
Default(1)
Default(1)
Default(2)
Default(2)
CDATA(2)
004D
Default(3)
0066
Default(3)
CDATA(1)
CDATA(3)
CDATA(2) 006C
CDATA(3)
006D
0071
210
Default(3)
0027
CBLKS(1)
245
253 CDATA(3)
시스템 프로그래밍
컴퓨터공학부
2.3.5 제어 섹션과 프로그램 링크
 제어 섹션(Control Section)
 어셈블러 후 독자성을 유지하는 프로그램의 일부분
 각 제어 섹션은 독립적으로 로드, 재배치
 함께 링크할 수 있는 방법 필요
 외부 참조(External Reference)
 제어 섹션들 사이의 참조
 어셈블러 : 외부 참조에 대한 정보 생성
 예제 프로그램(그림 2.15)






첫번째 제어 섹션 : COPY(5행,시작), CSECT(109행) 전이 끝
두번째 제어 섹션 : RDREC(109행), CSECT(193행)
세번째 제어 섹션 : WRREC(193행), END(255행)까지
각 제어 세션은 독립적인 위치 계수기를 갖음
각 제어 섹션은 동시에 어셈블될 필요는 없음
외부 참조(external reference)
 EXTDEF(external definition) : 현 섹션 정의, 다른 섹션 사용
 EXTREF(external reference) : 현 섹션에서 다른 섹션의 것을 참조
시스템 프로그래밍
컴퓨터공학부
2.3.5 제어 섹션과 프로그램 링크
 외부 참조의 예
15 0003 CLOOP +JSUB RDREC 4B100000
160 0017
+STCH BUFFER,X 57900000
 RDREC를 포함하는 제어섹션의 메모리 위치(?)  피연산자 0
 로더에 의해 로드될 때 적합한 주소 삽입
 상대 주소 지정 방식 불가  확장명령어(형식 4) 사용
 160행
opcode n i x b p e
address
0101 01 1 1 1 0 0 1 0000 0000 0000 0000 0000
5
7
9
0 0 0
0
0
시스템 프로그래밍
컴퓨터공학부
2.3.5 제어 섹션과 프로그램 링크
107 1000 MAXLEN EQU
BUFEND-BUFFER
190 0028 MAXLEN WORD BUFEND-BUFFER 000000
 190행
 외부 참조(BUFEND, BUFFER)를 포함하는 수식
 어셈블러 : 0을 저장
 로더 : 프로그램 로드시 BUFEND 값을 더하고 BUFFER 값을 뺌
 107행
 외부 참조가 아님
 어셈블러에 의해 계산될 수 있음
 외부 참조의 기호는 SYMTAB에 의해 저장
시스템 프로그래밍
컴퓨터공학부
2.3.5 제어 섹션과 프로그램 링크
 목적 프로그램의 수정
 목적 : 어셈블러가 로더에게 외부 참보 정보를 전달
 정의 레코드(Define Record)
열1
D
열 2-7 현 제어 섹션에서 정의된 외부 기호 이름
열 8-13 현 제어 섹션에서 이 기호의 상대 주소
열 14-73 열 2-13의 반복
 참조 레코드(Refer Record)
열1
R
열 2-7 현 제어 섹션에서 참조되는 외부 기호 이름
열 8-73 다른 외부 참조 기호 이름
 수정 레코드(Modification Record)
열1
M
열 2-7 제어 섹션에서의 수정될 필드의 상대적 시작 위치
열 8-9 하프-바이트로 표현된 수정될 필드의 길이
열 10 수정 플래그(+ 또는 -)
열 11-16 값을 더하거나 뺄 외부 기호 이름
시스템 프로그래밍
컴퓨터공학부
2.3.5 제어 섹션과 프로그램 링크
15 0003
H COPY
CLOOP
+JSUB
RDREC
4B100000
000000 001033
D BUFFER 000033 BUFEND 001033 LENGTH 00002D
R RDREC WRREC
T 000000 1D172027 4B100000 032023 290000 332007 4B100000 3F2FEC……
T 00001D 0D010003 0F200A 4B100000 3E2000
T 000030 03 454F46
15행
M 000004 05 +RDREC
65행
35행
P113참조
M 000011 05 +WRREC
M 000024 05 +WRREC
E 000000
시스템 프로그래밍
컴퓨터공학부
2.3.5 제어 섹션과 프로그램 링크
190 0028 MAXLEN WORD BUFEND-BUFFER 000000
H RDREC 000000 00002B
R BUFFER LENGTH BUFEND
T 000000 1DB410 B400 B440 77201F E3201B 332FFA DB201BA004 332009
57900000 b850
T 00001D 0E 3B2FE913100000 4F0000 F1 000000
M 000018 05 +BUFFER
M 000021 05 +LENGTH
M 000028 06 +BUFEND
M 000028 06 -BUFFER
190행
E
시스템 프로그래밍
컴퓨터공학부
2.4 어셈블러 설계 선택사항
 2.4.1절
 1패스 어셈블러 구조와 논리
 2.4.2절
 다중 패스 어셈블러
 전방 참조의 허용(이중 패스의 확장)
시스템 프로그래밍
컴퓨터공학부
2.4.1 단일 패스 어셈블러
 단일 패스
 전방 참조 문제의 해결
 데이터 항목 참조 전에 미리 정의
 기억 장소 예약문을 프로그램의 앞 쪽에 위치
 완전 제거 불가 : 루프 벗어나는 경우 여전히 사용
 단일 패스의 두가지 유형
 목적 프로그램을 직접 메모리에 생성
 보통 목적 프로그램
 예제 프로그램(그림 2.18)
시스템 프로그래밍
컴퓨터공학부
2.4.1 단일 패스 어셈블러
 적재 실행(load-and-go) 어셈블러




즉시 실행을 위해 목적 프로그램을 메모리에 생성
로더가 필요 없음
목적 프로그램의 로드의 번거로움을 피할 수 있음
단일 패스는 추가적인 패스의 부담을 덜어 줌
 목적 프로그램의 생성 : 전방 참조 취급이 수월





원시 프로그램의 읽는 순서대로 목적 코드 명령어 생성
전방 참조 기호 : 주소 필드는 결정 않고 남겨 둠
피연산자의 기호를 SYMTAB에 기입
정의되지 않았음을 표시(플래그)
기로 정의문을 만나면 적절한 주소를 명령어에 삽입
시스템 프로그래밍
컴퓨터공학부
 적재 실행(load-and-go) 어셈블러
메모리
주소
내용
기호
1000
454F4600 00030000 00xxxxxx
xxxxxxxx
1010
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
값
LENGTH 100C
RDREC
*
1003
ZERO
1006
WRREC *
EOF
1000
ENDFIL *
RETADR 1009
BUFFER 100F
CLOOP 2012
FIRST
200F
……
……

2013 0
THREE
……
2000
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxx14
2010
1009 48-- -- 00100C 281006 30 ---- 48--
2020
-- 3C2012
시스템 프로그래밍




201F 0

201C 0
컴퓨터공학부
메모리
주소
내용
기호
1000
454F4600 00030000 00xxxxxx
xxxxxxxx
1010
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
값
LENGTH 100C
RDREC 203D
1003
ZERO
1006
WRREC *
EOF
1000
ENDFIL 2024
RETADR 1009
BUFFER 100F
CLOOP 2012
FIRST
200F
MAXLEN 203A
INPUT
2039
EXIT
*
RLOOP 2043
……
……
THREE
……
2000

xxxxxxxx
xxxxxxxx
xxxxxxxx

xxxxxx14
2010
1009 4820 3D00100C 281006 30 2024 48--
2020
-- 3C2012 0010000C 100F0010 030C100C
2030
48----08 10094C00 00F10010 00041006
2040
001006E0 20393020 43D82039 281006 30
2050
---- 5490 0F
……

시스템 프로그래밍

201F
2031 0


2050 0
컴퓨터공학부
2.4.1 단일 패스 어셈블러
 목적 프로그램 생성(단일 패스 어셈블러)
 외부 저장 장치가 속도가 느리거나 사용이 불편할 경우
 전방 참조 문제 : 로더에 의해 해결
H COPY
001000 00107A
T 001000 09 454F46 000003 000000
T 00200F 15 141009 480000 00100C 281006 300000 480000 3C2012
T 00201C 02 2024
T 002024 19 001000 0C100F 001003 0C100C480000 081009 4C0000 F1 001000
T 002013 02 203D
T 00203D 1E 041006 001006 E02039 302043 D82039 281006 300000 54900F ……
T 002050 02 205B
T 00205B 07 10100C 4C0000 05
……
E 000000
시스템 프로그래밍
컴퓨터공학부
2.4.2 다중 패스 어셈블러
 이중 패스 어셈블러의 어려움
ALPHA
EQU
BETA
BETA
EQU
DELTA
DELTA
EQU
1
 다중 패스 어셈블러
 기호 정의 처리 위한 패스만큼 허용
 프로그램 전체에서 패스를 두 번 이상 수행할 필요는 없음
시스템 프로그래밍
컴퓨터공학부
2.4.2 다중 패스 어셈블러
 다중 패스 어셈블러 실행 예(그림 2.21)
1
2
3
4
5
HALFSZ
MAXLEN
PEVBT
BUFFER
BUFEND
EQU MAXLEN/2
EQU BUFEND-BUFFER
EQU
BUFFER-1
RESB 4096
EQU
*
 1번 문장의 패스 1 수행 결과의 기호 테이블
수식 내 정의되지 않은 기호가
하나 있음을 표시
HALFSZ &1 MAXLEN/2
0
수식 정의 값
정의되지 않은 기호 저장
MAXLEN *
HALFSZ 0
종속되는 기호 리스트
시스템 프로그래밍
컴퓨터공학부
2.4.2 다중 패스 어셈블러

2번 문장의 패스 1 수행 결과의 기호 테이블
MAXLEN
EQU BUFEND-BUFFER
BUFEND *
HALFSZ &1 MAXLEN/2
시스템 프로그래밍
MAXLEN 0
0
MAXLEN &2 BUFEND-BUFFER
HALFSZ 0
BUFFER *
MAXLEN 0
컴퓨터공학부
2.4.2 다중 패스 어셈블러

3번 문장의 패스 1 수행 결과의 기호 테이블
PEVBT
EQU
BUFFER-1
BUFEND *
MAXLEN 0
HALFSZ &1 MAXLEN/2
0
PREVBT &1BUFFER-1
0
MAXLEN &2 BUFEND-BUFFER
HALFSZ 0
BUFFER *
MAXLEN
시스템 프로그래밍
PREVBT 0
컴퓨터공학부
2.4.2 다중 패스 어셈블러

4번 문장의 패스 1에서의 주소 배정이 1034(16진수)
1034
BUFFER
RESB
4096
BUFEND *
HALFSZ &1 MAXLEN/2
PREVBT
1033
MAXLEN 0
0
0
MAXLEN &1 BUFEND-BUFFER
BUFFER 1034
시스템 프로그래밍
HALFSZ 0
0
컴퓨터공학부
2.4.2 다중 패스 어셈블러

5번 문장의 패스 1에서의 주소 배정이 2034(16진수)
2034
BUFEND
*
BUFEND 2034
0
HALFSZ 800
0
PREVBT
시스템 프로그래밍
EQU
1033
0
MAXLEN 1000
0
BUFFER 1034
0
컴퓨터공학부