|
Ушел с форума
16377 / 7689 / 1080
Регистрация: 11.11.2010
Сообщений: 13,769
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 18.12.2013, 14:19 [ТС] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ГЛАВА 21 МАКРОЯЗЫК (часть 1/3) Нередко бывает полезным предварительное (до начала трансляции) преобразование текста программы. Например, может потребоваться, чтобы какой-то фрагмент программы был продублирован несколько раз или чтобы в зависимости от некоторых условий в тексте программы были сохранены одни фрагменты и удалены другие. Подобную возможность предоставляют так называемые макросредства. Расширение языка Ассемблера за счет этих средств называют макроязыком. Программа, написанная на макроязыке, транслируется в два этапа.
Стандартные функции могут быть определены в библиотеке макрокоманд и доступны при дальнейшем программировании. Число операций повторного кодирования уменьшается, уменьшается и количество ошибок. Блоки повторения Иногда в программе приходится выписывать несколько раз подряд один и тот же (или почти один и тот же) фрагмент, и хотелось бы, чтобы мы сами выписывали этот фрагмент только раз, а макрогенератор размножал его нужное количество раз. Такая возможность предусмотрена в языке ассемблер, и реализуется она с помощью блоков повторения (repeat blocks).<тело блока>— любое число любых предложений (в частности, ими могут быть снова блоки повторения), ENDM —директива, указывающая на конец тела и всего блока повторений. Встречая в исходном тексте программы такой блок, макрогенератор подставляет вместо него в окончательную программу несколько копий тела. При дублировании тело может выписываться без всяких изменений, а может копироваться с модификациями. Как именно будет происходить дублирование, сколько копий будет создано зависит от заголовка блока. Имеются три разновидности заголовка, поэтому различают три варианта блока повторения: REPT–блоки, IRP–блоки и IRPC–блоки. REPT–блоки Этот тип блоков повторения записывается следующим образом:
WHILE-блоки
IRP–блоки Блоки повторения этого типа имеют следующий видВстречая такой блок макрогенератор заменяет его на k копий тела (по одной на фактический параметр), причем в i-той копии все вхождения имени p заменяются на vi:
IRPC–блоки
Макрооператоры Макрооператор & Рассмотрим следующий блок повторения и построенные по нему копии:
Макрооператор & используется не только тогда, когда формальный параметр сливается с соседними именами и числами, но и когда его надо указать внутри строк. Макрогенератор игнорирует вхождение формального параметра в строки. Чтобы обратить внимание макрогенератора на эти вхождения, перед параметром в строках ставят знак &, а если не ясна правая граница параметра, то & надо указывать и после параметра:
Макрооператор <>
Макрооператор ! Символ "!" не переносится в окончательный текст, но следующий за ним символ трактуется как обычный символ, а не как символ, играющий какую-то специальную роль:
Макрооператор % Макрооператор используемый при записи фактических параметров IRP-блоков и макросов: %<константное выражение>Встретив такую конструкцию в фактическом параметре, макрогенератор вычисляет указанное выражение и подставляет его значение вместо всей этой конструкции. Вложенности макрооператоров % не допускается. В конструкции %5-%K будет зафиксирована ошибка «неописанное имя %K».
Макрооператор ;; Если в теле блока повторения или макроса имеются комментарии (в конце каких-то предложений или как самостоятельные предложения), то они переносятся во все копии блока. Если комментарий полезен при описании самого блока повторения, но совершенно не нужен в его копиях — тогда комментарий начинают с двух точек с запятой — такие комментарии не копируются:
Макросы Терминология:
Макроопределения Описание макроса имеет следующий вид:<имя макроса> MACRO <формальные параметры через запятую> Первая строка макроопределения — это директива MACRO, которую принято называть заголовком макроса. В ней, во-первых, указывается имя, которое дается макросу, во-вторых, через запятую перечисляются формальные параметры макроса. Необходимость в параметрах вызвана тем, что в общем случае макрос должен копироваться не в неизменном виде, а с некоторыми модификациями; параметры и обозначают те величины, которые влияют на модификации. Формальным параметрам можно давать любые имена, эти имена локализуются в теле макроса; если имя параметра совпало с именем другого объекта программы, то внутри макроопределения под этим именем понимается параметр, а не объект.<тело макроса> ENDM Тело макроса — это тот фрагмент программы, который и будет затем многократно копироваться. Тело может состоять из любого числа любых предложений, в которых можно использовать формальные параметры макроса. Как и в блоках повторения, формальные параметры могут обозначать любые части предложений тела. Если рядом с параметром надо указать имя или число, или если параметр надо указать внутри строки, то следует использовать макрооператор &. В теле макроса можно использовать комментарии, начинающиеся с двух точек с запятой. Завершает макроопределение директива ENDM (end of macro). В этой директиве, в отличие от блока повторения, не надо повторять имя макроса. Если перед директивой ENDM указать имя макроса, то это предложение будет рассматриваться как рекурсивный вызов макроса. Макроопределения могут быть размещены в любом месте текста программы, по ним в машинную программу ничего не записывается. Но макроопределение должно быть записано до первой ссылки на этот макрос — действует правило ассемблера: “Сначала опиши макрос и только затем обращайся к нему”. Макрокоманды В тех местах программы, где макрогенератор должен подставить макрос, выписывается обращение к макросу в виде макрокоманды, которая записывается следующим образом:<имя макроса><фактические параметры через запятую или пробел> Конкретные примеры:SUM A,ES:B вариант: SUM A ES:B VAR Z,W,? вариант: VAR Z W,? Макрокоманды очень похожи на обычные команды и директивы. Но вместо названия команды или директивы, являющегося служебным словом, в макрокоманде указывается имя макроса, которое придумал автор программы. В макрокоманде параметры могут отделяться как запятыми, так и пробелами. В качестве фактического параметра может быть указан любой текст (в том числе и пустой), но он должен быть сбалансирован по кавычкам и угловым скобкам и в нем не должно быть запятых, пробелов и точек с запятой вне этих кавычек и скобок. Поскольку запятыми и пробелами отделяется один параметр от другого, а с точек с запятой начинается комментарий, то их использование внутри фактического параметра приведет к неоднозначности. При записи параметров макрокоманд можно использовать те же макрооператоры <>, ! и %, что и при записи фактических параметров блоков повторения. Если в фактическом параметре надо указать запятую, пробел или точку с запятой, то параметр следует заключить в уголки:
Макроподстановки и макрорасширения Когда макрогенератор, просматривая исходный текст программы, встречает макрокоманду, то он выполняет макроподстановку: находит описание макроса с указанным именем, берет его тело, заменяет в этом теле все формальные параметры на соответствующие фактические параметры и полученный таким образом текст (он называется макрорасширением) подставляет в программу вместо макрокоманды:
4
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Новые блоги и статьи
|
|||
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|