Директива 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. |
Язык и модификатор_языка вместе определяют соглашения, используемые при вызове процедуры, а также используемый по умолчанию характер начала и завершения кода каждой процедуры. Они определяют так же, как будут объявляться общедоступные идентификаторы (которые использует компоновщик).