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

Директива model позволяет вам задать для программы не­сколько стандартных моделей сегментации. Вы можете также ис­пользовать ее для задания языка для процедур программы. Она имеет следующий синтаксис:


model [модификатор_модели] модель_памяти [имя_сегмента_кода]
[,[модификатор_языка] язык] [, модификатор_модели]

модель_памяти и модификатор_модели определяют модель сег­ментации памяти, используемую в программе.

В применяемых в Турбоассемблере стандартных моделях можно использовать специальные сегменты для: кода; инициали­зированных данных; неинициализированных данных; инициали­зированных данных дальнего типа; неинициализированных дан­ных дальнего типа; констант; стека.

Сегмент кода содержит обычно код модуля (но при необходи­мости может также содержать данные). В целях совместимости с языками высокого уровня инициализированные данные и кон­станты интерпретируются по-разному. Они содержат такие дан­ные, как сообщения, когда важно начальное значение. Неинициа­лизированные данные и стек содержат данные, начальные значе­ния которых не существенны. Инициализированные данные даль­него типа (far) – это неинициализированные данные, которые не являются частью стандартного сегмента данных и которые дос­тупны только при изменении значения сегментного регистра. Это же относится к неинициализированным данным дальнего типа.

Единственным обязательным параметром директивы model яв­ляется модель памяти. Каждая стандартная модель памяти опи­сывается в табл. 1.

Таблица 1

Модель Код Данные Предполагаемые регистры Описание
TINY near near cs=dgroup ds=ss=dgroup Весь код и все данные комбиниру­ются¦ в одну группу с¦ именем DGROUP. Эта¦ модель использу­ется¦ для про­грамм, ассемблируе­мых в формат.COM. Некоторые¦ языки эту модель не¦ поддержи­вают.
SMALL near near cs=_text ds=ss=dgroup Код представляет собой один сег­мент. Все данные комбинируются в группу с именем DGROUP. Это наиболее общая модель, исполь­зующаяся для авто­номных про­грамм на ассемблере.
MEDIUM far near cs=<ìîäóëü>_text ds=ss=dgroup Для кода используется несколько сегментов, по одному на модуль. Дан­ные находятся в группе с име­нем DGROUP.
COMPACT near far cs=_text ds=ss=dgroup Код находится в одном сегменте. Все ближние данные находятся в группе с именем DGROUP. Для ссылки на данные используются дальние указатели.

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

Модель Код Данные Предполагаемые регистры Описание
LARGE far far cs=<ìîäóëü>_text ds=ss=dgroup Для кода используется несколько сегментов, по одному на модуль. Все ближние данные нахо­дятся в группе с именем DGROUP. Для ссылки на данные используются дальние указатели.
HUGE far far cs=<ìîäóëü>_text ds=ss=dgroup То же, что модель LARGE (что ка­сается Турбоассемб­лера).
FLAT near near cs=_text ds=ss=flat То же, что и модель SMALL, но подходит для использования в OS/2 и Win32.

Поле модификатор_модели позволяет вам изменить отдельные аспекты модели. Вы можете задавать при необходимости не­сколько модификаторов модели. Доступные модификаторы модели приведены в табл. 2.

Таблица 2

Модификатор модели Функция
NEARSTACK Указывает, что сегмент стека должен включаться в DGROUP (если группа DGROUP присутствует), а SS должен указывать на DGROUP.
FARSTACK Указывает, что сегмент стека не должен включаться в DGROUP, а SS должен указывать не nothing (не определен).
USE16 Задает, что все сегменты в выбранной модели должны быть 16-разрядными (при выборе процессора 80386 или старше).
USE32 Задает, что все сегменты в выбранной модели должны быть 32- разрядными (при выборе процессора 80386 или старше).
DOS, OS_DOS Задает, что прикладная программа ориентируется на DOS.
OS2, OS_OS2 Задает, что прикладная программа ориентируется на OS2, Win32.

Язык и модификатор_языка вместе определяют соглашения, ис­поль­зуемые при вызове процедуры, а также используемый по умолча­нию характер начала и завершения кода каждой проце­дуры. Они определяют так же, как будут объявляться общедоступ­ные иден­тификаторы (которые использует компоновщик).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: