Инструменты пользователя

Инструменты сайта


examination:asm:question27

Вопрос №27. Параметры в МО и макрокомандах, способ передачи параметров, параметры-списки. Примеры

Макропроцессор, как и язык ассемблера, просматривает и обрабатывает строки текста. Но в языке все строки связаны адресацией – одна строка может ссылаться на другую при помощи адреса или имени, которое должно быть “известно” ассемблеру. Более того, адрес присваеваемый каждой отдельной строке зависит от содержимого, количества и адресов предшествующих строк. Если рассматривать макроопределение, как единый объект, то можно сказать, что строки нашего макроопределения не так сильно взаимосвязаны. Макроопределения не могут ссылаться на объекты вовне этого макроопределения. Предположим, что в теле макроопределения есть строка INCR X, причем перед этой командой параметр Х получил значение 10. Макропроцессор не производит синтаксический анализ, а производит простую текстовую подстановку вместо “Х” подставляется “10”.

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

Например, если из один из параметров должен быть соединен с другим (macro[x,y] = xy), то возможен синтаксис x&y, что означает конкатенацию формального параметра x с формальным параметром y. Этот случай не вызывает больших трудностей. Гораздо сложней обрабатывается случай, когда речь идет о подстановке параметра внутри символьной строки. В таком случае возможным выходом будет конкатенация по умолчанию двух последовательно друг за другом идущих символьных строк, а также преобразование формального параметра, заключенного в скобки к символьной строке. Таким образом, если мы хотим, чтобы в макросе фигурировала строка вида “blablabla[x]xxxxx”, где [x] должно заменяться формальным параметром вполне возможно заменить строку такого вида строкой типа “blablabla”(x)”xxxxx”.

В макровызове параметры могут задаваться в любом порядке, параметры, имеющие значения по умолчанию, могут опускаться.

Пример:

Заголовок макроопределения: M1 MACRO A=Q,B=,C=R

Макровызов: M1 C=Z,B=X

Результат подстановки:A=Q, B=X, C=Z

В некоторых Макропроцессорах имена параметров начинаются с некоторого отличительного признака (например, амперсанда - &), чтобы Макропроцессор мог отличить «свои» имена (имена, подлежащие обработке при обработке макроопределения) от имен, подлежащих обработке Ассемблером. Для Макропроцессоров, которые мы отнесли к категории сильносвязанных такой признак может и не быть необходимым, так как такой Макропроцессор обрабатывает как свои имена, так и имена Ассемблера.

warning

(не хватает более частных примеров)

examination/asm/question27.txt · Последние изменения: 2014/01/15 08:12 (внешнее изменение)