На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 1 / Условные макросы Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Условные макросы

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



            @WritToFil MACRO EКOFLAG   ;;определить INCHRIF с
                                   ;;аргументом EKOFLAG
            IFIDN ,  ;;если аргумент EKOFLAG
                                   ;;идентичен трем буквам
                                   ;;EKO, ассемблировать
                                   ;;следующую строку
            mov      ah,06h  ;;функция DOS по записи в
                             ;;стандартный вывод
            ELSE       ;;если EKOFLAG не идентично трем буквам
                       ;; EKO, ассемблировать следующую строку
            mov      ah,40h    ;;функция DOS по записи в файл
            int      21h                     ;;вызов DOS
            ENDM                             ;;конец макро

В данном случае MASM анализирует аргумент EKOFLAG с целью определения, что вставлять: mov ah,06h или mov ah,40h:



            @WritToFil EKO    ;здесь MASM подставляет MOV AH,06  и
                              ;INT 21H
                    .
                    .
                    .         ;так как аргумент идентичен EKO
            @WritToFil NOEKO  ;MASM подставляет MOV AH,40H и
                              ;INT 21H
                    .
                    .
                    .         ;так как аргумент не идентичен EKO

Заметим, что в предыдущем примере вместо NOEKO мы могли бы использовать PHUBAH или что-нибудь еще, так как основная мысль заключается в том, чтобы аргументом не было EKО. Спеллинг параметра довольно произвольный. Это гарантирует возможность ошибки, если мы забудем его и напишем @WritToFil ECHO. Такая запись лишает нас появления эха на экране, так как вместо EKO мы указали ECHO. Мы можем исключить возможность появления такой ошибки, ограничив себя использованием EKO или NOEKO:



         @WritToFil MACRO EKOFLAG  ;;определить INCHRIF c аргументом
                                   ;;EKOFLAG
                    IFIDN , ;;если EKOFLAG = EKO,
                                   ;;ассемблировать след-ую строку
                    mov     ah,06h    ;;функция DOS по записи в
                                   ;;стандартный файл
                    ELSE           ;;в противном случае
                    IFIDN , ;;если EKOFLAG = NOEKO,
                                            ;;ассемблировать
                    mov     ah,40h ;;функция DOS по записи в файл
                    ELSE           ;;если аргумент не соответствует,
                                            ;; то
                    .ERR   ;;выдать ошибку ассемблирования
                    ENDIF    ;;конец проверки условия
                    int     21h             ;; вызов DOS
                    ENDM                    ;; конец макро

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz