Transcript Document

System Programming
제4장 매크로 프로세서
컴퓨터공학부
시스템 프로그래밍
컴퓨터공학부
4. 매크로 프로세서
 매크로 명령어(macro Instruction)
 프로그래머에게 단순한 표기상의 편의 제공
 일반적으로 사용되는 명령어의 집합
 매크로 확장(expansion)
 각 매크로 명령어를 상응하는 원시 명령어 문장으로 변환
 매크로 프로세서의 기능
 문자나 행의 그룹을 다른 문자나 행의 그룹으로 변환
 설계와 기능 : 프로그램밍 언어의 형식에 영향을 받음
 4.1절
 매크로 정의와 확장
 4.2절
 매크로 프로세서의 확장된 기능
 4.3절
 매크로 프로세서 설계 선택사항
시스템 프로그래밍
컴퓨터공학부
4.1 기본 매크로 프로세서의 기능
 4.1.1절
 매크로 정의, 호출
 매개 변수의 대체를 포함한 확장의 과정
 4.1.2절
 매크로 처리의 자료 구조
 매크로 처리를 위한 단일 패스 알고리듬
시스템 프로그래밍
컴퓨터공학부
4.1.1 매크로 정의와 확장
 매크로 명령어를 사용한 SIC/XE 프로그램(그림 4.1)
 매크로 RDBUFF, WRBUFF 정의 하여 사용
 원시 프로그램의 START 문장 다음에 사용
 매크로(MACRO) 문(10행)




매크로의 시작 : MACRO 사용
레이블 필드 : 기호(RDBUFF)
피연산자 필드 : 매크로 명령어의 매개 변수(Parameter)
매개 변수는 문자 &로 시작 : 확장 시 대체 용이하게 함
 예) &INDEV, &BUFFER, &RECLTH
 매크로의 끝 : MEND 사용
 매크로 호출
 매크로 호출문 : 호출되는 매크로 이름과 확장에서 사용될 인자
(argument) 제공
 Invocation
시스템 프로그래밍
컴퓨터공학부
4.1.1 매크로 정의와 확장
 매크로를 사용한 SIC/XE 프로그램(그림 4.1)
 매크로 프로세서의 입력
 매크로 확장 후의 프로그램(그림 4.2)
 매트로 정의 : 필요 없어 삭제됨
 각 매크로 호출문 : 매크로 몸체 구성하는 문장으로 확장
 프로토타입의 매개 변수는 각 인자로 대치
 &INDEV  F1, &BUFADR  BUFFER, &RECLTH  LENGTH
 어셈블러의 입력
 매트로 호출과 부루틴의 호출
 매크로호출 : WRBUF의 몸체 구성 하는 부분은 두 번 생성
 부루틴 호출 : WRREC 는 한번 나타남
 매크로 명령어는 레이블을 포함하지 않음
 JEQ *-3(부루틴 호출 JEQ WLOOP)
 JLT *-14(부루틴 호출 JLQ WLOOP)
 포함하면 매크로 확장 시 어셈블러에 의해 기호 중복 에러 발생
시스템 프로그래밍
컴퓨터공학부
4.1.2 매크로 프로세서의 알고리듬과 자료구조
 이중 매크로 프로세서
 Pass1 : 모든 매크로 정의 처리
 Pass2 : 모든 매크로 확장
 매크로 명령어 속에 다른 매크로 정의 허용하지 않음
 다른 매크로에 의한 매크로의 정의(그림 4.3)
 MACROS : RDBUFF, WRBUFF 다른 매크로 명령어 정의 포함
 MACROX : SIC/XE 시스템의 같은 매크로 정의
 SIC 또는 SIC/XE에서 유틸리티 매크로 명령어
 MACROS 또는 MACROX 호출
 MACROS 또는 MACROX 호출이 확장될 때만 다른 매크로 명령어 정의
시스템 프로그래밍
컴퓨터공학부
4.1.2 매크로 프로세서의 알고리듬과 자료구조
1
2
MACROS
RDBUFF
3
4
WRBUFF
5
6
1
2
MACROX
RDBUFF
3
4
WRBUFF
5
6
시스템 프로그래밍
MACRO
MACRO
.
MEND
MACRO
.
MEND
.
MEND
{Defines SIC standard version macros}
&INDEV, &BUFADR, &RECLTH
{SIC standard version}
{End of RDBUFF}
&OUTDEV, &BUFADR, &RECLTH
{SIC standard version}
{End of RDBUFF}
MACRO
MACRO
.
MEND
MACRO
.
MEND
.
MEND
{Defines SIC/XE macros}
&INDEV, &BUFADR, &RECLTH
{SIC /XE version}
{End of RDBUFF}
&OUTDEV, &BUFADR, &RECLTH
{SIC /XE version}
{End of RDBUFF}
{End of MACROS}
{End of MACROX}
컴퓨터공학부
4.1.2 매크로 프로세서의 알고리듬과 자료구조
 매크로 프로세서의 자료 구조
 매크로 정의 테이블(DEFTAB)
 매크로 정의 자체 저장
 매크로 프로토타입과 매크로 몸체 구성하는 문장
 주석 제외
 매크로 이름 테이블(NAMTAB)
 매크로 이름 저장 : DEFTAB의 인덱스 역할
 DEFTABdml 정의와 시작과 끝을 가리키는 포인터 포함
 인자테이블 (ARGTAB)
 매크로 호출 문이 인식되면 인자들은 위치에 따라 저장
 확장 시 매개변수 대치
시스템 프로그래밍
컴퓨터공학부
4.1.2 매크로 프로세서의 알고리듬과 자료구조
NAMTAB
.
.
.
.
RDBUFF
.
.
.
.
ARGTAB
1 F1
2 BUFFER
3 LENGTH
시스템 프로그래밍
DEFTAB
.
.
.
.
RDBUFF &INDEV, &BUFADR, &RECLTH
CLEAR
X
CLEAR
A
CLEAR
S
+LDT
#
4096
TD
= X’?1’
JEQ
*-3
RD
= X’?1’
COMPR A,S
JEQ
*+11
STCH
?2, X
TIXR
T
JEQ
*-19
STX
?3
MEND
.
.
.
.
컴퓨터공학부
4.1.2 매크로 프로세서의 알고리듬과 자료구조
 프로시져 DEFINE
 매크로 정의 시작이 인식될 때 호출
 DEFTAB와 NAMTAB에 적당한 항목 만듬
 프로시져 EXPAND
 AGTTAB에 적당한 인자값 구성
 매크로문의 확장
 프로시져 GETLINE
 처리할 다음 행을 입력
 부울 변수 EXPANDING의 참, 거짓에 따라 DEFTAB 또는 입력 파일
로부터 가져옴
 매크로 안에서 매크로의 정의
 매크로 정의가 DEFTAB에 들어갈 때 MEND가 정의 끝
 그림 4.3에서는 MACROS의 끝이 3행에서 인식
 DEFINE은 LEVEL이란 계수기 사용
시스템 프로그래밍
컴퓨터공학부
4.2 기계 독립적인 매크로프로세서의 특징
 매크로 프로세서의 기능 확장
 매크로 프로세서는 컴퓨터의 구조와는 관련이 없음
 4.2.1절
 매크로의 명령어 매개 변수와 다른 문자열과의 접합 방법
 4.2.2절
 고유한 레이블의 생성 방법
 상대 주소 지정의 반복 사용 회피
 4.2.3절
 조건부 매크로 확장
 4.2.4절
 키워드 매개 변수의 정의와 사용
시스템 프로그래밍
컴퓨터공학부
4.2.1 매크로 매개변수의 집합
 매개변수의 다른 문자와 접합





프로그램의 변수 XA1, XA2, . . . .
또 다른 변수 XB1, XB2, . . . .
유사한 과정을 거쳐 수행 하나면 하나의 매크로로 통합
매크로 명령어 매개변수에 A 또는 B 지정
매크로 확장할 때는 XA1, XB1 등 사용
 LDA X&ID1
 매개변수 &ID를 문자열 ‘X’ 앞과 문자열 ‘1’의 뒤에 접합
 매크로 매개변수의 시작 &
 매크로 매개변수의 끝은 표시되지 않음
 접합 연산자(concatenation operator) ‘’ 사용
 LDA X&ID  1
시스템 프로그래밍
컴퓨터공학부
4.2.1 매크로 매개변수의 집합
1
2
3
4
5
SUM
MACRO &ID
LDA
X&ID 1
ADD
X&ID 2
ADD
X&ID 3
STA
X&ID 4
MEND
SUM

LDA
ADD
ADD
STA
시스템 프로그래밍
A
XA1
XA2
XA3
XA4
SUM

LDA
ADD
ADD
STA
BETA
X BETA 1
X BETA 2
X BETA 3
X BETA 4
컴퓨터공학부
4.2.2 고유한 레이블의 생성
 매크로 명령어 몸체는 레이블을 가질 수 앖음
 기호(레이블)의 어셈블러에서의 중복 에러
 따라서 ‘*-3’(140행)과 같이 상대 주소 지정으로 대신함
 더 긴 점프의 경우
 프로그래머가 표기하고 매우 어려움
 오류 발생이 쉬움
 고유한 레이블을 생성하는 한 기법(그림4.7)
 매크로 몸체 안에 사용된 레이블들은 특수 문자 ‘$’로 시작
 매크로 확장
 $로 시작한 기호  $AA로 교체
 다음에 확장 될 때  $AB, $AC….로 교체
시스템 프로그래밍
컴퓨터공학부
4.2.3 조건부 매크로 확장
 매크로 명령어
 일반적으로 매크로 호출은 동일한 일련의 문장으로 확장
 매크로 타임(macro time) 조건부 구조
 IF 문




피연산자 부울 식의 값 계산
TRUE 이면 ELSE 까지의 문장 생성
그렇지 않으면 ELSE 다음의 문장 생성
ENDIF : IF 문의 끝
 매크로 타임 변수(macro-time variable)





설정 기호(set symbol, 0으로 초기화)이라고도 함
기호 &EORCK : 매크로 확장 동안에 쓰이는 값의 저장
IF 문에 의한 매크로 확장에 의해 생성되는 것은 아님
원래의 IF 문을 반복 사용하는 것보다 빠름
시간 변수를 포함하는 기호 테이블의 유지
시스템 프로그래밍
컴퓨터공학부
4.2.3 조건부 매크로 확장
 매크로 타입 IF-ELSE-ENDIF 구조
 특정 문장의 선택 또는 제외
 RDBBUF의 다른 정의(그림 4.9(a))
 매개 변수(&EOR)과 상응하는 리스트
 레코드 종료 문자 리스트(00,04,03)의 정의
 WHILE 문의 사용




ENDW가 나올 때까지 문장을 반복 생성
%NTIMES는 인자 리스트 구성원의 개수를 구하는 함수
%NTIMES(&EOR) = 3
&CTR은 행의 생성 횟수 계산에 사용
 초기화 1(63행)
 루프 반복시 1씩 증가(71행)
 1번째 반복 : &EOR[&CTR]의 값 00
 2번째 반복 : &EOR[&CTR]의 값 03
시스템 프로그래밍
컴퓨터공학부
4.2.4 키워드 매크로 매개 변수
 위치 매개변수(positional parameter)
 매개 변수와 인자는 매트로 호출문과 프로토타입에서의 위치에 따
라 연관
 소수개의 매개변수 호출 만되는 경우
예
GENER
, , DIRECT, , , , , , 3,
 키워드 매개변수(keyword parameter)
 매개변수 이름인 키워드와 같이 사용
GENER
TYPE=DIRECT, CHANNEL=3
 읽기 쉽고 오류가 적다.
시스템 프로그래밍
컴퓨터공학부
4.3 매크로 프로세서 설계 선택사항
 매크로 명령어 내의 매크로 정의
 매크로의 기본 알고리듬은 처리하지 못함
 이러한 매크로 명령어 허용 바람직
 4.3.1절
 매크로 명령어 내의 매크로 정의의 문제점
 4.3.2절
 범용 매크로 프로세서
 4.3.3절
 매크로 프로세서의 어셈블러나 컴파일러와의 통합
시스템 프로그래밍
컴퓨터공학부
4.3.1 재귀적 매크로 확장
 RDBUFF 정의 예(그림 4.11)
 관련 MACRO 명령어는 이미 존재 가정
 그림 4.11(c) 의 기본 매크로 프로세서 알고리듬 적용
 프로시져 EXPAND 호출
 다음의 인자 ARGTAB에 저장
매개변수
값
1
BUFFER
2
LENGTH
3
F1
4
(unsued)
…
 부울 변수 EXPANDING은 TRUE 설정, 매크로문의 확장 시작
시스템 프로그래밍
컴퓨터공학부
4.3.1 재귀적 매크로 확장
 그림 4.11(c) 의 기본 매크로 프로세서 알고리듬 적용(계속)
 50행까지 정상적 진행
매개변수
값
1
F1
.
(unsued)
…






RDCHAR의 확장 역시 정상적으로 수행
확장 종료시 문제
RDCHAR 정의의 끝 : EXPANDING은 FALSE로 설정
매크로 확장 중에 있어다는 것을 잃어 버림,
ARGTAB에 겹쳐 쓰여서 원래 호출(RDBUFF)의 인자 분실
EXPAND의 재귀 호출 때문
시스템 프로그래밍
컴퓨터공학부
4.3.2 범용 매크로 프로세서
 매크로 프로세서의 용도
 어셈블러 언어의 보조 역할
 범용 프로세서의 장점
 여러 컴파일러나 어셈블러의 매크로 기능을 배울 필요가 없음
 범용 프로세서
 다루어야 할 세부사항이 너무 많음
 특수 목적 매크로 프로세서 : 논리와 구조 포함
 범용 : 사용자가 정의할 수 있는 방법 제공
시스템 프로그래밍
컴퓨터공학부
4.3.3 언어 번역기 내의 매크로 처리
 전처리기(preprocessor)
 원시 프로그램의 매크로 정의와 확장
 확장된 프로그램 : 어셈블러나 컴파일러의 입력
 행 단위 매크로 프로세서(line-by-line macro processor)




원시 프로그램 입력
매크로의 기능 수행
출력은 확장된 원시 파일이 아닌 언어 번역기의 입력으로 넘겨짐
장점
 원시 프로그램 전테에 행해지는 패스추가하지 않음
 자료 구조의 통합(OPTAB+NAMTAB, 유틸리티 부루틴과 함수)
 통합 매크로 프로세서(integrated macro processor)
 문제점
 DO 100 I = 1, 20
 DO 100 I = 1
 통합의 정도
시스템 프로그래밍
컴퓨터공학부