例7.25 宏指令BRANCH产生一条转向X的转移指令。当它相对于X的距离小于128字节时产生JMP SHORT X;否则产生JMP NEAR PTR X(X必须位于该转移指令之后,即高地址区)。

   宏定义:

      BRANCH    MACRO   X
             IF    ( $-X ) LT 128
             JMP    SHORT X
             ELSE
             JMP    NEAR PTR X
             ENDIF
             ENDM
      宏调用:
             BRANCH   AA
      宏展开:
        1     JMP    SHORT AA
      否则产生
        1     JMP    NEAR PTR AA

  可以看出在本例的宏定义中使用了关系操作符,这在一些宏定义中经常会用到。
  宏定义可允许递归调用,此时条件伪操作可用来结束宏递归。

 例7.26 宏指令POWER可以用来实现X和2N相乘。这只需对X左移N次即可实现,可以设COUNT为递归次数的计数值,当该数与N相乘时就可结束递归调用。

   宏定义:

     POWER    MACRO   X, N
           SAL    X, 1
     COUNT = COUNT + 1
           IF     COUNT - N
           POWER   X, N
           ENDIF
           ENDM
    宏调用:
      COUNT = 0
           POWER   AX,3
    宏展开:
       1    SAL    AX,1
       2    SAL    AX,1
       3    SAL    AX,1