5장 강의자료

Download Report

Transcript 5장 강의자료

제 5장 매크로 프로세서 설계
제 5 장 학습내용

매크로의 개념과 역할

매크로 정의 형식과 예

매크로 호출과 확장

매크로프로세서와 번역기와의 관계

서브루틴과의 차이점
제 5 장 학습내용

매크로 인수 사용의 개념과 예

조건부 매크로 확장

매크로내의 매크로 호출과 정의

반복기능의 매크로
제 5 장 학습내용

매크로프로세서의 기능

이중패스 매크로프로세서의 개념

형식인수표와 실인수표의 형태

매크로정의표와 매크로이름표의 형태

이중패스 알고리즘의 흐름
매크로의 개념
 반복되는
명령들을 정의
 매크로
호출에 의한 확장
 확장은
매크로프로세서가 처리
 대부분
어셈블리언어에서 사용
 프로그램
작성의 용이성 제공
매크로프로세서 역할

매크로지시어는 어셈블리어
명령어의 일종

어셈블러에게 포함되거나 별개의
프로그램으로 제공

매크로 정의 형태는 시스템에
따라 다름
매크로 정의의 필요성
 예제
프로그램
ADD AX, DATA
ADD BX, DATA
ADD CX, DATA
...
ADD AX, DATA
ADD BX, DATA
ADD CX, DATA
...
DATA DW 5
매크로의 정의 형식
매크로이름 MACRO <파라메타-리스트>
.....
.....
ENDM
… 매크로 내용
매크로의 정의 예
ADDATA MACRO …… 정의 시작
ADD AX, DATA
ADD BX, DATA
ADD CX, DATA
… 매크로
내용
ENDM …… 정의 끝
매크로 호출과 확장
 매크로이름
<파라메타-리스트>
ADDATA
⇒
ADD AX, DATA
ADD BX, DATA
ADD CX, DATA
원시프로그램과 확장된 프로그램
ADDATA MACRO
ADD AX, DATA
ADD BX, DATA 확장시 없어짐
ADD CX, DATA
ENDM
MAIN SEGMENT
MAIN SEGMENT
ASSUME CS:NAIN,
ASSUME CS:NAIN,
DS:MAIN
DS:MAIN
...
...
원시프로그램과 확장된 프로그램
MOV AX, MAIN
MOV DS, AX
...
ADDATA
ADDATA
MOV AH, 4CH
INT 21H
MOV AX,
MOV DS,
...
ADD AX,
ADD BX,
ADD CX,
ADD AX,
ADD BX,
ADD CX,
MOV AH,
INT 21H
MAIN
AX
DATA
DATA
DATA
DATA
DATA
DATA
4CH
원시프로그램과 확장된 프로그램
...
DATA DW 3
MAIN ENDS
END
...
DATA DW 3
MAIN ENDS
END
매크로프로세서와 번역기
원시
프로그램
매크로
프로세서
확장된 원시
프로그램
번역된 목적
프로그램
컴파일러 또는
어셈블러
서브루틴을 사용한 호출
주프로그램
MOV DS,
AX
.
.
.
서브루틴 SUB
CALL SUB
SUB PROC
.
CALL SUB
RET
ENDP
.
.
.
.
.
.
..
매크로의 정의와 호출
ADDATA
MACRO
정의내용
ENDM
주프로그램
..
.
호출
ADDATA
..
.
호출 ADDATA
..
.
확장된
주프로그램
..
.
확장내용
.
..
확장내용
..
.
매크로 인수 사용의 개념
 매크로
정의시 형식인수 사용
 매크로
호출시 실인수 사용
 형식인수는
 매크로의
실인수로 치환됨
정의와 호출시
여러개의 인수사용 가능
매크로의 호출과 인수의 사용
 예제
프로그램
입력된 원시프로그램 확장된 원시프로그램
ADDATA1 MACRO ARG
ADD AX, ARG
ADD BX, ARG
ADD CX, ARG
ENDM
...
...
매크로의 호출과 인수의 사용
ADDATA1 DATA1
...
ADDATA1 DATA2
...
DATA1 DW 5
DATA2 DW 10
ADD
ADD
ADD
...
ADD
ADD
ADD
...
DATA1
DATA2
AX, DATA1
BX, DATA1
CX, DATA1
AX, DATA2
BX, DATA2
CX, DATA2
DW 5
DW 10
여러개의 인수를 사용한 정의
 예제
프로그램
LOOP1 : ADD AX,
ADD BX,
ADD CX,
....
LOOP2 : ADD AX,
ADD BX,
ADD CX,
DATA1
DATA2
DATA3
DATA3
DATA2
DATA1
여러개의 인수를 사용한 정의

매크로의 정의
ADD2 MACRO LAB, ARG1, ARG2, ARG3
LAB : ADD AX, ARG1
ADD BX, ARG2
ADD CX, ARG3
ENDM
여러개의 인수를 사용한 정의

매크로의 호출과 확장
ADD2 LOOP1, DATA1, DATA2, DATA3
⇒
LOOP1 : ADD AX, DATA1
ADD BX, DATA2
ADD CX, DATA3
조건적 지시어
주어진 조건의 내용에 따라 프로그램
내의 특정부분을 수행 또는 건너 뜀
 조건이 참이면 IF 와 ENDIF
사이의 명령어가 수행
 IF expression, IFE expression
 조건결과가 0이 아니면 IF는 참
 조건결과가 0이면 IFE는 참

조건적 지시어


IF1, IF2
 어셈블러가
pass1 단계이면 IF1은 참
 어셈블러가
pass2 단계이면 IF2은 참
IFDEF symbol, IFNDEF symbol
 symbol이
 그렇지

정의되어 있으면 IFDEF는 참
않으면 IFNDEF가 참
IFIDN[IFIDF] string1,string2
두
문자열의 값이 같으면 IFIDN은 참
 그렇지
않으면 IFIDF 가 참
조건부 매크로정의와 확장

조건부 매크로 정의
VARY MACRO LAB, COUNT, ARG1,
ARG2, ARG3
LAB : ADD AX, ARG1
IFE COUNT-1
EXITM
ENDIF
조건부 매크로정의와 확장
ADD BX, ARG2
IFE COUNT-2
EXITM
ENDIF
ADD CX, ARG3
ENDM
조건부 매크로정의와 확장

매크로의 호출과 확장
VARY LOOP1, 2, DATA3, DATA2
⇒
LOOP2 : ADD AX, DATA3
ADD BX, DATA2
매크로내의 매크로 호출

매크로의 1차 정의
ADD1 MACRO ARG
MOV AX, ARG
SHL AX, 1
ADD BX, AX
ENDM
매크로내의 매크로 호출

매크로의 2차 정의
ADDS MACRO ARG1, ARG2
ADD1 ARG1
ADD1 ARG2
ENDM
매크로내의 매크로 호출
 매크로의
확장
ADDS DATA1, DATA2
⇒
ADD1 DATA1
ADD1 DATA2
⇒
매크로내의 매크로 호출
⇒
MOV
SHL
ADD
MOV
SHL
ADD
AX,
AX,
BX,
AX,
AX,
BX,
DATA1
1
AX
DATA2
1
AX
매크로내의 매크로 정의

이중 매크로 정의
DEFUN MACRO NAME
NAME MACRO ARG
PUSH ARG
CALL NAME
POP ARG
ENDM
ENDM
매크로내의 매크로 정의

매크로호출과 확장
DEFUN SIN
SIN AX
⇒
PUSH AX
CALL SIN
POP AX
REPT Directive
This makes it possible for a single
macro to create a large data
structure
 repeats a block of statements based
on a counter

REPT expression
Statement-list
ENDM
반복기능의 매크로 정의
FACT MACRO VALU
MOV DL, 1
MOV AL, 1
REPT VALU
MUL DL
INC DL
ENDM
반복기능의 매크로 확장
FACT 2
⇒
MOV
MOV
MUL
INC
MUL
INC
DL, 1
AL, 1
DL
DL
DL
DL
매크로프로세서의 기능

매크로 정의 인식

매크로 정의 저장

매크로 호출 인식

매크로 확장과 인수 치환
매크로프로세서의 자료구조

매크로정의표(MDT)

매크로이름표(MNT)

매크로정의표 계수기(MDTC)

매크로이름표 계수기(MNTC)

형식인수표와 실인수표
이중패스 알고리즘의 데이터베이스


이중패스는 전향참조를 위해 필요
패스1과 패스2로 구성
형식인수표
원시
프로그램
매크로
정의표
+
계수기
패
스
1
매크로
이름표
+
계수기
실인수표
패
스
2
확장된
프로그램
형식인수표의 형태

ADD2 MACRO, LAB, ARG1, ARG2, ARG3
형식인수의 이름
색인 번호
LAB
ARG1
ARG2
ARG3
#0
#1
#2
#3
실인수표의 형태
 ADD2
LOOP1, DATA1, DATA2, DATA3
색인 번호
실인수의 값
#0
#1
#2
#3
LOOP1
DATA1
DATA2
DATA3
매크로정의표(MDT)의 형태
색인
..
.
15
16
17
18
19
.
..
문
ADD2 MACRO LAB
#0
ADD AX,
ADD BX,
ADD CX,
ENDM
..
.
장
ARG1, ARG2, ARG3
#1
#2
#3
매크로이름표(MNT)의 형태
색인
..
.
매크로 이름
..
.
MDT 색인
..
.
3
ADD2
15
..
.
..
.
..
.
패스1의 흐름
패스1시작
MDTC ← 1, MNTC ← 1
입력된 원시프로그램의
다음 줄을 읽는다.
MACRO
지시어?
예
아니오
매크로의 이름과 MDTC의
현재값을 MNT의
MNTC행에 기록한다.
패스2를
위해 출력
END
지시어?
예
패스1끝
아니오
MNTC ← MNTC+1
다음 줄을 읽는다
패스1의
형식인수표 작성
문장속의 인수를
색인기호로 치환
매크로 이름을 MDT의
MDTC행에 기록
이 줄을 MDT의
MDTC행에 기록
MDTC ← MDTC+1
MDTC ← MDTC+1
MDTC ← MDTC+1
ENDM을
MDT에 기록
예
ENDM
지시어?
아니오
패스1 알고리즘
procedure pass1
MDTC ← 1;
MNTC ← 1;
repeat
원시프로그램에서 다음 줄을 읽음;
if(MACRO 지시어) {
매크로 이름과 MDTC의 값을 MNT의 MNTC번째 행에 기록;
MNTC ← MNTC + 1;
형식인수표 작성 (형식인수에 색인번호를 붙임);
매크로 이름이 있는 줄을 MDT의 MDTC행에 기록;
MDTC ← MDTC + 1;
repeat
다음 줄을 읽는다;
문장속의 형식인수를 색인번호로 치환;
이 줄을 MDT의 MDTC행에 기록;
MDTC ← MDTC + 1;
until(ENDM 지시어);
ENDM을 MDT의 MDTC행에 기록;
MDTC ← MDTC + 1;
}
else {
패스2를 위해 출력;
if(END 지시어) then 패스1 끝;
}
forever
end procedure;
패스2의 흐름
패스2시작
패스1 출력의 다음
줄을 읽는다
명령어 검색
(MNT 이용)
아니오
매크로
이름 발견?
예
MDTP←MNT 안의
MDT 색인값
읽은 명령어
출력
END
지시어?
예
패스2끝
아니오
실인수표 작성
MDTP ← MDTP+1
MDT로부터 MDTP 행을
읽어 온다
예
ENDM
지시어?
아니오
실인수표를 참조하여 문장내의
인수번호를 실인수로 치환
명령어
출력
패스2 알고리즘
procedure pass2
repeat
패스1의 출력에서 다음 명령어를 읽는다;
읽은 명령어를 MNT의 각 행과 비교;
if(매크로 호출?) {
MDTP ← MNT내의 MDT 색인값;
실인수표 작성
(실인수에 색인번호 붙임);
repeat
MDTP ← MDTP + 1;
MDT에서 MDTP행의 문장을 읽는다;
문장내의 인수 색인 번호를
실인수로 치환;
확장된 명령어를 출력;
until(ENDM 지시어); }
else {
읽은 명령어 출력:
if(END 지시어?) then 패스2 끝; }
forever
end procedure;
EXPAND 패스2 에서 사용하는 스택의 구조
스택 인덱스
내용
설
명
다음 프래임이 사용할 장소
(sp+2)+(N-1)
sp+3
sp+2
sp+1
sp
S(sp+N+1)
…
S(sp+3)
S(sp+2)
S(sp+1)
S(sp)
…
-1
N-1번째 인자
…
매크로 호출인자
1번째 인자
리스트배열
0번째 인자
이 프래임에서의 MDTP
바로 이전 스택 프래임의 출발 위치 포인터
이전의 스택 프래임들
N : 매크로에 넘어오는 argument수
sp : 스택 포인터의 현재값
S(m) : 스택의 m번째 내용
시 작
명령어 완성
SP  1
S(SP+1)  S(SP+1) + 1
Pass1의 출력에서 다음 명령어를 읽는다.
ENDM ?
Yes
No
매크로 호출 ?
No
SP S(SP)
매크로호출 ?
Yes
Yes
S(SP)  -1
S(SP+1)  MNT의 MDT index
실인수를 S(SP+2), …
S(SP+N+1)에 대입
SP = -1 ?
No
명령어 출력
S(SP+N+2)  SP
SP  SP+N+2
S(SP+1)MNT의 MDT index
확장된
명령어 출력
실인수를 S(SP+2), …S(SP+N+1) 에 대입
S(SP+1)S(SP+1)+1
S(SP+1)S(SP+1)+1
No
No
MDT에서 S(SP+1)행을 읽음
No
S(SP+2), … S(SP+N+1)를 이용하여 인수대치
END지시어?
Yes
끝
Yes
EXPAND 패스 2 알고리즘
sp  1;
N  0;
Repeat // 매크로호출
패스1의 출력에서 다음 명령어를 읽는다;
if (매크로호출)
{
s(sp)  -1;
s(sp+1)  MNT에서 MDT index;
실인수를 s(sp+2), … , s(sp+N+1)에 대입;
s(sp+1)  s(sp+1) + 1;
repeat{ // 매크로 내 매크로 호출
MDT에서 s(sp+1)행을 읽음;
s(sp+2), .. S(sp+N+1)을 이용하여 인수대치;
명령어 완성;
s(sp+1)  s(sp+1) + 1;
if (ENDM) sp  s(sp);
if (매크로호출){
s(sp+N+2)  sp;
sp  sp+N+2;
s(sp+1)  MNT의 MDT index;
실인수를 s(sp+2), … s(sp+N+1)에 대입;
s(sp+1)  s(sp+N+1);
}
else{ 확장된 명령어 출력;}
until (s(sp) != -1) // 매트로 내 매트로 호출
else{ 읽은 명령어 출력;}
}
Until (Not END 지시어) // 초기 매크로 호출
End Expand매크로 Procedure;
제 5 장 요약

매크로와 매크로프로세서의
개념정립

매크로 정의,호출,확장을 이해

매크로프로세서와 번역기와의
관계 이해

매크로와 서브루틴과의
차이점을 이해
제 5 장 요약

매크로 인수의 사용방법

조건부 매크로 정의와 호출을 이해

매크로내의 매크로 정의와
호출을 이해
제 5 장 요약

매크로프로세서의 기능과 자료구조 이해

이중패스 알고리즘의 데이터베이스 이해

형식인수표와 실인수표의 형태를 이해

매크로정의표와 매크로이름표의
형태를 이해

매크로프로세서의 패스1과 패스2의
흐름을 이해