Код:
DEFG ........ .X......
DEFG .XXXXX.. .X......
DEFG ......X. .XXXXX..
DEFG ..XXXXX. .X....X.
DEFG .X....X. .X....X.
DEFG ..XXXX.X .XXXXX..
DEFG ........ ........
(компилируется в 0,40h,7Ch,40h, и т.д.)
или:
DEFG ........ .X......
.XXXXX.. .X......
......X. .XXXXX..
..XXXXX. .X....X.
.X....X. .X....X.
..XXXX.X .XXXXX..
........ ........
(в этом случае порядок другой: 0,7Ch,2,3Eh,42h,3Dh,0,40h, т.е. байты размещаются
по колонкам).
DEFD xxxxxx [[,] xxxxxx ]...
Директива для определения упакованных шестнадцатеричных. Например, DEFD 1234567890
эквивалентно DEFB 12h,34h,56h,78h,90h. Если элемент стартует не с шестнадцатеричной
цифры, то он считается обычным выражением (и занимает 1 байт, как в директиве DEFB).
ERROR [#severity],'text'[,#passes]
или
ERROR [#severity],"text"[,#passes]
Генерирует ошибку, заданную пользователем. Может использоваться, например, в
макроопределениях для проверки допустимости параметров.
severity: 0 - warning (предупрежедение: текст попадает в список сообщений, но
компиляция продолжается); 1 - обычный error (код более не генерируется, но
компиляция может еще некоторое время продолжаться); 2 или выше - fatal error,
компиляция останавливается немедленно.
Если #passes не задано, сообщение показывается на всех проходах компиляции.
Если оно задано, то значение выражения используется как двоичная маска: бит 0
устанавливается, чтобы сообщение показывалось на проходе 1, бит 1 - на проходе
2, и бит 2 - на проходе 3. Т.е. например, если passes = 2, то сообщение будет
отображаться только на первом проходе компиляции, а если pass = 6 - то на втором
и третьем (при его наличии) проходах.
label[:] PROC
...
[label2[:]] {ENDP|ENDPROC|EPROC}
Задает процедуру. Фактически, всего лишь ограничивает видимость локальных меток,
заданных между PROC и ENDPROC. Процедуры могут быть вложены друг в друга, и
уровень допустимой вложенности ничем не ограничен.
FOR var=values
...
{EFOR|ENDFOR}
Дублирует все операторы между заголовком до финального ENDFOR столько раз,
сколько всевозможных значений перечислено в списке для переменной цикла var,
на каждом шаге присваивая этой переменной очередное значение из списка, как
если бы имя var определялось директивой DEFINE.
Список значений может содержать любые выражения, строки, заключенные в одинарные
и двойные кавычки (во втором случае значение подставляется без кавычек),
а так же среди прочего перечень значений в виде #from TO #to [STEP #step].
В последнем случае сначала переменной присваивается значение выражения #from,
и оно на каждом проходе увеличивает свое значение на #step (по умолчанию - на 1),
пока не превзойдет (при отрицательном #step - пока станет меньше) значения
выражения #to.
GOTO [cond,][label]
Эквивалент инструкции JR/JP, но по возможности компилятор использует короткие
переходы (JR). Важное ограничение: любое выражение не может использоваться в
качестве операнда, а только метка, локальная или глобальная.
вот еще полезная команда для сборки всяких sna