АССЕМБЛЕР. Компоновщик. Загрузчик. Макрогенератор


Обработка макроопределений. - часть 2


плюс 1 (у нас - 11). На этом макрогенератор заканчивает обработку 10-й строки и, увеличив НС на 1, переходит к следующей строке.

            Теперь НС=11. Это директива LOCAL, которая сообщает о локальных именах макроса. Макрогенератор все перечисленные в ней имена заносит в 3-ю колонку соответствующей строки ТМ (у нас - заносит L). Кроме того, поскольку директива LOCAL не относится к телу макроса, то в этой же строчке корректируется число в 4?й колонке - оно увеличивается на 1 [зачеркнуть 11 и записать 12]. Если бы за директивой MACRO не было директивы LOCAL, то ТМ уже не менялась бы.

            Далее. Поскольку сейчас макрогенератору нечего делать с МО, то он пропускает все последующие строки программы вплоть до строки с директивой ENDM, оканчивающей МО. Поэтому текущим значением НС

становится 13. На этом вся обработка МО завершается. Никакая информация о МО ассемблеру не сообщается (это не его дело).

            Макрогенератор увеличивает НС на 1 и идет дальше.

            Итак, НС=14. Снова директива MACRO, снова начинается МО. Действия макрогенератора аналогичны. Во-первых, в ТМ добавляется новая строка со следующей информацией [записать]: имя - М, формальные параметры - X, Y и Z, локальных переменных - нет, начало тела - 14+1=15. Поскольку далее нет директивы LOCAL, то макрогенератор пропускает все последующие строки вплоть до директивы ENDM, поэтому значением НС

становится 18. На этом обработка МО заканчивается. Макрогенератор увеличивает НС на 1 и идет дальше.

 




Начало  Назад  Вперед



Книжный магазин