Директива MODEL используется в режиме IDEAL и позволяет задавать в программе одну из нескольких стандартных моделей сегментации. Синтаксис директивы MODEL:
В режиме Masm используется тот же синтаксис, но с директивой .MODEL Параметр модель_памяти может принимать одно из следующих значений:TINY(крошечная), SMALL(маленькая), MEDIUM(средняя), LARGE(большая), HUGE(огромная).
Модель
Код
Данные
Предполагаемые значения регистров
TINY
near
Near
CS=DGROUP
DS=SS=DGROUP
SMALL
near
Near
CS=_TEXT
DS=SS=DGROUP
MEDIUM
far
Near
CS=<имя_модуля>_TEXT
DS=SS=DGROUP
COMPACT
near
Far
CS=_TEXT
DS=SS=DGROUP
LARGE
far
Far
CS=<имя_модуля>_TEXT
DS=SS=DGROUP
HUGE
far
Far
CS=<имя_модуля>_TEXT
DS=SS=DGROUP
TCHUGE
far
Far
CS=<имя_модуля>_TEXT
DS=SS=NOTHING
TPASCAL
near
Far
CS=CODE
DS=DATA SS=NOTHING
FLAT
near
Near
CS=_TEXT
DS=SS=FLAT
Каждая модель_памяти предназначена для какого-то типа организации выполняемого файла:
TINY - код и данные объеденены в одну группу DGROUP. Эта модель используется для создания программ типа .COM. Во многих языках высокого уровня эта модель не поддерживается.
SMALL - код программы находится в одном сегменте. Все данные объеденены в группу DGROUP. Такая модель памяти чаще всего используется в программах, написанных на языках высокого уровня.
MEDIUM - код находится в нескольких сегментах, по одному на каждый программный модуль. Данные объеденены в группу DGROUP.
COMPACT - код находится в одном сегменте. Все данные имеют ближний тип и находятся в группе DGROUP. Для ссылки на данные из кода применяются указатели дальнего типа.
LARGE - код может размещаться в нескольких сегментах, на каждый модуль - новый сегмент. Все данные имеют ближний тип и находятся в группе DGROUP. Для ссылки на данные из кода применяются указатели дальнего типа.
HUGE - так же, как и для модели LARGE, но возможности TASM по использованию всего объема памяти для размещения программы исполтзуются в полной мере.
TCHUGE - так же, как и для модели LARGE, но с иным использованием сегментных регистров.
TRANSCAL - модель предназначена для поддержки ранних версий Borland Pascal. Для более поздних версий не используется.
FLAT - так же, как и для модели SMALL, но для создания программ для OS/2.
Необязательный параметр модификатор в объявлении директивы MODEL позволяет изменять некоторые черты указанной модели, причем при необходимости можно задавать несколько модификаторов. Ниже перечислены все доступные модификаторы:
NEARSTACK - указывает, что сегмент стека будет включен в DGROUP (если DGROUP присутствует) и SS будет указывать на DGROUP.
FARSTACK - сегмент стека не должен включаться в DGROUP и SS не будет инициализирован.
USE16 - указывает (если выбран процессор 80386 или 80486), что все сегменты текущей модели должны использоваться как 16-битовые.
USE32 - то же, как 32-битовые.
DOS,OS_DOS - указывает, что данная программа предназначена для использования в DOS.
OS2,OS_OS2 - то же, OS/2.
По умолчанию TASM использует модификаторы NEARSTACK, DOS и USE16 (USE32, если выбран процессор 80386 или 80486).
Параметр имя_кодового_сегмента, который также является необязательным, может использоваться в модели LARGE и ей подобным для переопределении имени, назначенного кодовому сегменту по умолчанию (обычно это имя модуля с добавлением к нему _TEXT).
Параметры язык и модификатор_языка определяют соглашения для вызова процедур, а также стиль пролога и эпилога процедуры, они определяют, как представляются внешние имена для использования их компоновщиком. TASM автоматически генерирует код входа и выхода из процедур в стиле одного из следующих языковых соглашений: PASCAL, C, CPP (C++), SYSCALL, STDCALL, BASIC, FORTRAN, PROLOG и NOLANGUAGE. Если язык не указан, TASM использует NOLANGUAGE.
Параметр модификатор_языка указывает на необходимость добавить в код процедур специальные прологи и эпилоги при разработке программ для WINDOWS или Borland Overlay Loader. Значениями этого параметра могут быть: NORMAL, WINDOWS, ODDNEAR и ODDFAR. По умолчанию установлен NORMAL.