|
|
|
|
Макросы генерации программного кода
Макросы представляют собой мощный механизм передачи ассемблеру некоторых действий по программированию. Также, как Вы можете писать программу на
Бейсике, заставляющую компьютер выполнять заданную Вами работу, Вы можете написать программу на МAСRO, заставляющую ассемблер, в данном случае
MASM, выполнять для Вас неинтересную часть работы по программированию. Ниже, в качестве упрощенного примера того, что мы имели в виду, приведено
макро, реализующее запись символа в файл:
@WritToFil MACRO ;;определить макро
mov ah,40h ;;функция DOS по записи в файл
int 21h ;;вызов DOS
ENDM ;;конец макро
|
Теперь вместо того, чтобы каждый раз, когда мы хотим записать символ в файл, переписывать команды MOV и INT, мы можем использовать макро
WritToFil.
Сравнительные характеристики макросов и подпрограмм
При помощи подпрограмм мы можем сделать то же самое, что и
при помощи макро, однако оформление небольших программных кус-
ков в подпрограммы не эффективно. Разница между макро и под-
программой заключается в том, что макро вставляет нужный прог-
раммный код непосредственно в файл исходного текста, в то время
как подпрограмма размещается где-нибудь в другом месте, и для
выполнения ее программного кода мы должны осуществлять переход
по месту ее расположения. Другими словами, использование макро-
сов для создания повторяющегося линейного кода ликвидирует нак-
ладные расходы при выполнении программы, обусловленные вызовом
и возвратом из подпрограмм.
Мы используем макросы вместо подпрограмм из тех же соображе-
ний, что для короткого разговора обращаемся к кому-либо по те-
лефону вместо поездки к нему через весь город - потери времени
при переходе по другому адресу не оправдываются краткостью на-
шей задачи. Кроме того, макрокод имеет тенденцию к уменьшению
своих размеров, так как он добавляется к программе всякий раз,
когда должен использоваться. Если он получается слишком длин-
ным, его следует оформить в подпрограмму. Что значит "Слишком
длинный"? Это зависит от накладных расходов, необходимых на вы-
зов подпрограммы, от того, как часто используется функция, и от
отношения значения памяти к скорости выполнения программы.
Макросы работают быстрее, так как не требуют сохранения ре-
гистров,помещения в стек параметров и т.д. Однако частые повто-
рения коротких макросов могут занимать значительную память в
объектных и исполнимых файлах. Сначала напишите макрос и, если
окажется, что он становится неуправляем, перепишите его в под-
программу. Позже мы увидим,как можно оформить вызов подпрограмм
в виде макро.
|
|
|