Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебн пособ по арх и прогр МП.doc
Скачиваний:
64
Добавлен:
10.12.2013
Размер:
1.59 Mб
Скачать

4.2.4. Директивы упрощенного описания сегментов.

Сегменты программы должны описываться с помощью директивы SEGMENT, указывающей имя сегмента, используемое для ссылок в программе, границу выравнивания (байт, слово, параграф, страница), тип комбинации его с другими сегментами, класс сегмента, определяющий порядок следования сегмента в памяти.

TASMпозволяет облегчить описание сегментов путем применения директив упрощенного описания сегментов. Эти директивы употребляют в программе после выбора модели памяти директивойMODEL. В тексте программного модуля директивы упрощенного описания могут располагаться в произвольном порядке.

Ниже приведены список и краткое описание всех директив упрощенной сегментации:

CODESEG[имя] - начало или продолжение кодового сегмента модуля. Для модели с типомFARможно задавать имя, которое становится действующим именем сегмента. В этом случае нельзя иметь более одного кодового сегмента в модуле.

.CODE[имя] - аналогCODESEGдля режимаMasm.

DATASEG- начало или продолжение сегмента данных, инициализированных по умолчанию, или типаNEAR.

.DATA- аналогDATASEGдля режимаMasm.

CONST- начало или продолжение сегмента постоянных данных модуля. Постоянные данные всегда имеют типNEARи эквивалентны инициализированным данным.

.CONST- аналогCONSTдля режимаMasm.

UDATASEG- начало или продолжение сегмента данных, не инициализированные по умолчанию или типаNEAR. В этом сегменте необходимо размещать только неинициализированные данные, иначе размер выполняемой программы будет больше необходимого.

.DATA?- аналогUDATASEGдля режимаMasm.

STACK[размер] - начало или продолжение сегмента стека программного модуля. Необязательный параметр размер указывает объем памяти, отводимый под стек (в словах). По умолчаниюTASMустанавливает размер стека в 200h слов (1K). В режимеMasmвсе метки, программный код или данные, следующие за операторомSTACK, не относятся к стековому сегменту. Режим

Idealнаоборот, резервирует указанное пространство и оставляет сегмент стека открытым, что дает возможность размещать в нем метки и неинициализированные данные. Директива создания стека необходима только в случае полной разработки программы на Ассемблере, так как все языки высокого уровня создают стек автоматически.

.STACK[размер] - аналогSTACKдля режимаMasm.

FARDATA[имя] - начало или продолжение сегмента инициализированных данных дальнего типа с указанным именем (по умолчанию используется имяFAR_DATA). В программном модуле можно размещать несколько сегментов такого типа.

.FARDATA[имя] - аналогFARDATAдля режимаMasm.

UFARDATA[имя] - начало или продолжение сегмента неинициализированных данных типаFARс указанным именем (по умолчанию используется имяFAR_BSS). В программном модуле можно размещать несколько сегментов такого типа.

.FARDATA?[имя] - аналогUFARDATAдля режимаMasm.

Использование директив упрощенного описания сегментов создает переменные, которые описывают детали выбранного сегмента. К значениям этих переменных можно обращаться для получения информации о том или ином сегменте. Ниже приведено описание этих идентификаторов:

@code- сегмент или группа, назначенныеCS;

@data- то же,DS;

@fardata- имя текущего сегментаFARDATA;

@fardata? - то же,UFARDATA;

@curseg- -"-;

@stack - сегмент или группа, назначенные SS.