DATASEG
Напомним, что переменная определяется директивами DB,DW,DD распределения данных и имеет 3 атрибута: сегмент, смещение и тип.
Метка - это имя ( точнее адрес) ячейки памяти, содержимое которой считается машинной командой. Напомним о метках следующее. Чаще всего метка определяется указанием в поле метки имени с последующим двоеточием. Но метки могут определяться и без завершающего двоеточия, например, директивами LABEL и в определениях процедур. Метки имеют 4 атрибута: сегмент, смещение, расстояние (тип NEAR или FAR ), предположение о регистре CS.
Числовые выражения с помощью директивы EQU могут обозначаться символическими именами. В этом случае имя заменяет число и может быть названо "числовым именем". Числовое имя имеет тип NUMBER (число). Соответственно двум классам символических имен выделяются выражения: адресные и числовые.
Адресным называется выражение которое вычисляется для получения адреса памяти (данных и команд). Адресные выражения имеют обязательные атрибуты: сегмент, смещение, тип. Каждый из атрибутов адресного выражения является числом, но само выражение числом не является.
Числовым называется выражение, в результате вычисления которого получается число. Например, в команде
MOV AL,MUR
символическое имя MUR является адресным выражением, поэтому эта команда загружает в регистр AL содержимое из ячейки памяти с адресом MUR .
В команде
MOV АL, OFFSET MUR
Выражение OFFSET MUR использует встроенный оператор OFFSET (смещение), который формирует в виде числа смещение адресного выражения MUR. Следовательно, эта команда загрузит в регистр АL смещение адресного выражения MUR.
Таким образом, использование адресного выражения в поле операнда команд преобразований данных означает , что операндом будет содержимое адресуемой ячейки памяти. Адресное выражение в поле операнда команд передачи управления определяет встраиваемый в команду адрес перехода.
Значение числового выражения (число), заданного в команде, превращается в непосредственный операнд.
Директивы управления сегментами.
Директивы SEGMENT/ENDS.
Напомним, что физический адрес формируется при сложении смещения и умноженного на 16 сегментного адреса, хранящегося в одном из сегментных регистров: СS (для сегмента кода), DS (для сегмента данных), SS(для сегмента стека), ES (для сегмента дополнительных данных).
Структура сегмента кода имеет вид:
Имя сегмента SEGMENT [<список атрибутов>]
Команды и относящиеся к
ним директивы.
Имя сегмента ENDS
Список атрибутов является необязательным, но он необходим, если программа состоит из нескольких модулей.
Структура сегмента данных имеет вид:
Имя сегмента SEGMENT [<список атрибутов>]
Директивы определения памяти,
распределения и выравнивания
Имя сегмента ENDS
Именем сегмента может быть любой допустимый идентификатор. Назначение сегментов сегментным регистрам осуществляется директивами.
Директива ASSUME.
Формат директивы имеет вид:
ASSUME НАЗНАЧЕНИЕ,.., НАЗНАЧЕНИЕ,
где НАЗНАЧЕНИЕ имеет формат:
Имя сегментного регистра: Имя сегмента.
Пример определения сегмента кода:
CODSEG SEGMENT ; Сегменту COD назначим сегментный регистр CS