Conditional assembly block directive
Format
.IF condition argument(s)
.
.
.
range
.
.
.
.ENDC
1 – Parameters
condition
A specified condition that must be met if the block is to be
included in the assembly. The condition must be separated from
the argument by a comma, space, or tab.
argument(s)
One or more symbolic arguments or expressions of the specified
conditional test. If the argument is an expression, it cannot
contain any undefined symbols. The assembler converts relocatable
arguments to absolute arguments by discarding the relocatable
portion of the expression and using only the offset from the
beginning of the psect. Arguments must be separated by a comma.
range
The block of source code that is conditionally included in the
assembly.
Table 7 Condition Tests for Conditional Assembly Directives
Condition
Condition Complement Number That
Test Condition Argument of Assembles
Test Type Arguments Block
Long Short Short
Form Form Long Form Form
EQUAL EQ NOT_EQUAL NE Expression 1 or 2 Expression-
1 is
equal to
expression-
2 or not
equal to
expression-
2.
GREATER GT LESS_EQUAL LE Expression 1 or 2 Expression-
1 is
greater
than
expression-
2 or
less
than or
equal to
expression-
2.
LESS_ LT GREATER_ GE Expression 1 or 2 Expression-
THAN EQUAL 1 is
less
than
expression-
2 or
greater
than or
equal to
expression-
2.
DEFINED DF NOT_DEFINED NDF Symbolic 1 Symbol
is
defined
or not
defined.
BLANK B NOT_BLANK NB Macro 1 Argument
is blank
or not
blank.
IDENTICAL IDN DIFFERENT DIF Macro 2 Arguments
are
identi-
cal or
differ-
ent.
2 – Description
A conditional assembly block is a series of source statements
that are assembled only if a certain condition is met. A .IF
starts the conditional block and a .ENDC ends the conditional
block; each .IF must have a corresponding .ENDC. The .IF
directive contains a condition test and one or two arguments.
The condition test specified is applied to the arguments. If
the test is met, all MACRO-64 statements between .IF and .ENDC
are assembled. If the test is not met, the statements are not
assembled. Optionally, you can use the .ELSE directive (or a
combination of the .IFF, .IFT, and .IFTF directives) to specify
an alternate series of statements to assemble if the test is not
met.
You can nest conditional blocks; that is, a conditional block
can be inside another conditional block. In this case, the
statements in the inner conditional block are assembled only
if the condition is met for both the outer and inner block.
3 – Notes
o The assembler displays an error message if the following
directives occur outside a conditional assembly block: .ENDC,
.ELSE, .IF_FALSE, .IF_TRUE, .IF_TRUE_FALSE.
o MACRO-64 permits a nesting depth of 100 conditional assembly
levels. If a statement attempts to exceed this nesting level
depth, the assembler displays an error message.
o The effect of logical expressions can only be achieved by
using several levels of .IF directives. See Example 5.
o Lowercase string arguments are converted to uppercase before
being compared, unless the string is surrounded by double
quotes or /NAMES=AS_IS is specified on the command line.
o The assembler displays an error message if .IF specifies any
of the following: a condition test other than those which are
valid, an illegal argument, or a null argument specified in an
.IF directive.
4 – Examples
Example 1
Here is an example of a conditional assembly directive:
.IF EQUAL ALPHA+1 ; Assemble block if ALPHA+1=0. Do
. ; not assemble if ALPHA+1 not=0
.
.
.ENDC
Example 2
Nested conditional directives take the following form:
.IF condition argument(s)
.IF condition argument(s)
.
.
.
.ENDC
.ENDC
Example 3
The following conditional directives can govern whether
assembly of the specified range is to occur:
.IF DEFINED SYM1
.IF DEFINED SYM2
.
.
.
.ENDC
.ENDC
In this example, if the outermost condition is not satisfied,
no deeper level of evaluation of nested conditional statements
within the program occurs. Therefore, both SYM1 and SYM2 must
be defined for the specified range to be assembled.
Example 4
An alternate series of statements can be specified using .ELSE.
.IF EQUAL A,B ; Assemble if A is equal to B
.ELSE ; Assemble if A is not equal to B
.ENDC
Example 5
The following example demonstrates the use of .ELSE and
nesting:
.IF LESS_THAN X,Y ; Assemble if X is less than Y
.IF DEFINED Z ; Assemble if Z is defined and
; X is less than Y
.ELSE ; Assemble if Z is not defined and
; X is less than Y
.ENDC
.ELSE ; Assemble if X is greater than or equal to Y
.IF DEFINED Z ; Assemble if Z is defined and X is
; greater than or equal to Y
.ENDC
.ENDC