Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lecture #9 매크로 프로세서 설계 & 구현.

Similar presentations


Presentation on theme: "Lecture #9 매크로 프로세서 설계 & 구현."— Presentation transcript:

1 Lecture #9 매크로 프로세서 설계 & 구현

2 매크로(Macro)의 개념 매크로(Macro) 정의 매크로 처리 새로운 명령어 정의 및 사용 프로그램 작성의 용이성 제공
반복되는 명령들을 하나의 새로운 명령어로 정의 새로운 기능을 정의하여 확장할 수 있는 기능을 제공 프로그램 작성의 용이성 제공 매크로 처리 매크로 호출(Macro Call)에 대한 소스 확장 매크로 확장(Macro Expansion) 확장은 매크로프로세서가 처리 대부분 어셈블리언어에서 사용 시스템프로그래밍

3 매크로프로세서 역할(1) 매크로 프로세서(Macro Processor) 어셈블러에 포함되거나 별도의 프로그램으로 제공
어셈블리 프로그램 내에서 정의된 매크로 호출에 대해 매크로 정의에 지정된 실제 코드로 확장하는 언어 처리기 일련의 프로그램 전처리기(Preprocessor) 매크로 확장(Macro Expansion) 어셈블러에 포함되거나 별도의 프로그램으로 제공 매크로 지시어는 어셈블리어 명령어의 하나로 처리하는 경우에 어셈블러에 포함되어 동작 시스템프로그래밍

4 매크로 프로세서 역할(2) 원시 매크로 프로그램 프로세서 확장된 원시 프로그램 번역된 목적 컴파일러 또는 프로그램 어셈블러
시스템프로그래밍

5 매크로 정의(Macro Definition)(1)
..... ENDM  매크로 내용 실인자를 대치하여 프로그램 소스에 확장되는 부분 시스템프로그래밍

6 매크로 정의(2) 예제 프로그램 ADD AX, DATA ADD BX, DATA ADD CX, DATA ... DATA DW 5
시스템프로그래밍

7 매크로 정의(3) ADDATA MACRO ; 매크로 정의 시작 ADD AX, DATA ADD BX, DATA
ADD CX, DATA ENDM ; 매크로 정의 끝  매크로 내용 시스템프로그래밍

8 매크로 호출과 확장 (1) 매크로 정의 매크로 확장 매크로 호출 ADDATA MACRO ADD AX, DATA
ADD BX, DATA ADD CX, DATA ENDM MAIN SEGMENT ASSUME CS:NAIN,DS:MAIN MOV AX, MAIN MOV DS, AX ... ADDATA MOV AH, 4CH INT 21H DATA DW 3 MAIN ENDS END MAIN 매크로 정의 매크로 확장 매크로 호출 시스템프로그래밍

9 매크로 호출과 확장 (2) 확장된 어셈블리 프로그램 매크로 확장 MAIN SEGMENT
ASSUME CS:NAIN, DS:MAIN ... MOV AX, MAIN MOV DS, AX ADD AX, DATA ADD BX, DATA ADD CX, DATA MOV AH, 4CH INT 21H DATA DW 3 MAIN ENDS END MAIN 확장된 어셈블리 프로그램 매크로 확장 시스템프로그래밍

10 매크로와 프로시저 (1) 프로시저(Procedure) 프로시저 호출 – 프로그램 실행 제어가 프로시저로 이동 . 주프로그램
MOV DS, AX 프로시저 SUB . 호출 SUB PROC RET ENDP CALL SUB 호출 . . 반환 CALL SUB . 반환 시스템프로그래밍

11 매크로와 프로시저 (2) 매크로(Macro) 매크로 호출 – 주프로그램에 대해 매크로 확장 확장된 주프로그램 주프로그램 .
ADDATA MACRO 정의내용 ENDM . 확장 . 호출 ADDATA 확장내용 . . 확장내용 ADDATA 호출 . . 시스템프로그래밍

12 매크로와 프로시저 (3) 호출 처리 시간 매크로와 프로시저의 time & space trade-off
프로시저는 실행 시간에 호출에 의해 프로시저로 분기하여 프로시저를 실행 매크로는 번역(어셈블러 또는 컴파일러) 시간에 호출에 대해 소스 확장 매크로와 프로시저의 time & space trade-off 매크로의 반복 호출에 대해 매번 소스를 확장하기 때문에 프로그램 소스가 길어진다  기억장소 낭비 매크로 호출은 프로시저 호출에 의한 프로그램 분기가 발생하지 않기 때문에 실행 시간을 단축 시스템프로그래밍

13 매크로 기능 (1) 매크로 전향 참조 매크로 인자 사용 조건부 매크로 확장 매크로 내의 매크로 호출 매크로 내의 매크로 정의
반복 기능의 매크로 시스템프로그래밍

14 2-pass scanning에 의한 매크로 처리를 요구
매크로 기능 (2) MAIN SEGMENT ASSUME CS:NAIN,DS:MAIN MOV AX, MAIN MOV DS, AX ... ADDATA MOV AH, 4CH INT 21H DATA DW 3 MAIN ENDS ADDATA MACRO ADD AX, DATA ADD BX, DATA ADD CX, DATA ENDM END 전향 참조(forward Reference)를 지원 - 매크로를 정의하기 전에 호출 가능 2-pass scanning에 의한 매크로 처리를 요구 시스템프로그래밍

15 매크로 기능 (3) – 매크로 인수 MAIN SEGMENT ASSUME CS:NAIN,DS:MAIN MOV AX, MAIN
MOV DS, AX ... ADDATA1 DATA1 ADDATA1 DATA2 MOV AH, 4CH INT 21H DATA1 DW 10 DATA2 DW 20 MAIN ENDS ADDATA1 MACRO ARG ADD AX, ARG ADD BX, ARG ADD CX, ARG ENDM END MAIN MAIN SEGMENT ASSUME CS:NAIN, DS:MAIN ... MOV AX, MAIN MOV DS, AX ADD AX, DATA1 ADD BX, DATA1 ADD CX, DATA1 ADD AX, DATA2 ADD BX, DATA2 ADD CX, DATA2 MOV AH, 4CH INT 21H DATA1 DW 10 DATA1 DW 20 MAIN ENDS END MAIN 시스템프로그래밍

16 매크로 기능 (4) – 매크로 내의 매크로 호출 1단계 매크로 확장 2단계 매크로 확장 ADD1 MACRO ARG
매크로 기능 (4) – 매크로 내의 매크로 호출 ADD1 MACRO ARG ADD AX, ARG SHL AX, 1 ADD BX, AX ENDM ADDS MACRO ARG1, ARG2 ADD1 ARG1 ADD1 ARG2 MAIN SEGMENT ASSUME CS:NAIN,DS:MAIN MOV AX, MAIN MOV DS, AX ... ADDS DATA1, DATA2 DATA1 DW 10 DATA2 DW 20 MAIN ENDS END MAIN 1단계 매크로 확장 MAIN SEGMENT ASSUME CS:NAIN,DS:MAIN MOV AX, MAIN MOV DS, AX ... ADD1 DATA1 ADD1 DATA2 DATA1 DW 10 DATA2 DW 20 MAIN ENDS END MAIN 매크로 내의 매크로 호출 2단계 매크로 확장 시스템프로그래밍

17 매크로 기능 (5) – 매크로 내의 매크로 호출 3단계 매크로 확장 MAIN SEGMENT
매크로 기능 (5) – 매크로 내의 매크로 호출 MAIN SEGMENT ASSUME CS:NAIN,DS:MAIN MOV AX, MAIN MOV DS, AX ... ADD AX, DATA1 SHL AX, 1 ADD BX, AX ADD1 DATA2 DATA1 DW 10 DATA2 DW 20 MAIN ENDS END MAIN 3단계 매크로 확장 MAIN SEGMENT ASSUME CS:NAIN,DS:MAIN MOV AX, MAIN MOV DS, AX ... ADD AX, DATA1 SHL AX, 1 ADD BX, AX ADD AX, DATA2 ADD BX, AX DATA1 DW 10 DATA2 DW 20 MAIN ENDS END MAIN 시스템프로그래밍

18 매크로 기능 (6) 조건부 매크로 확장 매크로 내의 매크로 정의 반복 기능의 매크로 교재, 예제 5-5 교재, 예제 5-7
교재, 예제 5-8 시스템프로그래밍

19 2-Pass Macro Processing
매크로 프로세서의 기능 매크로 정의 인식 매크로 정의 저장 매크로 호출 인식 매크로 확장과 인수 치환 Pass-1 Processing 2-Pass Macro Processing Pass-2 Processing 매크로 전향 참조를 지원 시스템프로그래밍

20 이중-패스 매크로 프로세서와 데이터 구조 이중-패스 알고리즘은 전향참조를 지원하기 위해 필요
이중-패스 매크로 프로세서와 데이터 구조 이중-패스 알고리즘은 전향참조를 지원하기 위해 필요 패스-1 알고리즘과 패스-2 알고리즘으로 구성 원시 프로그램 실인수표 패스-1 패스-2 형식인수표 매크로 정의표 + 계수기 이름표 확장된 시스템프로그래밍

21 매크로프로세서의 자료구조(1) 매크로 정의표(MDT) 매크로 이름표(MNT) 매크로 정의표 계수기(MDTC)
매크로 이름표 계수기(MNTC) 형식인수표와 실인수표 시스템프로그래밍

22 매크로프로세서의 자료구조(2) 테스트 프로그램 ADD2 MACRO LAB, ARG1, ARG2, ARG3
LAB: ADD AX, ARG1 ADD BX, ARG2 ADD CX, ARG3 ENDM MAIN SEGMENT ASSUME CS:MAIN, DS:MAIN ADD2 LOOP1, DATA1, DATA2, DATA3 …. MAIN ENDS END MAIN 시스템프로그래밍

23 형식인수표의 구조 ADD2 MACRO LAB, ARG1, ARG2, ARG3 …. ENDM Pass-1 단계에서 생성
형식인수의 이름 LAB ARG1 ARG2 ARG3 색인 번호 #0 #1 #2 #3 시스템프로그래밍

24 실인수표의 구조 … ADD2 LOOP1, DATA1, DATA2, DATA3 ... Pass-2 단계에서 생성 색인 번호 #0
#1 #2 #3 실인수의 값 LOOP1 DATA1 DATA2 DATA3 시스템프로그래밍

25 매크로 정의표(MDT)의 구조 문 장 색인 . ADD2 MACRO LAB ARG1, ARG2, ARG3 15
매크로 정의표 계수기 15 문 장 . ADD2 MACRO LAB ARG1, ARG2, ARG3 #0 ADD AX, #1 ADD BX, #2 ADD CX, #3 ENDM 색인 15 16 17 18 19 매크로 정의표 계수기 20 시스템프로그래밍

26 매크로이름표(MNT)의 구조 색인 매크로 이름 MDT 색인 . 3 ADD2 15 매크로 이름표 계수기 3 매크로 이름표 계수기
4 시스템프로그래밍

27 이중 패스 매크로 프로세서 알고리즘 이중패스 매크로 프로세서 알고리즘 기본적인 매크로 프로세서 확장형 매크로 프로세서
매크로 전향 참조 지원 매크로 인자 지원 확장형 매크로 프로세서 기본형 매크로 프로세서 매크로 내에서의 다른 매크로 호출 지원 시스템프로그래밍

28 패스-1 알고리즘 (1) procedure pass1 { MDTC ← 1; MNTC ← 1; repeat
원시프로그램에서 다음 줄을 읽음; if (MACRO 지시어) { 매크로 이름과 MDTC의 값을 MNT의 MNTC번째 행에 기록; MNTC ← MNTC + 1; 형식인수표 작성 (형식인수에 색인번호를 붙임); 매크로 이름이 있는 줄을 MDT의 MDTC행에 기록; MDTC ← MDTC + 1; 시스템프로그래밍

29 패스-1 알고리즘 (2) 다음 줄을 읽는다; 문장 속의 형식인수를 색인번호로 치환; 이 줄을 MDT의 MDTC행에 기록;
repeat 다음 줄을 읽는다; 문장 속의 형식인수를 색인번호로 치환; 이 줄을 MDT의 MDTC행에 기록; MDTC ← MDTC + 1; until(ENDM 지시어); ENDM을 MDT의 MDTC행에 기록; } else { 패스2를 위해 출력; if (END 지시어) then 패스1 끝; forever 시스템프로그래밍

30 패스-1의 흐름 패스1시작 MDTC ← 1, MNTC ← 1 입력된 원시프로그램의 다음 줄을 읽는다. 아니오 아니오 MACRO
지시어? 패스2를 위해 출력 END 지시어? 매크로의 이름과 MDTC의 현재 값을 MNT의 MNTC행에 기록한다. 패스1끝 시스템프로그래밍

31 다음 줄을 읽는다 MNTC ← MNTC+1 패스1의 형식인수표 작성 문장속의 인수를 색인기호로 치환 매크로 이름을 MDT의
MDTC행에 기록 이 줄을 MDT의 MDTC행에 기록 MDTC ← MDTC+1 MDTC ← MDTC+1 아니오 ENDM 지시어? ENDM을 MDT에 기록 MDTC ← MDTC+1 시스템프로그래밍

32 패스-2 알고리즘 (1) procedure pass2 { repeat 패스1의 출력에서 다음 명령어를 읽는다;
읽은 명령어를 MNT의 각 행과 비교; if (매크로 호출?) { MDTP ← MNT내의 MDT 색인값; 실인수표 작성(실인수에 색인번호 붙임); MDTP ← MDTP + 1; MDT에서 MDTP행의 문장을 읽는다; 문장내의 인수 색인 번호를 실인수로 치환; 확장된 명령어를 출력; until (ENDM 지시어); } 시스템프로그래밍

33 패스-2 알고리즘 (2) else { 읽은 명령어 출력: if(END 지시어?) then 패스2 끝; } forever;
시스템프로그래밍

34 패스-2의 흐름 패스2시작 패스1 출력의 다음 줄을 읽는다 명령어 검색 (MNT 이용) 아니오 END 아니오 읽은 명령어
지시어? 아니오 매크로 이름 발견? 아니오 읽은 명령어 출력 MDTP←MNT 안의 MDT 색인값 패스2끝 시스템프로그래밍

35 MDTP ← MDTP+1 ENDM 지시어? 명령어 출력
실인수표 작성 MDTP ← MDTP+1 MDT로부터 MDTP 행을 읽어 온다 ENDM 지시어? 아니오 실인수표를 참조하여 문장내의 인수번호를 실인수로 치환 명령어 출력 시스템프로그래밍

36 확장된 패스-2 알고리즘 (1) 확장된 패스-2 알고리즘 매크로 내에서의 다른 매크로 호출에 대한 매크로 확장을 지원
매크로 확장 시에 새로운 매크로에 대한 호출을 만나면 새로운 매크로를 확장한 후에 이전 매크로 확장을 마무리한다 Recursive macro expansion 매크로 확장에 스택(stack)을 사용 내포된 매크로 호출(nested macro call)에 대해 확장하기 위해서는 현재 진행중인 매크로 확장의 상태 값을 저장 매크로 확장의 상태 값으로 이전의 스택포인터(SP), 확장중인 MDTP, 매크로의 실인자 등을 저장 별도의 실인수표를 만들지 않고 스택에 실인수를 저장한다 시스템프로그래밍

37 확장된 패스-2 알고리즘의 스택 구조 다음 프레임이 사용할 장소 (sp+2)+(N-1) S(sp+N+1) N-1번째 인자 …
스택 인덱스 내용 설 명 다음 프레임이 사용할 장소 (sp+2)+(N-1) S(sp+N+1) N-1번째 인자 매크로 호출인자 리스트 배열 sp+3 1번째 인자 S(sp+3) sp+2 0번째 인자 S(sp+2) sp+1 이 프레임에서의 MDTP S(sp+1) sp S(sp) 바로 이전 스택 프레임의 출발 위치 포인터 이전의 스택 프레임들 -1 N : 매크로에 넘어오는 argument수 sp : 스택 포인터의 현재값 S(m) : 스택의 m-번째 내용 시스템프로그래밍

38 확장된 패스-2 알고리즘 (2) Procedure Extened_Pass2 { sp  1; 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; // 이 프레임에서의 MDTP 시스템프로그래밍

39 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); } } Until (s(sp) != -1); // 매트로 내 매트로 호출 } Until (Not END 지시어); // 초기 매크로 호출 시스템프로그래밍

40 확장된 패 스 2 알고리즘 의 흐 름 시스템프로그래밍 시 작 명령어 완성 S(sp+1)  S(sp+1) + 1 Sp  1
시 작 명령어 완성 S(sp+1)  S(sp+1) + 1 Sp  1 ENDM ? Yes Pass1의 출력에서 다음 명령어를 읽는다. No sp S(sp) 매크로 호출 ? No 매크로호출 ? No Yes Yes S(sp)  -1 S(sp+1)  MNT의 MDT index S(sp+N+2)  sp sp  sp+N+2 S(sp+1)MNT의 MDT index 실인수를 S(sp+2), … S(sp+N+1)에 대입 실인수를 S(sp+2), … S(sp+N+1)에 대입 S(sp+1)S(sp+1)+1 S(sp+1)S(sp+1)+1 MDT에서 S(sp+1)행을 읽음 No S(sp) = -1 ? Yes S(sp+2), … S(sp+N+1) 를 이용하여 인수대치 Yes No END지시어? 시스템프로그래밍

41 요 약 매크로프로세서의 기능과 자료구조 이해 이중패스 알고리즘의 데이터베이스 이해 형식인수표와 실인수표의 형태를 이해
매크로정의표와 매크로이름표의 형태를 이해 매크로프로세서의 패스1과 패스2의 흐름을 이해 시스템프로그래밍


Download ppt "Lecture #9 매크로 프로세서 설계 & 구현."

Similar presentations


Ads by Google