Introduction IFDEF and IFNDEF Directives
 IF and IFE Directives

The syntax of the IF and IFE directives is

```     IF  expression
IFE expression
```

The IF directive assembles the then part if the expression evalues to true (nonzero). The IFE directive is the IF counterpart and assembles the then part if the expression is false (zero).

The next table shows some operators that can be used in an expression.

 Operator Type Operators Arithmetic +,-,*,/,mod,unary + and - Relational EQ, GE, GT, LE, LT, NE Logical NOT, AND, OR, XOR

 Example: Write a macro to define a block of memory words with N entries, consisting of the first K integers, followed by N-K zero words. ``` BLOCK MACRO N, K ``` ``` I=1 ``` ``` REPT N ``` ``` IF K+1-I ``` ``` DW I ``` ``` I=I+1 ``` ``` ELSE ``` ``` DW 0 ``` ``` ENDIF ``` ``` ENDM ``` ``` ENDM ```

The following macro invocation

```     A      LABEL   WORD
BLOCK  10, 5
```
will produce the following statements
```     A  DW  1
DW  2
DW  3
DW  4
DW  5
DW  0
DW  0
DW  0
DW  0
DW  0
```

 Example: Write a macro to exchange two memory operands such that the two operands can be either byte or word operands. ``` MXCHG MACRO operand1, operand2 ``` ``` IF (TYPE operand1) NE (TYPE operand2) ``` ``` %OUT Operands of MXCHG do not match. ``` ``` ELSE ``` ``` IF (TYPE operand1) EQ 1 ; BYTE operands ``` ``` XCHG AL, operand1 ``` ``` XCHG AL, operand2 ``` ``` XCHG AL, operand1 ``` ``` ELSE ; WORD operands ``` ``` XCHG AX, operand1 ``` ``` XCHG AX, operand2 ``` ``` XCHG AX, operand1 ``` ``` ENDIF ``` ``` ENDIF ``` ``` ENDM ```

The TYPE operator returns the number of bytes reserved for the operand in memory. The next table shows the values returned by the type operator.

 Type of Memory Operand Value Returned BYTE 1 WORD 2 DWORD 4 QWORD 8 NEAR FFFFH FAR FFFEH Constant 0

The %OUT directive is used for displaying text on the screen. It syntax is

```     %OUT  text
```
where text can contain any character. This directive is useful for displaying error or warning messages during the assembly process.