Статус нашего сайта: |
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 |
Таненбаум Э.- Архитектура компьютера. стр.403Директива COMMENT позволяет пользователю заменить символ начала комментария (точку с запятой) чем-либо другим. Директива PAGE используется для управления листингом программы. Наконец, директивой END помечается конец программы. В ассемблере MASM есть еще много директив. Другие ассемблеры Pentium 4 содержат другой набор директив, поскольку эти директивы определяются не архитектурой машины, а вкусами разработчиков ассемблера. Макросы Обычно программистам, пишущим на языке ассемблера, приходится многократно повторять одни и те же цепочки команд. Хотя проще всего писать нужные команды всякий раз, когда они требуются, это занятие становится утомительным, особенно если последовательность достаточно длинная или если ее нужно повторять слишком часто. Альтернативный подход — оформить эту последовательность в процедуру и вызывать ее в случае необходимости. У такой стратегии тоже есть свои недостатки, поскольку в этом случае каждый раз придется выполнять специальную команду вызова процедуры и команду возврата. Если последовательности команд короткие (например, всего две команды), но используются часто, то вызовы процедур могут значительно сказаться на быстродействии программы. Простым и эффективным решением этой проблемы являются макросы. Макроопределение, макровызов и макрорасширение Макроопределение — это способ дать имя фрагменту кода. После того как макрос определен, программист может вместо фрагмента кода писать имя макроса. В сущности, макрос — это просто имя фрагмента кода. В листинге 7.4 приведена ассемблерная программа для Pentium 4, которая дважды меняет местами значения переменных Р и Q. Вот как выглядит основная цепочка операторов: MOV ЕАХ.Р MOV EBX.Q MOV Q.EAX MOV Р.ЕВХ В листинге 7.5 эта последовательность определяется как макрос SWAP. Листинг 7.4. Смена значений переменных Р и Q без использования макроса M0V ЕАХ.Р MOV EBX.Q MOV Q.EAX M0V Р.ЕВХ M0V ЕАХ.Р MOV EBX.Q MOV Q.EAX M0.V Р.ЕВХ Листинг 7.5. Смена значений переменных Р и Q с использованием макроса SWAP MACRO MOV ЕАХ.Р MOV EBX.Q MOV Q.EAX MOV P.EBX ENDM SWAP SWAP Хотя в разных языках ассемблера определение макроса выглядит немного по-разному, во всех оно состоит из одних и тех же базовых частей: + заголовок макроса, в котором дается имя определяемого макроса; + текст, в котором приводится тело макроса; + директива, которая завершает определение (например, ENDM). Когда ассемблер наталкивается на макроопределение в программе, он сохраняет его в таблице макроопределений для последующего использования. Всякий раз, когда в программе в качестве кода операции будет появляться макрос (в нашем примере — SWAP), ассемблер заменит его телом макроса. Использование имени макроса в качестве кода операции называется макровызовом, а его замена телом макроса — макрорасширением. Макрорасширение происходит в ходе ассемблирования, а не во время выполнения программы. Этот момент очень важен. Программы, приведенные в листингах 7.4 и 7.5, порождают один и тот же машинный код. По программе на машинном языке невозможно определить, использовались макросы при ее порождении или нет. В полученной программе никаких признаков макросов не остается. |