КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Макрокомандалар және макроанықтамаларАссемблер тілінде жазылған программаның басылмасын (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 регистрі тазаланатын болады.
|