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).