Node:W-выражения, Next:Локальные символы, Previous:Выражения, Up:MIXAL
Помимо описанных выше (see Выражения) выражений, ассемблер MIXAL
может обрабатывать в качестве операндов директив ORIG, EQU,
CON и END (see Директивы MIXAL) так называемые
w-выражения. Общий вид w-выражения таков:
WEXP = EXP[(EXP)][,WEXP]
где EXP обозначает выражение, а квадратные скобки отмечают
необязательные элементы. Таким образом, w-выражение состоит из выражения,
за которым следует необязательное выражение в круглых скобках, а затем
любое число аналогичных конструкций, разделённых запятыми. Примеры
w-выражений:
2000 235(3) S1+3(S2),3000 S1,S2(3:5),23
W-выражения вычисляются слева направо следующим образом:
w присвоить значение 0.
S1+2(2:4),2000(S2),
в первую очередь вычисляется S1+2. Пусть S1 равно 265230,
тогда S1+2 = 265232 = + 00 01 00 48 16.
L:R. В нашем предыдущем примере выражение в круглых скобках
уже имеет нужный вид: 2:4.
w, обозначенных
спецификацией поля, байты из значения предыдущего выражения. В нашем
примере w = + 00 00 00 00 00, и мы должны подставить вместо
второго, третьего и четвёртого байтов байты из 265232. Мы берём три
младших байта: 00 48 и 16 и ставим их во вторую, третью и четвёртую
позиции w, получая w = + 00 00 48 16 00.
w. В нашем примере, если, скажем S2 = 1:1, мы должны
подставить вместо первого байта w младший байт 2000, т.е. 16
(поскольку 2000 = + 00 00 00 31 16), и поэтому мы получим
265232(1:4),2000(1:1) = + 16 00 48 16 00 = 268633088.
Ещё один пример - в w-выражении
1(1:2),66(4:5)
мы сначала возьмём два младших байта 1 (00 и 01) и поместим их в первую
и вторую позицию результата (получая + 00 01 00 00 00),
а потом возьмем два байта из 66 (01 и 02) и поместим их в четвёртую
и пятую позиции результата, получая + 00 01 00 01 02 (262210).
Процесс повторяется для каждого нового разделённого запятыми примера.
Например,
1(1:1),2(2:2),3(3:3),4(4:4) = 01 02 03 04 00
Как указано выше, w-выражения могут встречаться только в операндах
директив MIXAL, принимающих константное значений (ORIG, EQU,
CON и END). Ссылки вперёд в w-выражениях не
допускаются (т.е., все символы, встречающиеся в w-выражении должны
быть определены до их использования).