На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 1 / Условное ассемблирование и МАКРОСЫ Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Условное ассемблирование и МАКРОСЫ

Хотя условное ассемблирование часто используется с определенными явно ключами, основной потенциал условного ассемблирования реализуется при его сочетании с возможностью макрокаманд. Существует целый набор возможностей условного ассемблирования, которые специально ориентированы на работу с макрокомандами. Рассмотрим основные из этих возможностей.


Макросы могут быть разделены на две группы. В первую группу входят макросы, ориентированные на создание определенных структур, зависящих от некоторых входных данных, причем эти структуры хорошо определены, а входные данные принадлежат конкретному классу. Примером может служить макро file_head, предназначенное для ввода блока определения файла.


Вторая группа макро предназначена для генерации структур, зависящих от информации, доступной программисту, или такой информации, которую программист считает несущественной и подлежащей игнорированию. Эти макросы часто должны уметь обрабатывать множество классов аргументов и определять класс аргументов. В то же время эти макросы могут поддерживать локальные данные или счетчики, освобождая программиста от рутинной работы. Макросы структурного управления, приводимые в оставшейся части данной главы, являются первыми примерами второй группы. Конечно, макросы этих двух групп обычно частично перекрываются.


Для одного типа макро программист использует эти средства для того, чтобы избежать дополнительного ввода данных с клавиатуры или какой-либо другой неблагодарной работы. Для другого типа программист использует эти средства для создания структур высокого уровня, основанных на способности ассемблера поддерживать пропущенную информацию. В целях упрощения своей работы программист умышленно прячет детали реализации.


Примером макро высокого уровня является использование макро, упрощающих применение мнемоник в ассемблере. Хотя большинство команд процессора 8086 может использоваться с регистровыми операндами или операндами памяти, многие из них не позволяют непосредственных операндов. Примером является команда PUSH, хотя 186/188 и 286 позволяют проталкивать в стек непосредственные данные.


Довольно просто сконструировать макро pushi (проталкивание непосредственное), передающее нужный аргумент в регистр и проталкивающее этот регистр. Однако, если макро предназначено для реализации более общей функции проталкивания, желательно, чтобы оно не только проталкивало непосредственные данные, но и само решало, является ли такая операция необходимой. Другими словами, программист хотел бы применять обобщенный pseudoopcode (псевдокод), ра ботающий во всех случаях.Реально псевдокод должен быть макро, вычисляющим операнды и генерирующим стандартный или расширенный набор команд.


Первый шаг в написании такого общецелевого макро заключается в определении операндов. Для решения этой задачи MASM имеет целый набор специальных операторов.


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz