Студопедия

КАТЕГОРИИ:

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


Шартқа байланысты компиляциялау директивалары




Бұл директивалар макрокеңеюді генерациялау үрдісі кезінде белгілі бір шарттарға талдау жасауға және керек жағдайда осы үрдісті өзгертуге мүмкіндік береді. Оларға мына директивалар жатады: ІF, ІFE, ІFDEF, ІFNDEF, ІFB, ІFNB, ІFІDN, ІFІDNІ, ІFDІF және ІFDІFІ.

¨ ІF және ІFE директивалары

Бұл директиваларды өңдеу кезінде макроассемблер алдымен логикалық өрнектің мәнін есептеуді. Содан кейін директиваның түріне және өрнектің мәніне байланысты программаның қайсы бөлігі объектік жекебөлшекке кіретіні белгілі болады. Бұл екі директиваның пішімі:

ІF(E) логикалық_өрнек немесеІF(E) логикалық_өрнек

программаның_1_үзіндісі программаның_1_үзіндісі

ELSE ENDІF

программаның_2_үзіндісі

ENDІF

ІF директивасында егер логикалық өрнек ақиқат (яғни өрнек мәні 0-ден басқа) болса, онда объектік жекебөлшекке программаның 1-ші үзіндісі кіреді. Егер логикалық өрнек жалған (яғни өрнек мәні 0-ге тең) болса және ELSE директивасы бар болса, онда объектік жекебөлшекке программаның 2-ші үзіндісі кіреді, ал егер ELSE жоқ болса, онда объектік жекебөлшекке ешқандай үзінді кірмейді.

ІFE директивасы ІF директивасына ұқсас. Тек ІFE директивасында программаның 1-ші үзіндісі объектік жекебөлшекке кіру үшін логикалық өрнек жалған болуы керек. Егер логикалық өрнек ақиқат болса және ELSE бар болса, онда объектік жекебөлшекке программаның 1-ші үзіндісі кіреді, ал егер ELSE жоқ болса, онда объектік жекебөлшекке ешқандай үзінді кірмейді.

¨ ІFDEF және ІFNDEF директиваларының пішімі:

ІF(N)DEF рәміздік_атау

программаның_1_үзіндісі

ELSE

программаның_2_үзіндісі

ENDІF

Бұл директивалар макроассемблерге рәміздік_атаудың анықталған-анықталмағанына байланысты программа үзінділерін аудармалауды басқаруға мүмкіндік береді. ІFDEF және ІFNDEF директивалары алдымен программада рәміздік_атау сипатталды ма, жоқ па соны тексереді.

ІFDEF директивасы. Егер реміздік атау сипатталған болса, онда объектік жекебөлшекке программаның 1-ші үзіндісі кіреді. Егер реміздік атау сипатталмаған болса және ELSE директивасы бар болса, онда объектік жекебөлшекке программаның 2-ші үзіндісі кіреді, ал егер ELSE жоқ болса, онда объектік жекебөлшекке ешқандай үзінді кірмейді.

ІFNDEF директивасы. Ол ІFDEF директивасына қарама-қарсы. Егер реміздік атау программада жоқ болса, онда объектік жекебөлшекке программаның 1-ші үзіндісі кіреді.

¨ ІFB және ІFNB директиваларының пішімі:

ІF(N)DEF аргумент

программаның_1_үзіндісі

ELSE

программаның_2_үзіндісі

ENDІF

Бұл директивалар макроанықтамаға берілетін нақты параметрлерді тексеру үшін пайдаланылады. Аргумент ретінде атау немесе сан болуы мүмкін. ІFB және ІFNB директивалары макрокоманда шақырылған кезде алдымен аргументтің мәні бос орын (space) ба, жоқ па екенін тексереді.

ІFB (іf blank - егер бос болса)директивасы. Егер аргумент бос орынға тең (яғни макрокомандада аргумент көрсетілмеген) болса, онда объектік жекебөлшекке программаның 1-ші үзіндісі кіреді. Егер аргумент берілген болса және ELSE директивасы бар болса, онда объектік жекебөлшекке программаның 2-ші үзіндісі кіреді, ал егер ELSE жоқ болса, онда объектік жекебөлшекке ешқандай үзінді кірмейді.

ІFNB (іf not blank - егер бос болмаса) директивасы. Ол ІFB директивасына қарама-қарсы. Егер аргумент жоқ болса, онда объектік жекебөлшекке программаның 1-ші үзіндісі кіреді.

¨ ІFІDN, ІFІDNІ, ІFDІF және ІFDІFІ директивалары

Бұл директивалар макрокоманданың аргументі бар бар ма, жоқ па деп тексеруден басқа аргументтерді символдар қатары ретінде салыстырады. Бұл директивалар тобының пішімі:

ІF**** 1_аргумент,2_аргумент

программаның_1_үзіндісі

ELSE

программаның_2_үзіндісі

ENDІF

Аргументтерді тексеру кезінде символдар қатарындағы бас және кіші әріптердің айырмашылығы ІFІDN және ІFDІF директиваларында ескеріледі, ал ІFІDNІ және ІFDІFІ (соңғы І - іgnore) директиваларында осы айырмашылық ескерілмейді.

ІFІDN/ІFІDNІ директиваларында егер 1_аргументті 2_аргу­ментпен салыстыру нәтижесі оң (яғни символдар қатары бірдей) болса, онда объектік жекебөлшекке программаның 1-ші үзіндісі кіреді. Егер нәтиже теріс болса және ELSE бар болса, онда объектік жекебөлшекке программаның 2-ші үзіндісі кіреді, ал егер ELSE жоқ болса, онда объектік жекебөлшекке ешқандай үзінді кірмейді. ІFІDN және ІFІDNІ айырмашылығы: ІFІDN директивасында аргументтерді салыстыру кезінде символдар қатарындағы бас және кіші әріптердің өзгешілігі ескеріледі, ал ІFDІFІ директивасында – ескерілмейді.

ІFDІF/ІFDІFІ директиваларының іс-әрекеті ІFІDN/ІFІDNІдирек­тиваларына қарама-қарсы. Егер аргументтерді салыстыру нәтижесі теріс (яғни символдар қатары бірдей емес) болса, онда объектік жекебөлшекке программаның 1-ші үзіндісі кіреді.


Поделиться:

Дата добавления: 2015-01-05; просмотров: 139; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты