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

Slides:



Advertisements
Similar presentations
컴퓨터와 인터넷.
Advertisements

목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
4장 어셈블리 프로그램 작성의 기본 어셈블러 어셈블리 언어 요소 예제 프로그램 데이터 정의
Database Laboratory, Hong Ik University
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
제4장 어셈블리어.
제 9 장 구조체와 공용체.
Lecture #5 어셈블리어 (2) 매크로 어셈블리어 시스템프로그래밍.
컴퓨터 프로그래밍 기초 [Final] 기말고사
Lecture #7 어셈블리어 (4) 매크로 어셈블리어 시스템프로그래밍.
제7강 학습 내용 주소지정 방식의 예 값 즉시 지정 방식과 실행 예 레지스터 직접지정 방식 메모리 직접지정 방식과 실행 예
제 7 장 링커와 로더 설계.
Lecture # 어셈블러 설계.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
어셈블리 문법 보강 4월 10일.
Lecture #8 어셈블리어 (5) 매크로 어셈블리어 시스템프로그래밍.
제 5장 매크로 프로세서 설계.
제 5장 매크로 프로세서 설계.
3.2 SQL Server 설치 및 수행(계속) 시스템 데이터베이스 master
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
FTP 프로그램 채계화 박재은 박수민.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
26. 매크로와 전처리기.
제 6 장 8086 어셈블러 설계.
제 6장 8086 어셈블러 설계.
18강. 데이터 베이스 - II JDBC 살펴보기 Statement객체 살펴보기 Lecturer Kim Myoung-Ho
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
프로그래밍 개요
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
어셈블리어 (2) 매크로 어셈블리어 시스템 프로그래밍 - Lecture #4
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
24장. 파일 입출력.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
제 9장 트랜스레이터.
10장 부프로그램 구현 순천향대학교 컴퓨터공학과 하 상 호.
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
Fucntion 요약.
CHAP 21. 전화, SMS, 주소록.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
( Windows Service Application Debugging )
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
7주차: Functions and Arrays
ARM Development Suite v1.2
3. 모듈 (5장. 모듈).
논리회로 설계 및 실험 4주차.
공학도를 위한 C언어 프로그래밍실습1 -통합개발환경 사용법-
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
TVM ver 최종보고서
발표자 : 이지연 Programming Systems Lab.
3.2 분기 명령어.
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제 4 장 Record.
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
CHAP 15. 데이터 스토리지.
Assembly 05 방호남 07 반지훈 09 박상욱.
Prof. Kyungshik Lim Kyungpook National University
Presentation transcript:

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

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

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

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

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

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

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

매크로 호출과 확장 (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 매크로 정의 매크로 확장 매크로 호출 시스템프로그래밍

매크로 호출과 확장 (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 확장된 어셈블리 프로그램 매크로 확장 시스템프로그래밍

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

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

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

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

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에 의한 매크로 처리를 요구 시스템프로그래밍

매크로 기능 (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 시스템프로그래밍

매크로 기능 (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단계 매크로 확장 시스템프로그래밍

매크로 기능 (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 시스템프로그래밍

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

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

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

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

매크로프로세서의 자료구조(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 시스템프로그래밍

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

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

매크로 정의표(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 시스템프로그래밍

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

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

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

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

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

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

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

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

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

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

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

확장된 패스-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-번째 내용 시스템프로그래밍

확장된 패스-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 시스템프로그래밍

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 지시어); // 초기 매크로 호출 시스템프로그래밍

확장된 패 스 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지시어? 끝 시스템프로그래밍

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