Иллюстрированный самоучитель по SVGA

Оформление программных модулей

Далее в модуле должно располагаться описание подпрограмм, текст которого приведен в примере В.1, а после него директива END без указания метки, поскольку модуль не является выполняемой задачей.

Текст примера В.3 не может быть использован для включения в основную программу с помощью директивы INCLUDE. Он компилируется отдельно. При этом Макроассемблер формирует объектный модуль, который понадобится компоновщику при построении задачи.

Для компоновки нужен еще один объектный модуль. Он получается при компиляции основного текста задачи. Если в основном тексте описаны подпрограммы для работы с окнами видеопамяти, то их оттуда надо удалить. Кроме того, в основной текст надо включить следующие две директивы:

PUBLIC GrUnit, Cur_win, VMC

EXTERN NxtWin:far, SetWin:far, PrevWin:far

Первая из них объявляет переменные GrUnit, cur_win и VMC общедоступными, а вторая описывает имена и типы внешних подпрограмм. После включения указанных директив основной текст задачи компилируется для получения объектного модуля.

Построение задачи

Условимся считать, что файл, содержащий объектный модуль основного текста будущей задачи, имеет имя bmpsuper.obj, а файл, содержащий объектные модули подпрограмм, имя bmpsub.obj. Для их объединения в одну задачу выполняется следующая команда:

link bmpsuper bmpsub или link bmpsuper+bmpsub

В данном случае предполагается, что файлы bmpsuper и bmpsub имеют тип obj и расположены в том же каталоге, в котором находится задача iink.exe (компоновщик). Если это не так, то указывается спецификация, позволяющая найти файлы в других каталогах.

Важно
Имена объединяемых файлов может разделять либо пробел, либо знак "плюс"
.

Если между именами поставить запятую, то компоновщик будет обрабатывать два файла независимо друг от друга, т. е. он попытается построить две разные задачи. Разумеется, это приведет к ошибке, поскольку в каждом из файлов будут обнаружены неопределенные внешние имена.

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

Заключение

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

Однако если основной модуль создается на одном из алгоритмических языков (Фортран, Паскаль, Си и пр.), то вспомогательные подпрограммы, составленные на ассемблере, должны оформляться в виде объектных модулей.

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.