II
"РЛ" - Н А Ч И Н А Ю Щ И М
И
например так:
Encode
macro
s
IRPC
E2,
S
DB E2 xor 26
ENDM
ENDM
Тогда в результате выполнения следующего кода
S tr l:
Encode
'Вася'
S tr2:
Encode
'Петя'
в программу будут помещены перекодированные стро-
ки, хотя в тексте программы они легко читаются в
обычном виде. Кроме шифрования можно реализо-
вать, например, перекодировку символов кириллицы
(не забывайте, что ассемблер работает только с един-
ственной системной кодировкой), в том числе для
Unicode.
Наконец, последний макрооператор или, точнее,
директива - это EXITM. Встретив эту директиву внут-
ри тела макроса, компилятор немедленно прекраща-
ет обработку макроса, как если бы он кончился. Этой
директивой можно пользоваться, например, для дос-
рочного завершения макрооператора REPT, IRP или
IRPC. Каким же образом можно, начав исполнение
макрокоманды, прервать его, ведь для этого необхо-
димо как-то контролировать процесс исполнения, т.е.
контролировать действия компилятора? Именно так,
и для этого в активе программиста имеются специаль-
ная директива условной компиляции - IF-ELSEIF-
ELSE. Формат ее следующий:
IF <условие>
<1
блок команд, выполняемых, если условие
истинно
[
ELSEIF <условие 2>
<2
блок команд, выполняемых, если условие
2
истинно
]
[
ELSE
споследний блок команд, выполняемых, если
все предыдущие условия ложные>
]
ENDIF
Как видите, блоки ELSEIF и ELSE - необязатель-
ные, т.е. могут отсутствовать, кроме того, блоков
ELSEIF может быть несколько. ENDIF обозначает ко-
нец области действия директивы. Встретив директи-
ву IF, компилятор проверяет ее условие, и если оно
истинно, то обрабатывает только команды, указанные
в первом блоке, а все прочие игнорируются. Если пер-
вое условие ложно, будут последовательно провере-
ны условия из блоков ELSEIF, и обработаны команды
первого, условие которого окажется истинным. Если
же ни одно из условий (в блоках IF или ELSEIF) не ока-
жется истинным - будут обработаны команды после-
днего блока ELSE.
В качестве условий можно использовать любую кон-
станту или выражение. Можно использовать скобки,
операторы логических отношений (“И”, “ИЛИ”, "НЕ” и
т.п.) - в общем, все точно так же, как и в выражениях
вообще, о чем ранее мы уже говорили. Условие будет
считаться истинным, если результат выражения или
константы будет ненулевым.
Использование директивы условной компиляции
позволяет гибко управлять процессом создания про-
грамм, имеющих отличия, например, для разных мо-
делей микроконтроллеров одного и того же семейства.
Для этого в самом начале своей программы вы може-
те задать некую константу, определяющую конкрет-
ную модель микроконтроллера, а затем в тексте ис-
пользовать директиву IF для написания участков про-
граммы, имеющих отличия в зависимости от модели,
а остальные участки будут одинаковыми. Это позво-
лит вам создавать программы, которые практически
без модификации (всего-то одну строчку подправить)
станут подходить для различной аппаратуры.
Есть еще одна директива, использование которой
весьма эффективно в паре с директивой IF - это ди-
ректива остановки компиляции EXIT, формат ее такой:
EXIT
‘<сообщение>’
Если компилятор встречает эту директиву, то он
немедленно прекращает работу и выводит сообщение
об ошибке, указанное в директиве. Обратите внима-
ние, что наличие этого сообщения обязательно, и оно
должно представлять собой строку символов в апост-
рофах. При помощи этой директивы можно запретить
компиляцию программы, если, например, какие-либо
обязательные константы пользователем не заданы
или заданы неверно. В ранее упомянутом примере с
программой для разных моделей контроллеров мож-
но предусмотреть невозможность компиляции для не-
совместимых моделей.
В заключение темы макросов и директив скажу, что
все сказанное относится к системе MCStudio, а вооб-
ще в “фирменных” компиляторах количество видов
макросов и директив может быть значительно боль-
ше, и их возможности гораздо шире. Например, фир-
менный макроассемблер от Intel позволяет в макро-
командах обрабатывать строки, составляющие текст
программы, т.е. вы можете при помощи макрокоманд
определять имена меток автоматически, генерировать
сообщения и т.п. Становится возможным, например,
создание макроса для автоматического сохранения в
стеке только тех ячеек памяти, Которые фактически
задействованы в подпрограмме. Однако руководство
только по разделу “макросы” этого ассемблера значи-
тельно превосходит по объему весь наш цикл, так что
это задача не для начинающих.
Продолжение в №3/2008
Радиолюбитель - 0 2 /2 0 0 8 U
предыдущая страница 33 Радиолюбитель 2008-02 читать онлайн следующая страница 35 Радиолюбитель 2008-02 читать онлайн Домой Выключить/включить текст