> | I.2 Assembler With only five new keywords (MACRO, REPT, ENDM, EXITM, LOCAL) and some additional control characters, ASEM-51 version 1.3 introduces a full-blown macro processing! It is possible to define named and repeated macro blocks. Substitution of formal parameters is implemented as well as local symbols. Macro calls and definitions can be nested to any depth. Conditional assembly has been extended with the new IFN, IFB, IFNB, ELSEIF, ELSEIFN, ELSEIFDEF, ELSEIFNDEF, ELSEIFB, and ELSEIFNB meta instructions. The new control statements $GEN, $NOGEN, $GENONLY, $COND, $NOCOND, $CONDONLY, $SAVE, and $RESTORE allow refined listing options for macro expansion and conditional assembly. $MACRO and $NOMACRO allow or suppress macro expansion. The /OMF-51 command line option has been introduced for the DOS and Windows implementations to generate absolute OMF-51 modules instead of Intel-HEX files. The Linux implementation recognizes the --omf-51 (or -o) option respectively. It is also possible to include debug information with the $DEBUG assembler control. The environment variable ASEM51INC has been introduced on all platforms to specify a search path for include files. The new $NOBUILTIN control suppresses predefined symbols (SFR) in the symbol table or cross-reference listing, while user-defined symbols are still listed. The new $ERROR and $WARNING controls allow a more secure configuration management of application programs. For identification of the assembler and its version number, the following predefined symbols of the type NUMBER have been introduced:
> `??ASEM_51` | = | `8051H` |  | ASEM-51
> `??VERSION` | = | `0130H` |  | version 1.3
To improve compatibility with the Intel assembler, more than one assembler control is allowed in a control line now, e.g.: `$ NOMOD51 INCLUDE(80C517.MCU)` Include files may now be nested to any depth! EQU and SET can now be used to define symbols not only for numerical constants, but also for registers A and R0 thru R7.