Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Турбо Ассемблер / Использование Турбо Ассемблера /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Использование моделей памяти программы и сегментации - Программирование от RIN.RU
Использование моделей памяти программы и сегментации



Директива MODEL


Директива MODEL позволяет вам задать для программы несколько стандартных моделей сегментации. Вы можете также использовать ее для задания языка для процедур программы.


Директива MODEL имеет следующий синтаксис:


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


В режиме MASM используется тот же синтаксис, но директива имеет вид .MODEL.


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


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


  • кода;

  • инициализированных данных;

  • неинициализированных данных;

  • инициализированных данных дальнего типа;

  • неинициализированных данных дальнего типа;

  • констант;

  • стека.


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


Специальные модели памяти задают, как можно ссылаться на эти сегменты с помощью сегментных регистров, и как они объединяются в группы (если это имеет место). При написании программы вы должны хранить эти сегменты отдельно, независимо от размера программы. Затем для объединения сегментов в группы вы можете выбрать соответствующую модель. Если вы храните эти сегменты раздельно, и ваша программа увеличивается в размере, вы можете использовать большую модель.


Единственным обязательным параметром директивы MODEL является модель памяти. Каждая стандартная модель памяти описывается в cледующей Таблице ?1.


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


Заметим, что в целях совместимости с MASM 5.2 вы можете задавать спецификатор модели в двух местах. Если вы не используете спецификатор модели, Турбо Ассемблер подразумевает спецификатор NEARSTACK и USE32 (при выборе процессоров 80386 или 80486). Если не задано обратное, то основой считается DOS.


В больших моделях кода для переопределения используемого по умолчанию имени сегмента кода используется необязательное поле "имя_сегмента_кода". Обычно это имя модуля с присоединенным к нему именем _TEXT.


Стандартные модели памяти
МодельКодДанные Предполагаемые регистрыОписание
TINYближнийближнийcs=dgroup
ds=ss=dgroup
Весь код и все данные комбинируются в одну группу с именем DGROUP. Эта модель используется для программ, ассемблируемых в формат .COM. Некоторые языки эту модель не поддерживают.
SMALLближнийближнийcs=_text
ds=ss=dgroup
Код представляет собой один сегмент. Все данные комбинируются в группу с именем DGROUP. Это наиболее общая модель, использующаяся для автономных программ на Ассемблере.
MEDIUMдальнийближнийcs=<модуль>_text
ds=ss=dgroup
Для кода используется несколько сегментов, по одному на модуль. Данные находится в группе с именем DGROUP.
COMPACTближнийдальнийcs=_text
ds=ss=dgroup
Код находится в одном сегменте. Все ближние данные находятся в группе с именем DGROUP. Для ссылки на данные используются дальние указатели.
LARGEдальнийдальнийcs=<модуль>_text
ds=ss=dgroup
Для кода используется несколько сегментов, по одному на модуль. Все ближние данные находятся в группе с именем DGROUP. Для ссылки на данные используются дальние указатели.
HUGEдальнийдальнийcs=<модуль>_text
ds=ss=dgroup
То же, что модель LARGE (что касается Турбо Ассемблера).
TCHUGEдальнийдальнийcs=<модуль>_text
ds=nothing
ss=nothing
Это эквивалентно модели LARGE, но с
другими предположениями о сегментных регистрах.
TPASCALближнийдальнийcs=code, ds=data, ss=nothing Эта модель поддерживается ранними версиями Турбо Паскаля. В более поздних версиях не требуется.
FLATближнийближнийcs=_text
ds=ss=flat
То же, что и модель SMALL, но подходит для использования в OS/2.



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



"Язык" и "модификатор_языка" вместе определяют соглашения, используемые при вызове процедуры, а также используемый по умолчанию характер начала и завершения кода каждой процедуры. Они определяют также как будут объявляться общедоступные идентификаторы (которые использует компоновщик). Турбо Ассемблер будет автоматически генерировать код входа и выхода для каждой процедуры, используя одно из следующих языковых соглашений: PASCAL, C, CPP (C++), SYSCALL, BASIC, FORTRAN, PROLOG и NOLANGUAGE (язык не задан). Если вы не задаете язык, то Турбо Ассемблер предполагает использование NOLANGUAGE.


Используйте "модификатор_языка" для задания кода начала и завершения процедур для WIndows или оверлейного загрузчика фирмы Borland. Можно задавать параметры NORMAL, WINDOWS, ODDNEAR и ODDFAR. Если вы не задаете параметр, то Турбо Ассемблер по умолчанию подразумевает NORMAL.


Кроме того, вы можете переопределить используемый по умолчанию язык и модификатор языка при определении процедуры. Подробности можно узнать здесь.


При объявлении общедоступного идентификатора вы можете также переопределить язык.


<<<  НазадВперед  >>>
 1  2  3  4  5  6  7 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Начало работы на Турбо Ассемблере

Использование директив и параметров

Общие принципы программирования

Объектно-ориентированное программирование

Использование выражений и значений идентификаторов

Директивы выбора процессора

Определение типов данных

Задание и использование счетчика адреса

Описание процедур

Управление областью действия идентификаторов

Определение данных

Расширенные инструкции

Использование макрокоманд

Использование условных директив

Интерфейс с компоновщиком

Генерация листинга

Интерфейс Турбо Ассемблера и Borland C++

Интерфейс Турбо Ассемблера с Турбо Паскалем

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь