Т ASM предоставляет средства для вывода текстового сообщения во время транс- ляции программы — директивы DISPLAY и %ОUТ. С их помощью можно при необхо- димости следить за ходом трансляции. К примеру, 320 Глава 14. Макросредства языка ассемблера display недопустимые аргументы макрокоманды %оut недопустимое имя регистра В результате обработки этих директив на экран (стандартный выход) будут выведены тексты сообщений. Если эти директивы использовать совместно с ди- рективами условной компиляции, то, к примеру, можно отслеживать путь, по ко- торому осуществляется трансляция исходного текста программы. Можно предложить читателю уже с этого момента начать формировать набор полезных в его практической работе макрокоманд. В качестве основы вы можете взять файл mac.inc, который находится в каталоге данной главы среди файлов, при- лагаемых к книге[14]. В дальнейшем, если в этом возникнет необходимость, вы буде- те самостоятельно дополнять его вашими макросами. Использовать макроопреде- ления из этого файла очень просто: достаточно включить в нужном месте вашей программы строку с директивой include, в результате в ваш файл будут вставлены строки из файла, указанного в качестве операнда этой директивы. Основная задача этой книги — научить вас программировать на языке ассемб- лера. Как вы уже успели понять, нельзя изучать этот язык в отрыве от рассмотре- ния процессов, происходящих во время выполнения программы на компьютере. Одно из средств изучения таких процессов — отладчик. Однако он решает пробле- му глобально, что нужно далеко не всегда. Тем более, как мы увидим далее, что возможности отладчика не безграничны. Поэтому необходимо иметь более уни- версальное средство, которое позволило бы «подглядывать» за содержимым реги- стра или области памяти динамически, во время выполнения программы. Для это- го разработаем еще один макрос и назовем его, к примеру, show. Его аргументом может быть один из четырех регистров — AL, АН, АХ, ЕАХ. С помощью этого макроса можно визуализировать содержимое любого из доступных регистров или области памяти длиной до 32 битов. Для этого достаточно лишь переслать содержимое нуж- ного объекта (регистра или ячейки памяти) с учетом его размера в один из регист- ров AL, АН, АХ, ЕАХ. Имя одного из этих регистров указывается затем в качестве фактического аргумента макрокоманды show. Второй аргумент этого макроса — позиция на экране. Задавая определенные значения, мы можем судить о том, ка- кая именно макрокоманда show сработала. Еще одна немаловажная особенность данного макроса — в его возможности работать как в реальном, так и в защищен- ном режимах. Распознавание текущего режима работы процессора выполняется автоматически. Текст макроопределения show довольно велик и по этой причине находится среди прилагаемых к книге файлов в каталоге данной главы. Пример использования этого макроса приведен в листинге 14.6. Листинг 14.6. Пример использования макроса show ;рrg_14_6.аsm МАSМ MODEL small STACK 256 ,486р Include sfюw.iпс . data pole dd Зсdf4З6fh . code main: mоv ах,@dаtа mov ds, ах хоr ах,ах mоv ах, lf 0f h show аl,О show аh,160 show ах,320 mоv еах,pole show еах,480 exit: mоv ах,4с00h iпt 21h end main Посвятить время рассмотрению этого макроса полезно еще и потому, что при его разработке было использовано большинство средств, обсуждавшихся в этой главе.