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


Полезное:

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


Категории:

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






Endif endif





MOV AL,BH MOV AL, BH

??0105:??0105:

ENDIF

Как уже отмечалось, при сравнении текстов в директивах IFIDN и IFDIF большие и малые буквы не отождествляются. Это неприятная особенность дан­ных директив. Обычно сих помощью в макросах сравниваются имена переменных и регистров, а эти имена в текстах программ могут записываться как малыми, так и большими буквами или вперемежку, и если при обращении к макросу имена записаны не теми буквами, как предусмотрел автор макроса, то - тот макрос может сформировать неправильное макрорасширение. Например, по макракоманде ММ АL,АН,Мах будет построена группа команд для вычисления минимума (!) чисел из регистров АL и АН, т. к. в теле макроса ММ директива IFIDN будет сравнивать тексты Мах и МАХ, которые не совпадают. Как преодолеть этот недостаток? Можно предложить следующий метод: берем все возможные варианты записи имени (например, АН, АL, аН и аL) и с по­мощью IRР-блока и директивы IFIDN проверяем, не совпадает ли заданное имя с одним из этих вариантов; если совпадает, тогда некоторому вспомогательному имени с помощью директивы присваивания (=) даем одно значение, не совпада­ет - другое; затем это значение нужно проверить директивой IF. Эти действия (кроме последней проверки) можно описать в виде следующего макроса SAME N,LN,F (где N - то, что проверяем; LN - список (в уголках, через запятую) всех возможных вариантов записи имени, для которого делаем проверку; F - имя, которому присваивается результат проверки: -1 (истина) - есть совпадение, 0 - нет):

SAME MACRO N,LN,F

F=0;;присвоить 0 имени F (на случай несовпадения)

IRP V,<LN>;; для каждого варианта V из LN выполнить:

IFIDN <V>,<N>;; если V совпал с N, то

F = -1;;перепресвоить F значение -1

EXITM;;прекратить макроподстановку

ENDIF

ENDM

ENDM

Хотя макроподстановка для этого макроса может выполняться достаточно долго, в конце концов генерируется либо одна, либо две директивы присва­ивания, например:

SАМЕ АH,<АН,Аh,аН,аh>,АХ? à АХ?=0

АХ?= -1

SАМЕ bh,<АН,Аh,аН,аh>,АХ? à АХ?=0

Используем SАМЕ для описания в виде макроса САLL_Р Х команд обращения к процедуре Р, параметр (X) для которой передается через регистр АХ. В общем случае этот макрос должен обозначать следующие команды:

MOV AX,X

CALL P

Однако, если в качестве Х указан регистр АХ, то первая команда не нужна. Таким образом, здесь надо сравнивать Х с именем АХ, причем с любым из возможных вариантов его записи. Для этого мы и воспользуемся макросом SАМЕ, причем имя, которому присваивается результат проверки, локализуем в макросе СALL_Р:

CALL_P MACRO X

LOCAL F

SAME X,<AX,Ax,aX,ax>,F

IFE F

MOV AX,X

ENDIF

CALL P

ENDM

Теперь рассмотрим еще две IF-директивы:

IFВ <t>

IFNB <t>

Они фактически являются вариантами директив IFIDN и IFDIF, когда второй текст пуст. В директиве IFВ (if blank, если пусто) условие считается выполненным, если текст t пуст, а в директиве IFNВ (if not blank)- если текст t не пуст. Эти директивы используются в макросах для проверки, задан ли фактический; параметр или нет (не задать параметр - значит указать в соответствующей позиции макрокоманды пустой текст). Например, макроопределение

DEF MACRO X, V

IFB <V>;параметр V не задан (пустой)?

X DB?

ELSE

X DB V

ENDIF

ENDM

описывает макрос DEF Х,N, по которому определяется байтовая переменная Х с начальным значением V, если оно указано, или без него:

DEF A,6 ─────> A DB 6

DEF B ─────> B DB?

Далее рассматривается пример разработки и моделирования программы для ГМ одного из вариантов курсового проекта.

 







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



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