Статус нашего сайта: |
ICQ Information Center |
ICQ SHOP 5-значные 6-значные 7-значные 8-значные 9-значные Rippers List ОПЛАТА СТАТЬИ СЕКРЕТЫ HELP CENTER OWNED LIST РОЗЫСК!New! ICQ РЕЛИЗЫ Протоколы ICQ LOL ;-) Настройка компьютера Аватарки Смайлики СОФТ Mail Checkers Bruteforces ICQTeam Soft 8thWonder Soft Other Progs ICQ Patches Miranda ICQ ФорумАрхив! ВАШ АККАУНТ ICQ LiveJournal
РекламаНаш канал:irc.icqinfo.ru |
Таненбаум Э.- Архитектура компьютера. стр.404Макровызовы не следует путать с вызовами процедур. Основное отличие состоит в том, что макровызов — это команда ассемблеру заменить имя макроса телом макроса. Вызов процедуры — это машинная команда, которая, будучи вставлена в объектную программу, позднее должна быть выполнена для вызова процедуры. В табл. 7.3 сравниваются макровызовы и вызовы процедур. Таблица 7.3. Сравнение макровызовов и вызовов процедур
Можно считать, что процесс ассемблирования проходит в два прохода. На первом проходе сохраняются все макроопределения, а макровызовы расширяются. На втором проходе обрабатывается полученный в результате текст. Иными словами, исходная программа считывается, а затем трансформируется в другую программу, из которой удалены все макроопределения и в которой каждый макровызов заменен телом макроса. Полученная программа без макросов затем поступает в ассемблер. Важно иметь в виду, что программа представляет собой строку символов, каковыми могут быть буквы, цифры, пробелы, знаки пунктуации и символы возврата каретки (перехода на новую строку). При макрорасширении определенные подстроки из этой строки заменяются другими символьными строками. Макросы — средство манипулирования символьными строками без изменения их значения. Макросы с параметрами Описанные в предыдущем подразделе макросы можно использовать для сокращения объема программ, в которых часто повторяется одна и та же последовательность команд. Однако иногда программа содержит несколько похожих, но не идентичных последовательностей команд. Например, в листинге 7.6 первая последовательность меняет местами значения переменных Р и Q, а вторая — переменных R и S. Листинг 7.6. Смена значений двух пар переменных без использования макроса M0V ЕАХ.Р MOV EBX.Q MOV Q.EAX MOV Р.ЕВХ MOV EAX.R MOV EBX.S MOV S.EAX MOV R.EBX Для работы с такими почти идентичными последовательностями предусмотрены макроопределения, предлагающие формальные параметры, и макровызовы, в которых формальные параметры заменяются фактическими параметрами. Фактические параметры помещаются в поле операндов макровызова. В листинге 7.7. представлена программа из листинга 7.6, в которую включен макрос с двумя параметрами. Символы Р1 и Р2 — это формальные параметры. Во время расширения макроса каждый символ Р1 внутри тела макроса заменяется первым фактическим параметром, а символ Р2 — вторым фактическим параметром. Пример: CHANGE P.Q В этом макровызове Р — это первый фактический параметр, a Q — второй фактический параметр. Таким образом, программы в листингах 7.6 и 7.7 идентичны. Листинг 7.7. Смена значений двух пар переменных с использованием макроса |