본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

매크로 프로세서(Macro Processor)는 원시 프로그램 안에 정의된 매크로를 찾아, 매크로 이름이 쓰인 자리마다 정의된 명령 묶음을 펼쳐 넣는 시스템 소프트웨어이다.

어셈블리 언어로 프로그램을 짜다 보면 같은 명령 몇 줄을 여러 곳에서 되풀이해 쓰게 된다. 이 명령 묶음에 이름을 붙여 한 번만 정의해 두고, 필요한 곳에는 이름만 적으면 번역 전에 원래 명령들로 바꿔 주는 것이 매크로이고, 이 바꾸기를 맡는 프로그램이 매크로 프로세서다. 매크로 프로세서는 보통 어셈블러나 컴파일러 앞 단계에 붙어 있어, 매크로가 모두 풀린 원시 프로그램을 번역기에 넘긴다. C 언어의 #define 을 처리하는 전처리기도 같은 일을 하는 매크로 프로세서다.

매크로 관련 용어

편집 원본 편집
용어 뜻
매크로 정의(Macro Definition, Macro Define) 매크로 이름과 그 이름이 대신할 명령 묶음(매크로 본체)을 정해 두는 것. 어셈블리어에서는 MACRO 와 MEND 사이에 쓴다
매크로 호출(Macro Call) 정의된 매크로 이름을 주 프로그램(본 프로그램)에 기술하는 것. 이 자리가 나중에 매크로 본체로 바뀐다
매크로 확장(Macro Expansion) 매크로 호출이 있는 자리에 정의된 명령 묶음을 그대로 펼쳐 넣는 것. 호출에 준 실제 인수로 형식 인수를 바꿔 넣는다
매크로 라이브러리(Macro Library) 자주 쓰는 매크로 정의를 모아 두고 여러 프로그램이 가져다 쓰게 한 것
  • 이름을 정의하는 것과 그 이름을 본문에 적는 것을 구분해야 한다. 주 프로그램에 매크로 이름을 적는 것은 정의가 아니라 호출이다
  • 호출된 이름이 실제 명령으로 바뀌는 과정은 확장이라 한다. 영어로는 expansion 이고, 확장 결과는 매크로 프로세서가 내놓는 출력이다

기본 수행 작업

편집 원본 편집

매크로 프로세서는 원시 프로그램을 읽으며 다음 네 가지 일을 한다.

  1. 매크로 정의 인식 - MACRO 같은 지시어를 보고 매크로 정의가 시작되는 곳을 알아낸다
  2. 매크로 정의 저장 - 매크로 이름과 본체를 표(매크로 이름 테이블, 매크로 정의 테이블)에 저장한다
  3. 매크로 호출 인식 - 원시 프로그램에서 저장해 둔 매크로 이름이 나오는 곳을 찾는다
  4. 매크로 확장과 인수 치환 - 호출 자리에 매크로 본체를 펼쳐 넣고, 형식 인수를 실제 인수로 바꾼다

매크로 정의 안에서 다른 매크로를 호출할 수 있고, 매크로 정의를 두 번에 나눠 처리하는 2단계(two-pass) 방식이 흔하다. 첫 단계에서 정의를 모두 저장하고 둘째 단계에서 호출을 확장한다.

SWAP    MACRO   &A, &B       ; 매크로 정의 시작 (형식 인수 &A, &B)
        LOAD    &A
        STORE   TEMP
        LOAD    &B
        STORE   &A
        LOAD    TEMP
        STORE   &B
        MEND                 ; 매크로 정의 끝

        ...
        SWAP    X, Y         ; 매크로 호출 (주 프로그램에 이름을 적음)

매크로 프로세서는 마지막 줄의 SWAP X, Y 를 지우고 그 자리에 LOAD X, STORE TEMP … STORE Y 여섯 줄을 펼쳐 넣는다(매크로 확장).

서브루틴과 비교

편집 원본 편집
구분 매크로 서브루틴(부프로그램)
처리 시점 번역 전에 호출 자리마다 본체를 복사해 넣는다 실행 중에 호출해 한 벌의 코드로 갔다가 돌아온다
기억 공간 호출한 횟수만큼 코드가 늘어난다 코드는 한 벌만 있다
실행 속도 호출·복귀 과정이 없어 빠르다 호출·복귀와 인수 전달 비용이 든다