(строки ), как был осуществлен вызов макрокоманды clear_rg с фактическим параметром ax (строка ) и как выглядит результат работы макрогенератора, сформировавшего команду ассемблера xor ax,ax (строка 75);
24 clear_r macro rg 25 ;очистка регистра rg 26 xor rg,rg 27 endm ... 74 clear_r ax 75000E 33 C0 xor ax,ax |
Таким образом в итоге мы получили то, что и требовалось — команду очистки заданного регистра, в данном случае ax.
В другом месте программы вы можете выдать ту же макрокоманду, но уже с другим именем регистра.
Каждый фактический аргумент представляет собой строку символов, для формирования которой применяются следующие правила:
вычисляется и подставляется в текстовом виде в соответствии с текущей системой счисления.
Теперь обсудим вопрос — как транслятор распознает формальные аргументы в теле макроопределения для их последующей замены на фактические аргументы?
Прежде всего по их именам в заголовке макроопределения. В процессе генерации макрорасширения компилятор ассемблера ищет в тексте тела макроопределения последовательности символов, совпадающие с теми последовательностями символов, из которых состоят формальные параметры. После обнаружения такого совпадения формальный параметр из тела макроопределения замещается соответствующим фактическим параметром из макрокоманды. Этот процесс называется подстановкой аргументов.
Здесь нужно еще раз особо отметить список_формальных_аргументов в заголовке макроопределения.
В общем случае он содержит не только перечисление формальных аргументов через запятую, но и некоторую дополнительную информацию. Полный синтаксис формального аргумента следующий:
имя_формального_аргумента[:тип] |