Директивы определения сегментов

После выбора модели памяти вы можете использовать упро­щенные сегментные директивы для того, чтобы начинать отдель­ные сегменты. Некоторые из них приведены в табл. 3.

Таблица 3

Директива Описание
codeseg [èìÿ] Начинает или продолжает сегмент кода модуля. Для моделей с дальним типом кода вы можете задать имя, являющееся фактиче­ским именем сегмента. Заметим, что таким образом вы можете ге­нерировать для модуля более одного сегмента кода.
dataseg Начинает или продолжает ближний или инициализируемый по умолчанию сегмент данных.

Окончание табл. 3

Директива Описание
Const Начинает или продолжает ближний сегмент констант модуля. По­стоянные данные всегда являются ближними (NEAR) и эквива­лентны инициализированным данным.
stack [ðàçìåð] Начинает или продолжает сегмент стека модуля. Необязательный параметр «размер» определяет объем резервируемой для стека па­мяти (в словах). Если вы не задаете размер, Турбоассемблер ре­зервирует по умолчанию 1 килобайт. Директивы стека обычно требуется ис­пользовать, если вы пишете на языке ассемблера автономную про­грамму. Большинство языков высокого уровня сами создают для вас стек.

Макрокоманды начала и завершения программы

Макрокоманда startupcode обеспечивает код инициализации, со­ответствующий текущей модели и операционной системе. Она от­мечает также начало программы. Эта макрокоманда имеет сле­дующий синтаксис:

startupcode

Макрокоманда инициализирует регистры DS, SS и SP и поме­щает идентификатор @Startup в начало кода инициализации, ко­торый генерируется по директиве startupcode. Он представляет со­бой ближнюю метку, отмечающую начало программы.

Макрокоманда exitcode используется для генерации кода за­вершения, соответствующего текущей операционной системе. Вы можете использовать ее в модуле несколько раз (для каждой точки входа). Эта макрокоманда имеет следующий синтаксис:

exitcode [возвращаемое_значение]

Необязательное «возвращаемое_значение» задает число, кото­рое должно возвращаться в операционную систему – «код воз­врата». Если вы не задаете возвращаемое значение, ассемб­лер предполагает, что это значение содержится в регистре AL.