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


Обработка макроопределений.


            Сначала рассмотрим, что делает макрогенератор, когда он встречает макроопределение (МО). Пусть в тексте программы имеется такой фрагмент (слева - номера строк программы):

            |     ...

         10 | M1 MACRO OP,W

         11 |     LOCAL L

         12 |  L: OP AX,W

         13 |    ENDM

         14 | M MACRO X,Y,Z

         15 |    MOV AX,X

         16 |    M1 ADD,Y

         17 |    MOV Z,AX

         18 |   ENDM

         19 |    ...

            Пусть НС=10, т.е. сейчас макрогенератор должен обработать 10-ю строку программы. В ней находится директива MACRO, директива макроязыка, поэтому макрогенератор должен ее обработать. Как макрогенератор узнает, что это директива макроязыка? А очень просто. В макрогенератор заранее встроена таблица, в которой перечислены названия всех директив макроязыка. Выделив в очередной строке мнемокод, макрогенератор просматривает эту таблицу, и если в ней есть такое имя, то значит, это директива макроязыка, иначе это обычное предложения ЯА.

            Конкретно для директивы MACRO макрогенератор выполняет следующие действия. С этой директивы начинается новое МО. Макрогенератор заносит сведения о новом макросе в специальную таблицу, называемую таблицей макросов (ТМ). Вначале эта таблица пуста, а затем она пополняется по мере появления новых МО. Примерный вид ее такой:

        имя макроса  формал.параметры   локал.имена   начало тела

        -----------------------------------------------------------

            M1          OP, W               L            11 -> 12

            M           X, Y, Z             -            15

                 ...

            В 1-й колонке указывается имя макроса (у нас - M1), во 2-й - имена формальных параметров этого макроса (у нас - OP и W); эта информация извлекается из заголовка МО. В 3-й колонке указываются локальные имена, т.е. имена из директивы LOCAL, но пока макрогенератор ничего о них не знает (директиву LOCAL он еще не видит), поэтому пока оставляет эту колонку пустой. В 4-й колонке указывается номер строки программы, с которой начинается тело макроса, - это текущее значение НС




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



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