Создание программ, использующих макроопределения
Цель: Научиться создавать программы с использованием макроопределений. Программное обеспечение: TASM. Оборудование: персональный компьютер, практикум, тетради для лабораторных работ. Правила по технике безопасности: общие (приложение). Литература: Магда Ю. Ассемблер для процессоров Intel Pentium. Голубь Н. Г. Искусство программирования на Ассемблере. Лекции и упражнения. Время выполнения: 2 часа. ВОПРОСЫ ВХОДНОГО КОНТРОЛЯ: 1. Дайте определение макрокоманды. 2. Перечислите регистры процессора. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ Одно из самых мощных языковых средств ассемблера - макроопределения. Макроопределением (или макросом) называется участок программы, которому присвоено имя и который ассемблируется всякий раз, когда ассемблер встречаетэто имя в тексте программы. Макрос начинается директивой MACRO и заканчивается ENDM. Например; пусть описано макроопределение" пех2азси, переводящее шестнадцатеричное число, находящееся в регистре AL, в ASCII-код соответствующей шестнадцатеричной цифры: Hex2ascil macro Cmp al, 10 sbb al, 69h das Endm Сейчас в программе можно использовать слово hex2ascii, как если бы это было имя команды, и ассемблер заменит каждое такое слово на три команды, содержащиеся в макроопределении. Разумеется, можно оформить этот же участок кода в виде процедуры и вызывать его командой CALL - если процедура вызывается больше одного раза, этот вариант программы займет меньше места, но вариант с макроопределением станет выполняться быстрее, так как в нем не будет лишних команд CALL и RET. Однако скорость выполнения - не главное преимущество макросов. В отличие от процедур макроопределения могут вызываться с параметрами, следовательно, в зависимооги от ситуации, включаемый код будет немного различаться, например: S_mov macro register1, register2 Pushregister1 Popregister2 Endm Теперь можно использовать S_MOV вместо команды MOV для того, чтобы скопировать значение из одного сегментного регистра в другой. Следующее важное средство, использующееся в макроопределениях, - директивы условного ассемблирования. Например: напишем макрос, выполняющий умножение регистра АХ на число, причем, если множитель - степень двойки, то умножение будет выполняться более быстрой командой сдвига влево.
Можно, конечно, усложнить этот макрос, применяя особые свойства команды • LEA и ее комбинации, сдвиги и сложения, однако в нынешнем виде он чрезмерно громоздкий. Проблема решается с помощью третьего средства, постоянно использующегося в макросах, - блоков повторений. "
|