Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессоры (конспект).doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
972.29 Кб
Скачать

Операторы

Приоритет

Оператор

Описание

MOD

Вычисляет остаток от деления левого операнда на правый

SHL, SHR

Сдвигает влево (вправо) левый операнд на количество бит, заданных правым операндом.

LT, LE, EQ, GE, GT, NE

Операторы отношений. Могут также записываться в форме <, <=, =, >=, <>. Дают значение 0FFFFH если выражение истинно и 0 – если ложно.

NOT, AND, OR, XOR

Выполняют соответствующие битовые операции над операндами.

HIGH, LOW

Выделяют старший (младший ) байт выражения.

$

Специальный символ, представляющий значение программного счетчика. Может использоваться вместо метки или константы.

Все операторы имеют приоритет при вычислении выражений:

Высший выражение в скобках ()

унарный +, -

*, /, MOD, SHL, SHR

бинарный +, -

LT, LE, EQ, GE, GT, NE

NOT

AND

OR, XOR

Низший HIGH, LOW

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

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