7.4.2. MACRO 및 MEND

MACRO 지시어는 매크로 정의의 시작을 표시합니다. 매크로 확장은 MEND 지시어에서 끝납니다. 자세한 내용은 매크로 사용을 참조하십시오.

구문

두 개의 지시어가 매크로를 정의하는 데 사용됩니다. 구문은 다음과 같습니다.

          MACRO
{$label}  macroname{$cond} {$parameter{,$parameter}...}
          ; code
          MEND

인수 설명:

$label

매크로가 호출될 때 지정한 기호로 대체되는 매개변수입니다. 기호는 대개 레이블입니다.

macroname

매크로 이름으로, 명령어나 지시어로 시작하면 안 됩니다.

$cond

조건 코드를 포함하도록 설계된 특수 매개변수입니다. 유효한 조건 코드가 아닌 값이 허용됩니다.

$parameter

매크로가 호출될 때 대체되는 매개변수입니다. 매개변수의 기본값은 다음 형식을 사용하여 설정할 수 있습니다.

$parameter="default value"

기본값의 내부나 한 쪽 끝에 공백이 있을 경우 큰따옴표를 사용해야 합니다.

사용법

매크로 내에서 WHILE...WEND 루프나 IF...ENDIF 조건을 시작한 경우 MEND 지시어에 도달하기 전에 이들을 닫아야 합니다. 루프 내에서 매크로를 종료하는 등의 매크로 조기 종료를 활성화하려면 MEXIT를 참조하십시오.

매크로 본문 내에서 $label, $parameter 또는 $cond와 같은 매개변수는 다른 변수와 같은 방식으로 사용됩니다 (변수의 어셈블리 타임 대체 참조). 이러한 매개변수에는 매크로가 호출될 때마다 새 값이 지정됩니다. 매개변수는 다른 기호와 구분할 수 있도록 $ 기호로 시작해야 하며 개수에 관계없이 원하는 대로 사용할 수 있습니다.

$label은 선택적 매개변수로, 매크로가 내부 레이블을 정의하는 경우에 유용합니다. 이 매개변수는 매크로의 매개변수로 처리되며 매크로 확장 내의 첫 번째 명령어를 나타내지 않을 수도 있습니다. 매크로는 모든 레이블의 위치를 정의합니다.

|를 인수로 사용하여 매개변수의 기본값을 사용합니다. 인수를 생략할 경우 빈 문자열이 사용됩니다.

여러 개의 내부 레이블을 사용하는 매크로에서는 서로 다른 접미사를 사용하여 각 내부 레이블을 기본 레이블로 정의하는 것이 좋습니다.

확장에 공백이 필요하지 않을 경우 매개변수와 후행 텍스트 사이나 두 매개변수 사이에 마침표를 사용합니다. 선행 텍스트와 매개변수 사이에는 마침표를 사용하면 안 됩니다.

$cond 매개변수를 조건 코드에 사용할 수 있습니다. 반대 조건 코드를 찾으려면 단항 연산자 :REVERSE_CC:를 사용하고 조건 코드의 4비트 인코딩을 찾으려면 :CC_ENCODING:을 사용합니다.

매크로는 지역 변수 (LCLA, LCLL 및 LCLS 참조) 의 범위를 정의합니다.

매크로는 중첩될 수 있습니다 (중첩 지시어 참조).

예제

 ; macro definition
                MACRO                 ; start macro definition
$label          xmac    $p1,$p2
                ; code
$label.loop1    ; code
                ; code
                BGE     $label.loop1
$label.loop2    ; code
                BL      $p1
                BGT     $label.loop2
                ; code
                ADR     $p2
                ; code
                MEND                  ; end macro definition
 ; macro invocation
abc             xmac    subr1,de      ; invoke macro
                ; code                ; this is what is
abcloop1        ; code                ; is produced when
                ; code                ; the xmac macro is
                BGE     abcloop1      ; expanded
abcloop2        ; code
                BL      subr1
                BGT     abcloop2
                ; code
                ADR     de
                ; code

매크로를 사용하여 어셈블리 타임 진단 만들기

        MACRO                        ; Macro definition
        diagnose  $param1="default"  ; This macro produces
        INFO      0,"$param1"        ; assembly-time diagnostics
        MEND                         ; (on second assembly pass) 
 ; macro expansion
        diagnose            ; Prints blank line at assembly-time
        diagnose "hello"    ; Prints "hello" at assembly-time
        diagnose |          ; Prints "default" at assembly-time

조건부 매크로 예제

        AREA    codx, CODE, READONLY

; macro definition

        MACRO
        Return$cond
        [ {ARCHITECTURE} <> "4"
          BX$cond lr
          |
          MOV$cond pc,lr 
        ] 
        MEND

; macro invocation

fun     PROC
        CMP      r0,#0
        MOVEQ    r0,#1
        ReturnEQ
        MOV      r0,#0        
        Return        
        ENDP

        END
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential