41
1 Lecture #9 Lecture #9 매매매 매매매매 매매 매매매 매매매매 매매 & & 매매 매매

Lecture #9

  • Upload
    chyna

  • View
    88

  • Download
    2

Embed Size (px)

DESCRIPTION

Lecture #9. 매크로 프로세서 설계 & 구현. 매크로 (Macro) 의 개념. 매크로 (Macro) 정의 새로운 명령어 정의 및 사용 반복되는 명령들을 하나의 새로운 명령어로 정의 새로운 기능을 정의하여 확장할 수 있는 기능을 제공 프로그램 작성의 용이성 제공 매크로 처리 매크로 호출 (Macro Call) 에 대한 소스 확장 매크로 확장 (Macro Expansion) 확장은 매크로프로세서가 처리 대부분 어셈블리언어에서 사용. 매크로프로세서 역할 (1). - PowerPoint PPT Presentation

Citation preview

Page 1: Lecture #9

1

Lecture #9Lecture #9

매크로 프로세서 설계 매크로 프로세서 설계 & & 구현구현

Page 2: Lecture #9

시스템프로그래밍2

매크로매크로 (Macro)(Macro) 의 개념의 개념 매크로 (Macro) 정의

새로운 명령어 정의 및 사용 반복되는 명령들을 하나의 새로운 명령어로 정의 새로운 기능을 정의하여 확장할 수 있는 기능을 제공

프로그램 작성의 용이성 제공

매크로 처리 매크로 호출 (Macro Call) 에 대한 소스 확장

매크로 확장 (Macro Expansion)

확장은 매크로프로세서가 처리 대부분 어셈블리언어에서 사용

Page 3: Lecture #9

시스템프로그래밍3

매크로프로세서 역할매크로프로세서 역할 (1)(1)

매크로 프로세서 (Macro Processor) 어셈블리 프로그램 내에서 정의된 매크로 호출에 대해 매크로

정의에 지정된 실제 코드로 확장하는 언어 처리기 일련의 프로그램 전처리기 (Preprocessor)

매크로 확장 (Macro Expansion)

어셈블러에 포함되거나 별도의 프로그램으로 제공 매크로 지시어는 어셈블리어 명령어의 하나로 처리하는 경우에

어셈블러에 포함되어 동작

Page 4: Lecture #9

시스템프로그래밍4

매크로 프로세서 역할매크로 프로세서 역할 (2)(2)

원시원시프로그램프로그램

컴파일러 또는 컴파일러 또는 어셈블러어셈블러

확장된 원시확장된 원시프로그램프로그램

매크로매크로프로세서프로세서

번역된 목적 번역된 목적 프로그램프로그램

Page 5: Lecture #9

시스템프로그래밍5

매크로 정의매크로 정의 (Macro Definition)(1)(Macro Definition)(1)

매크로이름 MACRO <인수 - 리스트>

.....

.....

ENDM

매크로 내용매크로 내용

실인자를 대치하여 프로그램 소스에 확장되는 부분

Page 6: Lecture #9

시스템프로그래밍6

매크로 정의매크로 정의 (2)(2)

예제 프로그램

ADD AX, DATA ADD BX, DATA ADD CX, DATA

... ADD AX, DATA ADD BX, DATA ADD CX, DATA

...DATA DW 5

Page 7: Lecture #9

시스템프로그래밍7

매크로 정의매크로 정의 (3)(3)

ADDATA MACRO ; 매크로 정의 시작 ADD AX, DATA

ADD BX, DATA

ADD CX, DATA

ENDM ; 매크로 정의 끝

매크로 내용매크로 내용

Page 8: Lecture #9

시스템프로그래밍8

매크로 호출과 확장 매크로 호출과 확장 (1)(1)ADDATA MACRO ADD AX, DATA ADD BX, DATA ADD CX, DATA ENDM

MAIN SEGMENT ASSUME

CS:NAIN,DS:MAIN

MOV AX, MAINMOV DS, AX

...ADDATAADDATA

MOV AH, 4CHINT 21H

DATA DW 3MAIN ENDS

END MAIN

매크로 정의

매크로 호출

매크로 확장

Page 9: Lecture #9

시스템프로그래밍9

매크로 호출과 확장 매크로 호출과 확장 (2)(2)

MAIN SEGMENT ASSUME CS:NAIN, DS:MAIN ...

MOV AX, MAIN MOV DS, AX ... ADD AX, DATA ADD BX, DATA ADD CX, DATA

ADD AX, DATA ADD BX, DATA ADD CX, DATA MOV AH, 4CH INT 21H

...DATA DW 3MAIN ENDS END MAIN

매크로 확장확장된 어셈블리 프로그램

Page 10: Lecture #9

시스템프로그래밍10

반환

반환

호출

매크로와 프로시저 매크로와 프로시저 (1)(1)

...

SUB PROC

RET ENDP

프로시저 SUB...

CALL SUB

MOV DS, AX

...

CALL SUB

...

주프로그램

프로시저 (Procedure) 프로시저 호출 – 프로그램 실행 제어가 프로시저로 이동

호출

Page 11: Lecture #9

시스템프로그래밍11

매크로와 프로시저 매크로와 프로시저 (2)(2)

ADDATA MACRO

정의내용

ENDM

...

확장내용...

...

확장된주프로그램

확장내용

주프로그램

호출

호출

...

ADDATA...

...

ADDATA

매크로 (Macro) 매크로 호출 – 주프로그램에 대해 매크로 확장

확장

Page 12: Lecture #9

시스템프로그래밍12

매크로와 프로시저 매크로와 프로시저 (3)(3)

호출 처리 시간 프로시저는 실행 시간에 호출에 의해 프로시저로 분기하여

프로시저를 실행 매크로는 번역 ( 어셈블러 또는 컴파일러 ) 시간에 호출에 대해

소스 확장

매크로와 프로시저의 time & space trade-off 매크로의 반복 호출에 대해 매번 소스를 확장하기 때문에 프로그램

소스가 길어진다 기억장소 낭비 매크로 호출은 프로시저 호출에 의한 프로그램 분기가 발생하지

않기 때문에 실행 시간을 단축

Page 13: Lecture #9

시스템프로그래밍13

매크로 기능 매크로 기능 (1)(1)

매크로 전향 참조 매크로 인자 사용 조건부 매크로 확장 매크로 내의 매크로 호출 매크로 내의 매크로 정의 반복 기능의 매크로

Page 14: Lecture #9

시스템프로그래밍14

매크로 기능 매크로 기능 (2)(2)MAIN SEGMENT ASSUME

CS:NAIN,DS:MAIN

MOV AX, MAINMOV DS, AX

...ADDATAADDATA

MOV AH, 4CHINT 21H

DATA DW 3MAIN ENDS

ADDATA MACRO ADD AX, DATA ADD BX, DATA ADD CX, DATA ENDM

END

전향 참조 (forward

Reference) 를 지원 - 매크로를 정의하기 전에 호출 가능

2-pass scanning 에 의한 매크로 처리를

요구

Page 15: Lecture #9

시스템프로그래밍15

매크로 기능 매크로 기능 (3) (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 10DATA2 DW20MAIN 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 10DATA1 DW 20MAIN ENDS END MAIN

Page 16: Lecture #9

시스템프로그래밍16

매크로 기능 매크로 기능 (4)(4) – – 매크로 내의 매크로 호출매크로 내의 매크로 호출

ADD1 MACRO ARG ADD AX, ARG SHL AX, 1 ADD BX, AX ENDM

ADDS MACRO ARG1, ARG2 ADD1 ARG1 ADD1 ARG2

ENDM

MAIN SEGMENT ASSUME

CS:NAIN,DS:MAIN

MOV AX, MAIN MOV DS, AX

... ADDS DATA1, DATA2

...DATA1 DW 10DATA2 DW20MAIN ENDS

END MAIN

매크로 내의 매크로 호출

MAIN SEGMENT ASSUME

CS:NAIN,DS:MAIN

MOV AX, MAIN MOV DS, AX

... ADD1 DATA1 ADD1 DATA2

...DATA1 DW 10DATA2 DW20MAIN ENDS

END MAIN

1 단계 매크로 확장

2 단계 매크로 확장

Page 17: Lecture #9

시스템프로그래밍17

매크로 기능 매크로 기능 (5)(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 10DATA2 DW20MAIN 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 SHL AX, 1 ADD BX, AX

...DATA1 DW 10DATA2 DW20MAIN ENDS

END MAIN

Page 18: Lecture #9

시스템프로그래밍18

매크로 기능 매크로 기능 (6)(6)

조건부 매크로 확장 교재 , 예제 5-5

매크로 내의 매크로 정의 교재 , 예제 5-7

반복 기능의 매크로 교재 , 예제 5-8

Page 19: Lecture #9

시스템프로그래밍19

매크로 프로세서의 기능매크로 프로세서의 기능

매크로 정의 인식

매크로 정의 저장

매크로 호출 인식

매크로 확장과 인수 치환

Pass-1 Processing

Pass-2 Processing

2-Pass Macro

Processing

매크로 전향 참조를 지원

Page 20: Lecture #9

시스템프로그래밍20

이중이중 -- 패스 매크로 프로세서와 패스 매크로 프로세서와 데이터 구조데이터 구조

이중 - 패스 알고리즘은 전향참조를 지원하기 위해 필요 패스 -1 알고리즘과 패스 -2 알고리즘으로 구성

원시 프로그램

실인수표

패스 -1

패스 -2

형식인수표 매크로정의표+

계수기

매크로이름표+

계수기

확장된프로그램

Page 21: Lecture #9

시스템프로그래밍21

매크로프로세서의 자료구조매크로프로세서의 자료구조 (1)(1)

매크로 정의표 (MDT)

매크로 이름표 (MNT)

매크로 정의표 계수기 (MDTC)

매크로 이름표 계수기 (MNTC)

형식인수표와 실인수표

Page 22: Lecture #9

시스템프로그래밍22

매크로프로세서의 자료구조매크로프로세서의 자료구조 (2)(2)

테스트 프로그램

ADD2 MACRO LAB, ARG1, ARG2, ARG3LAB: 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

Page 23: Lecture #9

시스템프로그래밍23

형식인수표의 구조형식인수표의 구조ADD2 MACRO LAB, ARG1, ARG2, ARG3

….

ENDM

형식인수의 이름형식인수의 이름

LAB LAB ARG1ARG1ARG2ARG2ARG3ARG3

색인 번호색인 번호#0#0#1#1#2#2#3#3

Pass-1 단계에서 생성

Page 24: Lecture #9

시스템프로그래밍24

실인수표의 구조실인수표의 구조

색인 번호색인 번호#0#0#1#1#2#2#3#3

실인수의 값실인수의 값

LOOP1LOOP1DATA1DATA1DATA2DATA2DATA3DATA3

ADD2 LOOP1, DATA1, DATA2, DATA3

...

Pass-2 단계에서 생성

Page 25: Lecture #9

시스템프로그래밍25

매크로 정의표매크로 정의표 (MDT)(MDT) 의 구조의 구조

문 장...

ADD2 MACRO LAB ARG1, ARG2, ARG3 #0 ADD AX, #1 ADD BX, #2 ADD CX, #3 ENDM

색인...1516171819...

매크로 정의표 계수기 15

매크로 정의표 계수기 20

Page 26: Lecture #9

시스템프로그래밍26

매크로이름표매크로이름표 (MNT)(MNT) 의 구조의 구조

색인...

3

...

매크로 이름...

ADD2

...

MDT 색인...

15

...

매크로 이름표 계수기 3

매크로 이름표 계수기 4

Page 27: Lecture #9

시스템프로그래밍27

이중 패스 매크로 프로세서 알고리즘이중 패스 매크로 프로세서 알고리즘 이중패스 매크로 프로세서 알고리즘

기본적인 매크로 프로세서 매크로 전향 참조 지원 매크로 인자 지원

확장형 매크로 프로세서 기본형 매크로 프로세서 매크로 내에서의 다른 매크로 호출 지원

Page 28: Lecture #9

시스템프로그래밍28

procedure pass1 { MDTC ← 1; MNTC ← 1; repeat 원시프로그램에서 다음 줄을 읽음 ; if (MACRO 지시어 ) { 매크로 이름과 MDTC 의 값을 MNT 의 MNTC 번째 행에

기록 ;MNTC ← MNTC + 1;형식인수표 작성 ( 형식인수에 색인번호를 붙임 );매크로 이름이 있는 줄을 MDT 의 MDTC 행에 기록 ;MDTC ← MDTC + 1;

패스패스 -1 -1 알고리즘 알고리즘 (1)(1)

Page 29: Lecture #9

시스템프로그래밍29

repeat 다음 줄을 읽는다 ; 문장 속의 형식인수를 색인번호로 치환 ;

이 줄을 MDT 의 MDTC 행에 기록 ; MDTC ← MDTC + 1; until(ENDM 지시어 ); ENDM 을 MDT 의 MDTC 행에 기록 ; MDTC ← MDTC + 1; } else { 패스 2 를 위해 출력 ; if (END 지시어 ) then 패스 1 끝 ; } forever}

패스패스 -1 -1 알고리즘 알고리즘 (2)(2)

Page 30: Lecture #9

시스템프로그래밍30

패스패스 11 끝끝예예

MDTC ← 1, MNTC ← MDTC ← 1, MNTC ← 11

패스패스 11 시작시작

입력된 원시프로그램의 입력된 원시프로그램의 다음 줄을 읽는다다음 줄을 읽는다 ..

MACROMACRO지시어지시어 ??

패스패스 22 를를위해 출력위해 출력

예예

아니오아니오아니오아니오

매크로의 이름과 매크로의 이름과 MDTCMDTC 의의현재 값을 현재 값을 MNTMNT 의의

MNTCMNTC 행에 기록한다행에 기록한다 ..

ENDEND지시어지시어 ??

패스패스 -1-1 의 흐름의 흐름

Page 31: Lecture #9

시스템프로그래밍31

다음 줄을 읽는다다음 줄을 읽는다

MDTC ← MDTC ← MDTC+1MDTC+1

매크로 이름을 매크로 이름을 MDTMDT 의 의 MDTCMDTC 행에 기록행에 기록

MNTC ← MNTC ← MNTC+1MNTC+1

패스패스 11 의 의 형식인수표 작성형식인수표 작성

문장속의 인수를 문장속의 인수를 색인기호로 치환색인기호로 치환

아니오아니오예예 ENDMENDM지시어지시어 ??

이 줄을 이 줄을 MDTMDT 의 의 MDTCMDTC 행에 기록행에 기록

MDTC ← MDTC ← MDTC+1MDTC+1

ENDMENDM 을을MDTMDT 에 에

기록기록

MDTC ← MDTC ← MDTC+1MDTC+1

Page 32: Lecture #9

시스템프로그래밍32

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

MDTP ← MDTP + 1; MDT 에서 MDTP 행의 문장을 읽는다 ; 문장내의 인수 색인 번호를 실인수로 치환 ; 확장된 명령어를 출력 ; until (ENDM 지시어 ); }

패스패스 -2 -2 알고리즘 알고리즘 (1)(1)

Page 33: Lecture #9

시스템프로그래밍33

else {

읽은 명령어 출력 :

if(END 지시어 ?) then 패스 2 끝 ;

}

forever;

}

패스패스 -2 -2 알고리즘 알고리즘 (2)(2)

Page 34: Lecture #9

시스템프로그래밍34

패스패스 1 1 출력의 다음 출력의 다음 줄을 읽는다줄을 읽는다

패스패스 22 시작시작

명령어 검색명령어 검색(MNT (MNT 이용이용 ))

매크로매크로이름 발견이름 발견 ??

패스패스 22 끝끝

읽은 명령어 읽은 명령어 출력출력

예예

아니오아니오아니오아니오

예예

MDTP←MNT MDTP←MNT 안의 안의 MDT MDT 색인값색인값

ENDEND지시어지시어 ??

패스패스 -2-2 의 흐름의 흐름

Page 35: Lecture #9

시스템프로그래밍35

MDTMDT 로부터 로부터 MDTP MDTP 행을 행을 읽어 온다읽어 온다

실인수표 작성실인수표 작성

MDTP ← MDTP+1MDTP ← MDTP+1

아니오아니오

예예 ENDMENDM지시어지시어 ??

명령어명령어출력출력실인수표를 참조하여 문장내의 실인수표를 참조하여 문장내의

인수번호를 실인수로 치환인수번호를 실인수로 치환

Page 36: Lecture #9

시스템프로그래밍36

확장된 패스확장된 패스 -2 -2 알고리즘 알고리즘 (1)(1)

확장된 패스 -2 알고리즘 매크로 내에서의 다른 매크로 호출에 대한 매크로 확장을 지원

매크로 확장 시에 새로운 매크로에 대한 호출을 만나면 새로운 매크로를 확장한 후에 이전 매크로 확장을 마무리한다

Recursive macro expansion

매크로 확장에 스택 (stack) 을 사용 내포된 매크로 호출 (nested macro call) 에 대해 확장하기

위해서는 현재 진행중인 매크로 확장의 상태 값을 저장 매크로 확장의 상태 값으로 이전의 스택포인터 (SP), 확장중인 MDT

P, 매크로의 실인자 등을 저장 별도의 실인수표를 만들지 않고 스택에 실인수를 저장한다

Page 37: Lecture #9

시스템프로그래밍37

확장된 패스확장된 패스 -2 -2 알고리즘의 스택 구조알고리즘의 스택 구조

-1…

S(sp)S(sp+1)S(sp+2)S(sp+3)

…S(sp+N+1)

다음 프레임이 사용할 장소

N-1번째 인자

1번째 인자…

0번째 인자이 프레임에서의 MDTP바로 이전 스택 프레임의 출발 위치 포인터

이전의 스택 프레임들

(sp+2)+(N-1)

sp+3sp+2sp+1sp

스택 인덱스 내용 설 명

N : 매크로에 넘어오는 argument 수sp : 스택 포인터의 현재값 S(m) : 스택의 m- 번째 내용

매크로 호출인자리스트 배열

Page 38: Lecture #9

시스템프로그래밍38

확장된 패스확장된 패스 -2 -2 알고리즘 알고리즘 (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

Page 39: Lecture #9

시스템프로그래밍39

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 지시어 ); // 초기 매크로 호출

}

Page 40: Lecture #9

시스템프로그래밍40

시 작

Sp 1

매크로 호출 ?

S(sp) -1S(sp+1) MNT 의 MDT index

Pass1 의 출력에서다음 명령어를 읽는다 .

실인수를 S(sp+2), … S(sp+N+1) 에 대입

S(sp+1)S(sp+1)+1

MDT 에서 S(sp+1) 행을 읽음

S(sp+2), … S(sp+N+1)를 이용하여 인수대치

명령어 완성

S(sp+1) S(sp+1) + 1

ENDM ?

매크로호출 ?

S(sp+N+2) spsp 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 ?

END 지시어 ? 끝

sp S(sp)

No

No

No

No

No Yes

Yes

Yes

Yes

Yes

확장확장된된

패패스스22

알고알고리즘리즘의의 흐흐름름

Page 41: Lecture #9

시스템프로그래밍41

요 약요 약

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