例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