VII Макросредства языка ассемблера
· Понятие о макросредствах языка ассемблера · Псевдооператоры equ и = · Макрокоманды · Макродирективы · Директивы условной компиляции
При написании простейших программ на ассемблере, предназначенных для решения небольших, чисто исследовательских задач, очевидны некоторые из перечисленных здесь проблем: · ограниченность набора команд; · повторяемость некоторых идентичных или незначительно отличающихся участков программы; · необходимость включения в каждую программу участков кода, которые уже были использованы в других программах; · и многое другое Если бы мы писали программу на машинном языке, то данные проблемы были бы принципиально не решаемыми. Но язык ассемблера, являясь символическим аналогом машинного языка, предоставляет для их решения ряд средств. В общем случае есть смысл говорить о том, что транслятор ассемблера состоит из двух частей — непосредственно транслятора, формирующего объектный модуль, и макроассемблера. Обработка программы на ассемблере с использованием макросредств неявно осуществляется транслятором в две фазы. На первой фазе работает часть компилятора, называемая макроассемблером, функции которого на идейном уровне мы описали чуть выше. На второй фазе трансляции работает непосредственно ассемблер, задачей которого является формирование объектного кода, содержащего текст исходной программы в машинном виде. Далее мы обсудим основной набор макросредств, доступных при использовании компилятора TASM. Отметим, что большинство этих средств доступно и в компиляторе с языка ассемблера фирмы Microsoft. Псевдооператоры equ и = К простейшим макросредствам языка ассемблера можно отнести псевдооператоры equ и " = " (равно).
Синтаксис псевдооператора equ:
Синтаксис псевдооператора “ = ”:
Несмотря на внешнее и функциональное сходство псевдооператоры equ и “ = ” отличаются следующим: · из синтаксического описания видно, что с помощью equ идентификатору можно ставить в соответствие как числовые выражения, так и текстовые строки, а псевдооператор “ = ” может использоваться только с числовыми выражениями; · идентификаторы, определенные с помощью “ = ”, можно переопределять в исходном тексте программы, а определенные с использованием equ — нельзя. Ассемблер всегда пытается вычислить значение строки, воспринимая ее как выражение. Для того чтобы строка воспринималась именно как текстовая, необходимо заключить ее в угловые скобки: < строка >. Псевдооператор equ удобно использовать для настройки программы на конкретные условия выполнения, замены сложных в обозначении объектов, многократно используемых в программе, более простыми именами и т. п.
Псевдооператор “ = ” удобно использовать для определения простых абсолютных (то есть не зависящих от места загрузки программы в память) математических выражений.
Как видно из примера, в правой части псевдооператора “ = ” можно использовать метки и ссылки на адреса — главное, чтобы в итоге получилось абсолютное выражение.
Компилятор TASM, начиная с версии 3.00, содержит директивы, значительно расширяющие его возможности по работе с текстовыми макросами. Эти директивы аналогичны некоторым функциям обработки строк в языках высокого уровня. Под строками здесь понимается текст, описанный с помощью псевдооператора equ. Набор этих директив следующий: · директива слияния строк catstr:
· директива выделения подстроки в строке substr:
· директива определения вхождения одной строки в другую instr: · директива определения длины строки в текстовом макросе sizestr:
Эти директивы очень удобно использовать при разработке макрокоманд, которые являются следующим макросредством, предоставляемым компилятором ассемблера.
|