Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 152

Unknown Author

Потерям времени.

В другом способе модули транслируются независимо друг от друга и лишь после этого происходит их объединение:

модуль-1 —> _____

•••    —> | транслятор

модуль-к —> -

объектный модуль-1

• М

объектный

модуль-к

КОМПОНОВЩИК

маш.

программа

Объектным модулем принято называть модуль в оттранслированном виде, в машинных кодах. Объединением таких модулей в единую машинную программу занимается специальная программа, называемая компоновщиком (linker).

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

Именно этот второй вариант объединения модулей нас и будет интересовать. Поэтому под "модулем” мы будем понимать не любую часть программы, а только такую, которую можно оттранслировать независимо от других частей и затем объединить с ними. Как реализуется этот вариант в ЯА, и будет рассмотрено в данной главе.

12.1. Работа в системе MASM

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

Отметим, что здесь рассматриваются только основные правила работы в системе MASM; детальное описание системы можно найти в [6].

Как хранить многомодульную программу

Пусть мы разделили программу на несколько модулей, которые затем будем транслировать независимо друг от друга. Тогда каждый модуль необходимо записать в отдельный файл на диске. При этом файлам, в которых хранятся тексты программ на ЯА, принято давать расширение ASM; делать это не обязательно, но желательно. Мы будем считать, что модули программы размещены в файлах Ml.ASM, М2.ASM и т. д.

Трансляция модулей

Как известно, все свои действия на ПК пользователь описывает в виде приказов операционной системе (ОС), которая постоянно находится в оперативной памяти и управляет работой ПК. В частности, с помощью таких приказов пользователь осуществляет трансляцию и запуск на счет своих программ.

Для того чтобы оттранслировать один модуль программы на ЯА, скажем м0, дуль Ml, надо дать следующий приказ операционной системе:

Многомодульные программы 221

ДОБМ Ml.ASM, Ml.OBJ, Ml.LST;

(запятые и точка с запятой обязательны).

По этому приказу ОС считывает с диска макроассемблер и передает ему управление. Макроассемблер транслирует модуль из файла, указанного в качестве первого параметра приказа (из Ml.ASM), и записывает оттранслированный вариант этого модуля, т. е. объектный модуль, в файл, указанный в качестве второго параметра приказа (в Ml.OBJ), а в третий из указанных файлов (в M1XST) записывается листинг программы:

Ml.OBJ (объектный модуль)

M1.ASM (модуль на ЯА)

макроассемблер (MASM)

Ml.LST (листинг)

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