Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Определение макроса через макрос





Как известно, процедура имеет право обращаться к другой процедуре. Аналогично, при описании одного макроса можно ссылаться на другой макрос. В частности, допускается и обращение макроса к самому себе, т. е. разрешены рекурсивные макросы. Однако рекурсивные макросы встречаются на практике крайне редко, поэтому рассмотрим лишь пример нерекурсивного обращения одного макроса к другому и возникающие при этом проблемы.

Пусть макрос АRR Х,N предназначен для описания массива Х из N байтов:

ARR MACRO X, N

Х DB N DUP(?)

ENDM

Тогда, используя его, можно определить макрос АRR2, предназначенный для описания сразу двух массивов одного и того же размера;

АRR2 МАСRО Х1,Х2,К

АRR Х1,<К>

АRR Х2,<К>

ENDМ

При таком макроопределении макроподстановка для макроса АRR2 проходит в два этапа, например:

АRR2 А,В,20 à АRR A,< 20> à A DB 20 DUP(?)

ARR B,<20> В DВ 20 DUР(?)

Почему в теле макроса АRR2 при обращении в макросу АRR второй фактический параметр записывается в уголках? Дело в том, что если по смыслу первым и вторым параметрами макроса АRR2 могут быть только имена, то как третий параметр может быть указана достаточно сложная конструкция, например:

АRR2 А,В,<25 МОD 10>. Так вот, если бы вместо записи <К> использовалась просто запись К, тогда на первом этапе макроподстановки получилась бы макрокоманда АRR А,25 МОD 10 с четырьмя операндами, а не с двумя (напомним, что при макроподстановке уголки фактического параметра отбрасываются и что в макрокомандах параметры могут отделяться как запятыми, так и пробелами). При записи же <К> уголки заставляют рассматривать эту конструкцию как один параметр: АRR А, <25 МОD 10>.

Отметим, что в ЯА допускается вложенность макроопределений, например:

АRR2 МАСRО Х1,Х2,К

АRR МАСRО Х,N

Х DW N DUP (?)

ENDM

ARR X1,<K>

ARR X2,<K>

ENDM

Однако при этом надо учитывать следующее. Макрос АRR хотя и описан внутри макроса АRR2, не локализуется в АRR2, и к нему можно обращаться вне макроса АRR2. Но ассемблер работает так, что описание внутреннего макроса он "замечает" только при первом обращении к внешнему макросу. Поэтому обращаться к макросу АRR до обращения к макросу АRR2 нельзя:

АRR А,50;ошибка (имя ARR еще не описано)

АRR2 В,С,100

АRR D,60;можно (имя ARR уже описано)

 







Date: 2015-10-21; view: 418; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.009 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию