Объявление сегментов
| Сегмент кода | Область памяти, в которой находятся команды |
| Сегмент данных | Область памяти с данными |
| Сегмент стека | Область памяти, отведённая под стек |
| В ассемблере сегмент описывается следующим образом: | |
![]() | |
| Операнды: |
- readonly - если указан, то MASM будет выдана ошибка на все команды, выполняющие запись в этот сегмент
- <выравнивание> - указывает ассемблеру и компоновщику, с какого адреса может начинаться сегмент. Возможные значения (по умолчанию - PARA):
- BYTE - с любого адреса
- WORD - с четного адреса
- DWORD - с адреса, кратного 4
- PARA - с адреса, кратного 16 (граница параграфа, по умолчанию)
- PAGE - с адреса, краткого 256
- <тип> - определяет тип комбинирования сегментов. Возможные значения:
- PUBLIC (синоним - MEMORY) - одинаковое имя и разные классы - один стек, последовательно (длина суммарного сегмента равна сумме длин всех сегментов)
- STACK - PUBLIC для сегментов стека
- COMMON - одинаковое имя и разные классы - один стек, но не последовательно, а по одному адресу (длина суммарного сегмента равна длине максимального сегмента)
- AT - выражение указывает, что сегмент должен располагаться по фиксированному адресу в памяти. TOBO
- PRIVATE - сегмент такого типа не объединяется с другими сегментами
- <разрядность> - возможные значения:
- класс сегмента - любая метка, взятая в одинарные кавычки
Порядок загрузки сегментов
TOBO
.DOSSEG
Устанавливает порядок загрузки сегментов, принятый в MS DOS:
- Все сегменты класса ‘CODE’
- Все сегменты, не принадлежащие группе DGROUP и классу ‘CODE’
- Группа сегментов DGROUP:
- Все сегменты класса ‘BEGDATA’
- Все сегменты, кроме классов ‘BEGDATA’, ‘BSS’, ‘STACK’
- Все сегменты класса ‘BSS’
- Все сегменты класса ‘STACK’
