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

Unknown Author

Отметим, что если программа уже оттранслирована (есть файл М.ЕХЕ), то ее можно выполнять любое число раз без повторной трансляции - достаточно набирать только приказ М.ЕХЕ.

Исправление ошибок

Если при выполнении программы обнаружена ошибка, тогда следует определить, в каком из модулей программы находится ошибка, и исправить этот модуль-Затем надо перетранслировать только этот модуль (по приказу MASM), не транслируя остальные модули. Далее надо снова обратиться к компоновщику (п° приказу LINK), указав в нем все объектные модули программы. И, наконец, наД° запустить программу на счет.

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

Трансляция и выполнение одномодульной программы

Мы рассмотрели, как транслируется и выполняется программа, состоящая из нескольких модулей. А теперь рассмотрим, что делать с программой, состоящей только из одного модуля.

Ясно, что для такой программы не нужен этап объединения модулей в единую программу, что по исходному файлу можно сразу строить EXE-файл. Однако, чтобы не иметь двух схем трансляции (одну - для многомодульных программ, а другую - для одномодульных), принято компоновщик использовать всегда, даже если программа состоит только из одного модуля.

В связи с этим трансляция и счет одномодульной программы осуществляются с помощью следующих приказов (считаем, что текст программы на ЯА находится в файле M.ASM):

MASM M.ASM,M.OBJ,M.LST;    -    трансляция

LINK М.OBJ,М.EXE;    -    "объединение"

М.ЕХЕ    -    счет

12.2. Модули. Внешние и общие имена.

Мы рассмотрели, что надо сделать для того, чтобы была оттранслирована и выполнена многомодульная программа. Теперь мы рассмотрим, как следует записывать сами модули, какие проблемы возникают в многомодульных программах и как они решаются.

12.2.1. Структура модулей. Локализация имен

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

<предложение>

<предложение>

END [ сточка входа> ]

Среди всех модулей программы выделяется один, называемый головным (главным). Это модуль, который должен выполняться первым, с него начинается выполнение программы, а уж он затем передает управление всем другим модулям. Синтаксически головной модуль отличается от других только тем, что в его директиве END указывается точка входа - метка той команды этого модуля, с которой должно начинаться выполнение программы. В остальных модулях точка входа не Указывается. (Если точки входа все же указаны в нескольких модулях программы, то учитывается только та, что первой "попалась на глаза" компоновщику.)

Отметим очень важную особенность модулей: все имена, описанные в модуле, Локализуются в нем. Это значит, что в разных модулях программы можно пользоваться одинаковыми именами и никаких конфликтов из-за этого не будет. Такая Токализация очень выгодна, если модули составляются разными людьми, которые