Упрощенные директивы описания сегментов
Для простых программ, содержащих по одному сегменту для кода, данных и стека можно упростить описание программы. Для этого в трансляторах MASM и TASM имеется возможность использования упрощенных директив сегментации. Эти директивы приведены в таблице 2.1.
Таблица. 2.1 Упрощенные директивы определения сегментов.
Формат директивы | Назначение | |
Режим MASM | Режим IDEAL | |
.CODE [имя] | CODESEG [имя] | Начало или продолжение сегмента кода. |
.DATA | DATASEG | Начало или продолжение сегмента данных. Используется также для определения данных типа near. |
.CONST | CONST | Начало или продолжение сегмента постоянных данных. |
.DATA? | UDATASEG | Начало или продолжение сегмента неинициализированных данных. Используется также для определения данных типа near. |
.STACK [размер] | STACK [размер] | Начало или продолжение сегмента стека. Параметр размер задает размер стека |
.FARDATA [имя] | FARDATA [имя] | Начало или продолжение сегмента инициализированных данных типа far |
FARDATA? [имя] | UFARDATA [имя] | Начало или продолжение сегмента неинициализированных данных типа far |
В случае упрощенного оформления программы совместно с упрощенными директивами сегментации используется директива указания модели памяти MODEL, которая определяет набор сегментов программы, размеры сегментов данных и кода, способ связывания сегментов и сегментных регистров. Параметры директивы:
TINY - код, данные и стек содержаться в одном сегменте. Используется для com программ. Тип ссылок на код и данные – near.
SMALL - код занимает один сегмент, данные и стек объединены и занимают один сегмент. Используется для большинства программ на ассемблере. Тип ссылок на код и данные – near.
MEDIUM - неограниченный размер кода, под данные отводится один сегмент. Используется для написания больших программ с небольшим объемом данных. Тип ссылок на код – far, а данных – near.
COMPACT - размер кода ограничен одним сегментом, размер данных неограничен. Используется при написании малых и средних по размеру программ с большим количеством переменных. Тип ссылок на код – near, а данных – far.
LARGE - размер кода и данных неограничен. Используется в больших программах. Тип ссылок на код и данные – far.
При использовании директивы MODEL транслятор делает доступным несколько идентификаторов, к которым можно обращаться во время работы программы:
@code - физический адрес сегмента кода.
@data - физический адрес сегмента данных типа near.
@fardata - физический адрес сегмента данных типа far.
@fardata? - физический адрес сегмента неинициализированных данных типа far.
@curseg - физический адрес сегмента неинициализированных данных типа far.
@stack - физический адрес сегмента стека.