宏汇编

  1. 宏定义 MACRO
  2. 宏取消 PURGE
  3. 重复汇编
  4. 条件汇编

宏定义 MACRO

宏用 macro 定义,前跟宏名,后跟可选参数,调用时用宏名加参数,参数个数不必相同,只要展开正确即可。

编译时,系统自动将宏展开并插入调用处,

Macro1 MACRO opr1,opr2,result

    PUSH DX

    PUSH AX

    PUSH AX, opr1

    IMUL opr2

    MOV result, AX

    POP AX

    POP DX

ENDM

Macro1 CX, FAR, XYZ[BX]

Macro1 240, BX, SAVE

参数与字符结合,需用 & 连接,字符串内有效。

LEAP MACRO cond,lab

     J&cond lab

ENDM

LEAP Z, THERE '展开后调用语句是 JZ, THERE

宏取消 PURGE

定义宏后,若宏与操作符相同,宏的优先级高。

PURGE Macro1[, Macro2 ...]

重复汇编

固定次数的重复汇编

X = 0

REPT 10

  X = X + 1

    DB X

END M

' 上述汇编的功效相当于:DB 1,2,3,4,5,6,7,8,9,10

CHAR = 'A'

Table LABEL BYTE

REPT 26

    DB CHAR

  CHAR = CHAR + 1

ENDM

' 上述汇编相当于:DB 'A','B', ... , 'Z'

相对可变次数的重复汇编

IRP X, <1,2,3,4,5,6,7,8,9,10>

    DB X

ENDM

用字符串的重复汇编

IRPC X,0 1 2 3 4 5 6 7 8 9 10

   DB X+1

ENDM

IRPC K,A B C D

   PUSH K&X

ENDM

' 此代码相当于 PUSH AX PUSH BX PUSH CX PUSH DX

条件汇编

当满足一定条件,将编译一段语句,否则编译另一段语句

关键字 表达式

   ...

ELSE

   ...

ENDIF

关键字 表达式 意义
IF expression 表达式值不为 0
IFE expression 表达式值为 0
IFDEF symbol 定义过某符号
IFNDEF symbol 未定义过某符号
IFB <argument> 自变量为空
IFNB <argument> 自变量不为空
IFIDN <arg-1>,<arg-2> 字符串相同
IFDIF <arg-1>,<arg-2> 字符串不同