|
¦
L----------------------------------------------------------------
- 1-51 -
Условные макросы
Приведенный выше пример макрокода слишком прост, поэтому раз-
решите несколько "приодеть его". Предположим, что для целей от-
ладки мы хотели бы писать наши символы на экран, а не в файл.
Тогда мы можем переписать макро следующим образом:
@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
.
.
. |
norton |
|
{img2} |
антивирусные программы |
|
;так как аргумент идентичен EKO
@WritToFil NOEKO ;MASM подставляет MOV AH,40H и
;INT 21H
.
.
. ;так как аргумент не идентичен EKO
Заметим, что в предыдущем примере вместо NOEKO мы могли бы ис-
пользовать PHUBAH или что-нибудь еще, так как основная мысль зак-
лючается в том, чтобы аргументом не было EKО. |
avast 4 professional |
|
|
Спеллинг параметра
довольно произвольный. Это гарантирует возможность ошибки, если
мы забудем его и напишем @WritToFil ECHO. |
panda antivirus |
|
|
резервное копирование файлов, система распознавания текста, dr web, програмное обеспечение, немецко русский словарь, .
avast antivirus
|
Разница между макро и под- ¦
¦программой заключается в том, что макро вставляет нужный прог-¦
¦раммный код непосредственно в файл исходного текста, в то время¦
¦как подпрограмма размещается где-нибудь в другом месте, и для¦
¦выполнения ее программного кода мы должны осуществлять переход¦
¦по месту ее расположения. Другими словами, использование макро-¦
¦сов для создания повторяющегося линейного кода ликвидирует нак-¦
¦ладные расходы при выполнении программы, обусловленные вызовом¦
¦и возвратом из подпрограмм. ¦
¦ Мы используем макросы вместо подпрограмм из тех же соображе-¦
¦ний, что для короткого разговора обращаемся к кому-либо по те-¦
¦лефону вместо поездки к нему через весь город - потери времени¦
¦при переходе по другому адресу не оправдываются краткостью на-¦
¦шей задачи. Кроме того, макрокод имеет тенденцию к уменьшению¦
¦своих размеров, так как он добавляется к программе всякий раз,¦
¦когда должен использоваться. Если он получается слишком длин-¦
¦ным, его следует оформить в подпрограмму. Что значит "Слишком¦
¦длинный"? Это зависит от накладных расходов, необходимых на вы-¦
¦зов подпрограммы, от того, как часто используется функция, и от¦
¦отношения значения памяти к скорости выполнения программы. ¦
¦ Макросы работают быстрее, так как не требуют сохранения ре-¦
¦гистров,помещения в стек параметров и т.д. Однако частые повто-¦
¦рения коротких макросов могут занимать значительную память в¦
¦объектных и исполнимых файлах. Сначала напишите макрос и, если¦
¦окажется, что он становится неуправляем, перепишите его в под-¦
¦программу. Позже мы увидим,как можно оформить вызов подпрограмм¦
¦в виде макро.
|
|
|