Besides expressions, as described above (see Expressions), the MIXAL
assembler is able to handle the so called w-expressions as the
operands of the directives ORIG, EQU, CON and
END (see MIXAL directives). The general form of a
w-expression is the following:
WEXP = EXP[(EXP)][,WEXP]
where EXP stands for an expression and square brackets denote
optional items. Thus, a w-expression is made by an expression, followed
by an optional expression between parenthesis, followed by any number
of similar constructs separated by commas. Sample w-expressions are:
2000
235(3)
S1+3(S2),3000
S1,S2(3:5),23
W-expressions are evaluated from left to right as follows:
w equal to 0.
S1+2(2:4),2000(S2), we
evaluate first S1+2; let's suppose that S1 equals
265230: then S1+2 = 265232 = + 00 01 00 48 16.
L:R. In our previous example, the expression
between parenthesis already has the desired form: 2:4.
w designated by
the f-spec using those of the previous expression value. In our sample,
w = + 00 00 00 00 00, and we must substitute bytes 2, 3 and 4 of
w using values from 265232. We need 3 bytes, and we take the
least significant ones: 00, 48, and 16, and insert them in positions
2, 3 and 4 of w, obtaining w = + 00 00 48 16 00.
w. In our example, if, say, S2 = 1:1, we must
substitute the first byte of w using one byte (the least
significant) from 2000, that is, 16 (since 2000 = + 00 00 00 31 16)
and, therefore, we obtain w = + 16 00 48 16 00; summing up, we
have obtained 265232(1:4),2000(1:1) = + 16 00 48 16 00 =
268633088.
As a second example, in the w-expression
1(1:2),66(4:5)
we first take two bytes from 1 (00 and 01) and store them as bytes 1 and
2 of the result (obtaining + 00 01 00 00 00) and, afterwards,
take two bytes from 66 (01 and 02) and store them as bytes 4 and 5 of
the result, obtaining + 00 01 00 01 02 (262210). The process
is repeated for each new comma-separated example. For instance:
1(1:1),2(2:2),3(3:3),4(4:4) = 01 02 03 04 00
As stated before, w-expressions can only appear as the operands of MIXAL
directives taking a constant value (ORIG, EQU, CON
and END). Future references are not allowed within
w-expressions (i.e., all symbols appearing in a w-expression must be
defined before it is used).