Сегменты
Сегмент программы описывается
директивами
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 для данного регистра. Эта директива не изменяет значений сегментных регистров, а только позволяет ассемблеру проверять допустимость ссылок и самостоятельно вставлять при необходимости префиксы переопределения сегментов.