Директивы ассемблера.
BIT
Позволяет создавать битовые переменные. Имеет следующую форму.
метка BIT выражение
Метка обязательна. Если ее не указать, ассемблер сгенерирует ошибку.
DB
Позволяет включать в объектный код байты по текущему адресу. Ее аргумент – последовательность байт в диапазоне от –128 до 256 разделенные запятыми. Если встречается только запятая без байта, то в объектный код вставляется 00H. Последовательность байт 0FEH,
0FFH, 00H, 01H, 02H вставляется в код следующим выражением:
DB -2, -1, , 1, 2
Выражение
DB 1 + 1, "CAT", "C" + 1
запишет в объектный код следующую последовательность – 002H, 043H, 041H, 054H, 044H
DS
Используется для резервирования блока памяти для переменных или др. данных. Эта область памяти не инициализируется, поэтому значения могут быть любые. Аргумент директивы добавляется к программному счетчику. Следующее выражение резервирует 10 байт в блоке памяти обозначенном именем "STORAGE":
STORAGE DS 10
DW
Позволяет включать в объектный код 16-битовые слова. Во всем остальном подобна директиве DB. В памяти слово располагается не по стандарту Intel, а наоборот – сначала старший байт слова, затем младший. Последовательность 0FFH, 0FEH, 00H, 00H, 01H, 02H байт в помещается в память выражением:
DW 0FFFEH, , 0102H
END
Эта директива указывает ассемблеру на конец программы. Любые выражения после директивы игнорируются и не включаются в листинг. Если к директиве добавляется аргумент, то значение аргумента помещается в поле объектного файла, указывающее стартовый адрес. По умолчанию стартовый адрес устанавливается равным значению программного счетчика в точке, где встречена директива END.
Таким образом, чтобы указать, что программа начинается на метке START записывается директива:
END START
EQU
Присваивает метке заданное значение. Однажды определенная таким образом метка не может переопределяться другими директивами EQU, REG, SET.
Следующее выражение присваивает значение 2 метке TWO:
TWO EQU 1 + 1
IF, ELSE, ENDIF
Эти директивы позволяют ассемблеру определять нужно ли компилировать блоки кода, в зависимости от результатов выражения. Директива IF начинает блок условной компиляции. Она требует одного аргумента, который не должен содержать ссылок вперед. Если значение аргумента ненулевое, блок компилируется. В противном случае блок игнорируется. Директива ENDIF завершает блок условной компиляции.
Пример:
IF EXPRESSION ;Если EXPRESSION
DB 01H, 02H, 03H ;имеет нулевое значение
ENDIF ;то байты в код вставлены не будут
Директива ELSE позволяет выбрать один блок из двух. Две следующих последовательности эквивалентны
IF EXPRESSION
... код ...
ELSE
... код ...
ENDIF
TEMP_LAB SET EXPRESSION
IF TEMP_LAB NE 0
... код ...
ENDIF
IF TEMP_LAB EQ 0
... код ...
ENDIF
Вложенность директив IF ELSE ENDIF не должна превышать 16-ти уровней.
INCL
Директива используется для вставки содержимого другого файла в программу во время ассемблирования. Имя вставляемого файла указывается как строковая константа. Пример:
INCL "const.def"
ORG
Директива устанавливает значение программного счетчика. Значение программного счетчика по умолчанию – 0000H. Следующее выражение установит программный счетчик в значение 0F000H:
ORG 0F000H
REG
Директива REG подобна EQU, за исключением того, что аргументом должно быть имя регистра R0 - R7 или другая метка, определенная директивой REG.
Определенная таким образом метка не может быть переопределена снова.
Следующее выражение будет преобразовано ассемблером в выражение "MOV @R0, A":
TEMP REG R0
MOV @TEMP, A
SET
Директива SET подобна EQU, но метка может быть переопределена только другой директивой SET. Следующий набор директив установит значение метки "COUNT" в 1, 2, затем 3:
COUNT SET 1
COUNT SET 2
COUNT SET 3