Модели памяти

Модели памяти задаются директивой .MODEL.

model модель, язык, модификатор, где модель – одно из следующих слов:

TINY – код, данные и стек размещаются в одном и том же сегменте размером до 64 Кб. Эта модель памяти используется для написания программ на языке ассемблера в формате COM файла;

SMALL – код размещается в одном сегменте, а данные и стек – в другом (для их описания могут применяться разные сегменты, но объединенные в одну группу). Эта модель памяти используется для написания программ на языке ассемблера в формате EXE файла;

COMPACT – код размещается в одном сегменте, а для хранения данных могут использоваться несколько сегментов;

MEDIUM – код размещается в нескольких сегментах, а все данные – в одном;

LARGE, HUGE – и код, и данные могут занимать несколько сегментов;

FLAT – то же, что и TINY, но используются 32 – битные сегменты, так что максимальный размер сегмента, содержащего и данные, и код, и стек, - 4 Мб.

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

Модификатор – это необязательный операнд, принимающий значения NEARSTACK (по умолчанию) или FARSTACK. Во втором случае сегмент стека не будет объединяться в одну группу с сегментами данных.

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

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

Директива .CODE описывает сегмент кода:

.code.

Директива .STACK описывает сегмент стека:

.stack размер.

Директива .DATA описывает основной сегмент данных:

.data.