adfun.ru
| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
можно обращаться через сегментный регистр. На основе этой общей
схемы можно построить много производных схем. Чтобы упорядочить
их, разработаны стандартные схемы памяти. Так как этих соглашений
придерживаются многие языки высокого уровня, в программах на Ас-
семблере также следует это делать.
Один из очевидных способов состоит в разбиении программы на
инструкции программы и ее данные. Каждый фрагмент данных програм-
мы можно определить как инициализированный (содержащий начальные
значения, например, текстовое сообщение) и неинициализированный
(не содержащий начального значения). Турбо Ассемблер обычно прис-
ваивает неинициализированным данным отдельный сегмент, который
можно разместить в конце программы, уменьшив объем выполняемой
программы.
Обычно достаточно большую часть неинициализированных данных
занимает стек. Он также специализирован, так как регистры SS и SP
при выполнении программы инициализируются обычно автоматически
областью стека. Таким образом, в стандартных моделях памяти стек
инициализируется, как отдельный сегмент.
Можно также комбинировать сегменты в группы. Преимущество
использования групп состоит в том, что вы можете задать сегмент-
ное значение для всех сегментов группы. Например, инициализиро-
ванные данные, неинициализированные данные и сегменты стека часто
Турбо Ассемблер 3.0/tasm/#1-2 = 127 =
комбинируются в группы таким образом, что для всех данных прог-
раммы можно использовать одно и то же значение сегмента.
В данной главе описывается, как использовать в вашей прог-
рамме модели и сегменты, и какие директивы позволяют это делать.
Директива MODEL
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Директива MODEL позволяет вам задать для программы несколько
стандартных моделей сегментации. Вы можете также использовать ее
для задания языка для процедур программы.
Директива MODEL имеет следующий синтаксис:
MODEL [модификатор_модели] модель_памяти
[имя_сегмента_кода] [,[модификатор_языка] язык]
[, модификатор_модели]
В режиме MASM используется тот же синтаксис, но директива
имеет вид .MODEL.
"Модель_памяти" и "модификатор_модели" определяют модель
сегментации памяти, используемую в программе.
В применяемых в Турбо Ассемблере стандартных моделях можно
использовать специальные сегменты для:
- кода;
- инициализированных данных;
- неинициализированных данных;
- инициализированных данных дальнего типа;
- неинициализированных данных дальнего типа;
- констант;
- стека.
Сегмент кода содержит обычно код модуля (но при необходимос-
ти может также содержать данные). В целях совместимости с языками
высокого уровня инициализированные данные и константы интерпрети-
руются по-разному. Они содержат такие данные, как сообщения, ког-
да важно начальное значение. Неинициализированные данные и стек
содержат данные, начальные значения которых не существенны. Ини-
циализированные данные дальнего типа (far) - это неинициализиро-
ванные данные, которые не являются частью стандартного сегмента
данных, и которые доступны только при изменении значения сегмент-
ного регистра. Это же относится к неинициализированным данным
дальнего типа, только вместо инициализированных данных здесь со-
Турбо Ассемблер 3.0/tasm/#1-2 = 128 =
держатся неинициализированные данные.
Специальные модели памяти задают, как можно ссылаться на эти
сегменты с помощью сегментных регистров, и как они объединяются в
группы (если это имеет место). При написании программы вы должны
хранить эти сегменты отдельно, независимо от размера программы.
Затем для объединения сегментов в группы вы можете выбрать соот-
ветствующую модель. Если вы храните эти сегменты раздельно, и ва-
ша программа увеличивается в размере, вы можете использовать
большую модель.
Единственным обязательным параметром директивы MODEL являет-
ся модель памяти. Каждая стандартная модель памяти описывается в
Таблице 7.1.
Поле "модификатор_модели" позволяет вам изменить отдельные
аспекты модели. Вы можете задавать при необходимости несколько
модификаторов модели. Доступные модификаторы модели приведены в
Таблице 7.2.
Заметим, что в целях совместимости с MASM 5.2 вы можете за-
давать спецификатор модели в двух местах. Если вы не используете
спецификатор модели, Турбо Ассемблер подразумевает спецификатор
NEARSTACK и USE32 (при выборе процессоров 80386 или 80486). Если
не задано обратное, то основой считается DOS.
В больших моделях кода для переопределения используемого по
умолчанию имени сегмента кода используется необязательное поле
"имя_сегмента_кода". Обычно это имя модуля с присоединенным к
нему именем _TEXT.
Турбо Ассемблер 3.0/tasm/#1-2 = 129 =
Стандартные модели памяти Таблица 7.1
ЪДДДДДДДДДВДДДДДДДДДВДДДДДДДДВДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДї
іМодель і Код іДанные іПредполагаемыеіОписание і
і і і ірегистры і і
ГДДДДДДДДДЕДДДДДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДґ
і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 іментов, по одномуі
і і і і іна модуль. Всеі
і і і і іближние данные на-і
і і і і іходятся в группе сі
Турбо Ассемблер 3.0/tasm/#1-2 = 130 =
і і і і іименем DGROUP. Дляі
і і і і іссылки на данныеі
і і і і іиспользуются даль-і
і і і і іние указатели. і
і і і і і і
ГДДДДДДДДДЕДДДДДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДґ
іHUGE і дальний ідальний іcs= іТо же, что модельі
і і і і<модуль>_text іLARGE (что касаетсяі
і і і іds=ss=dgroup іТурбо Ассемблера). і
і і і і і і
ГДДДДДДДДДЕДДДДДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДґ
іTCHUGE і дальний ідальний іcs= іЭто эквивалентноі
і і і і<модуль>_text імодели LARGE, но сі
і і і іds=nothing ідругими предположе-і
і і і іss=nothing іниями о сегментныхі
і і і і ірегистрах. і
і і і і і і
ГДДДДДДДДДЕДДДДДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДґ
іTPASCAL і ближний ідальний іcs=code, ds іЭта модель поддер- і
і і і і=data, ss= іживается раннимиі
і і і іnothing іверсиями Турбо Пас-і
і і і і ікаля. В более позд-і
і і і і іних версиях не тре-і
і і і і ібуется. і
і і і і і і
|
adfun.ru
|
|
|
|