Объявление сегментов

Сегмент кодаОбласть памяти, в которой находятся команды
Сегмент данныхОбласть памяти с данными
Сегмент стекаОбласть памяти, отведённая под стек
В ассемблере сегмент описывается следующим образом:
Операнды:
  1. readonly - если указан, то MASM будет выдана ошибка на все команды, выполняющие запись в этот сегмент
  2. <выравнивание> - указывает ассемблеру и компоновщику, с какого адреса может начинаться сегмент. Возможные значения (по умолчанию - PARA):
    • BYTE - с любого адреса
    • WORD - с четного адреса
    • DWORD - с адреса, кратного 4
    • PARA - с адреса, кратного 16 (граница параграфа, по умолчанию)
    • PAGE - с адреса, краткого 256
  3. <тип> - определяет тип комбинирования сегментов. Возможные значения:
    • PUBLIC (синоним - MEMORY) - одинаковое имя и разные классы - один стек, последовательно (длина суммарного сегмента равна сумме длин всех сегментов)
    • STACK - PUBLIC для сегментов стека
    • COMMON - одинаковое имя и разные классы - один стек, но не последовательно, а по одному адресу (длина суммарного сегмента равна длине максимального сегмента)
    • AT - выражение указывает, что сегмент должен располагаться по фиксированному адресу в памяти. TOBO
    • PRIVATE - сегмент такого типа не объединяется с другими сегментами
  4. <разрядность> - возможные значения:
  5. класс сегмента - любая метка, взятая в одинарные кавычки

Порядок загрузки сегментов

TOBO .DOSSEG Устанавливает порядок загрузки сегментов, принятый в MS DOS:

  1. Все сегменты класса ‘CODE’
  2. Все сегменты, не принадлежащие группе DGROUP и классу ‘CODE’
  3. Группа сегментов DGROUP:
    1. Все сегменты класса ‘BEGDATA’
    2. Все сегменты, кроме классов ‘BEGDATA’, ‘BSS’, ‘STACK’
    3. Все сегменты класса ‘BSS’
    4. Все сегменты класса ‘STACK’