Упрощенные директивы описания сегментов

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