Статус
нашего
сайта:
ICQ Secrets Center is Online  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


Таненбаум Э.- Архитектура компьютера. стр.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, порождают один и тот же машинный код. По программе на машинном языке невозможно определить, использовались макросы при ее порождении или нет. В полученной программе никаких признаков макросов не остается.


⇐ Предыдущая страница| |Следующая страница ⇒

.