Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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; Нарушение авторских прав |