Next: , Previous: , Up: MIXAL   [Contents][Index]

#### 2.2.4 W-expressions

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:

• Take the first expression of the comma-separated list and evaluate it. For instance, if the w-expression is ‘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’.
• Evaluate the expression within parenthesis, reducing it to an f-spec of the form ‘L:R’. In our previous example, the expression between parenthesis already has the desired form: 2:4.
• Substitute the bytes of the accumulated result ‘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’.
• Repeat this operation with the remaining terms, acting on the new value of ‘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).

Next: , Previous: , Up: MIXAL   [Contents][Index]