Что такое ассемблер?
Языки ассемблеров Команды языка ассемблера Код операции Псевдооперации Литералы Свободный формат команд Некоторые типичные команды ассемблера для машин с побайтовой организацией Ассемблеры типа «трансляция — выполнение» Однопроходный ассемблер Двухпроходный ассемблер Символы Подробная блок-схема прохода Подробная блок-схема прохода 2 Пример трансляции Таблицы символов общие замечания Обработка таблицы Линейный поиск Двоичный поиск Сравнение двоичного и линейного способов поиска Метод хеширования Пример хеширования Скученность Назначение макрокоманды Различие между макрокомандами и подпрограммами Форматы макрокоманды Ключевой макрос Макропроцессор |
Форматы макрокомандыКаждый макрос, для того чтобы его можно было вызывать, должен быть предварительно определен. Такое определение может быть выполнено либо в начале программы, либо в отдельном запуске. В последнем случае макрос помещается в библиотеку макросов и становится доступным произвольной программе. Библиотека макросов содержит не только макросы, определенные программистами на данной вычислительной установке, но также и системные макросы (такие, как GET, PUT, DTFSR, DCB и т. д.), поставляемые с серийным программным обеспечением. Каждое макроопределение, т. е. определение макроса, должно начинаться со слова MACRO и заканчиваться словом MEND в поле операции. Предложение, следующее за MACRO, содержит имя, посредством которого макрос может вызываться в программе, за которым следует список фиктивных аргументов или параметров (если они есть). Последующие предложения представляют собой тело макроса, т. е. последовательность команд, которая копируется в программу на место макровызова. Во время расширения макроса его команды вставляются в фактическую программу таким образом, что фиктивные аргументы будут заменены фактическими аргументами всякий раз, когда они появляются. Макровызов состоит из возможной метки, имени макроса в поле операции и списка фактических аргументов в поле операнда. Возможность использования фиктивных аргументов, которые могут заменяться при каждом вызове, придает системе значительную гибкость. На рис. 5.12. и 5.13 показана реализация простого макроса для взаимного обмена содержимым двух переменных, расположенных в основной памяти 1}. Специальный символ & в начале символических имен служит указанием для макропроцессора о том, что данные имена являются фиктивными аргументами, которые должны быть заменены фактическими во время расширения. Из рисунка можно видеть, что всякий раз, когда встречается макровызов EXGHQ, в программу вставляются блоки кодов с одной и той же структурой, но не идентичные.(При работе с этим макросом пользователи сами отвечают за то, чтобы фактические переменные имели одну и ту же длину и чтобы никакая значащая информация не была утрачена при занесении содержимого некоторого параметра в более короткое поле.) |