Сегменты

Сегмент программы описывается директивами SEGMENT и ENDS :

имя_сегмента SEGMENT выравн. тип разряд. 'класс'

....................................

имя_сегмента ENDS

Имя сегмента - метка, которая используется для получения сегментного адреса и для комбинирования сегментов в группы. Все 4 операнда директивы SEGMENT не обязательны.

Выравнивание указывает с какого адреса может начинаться сегмент. Значение этого операнда:

BYTE - с любого адреса

WORD - с четного

DWORD - с адреса, кратного 4

PARA - с адреса, кратного 16

PAGE - с адреса, кратного 256

Тип определяет способ возможного комбинирования сегментов. Возможные значения:

PUBLIC (или MEMORY) - все сегменты с одинаковым именем будут объеденены в один;

STACK - то же самое, что и PUBLIC, но должен использоваться для сегментов стека;

COMMON - сегменты с одинаковыми именами объединяются в один путем наложения друг на друга;

AT - выражение - сегмент должен располагаться по фиксированному абсолютному адресу в памяти;

PRIVATE - сегмент не объединяется с другими сегментами (значение по умолчанию).

Разрядность может принимать значения USE16 и USE32. Размер сегмента, описанного как USE16 не может превышать 64 Кб и все адреса считаются 16-битными. Сегменты типа USE32 могут занимать до 4 Гб и все адреса по умолчанию 32-битные.

Класс сегмента - это любая метка, взятая в одинарные кавычки. Все сегменты с одинаковым классом будут расположены с исполняемом файле непосредственно друг за другом.

Несколько сегментов можно объеденить в группу:

имя_группы GROUP имя_сегмента

Теперь для адресации всех сегментов группы можно использовать один сегментный регистр.

Директива ASSUME указывает, с каким сегментом или группой сегментов связан тот или иной сегментный регистр:

ASSUME регистр: связь

В качестве операнда "связь" могут использоваться имена сегментов, имена групп, выражения с оператором SEG или слово NOTHING, означающее отмену действия предыдущей директивы ASSUME для данного регистра. Эта директива не изменяет значений сегментных регистров, а только позволяет ассемблеру проверять допустимость ссылок и самостоятельно вставлять при необходимости префиксы переопределения сегментов.