Студопедия

КАТЕГОРИИ:

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


Макрокомандалар және макроанықтамалар




Ассемблер тілінде жазылған программаның басылмасын (lіstіng, prіntout) алып қарасақ, онда коданың қайталанатын бөліктерін байқауға болады. Оларды макрокоманда ретінде ресімдеп, содан кейін осы қайталанатын үзінділерді әр түрлі программаларда пайдалануға болады. Макрокоманда бірнеше командалар тізбегінің орнына пайдаланылады. Сөйтіп программа жазған кезде оның өлшемін қысқартуға мүмкіндік береді. Макрокоманда – белгілі бір атау берілген және макроассемблердің жұмысы кезінде бір немесе бірнеше басқа қатармен ауыстырылуға арналған қатар. Макрокоманда атының қасында бірнеше параметр болуы мүмкін .

Макрокоманда мен макроанықтама ұғымдары бірге жүреді. Макрокоман­даны қолдану үшін алдымен макроанықтама деп аталатын оның үлгі-сипатын құру керек. Макроанықтама (немесе макрос) – ассемблер тіліндегі оперторлар­дың тізбегі (командалар мен жалғаноператорлар). Оның өзіндік аты болады. Сонымен, макроанықтама деп өзінің аты бар және аталым арқылы пайдалануға шақырылатын ерекше түрде жазылған программаны атайды.

Бірінші тарауда макроқұралдар пайдаланылған ассемблердегі программаны өңдеу TASM.exe аударғышымен (translator) екі фазада іске асырылатынын айтқанбыз. Аудармалаудың жалпы сұлбасында макроассемблердің орны 14-суретте көрсетілген [7]. Бірінші фазада аудар­ғыштың макроассемблер деп аталатын бөлігі жұмыс істейді. Бұл кезде макро­ассемблердің кірмесіне ассемблер тіліндегі программаға онша ұқсамайтын (құрамында макроанықтамалар бар) бастапқы программа берілуі мүмкін, сонда, макроассемблердің шықпасынан міндетті түрде (шағынпроцес­сордың машиналық командалар жүйесінің ұқсас командалары­нан тұратын) таза ассем­блер тіліндегі мәтін алынады. Аудармалаудың екінші фазасына Ассемблердің өзі тікелей қатысады: оның міндеті – бастапқы програм­маның машина­лық түрдегі мәті­нінен тұратын объектік коданы қалып­тастыру.

Макрокоманданы пайдалану үшін алдымен оны осы программада немесе программаға қосылатын файлдың ішінде макроанықтамасын сипаттап кету керек.

Макроанықтаманың синтаксисі:

макрокоманданың_аты MACRO [формальді_параметрлердің_тізімі]

макроанықтаманың_денесі

ENDM

Сонымен, макроанықтама үш бөліктен тұрады:

· Басы (бастама). Бұған жалғаноператор MACRO және таңба өрісіндегі макроанықтаманың аты мен операндтар өрісіндегі формалдық параметрлер кіреді. Формалдық параметрлер тізімінде макроанықтаманы әр кезек шақырған сайын өзгертіп тұруға болатын бірнеше параметрлер көрсетіледі, яғни [1_параметр[, 2_параметр[,...]. Мұндай параметрлер тізбегінің болуы міндетті емес.

· Макроанықтаманың денесі. Ассемблердің макроанықтама орындауға тиісті іс-әрекеттерді білдіретін операторлар (командалар мен жалғанопера­тор­лар) тізбегі.

· Соңы (аяқтама) – жалғаноператор ENDM. Макроанықтаманың соңын білдіреді.

Мәселен, берілген регистрді тазалау макроанықтамасы :

CLR_R MACRO REG

XOR REG,REG

ENDM

Егер макроанықтаманың ішінде тамғалар бар болатын болса, онда осындай макроанықтамасы бар макрокоманда бірнеше рет қайталап шақырылған жағдайда программада бір аталым (іdentіfіer) бірнеше рет анықталын болады (бұл жағдай қатеге әкеледі). Қате болмас үшін LOCAL директивасы пайдаланылады. Бұл директива бірден макроанықтаманың бастамасынан кейін орналасуы керек. Оның синтаксисі:

LOCAL аталым_тізімі

Макроанықтаманы программада орналастырудың үш варианты бар:

- Программа мәтінінің бас жағында (кода және деректер сегментінің алдында). Бұл вариантты тек егер макроанықтама осы программаның ішінде ғана пайдаланатын болса ғана пайдалануға болады;

- Бөлек файлда. Екінші вариант бір мәселеге байланысты бірнеше программамен жұмыс істеген кезде қолданылады. Бұл вариант кезінде бөлек файлда орналасқан макрокомандаларға бір нақты программадан қатынас құру үшін осы программа мәтінінің алдында ІNCLUDE директивасын жазу керек. Директиваның пішімі: ІNCLUDE файл_аты;

- Макрокітапханада. Көп программаларда қолдануға болатын әмбебап макроанықтамаларды макрокітапханаға жазып қойған жөн. Оның ішіндегі макроанықтамаларды ІNCLUDE директивасы арқылы белсенділеуге болады.

Екінші және үшінші тәсілдердің кемшілігі: ІNCLUDE директивасын қолданған кезде программаның бастапқы мәтініне файлдағы және макрокітапханадағы барлық макроанықтамалар қосылады. Мұндай жағдайды PURGE директивасы арқылы шешуге болады: PURGE директивасында операнд ретінде программаның мәтініне қосудың қажеттігі жоқ макрокоман­далардың аттары үтір арқылы жазылып көрсетіледі. Мысалы, егер MAC_LІB макрокітапханасын шақырған кезде оның MAC2, MAC7 және MAC9 макрокомандалары керек болсама, онда

ІNCLUDE MAC_LІB.INC

PURGE MAC2, MAC7, MAC9

Макроанықтама процедураға (ішпрограммаға) ұқсайды, бірақ бірнеше ерекшеліктері бар. Ұқсастығы: екеуін де алғашында қай жерде болсада бір рет сипаттау керек, ал содан кейін қажет болған жағдайда олар белгілі бір тәсілмен шақырылып алынады. Айырмашылықтары:

· макрокоманда шақырылған сайын оның макрокеңейту түріндегі мәтіні программаға қайта-қайта қосыла береді. Сөйтіп, Ассемблер әрбір макроманданы командалар жиынтығымен ауыстырады және программа жұмыс істегенде макроанықтама командасын процессор тікелей (басқару тізгінін ауыстырмай) орындайды. Ал процедураның командалары программада бір кезек көрсетіледі және керек жағдайда CALL операторы арқылы жадыдын шақырылып, басқару тізгіні осы процедураға беріледі, процедуоа орындалып біткен соң оның RET командасының көмегімен басқару тізгіні қайтадан негізгі программаға беріледі;

· макроанықтаманы пайдаланып жазылған программа процедураны пайдаланып жазылған программаға қарағанда тез жұмыс істейді. Себебі, процедурадағы сияқты оны шақыру және жұмысы аяқталған соң одан қайтып келу операциялары жоқ;

· әрбір макрокоманда командалар тізбегімен ауыстырылғандықтан макроанықтамаларды пайдаланған кезде программаның объектік файл­дарының мөлшері ұлғаяды. Бұл оның процедуралармен салыстыр­ған­дағы кемшілігі болып табылады;

· макроанықтама макрогенерация үрдісі кезінде нақта параметрлер жиынына байланысты өзгеруі мүмкін (процедураның мәтіні өзгермейді).

Программаның керекті жерінде макроанықтаманы пайдалану үшін ол макрокоманданың көмегімен белсенділендірілуі керек. Макрокоман­даны шақыру синтаксисі:

МАКРОКОМАНДАНЫҢ_АТЫ [нақты_параметрлердің_тізімі]

Аудармалаудың 1-фазасы кезінде макроассемблер макрокоманданы макроанықтаманың командалар тізбегімен ауыстырып кетеді. Осындай ауыстыру үрдісі макрогенерация деп аталады, ал осы үрдістің нәтижесі макрокеңею болып табылады. Әдетте макрокоманданы шақырған кезде нақты_параметрлердің_тізімі көрсетілетін болғандықтан макроанық­тама­ның формал­дық параметрлері осы макрокомандада көрсетілген нақты параметрлермен ауыстырылады. Мәселен, егер программада CLEAR_R макрокомандасында нақты параметр ретінде AX регистрі көрсетілсе, онда макрогенерациялаудың нәтижесінде XOR AX,AX командасы алынады. Сөйтіп таза ассемблер програмасы орындалғанда AX регистрі тазаланатын болады.


Поделиться:

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





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