Шаблон для написания программ типа. COM

имя_сегмента SEGMENT;Определение сегмента кода

ASSUME CS: имя_сегмента

ORG 100H;Начало необходимое для COM-программы

Имя_процедуры PROC;Определение подпрограммы

;Текст подпрограммы

Имя_процедуры ENDP

Метка:;Точка_входа_в_программу:

MOV AH,4CH;Операторы завершения программы

INT 21H

BUF DB 6;Определение переменной типа Byte

...;Определение других переменных

имя_сегмента ENDS

END Метка

4. Модели памяти. Структура.ЕХЕ и.СОМ программ с кратким описанием сегментов

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

Модели памяти задаются директивой.MODEL

.model модель,язык,модификатор

где

Модель — одно из следующих слов:

TINY — код, данные и стек размещаются в одном и том же сегменте размером до 64 Кб. Эта модель памяти чаще всего используется при написании на ассемблере небольших программ;

SMALL — код размещается в одном сегменте, а данные и стек — в другом (для их описания могут применяться разные сегменты, но объединенные в одну группу). Эту модель памяти также удобно использовать для создания программ на ассемблере;

COMPACT — код размещается в одном сегменте, а для хранения данных могут использоваться несколько сегментов, так что для обращения к данным требуется указывать сегмент и смещение (данные дальнего типа);

MEDIUM — код размещается в нескольких сегментах, а все данные — в одном, поэтому для доступа к данным используется только смещение, а вызовы подпрограмм применяют команды дальнего вызова процедуры;

LARGE и HUGE — и код, и данные могут занимать несколько сегментов;

FLAT — то же, что и TINY, но используются 32-битные сегменты, так что максимальный размер сегмента, содержащего и данные, и код, и стек, — 4 Мб.

Язык — необязательный операнд, принимающий значения C, PASCAL, BASIC, FORTRAN, SYSCALL и STDCALL. Если он указан, подразумевается, что процедуры рассчитаны на вызов из программ на соответствующем языке высокого уровня, следовательно, если указан язык C, все имена ассемблерных процедур, объявленных как PUBLIC, будут изменены так, чтобы начинаться с символа подчеркивания, как это принято в C.

Модификатор — необязательный операнд, принимающий значения NEARSTACK (по умолчанию) или FARSTACK. Во втором случае сегмент стека не будет объединяться в одну группу с сегментами данных.

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

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

Пример:

Ниже приведена возможная структура программы с использованием модели SMALL. В этой модели сегмент кода отделен от сегмента данных и стека, данные и сегмент стека объединены в одну группу, т.е. регистры DS и SS имеют одно и то же значение. Это наиболее распространенная модель памяти при разработке отдельных (одномодульных) программ на языке Ассемблера.

.model small; директива описания модели памяти

.stack 30; начало сегмента стека с размером 30 байт

.data; начало сегмента инициализированных данных

..........

.data?; начало сегмента неинициализированных данных

..........

.code; начало сегмента кода

..........; здесь могут располагаться подпрограммы и данные

.startup; точка начала выполнения программы

..............

.exit 0; окончание программы, передача управления DOS

end; окончание текста программы

5. Вопросы на повторение

1. В чем отличия.exe и.com программ?

2. Напишите шаблоны для написания программ с полным и упрощенным описанием сегментов.


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



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