Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 152
Unknown Author
Потерям времени.
В другом способе модули транслируются независимо друг от друга и лишь после этого происходит их объединение:
модуль-1 —> _____
••• —> | транслятор
модуль-к —> -
объектный модуль-1
• М
объектный
модуль-к
КОМПОНОВЩИК
маш.
программа
Объектным модулем принято называть модуль в оттранслированном виде, в машинных кодах. Объединением таких модулей в единую машинную программу занимается специальная программа, называемая компоновщиком (linker).
В данном случае не надо перетранслировать все модули программы, если изменился лишь один модуль, достаточно перетранслировать только этот модуль и затем снова объединить его с другими, ранее оттранслированными модулями. Конечно, на объединение объектных модулей уходит время, но оно существенно меньше времени трансляции модулей.
Именно этот второй вариант объединения модулей нас и будет интересовать. Поэтому под "модулем” мы будем понимать не любую часть программы, а только такую, которую можно оттранслировать независимо от других частей и затем объединить с ними. Как реализуется этот вариант в ЯА, и будет рассмотрено в данной главе.
12.1. Работа в системе MASM
Вначале рассмотрим, какие действия надо предпринять в системе программирования MASM, чтобы можно было оттранслировать и запустить на счет многомодульную программу. Попутно объясним, как транслируется и выполняется одномодульная программа.
Отметим, что здесь рассматриваются только основные правила работы в системе MASM; детальное описание системы можно найти в [6].
Пусть мы разделили программу на несколько модулей, которые затем будем транслировать независимо друг от друга. Тогда каждый модуль необходимо записать в отдельный файл на диске. При этом файлам, в которых хранятся тексты программ на ЯА, принято давать расширение ASM; делать это не обязательно, но желательно. Мы будем считать, что модули программы размещены в файлах Ml.ASM, М2.ASM и т. д.
Как известно, все свои действия на ПК пользователь описывает в виде приказов операционной системе (ОС), которая постоянно находится в оперативной памяти и управляет работой ПК. В частности, с помощью таких приказов пользователь осуществляет трансляцию и запуск на счет своих программ.
Для того чтобы оттранслировать один модуль программы на ЯА, скажем м0, дуль Ml, надо дать следующий приказ операционной системе:
ДОБМ Ml.ASM, Ml.OBJ, Ml.LST;
(запятые и точка с запятой обязательны).
По этому приказу ОС считывает с диска макроассемблер и передает ему управление. Макроассемблер транслирует модуль из файла, указанного в качестве первого параметра приказа (из Ml.ASM), и записывает оттранслированный вариант этого модуля, т. е. объектный модуль, в файл, указанный в качестве второго параметра приказа (в Ml.OBJ), а в третий из указанных файлов (в M1XST) записывается листинг программы:
Ml.OBJ (объектный модуль)
M1.ASM (модуль на ЯА)
макроассемблер (MASM)
Ml.LST (листинг)
В листинге указывается текст модуля как на ЯА, так и на машинном языке. Кроме того, если при трансляции модуля были обнаружены ошибки, то все они указываются в листинге. Поэтому, чтобы узнать об ошибках, надо будет затем посмотреть листинг. Собственно ради этого и нужен листинг, в дальнейшем он не используется.