и ENDМ. Эта задача может усложняться, когда макроопределения встречаются внутри других макроопределений. Когда предложения MACRO и ENDМ вложены, как в примере предыдущего раздела, макропроцессор должен распознать вложения и правильно сопоставить последнюю или внешнюю команду ENDМ первой команде MACRO. Весь промежуточный текст, включая вложенные MACRO и ENDM, определяет отдельную макрокоманду.
1. Запоминать определения. Процессор должен запомнить определения макрокоманд, которые он будет использовать для расширения макровызовов.
2. Распознавать вызовы. Необходимо распознать макровызовы, представленные в форме мнемонического кода операции. Это предполагает, что имена макрокоманд обрабатываются как один из типов кода операции.
4. Выполнять расширение макрокоманд и подстановку фактических параметров. Вместо формальных параметров макроопределения процессор должен подставить соответствующие операнды макрокоманды; результирующий символический (в данном случае написанный на языке ассемблера) текст затем подставляется вместо макрокоманды. Этот текст, конечно, может в свою очередь содержать макрокоманды или макроопределения.
Таким образом, макропроцессор должен распознавать и обрабатывать макроопределения и макрокоманды.
2.3 Ограничения реализации
Введем некоторые ограничения. Будем считать, что наш макропроцессор функционально независим от ассемблера и что его выходной текст будет передаваться ассемблеру. Допустим что наш макропроцессор запрещает нам макровызовы или макроопределения внутри макроопределений.