Директивы ассемблера.

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