제 5장 매크로 프로세서 설계.

Slides:



Advertisements
Similar presentations
제철고 프로그래밍언어 2015 가을학기 강의 #2 Python 변수, 입출력, 배열 박성우 POSTECH 컴퓨터공학과 2015 년 9 월 30 일.
Advertisements

1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
4장 어셈블리 프로그램 작성의 기본 어셈블러 어셈블리 언어 요소 예제 프로그램 데이터 정의
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 프로그래밍 언어 1-1 C 언어의 개론적 이야기 한글, 엑셀, 게임 등의 프로그램을 만들 때 사용하는 언어 ‘컴퓨터 프로그래머’라는 사람들이 제작 C 언어(C++ 포함)를 가장 많이 사용함.
제 9 장 구조체와 공용체.
Lecture #5 어셈블리어 (2) 매크로 어셈블리어 시스템프로그래밍.
컴퓨터 프로그래밍 기초 [Final] 기말고사
Lecture #7 어셈블리어 (4) 매크로 어셈블리어 시스템프로그래밍.
제7강 학습 내용 주소지정 방식의 예 값 즉시 지정 방식과 실행 예 레지스터 직접지정 방식 메모리 직접지정 방식과 실행 예
제 7 장 링커와 로더 설계.
Lecture # 어셈블러 설계.
11장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
자료 구조: Chapter 3 (2)구조체, 포인터
어셈블리 문법 보강 4월 10일.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
Lecture #8 어셈블리어 (5) 매크로 어셈블리어 시스템프로그래밍.
제 5장 매크로 프로세서 설계.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
제 6 장 8086 어셈블러 설계.
제 6장 8086 어셈블러 설계.
23장. 구조체와 사용자 정의 자료형 2.
프로그래밍 랩 – 7주 리스트.
11장. 1차원 배열.
C#.
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
자바 5.0 프로그래밍.
프로그래밍 개요
Chap 6.Assembler 유건우.
인터넷응용프로그래밍 JavaScript(Intro).
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
어셈블리어 (2) 매크로 어셈블리어 시스템 프로그래밍 - Lecture #4
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
24장. 파일 입출력.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Lecture #9 매크로 프로세서 설계 & 구현.
제 9장 트랜스레이터.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
Fucntion 요약.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
데이터 동적 할당 Collection class.
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
구조체 (Structure).
7주차: Functions and Arrays
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
공학도를 위한 C언어 프로그래밍실습1 -통합개발환경 사용법-
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
3.2 분기 명령어.
16장. 변수, 연산자, 사용자 정의 함수 변수 배열과 객체 연산자 함수.
Numerical Analysis Programming using NRs
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제 4 장 Record.
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
Assembly 05 방호남 07 반지훈 09 박상욱.
Presentation transcript:

제 5장 매크로 프로세서 설계

제 5-1장 학습내용 매크로의 개념과 역할 매크로 정의 형식과 예 매크로 호출과 확장 매크로프로세서와 번역기와의 관계 서브루틴과의 차이점

매크로의 개념 반복되는 명령들을 정의 매크로 호출에 의한 확장 확장은 매크로프로세서가 처리 대부분 어셈블리언어에서 사용 프로그램 작성의 용이성 제공

매크로프로세서 역할 매크로지시어는 어셈블리어 명령어의 일종 어셈블러에게 포함되거나 별개의 프로그램으로 제공 매크로 정의 형태는 시스템에 따라 다름

매크로 정의의 필요성 예제 프로그램 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 ASSUME CS:NAIN, DS:MAIN ... 확장시 없어짐 MAIN SEGMENT ASSUME CS:NAIN, DS:MAIN ...

원시프로그램과 확장된 프로그램 MOV AX, MAIN MOV AX, MAIN MOV DS, AX MOV DS, AX ... ADD AX, DATA ADD BX, DATA ADD CX, DATA MOV AH, 4CH INT 21H MOV AX, MAIN MOV DS, AX ... ADDATA MOV AH, 4CH INT 21H

원시프로그램과 확장된 프로그램 ... DATA DW 3 MAIN ENDS END ... DATA DW 3 MAIN ENDS END

매크로프로세서와 번역기 원시 프로그램 매크로 프로세서 확장된 원시 프로그램 번역된 목적 프로그램 컴파일러 또는 어셈블러

서브루틴을 사용한 호출 주프로그램 MOV DS, AX 서브루틴 SUB SUB PROC CALL SUB RET ENDP . SUB PROC RET ENDP CALL SUB . . CALL SUB .

매크로의 정의와 호출 확장된 주프로그램 주프로그램 . . ADDATA MACRO 호출 정의내용 확장내용 ADDATA ENDM

제 5-1장 요약 매크로와 매크로프로세서의 개념정립 매크로 정의,호출,확장을 이해 매크로프로세서와 번역기와의 관계 이해 매크로와 서브루틴과의 차이점을 이해

제 5-2장 학습내용 매크로 인수 사용의 개념과 예 조건부 매크로 확장 매크로내의 매크로 호출과 정의 반복기능의 매크로

매크로 인수 사용의 개념 매크로 정의시 형식인수 사용 매크로 호출시 실 인수 사용 형식인수는 실인수로 치환됨 매크로의 정의와 호출시 여러개의 인수사용 가능

매크로의 호출과 인수의 사용 예제 프로그램 입력된 원시프로그램 확장된 원시프로그램 ADDATA1 MACRO ARG ADD AX, ARG ADD BX, ARG ADD CX, ARG ENDM ... 확장된 원시프로그램 ...

매크로의 호출과 인수의 사용 ADDATA1 DATA1 ADD AX, DATA1 ADD BX, DATA1 ... DATA1 DW 5 DATA2 DW 10 ADD AX, DATA1 ADD BX, DATA1 ADD CX, DATA1 ... ADD AX, DATA2 ADD BX, DATA2 ADD CX, DATA2 DATA1 DW 5 DATA2 DW 10

여러개의 인수를 사용한 정의 예제 프로그램 LOOP1 : ADD AX, DATA1 ADD BX, DATA2 ADD CX, DATA3 .... LOOP2 : ADD AX, DATA3 ADD CX, 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 AX, DATA1 SHL AX, 1 ADD BX, AX MOV AX, DATA2

매크로내의 매크로 정의 이중 매크로 정의 DEFUN MACRO NAME NAME MACRO ARG PUSH ARG CALL NAME POP ARG 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 DL, 1 MOV AL, 1 MUL DL INC DL ⇒

제 5-2장 요약 매크로 인수의 사용방법 조건부 매크로 정의와 호출을 이해 매크로내의 매크로 정의와 호출을 이해

제 5-3장 학습내용 매크로프로세서의 기능 이중패스 매크로프로세서의 개념 형식인수표와 실인수표의 형태 매크로정의표와 매크로이름표의 형태 이중패스 알고리즘의 흐름

매크로프로세서의 기능 매크로 정의 인식 매크로 정의 저장 매크로 호출 인식 매크로 확장과 인수 치환 니모닉(mnemonic)은 재사용이 필요할 때 사람의 기억을 돕기 위해 명확하게 선택된 상징이나 상징의 조합을 사용하는 것을 말한다. 니모닉은 통상 나타내고자 하는 항목과 어떤 관련이 있도록 선택되며, 기본적인 동작을 알 수 있도록 구성된다. 전산 분야에서는 기계어나 기계의 동작을 사람이 알아보기 쉬운 형태로 표시할 때에 사용한다. 예를 들면 도스(DOS)에서 첫번째 시리얼 포트에 COM1이라는 니모닉을 할당하는 것을 들 수 있다. 한편, 대부분의 프로그래밍언어도 니모닉이라고 할 수 있다. 예를 들어 어셈블리언어는 컴퓨터 기종마다 다르지만 덧셈은 주로 A 또는 ADD로, 곱셈은 M, MPY 또는 MUL 등으로 나타낸다.

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

이중패스 알고리즘의 데이터베이스 이중패스는 전향참조를 위해 필요 패스1과 패스2로 구성 실인수표 형식인수표 패 스 패 2 스 매크로 정의표 + 계수기 패 스 2 패 스 1 매크로 이름표 + 계수기 확장된 프로그램 원시 프로그램

형식인수표의 형태(매크로정의마다) ADD2 MACRO, LAB, ARG1, ARG2, ARG3 형식인수의 이름 LAB ARG1 색인 번호 #0 #1 #2 #3

실인수표의 형태(매크로호출마다) ADD2 LOOP1, DATA1, DATA2, DATA3 색인 번호 #0 #1 #2 #3 실인수의 값 LOOP1 DATA1 DATA2 DATA3

매크로정의표(MDT)의 형태 문 장 색인 . . ADD2 MACRO LAB ARG1, ARG2, ARG3 15 16 17 18 19 문 장 . ADD2 MACRO LAB ARG1, ARG2, ARG3 #0 ADD AX, #1 ADD BX, #2 ADD CX, #3 ENDM

매크로이름표(MNT)의 형태 색인 . 3 매크로 이름 . ADD2 MDT 색인 . 15

패스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

패스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행에 기록; } else { 패스2를 위해 출력; if(END 지시어) then 패스1 끝; forever end procedure;

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

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

패스2 알고리즘 procedure pass2 repeat 패스1의 출력에서 다음 명령어를 읽는다; 읽은 명령어를 MNT의 각 행과 비교; if(매크로 호출?) { MDTP ← MNT내의 MDT 색인값; 실인수표 작성 (실인수에 색인번호 붙임);

MDTP ← MDTP + 1; MDT에서 MDTP행의 문장을 읽는다; 문장내의 인수 색인 번호를 실인수로 치환; 확장된 명령어를 출력; until(ENDM 지시어); } else { 읽은 명령어 출력: if(END 지시어?) then 패스2 끝; } forever end procedure;

EXPAND 패스2 에서 사용하는 스택의 구조 다음 프래임이 사용할 장소 (sp+2)+(N-1) S(sp+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번째 내용

시 작 명령어 완성 S(sp+1)  S(sp+1) + 1 Sp  1 ENDM ? Pass1의 출력에서 시 작 명령어 완성 S(sp+1)  S(sp+1) + 1 Sp  1 ENDM ? Yes Pass1의 출력에서 다음 명령어를 읽는다. Yes S(sp) = -1 ? No 매크로 호출 ? No 매크로호출 ? No No 명령어 출력 sp S(sp) 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)행을 읽음 S(sp+2), … S(sp+N+1) 를 이용하여 인수대치 END지시어? Yes No 끝

EXPAND 패스 2 알고리즘 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;

s(sp+1)  s(sp+1) + 1; repeat // 매크로 내 매크로 호출 MDT에서 s(sp+1)행을 읽음; s(sp+2), .. S(sp+N+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 지시어) // 초기 매크로 호출 End Expand매크로 Procedure;

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

struct (구조체) 여러 개의 변수를 쉽게 사용할 수 있도록 하나의 이름으로 집단화 시킨 하나 이상의 변수의 집합체 구조체에 포함되는 각각의 변수를 구조체 멤버라 한다. 구조체 멤버는 C의 모든 데이터 형을 포함

struct point{ int x; int y; }; 두개의 정수형 변수 x, y를 가지는 point라는 구조체 정의 실질적인 변수는 생성되지 않음

struct point{ int x; int y; }first, second; 두개의 정수형 변수 x, y를 가지는 point라는 구조체 정의 point 형 변수 first와 second 생성 first와 second는 x,y를 멤버로 가짐 first.x =3;

struct point{ int x; int y; }; struct point first, second; 구조체의 정의와 변수선언을 구분

typedef unsigned long ulong; ulong ul; Equivalent to "unsigned long ul;

typedef struct point{ int x; int y; }pointer; pointer first, second; pointer라는 synonym 선언 pointer first, second; struct point first, second;