Аппараттық және бағдарламалық қамтамасыз етуді орнату

Ассемблер тілінің негізгі компоненттері және командалар құрылымы. Ассемблер тілінің командалары (дәріс)

Тақырып 1.4 Ассемблер мнемотехникасы. Команда құрылымы және пішімдері. Адрестің түрлері. Микропроцессордың нұсқаулар жинағы

Жоспар:

1 Ассамблея тілі. Негізгі ұғымдар

2 Ассемблер тілінің символдары

3 Ассемблер операторларының түрлері

4 Ассамблея директивалары

5 Процессордың нұсқаулар жинағы

1 Iассемблер тілі. Негізгі ұғымдар

ассемблер тілімашина тілінің символдық көрінісі болып табылады. Ең төменгі, аппараттық деңгейде машинадағы барлық процестер тек машина тілінің командаларымен (нұсқауларымен) басқарылады. Бұдан белгілі болғандай, жалпы атау болғанымен, компьютердің әр түрі үшін ассемблер тілі әртүрлі.

Ассемблер тілінің бағдарламасы деп аталатын жады блоктарының жинағы жады сегменттері.Бағдарлама осы блок-сегменттердің бір немесе бірнешеуінен тұруы мүмкін. Әрбір сегментте тіл сөйлемдерінің жинағы бар, олардың әрқайсысы бағдарлама кодының жеке жолын алады.

Ассамблея мәлімдемелері төрт түрге бөлінеді:

1) командалар немесе нұсқаулар машина командаларының символдық аналогтары болып табылады. Трансляция процесі кезінде құрастыру нұсқаулары микропроцессорлық командалар жиынының сәйкес командаларына түрлендіріледі;

2) макростар -хабар мәтінінің белгілі бір түрде ресімделетін сөйлемдері эфир кезінде басқа сөйлемдермен ауыстырылады;

3) директивалар,бұл ассемблер аудармашысына кейбір әрекеттерді орындауға арналған нұсқаулар. Директивалар машинаны көрсетуде ұқсастықтары жоқ;

4) түсініктеме жолдары , кез келген таңбаларды, соның ішінде орыс алфавитінің әріптерін қамтитын. Түсініктемелерді аудармашы елемейді.

­ Құрастыру бағдарламасының құрылымы. ассемблер синтаксисі.

Бағдарламаны құрайтын сөйлемдер командаға, макросқа, директиваға немесе түсініктемеге сәйкес келетін синтаксистік құрылым болуы мүмкін. Ассемблер аудармашы оларды тану үшін олар белгілі бір синтаксистік ережелерге сәйкес құрылуы керек. Ол үшін грамматика ережелері сияқты тіл синтаксисінің формальды сипаттамасын қолданған дұрыс. Ең көп таралған жолдар ұқсас сипаттамабағдарламалау тілі - синтаксистік диаграммаларЖәне Бэкус-Наурдың кеңейтілген түрлері.Үшін практикалық қолдануыңғайлырақ синтаксистік диаграммалар.Мысалы, ассемблер тілінің операторларының синтаксисін келесі 10, 11, 12 суреттерде көрсетілген синтаксистік диаграммалар арқылы сипаттауға болады.

10-сурет – Құрастыру сөйлем пішімі


­ 11-сурет – Директивалар пішімі

­ 12-сурет – Командалар мен макростар пішімі

Бұл сызбалар бойынша:

­ белгі атауы- идентификатор, оның мәні ол белгілейтін бағдарламаның бастапқы кодының сөйлемінің бірінші байтының адресі болып табылады;

­ аты -осы директиваны аттас басқа директивалардан ерекшелендіретін идентификатор. Ассемблер белгілі бір директиваны өңдеу нәтижесінде бұл атауға белгілі бір сипаттамалар берілуі мүмкін;

­ операция коды (COP) және директивасы - бұл сәйкес машина нұсқауы, макронұсқау немесе компилятор директивасына арналған мнемоникалық белгілер;

­ операндтар -әрекеттер орындалатын нысандарды білдіретін команданың, макростың немесе ассемблер директивасының бөліктері. Ассемблер операндтары сандық және мәтіндік тұрақты мәндері бар өрнектермен, айнымалы белгілермен және оператор белгілерін және кейбір сақталған сөздерді қолданатын идентификаторлармен сипатталады.

Синтаксистік диаграммалар көмектеседі табыңыз, содан кейін диаграмманың кірісінен (сол жақта) шығысына (оң жақта) дейінгі жолды кесіңіз. Ондай жол бар болса, сөйлем немесе құрылыс синтаксистік тұрғыдан дұрыс болады. Егер мұндай жол жоқ болса, онда компилятор бұл құрылысты қабылдамайды.

­ 2 Ассемблер тілінің таңбалары

Бағдарлама мәтінін жазу кезінде рұқсат етілген символдар:

1) барлық латын әріптері: А-З,а-з. Бұл жағдайда бас және кіші әріптер баламалы болып саналады;

2) бастап сандар 0 бұрын 9 ;

3) белгілер ? , @ , $ , _ , & ;

4) бөлгіштер , . () < > { } + / * % ! " " ? = # ^ .

Құрастырушы сөйлемдер -ден жасалады жетондар, бұл аудармашы үшін мағынасы бар жарамды тілдік таңбалардың синтаксистік тұрғыдан ажырамас тізбегі.

жетондармыналар:

1) идентификаторлар - операциялық кодтар, айнымалы атаулар және белгі атаулары сияқты бағдарлама нысандарын белгілеу үшін қолданылатын жарамды таңбалар тізбегі. Идентификаторларды жазу ережесі келесідей: идентификатор бір немесе бірнеше таңбадан тұруы мүмкін;

2) символдық жолдар - жалғыз немесе қос тырнақшаға алынған таңбалар тізбегі;

3) келесі санау жүйелерінің біріндегі бүтін сандар : екілік, ондық, он алтылық. Ассемблер бағдарламаларында сандарды жазу кезінде сәйкестендіру белгілі бір ережелер бойынша жүзеге асырылады:

4) ондық сандар оларды сәйкестендіру үшін ешқандай қосымша белгілерді қажет етпейді, мысалы, 25 немесе 139. Бағдарламаның бастапқы кодында сәйкестендіру үшін екілік сандаролардың құрамына кіретін нөлдер мен бірліктерді жазғаннан кейін латын әрпін қою керек « б”, мысалы 10010101 б.

5) он алтылық сандардың жазуларында көбірек шарттылық бар:

Біріншіден, олар сандардан тұрады. 0...9 , латын әліпбиінің кіші және бас әріптері а,б, в,г,e,fнемесе А,Б,C,D,Е,Ф.

Екіншіден, аудармашы он алтылық сандарды 0 ... 9 цифрларынан (мысалы, 190845) тұруы және латын әліпбиінің әрпінен бастау алуына байланысты (мысалы, ef15). Берілген лексема ондық сан немесе идентификатор емес екенін аудармашыға «түсіндіру» үшін программист он алтылық санды арнайы бөлуі керек. Ол үшін он алтылық санды құрайтын он алтылық цифрлар тізбегінің соңына латын әрпін жазыңыз. h«. Бұл міндетті шарт. Егер он алтылық сан әріптен басталса, оның алдында алдыңғы нөл қойылады: 0 ef15 h.

Әрбір дерлік сөйлемде қандай да бір іс-әрекет орындалатын немесе оның көмегімен объектінің сипаттамасы бар. Бұл объектілер деп аталады операндтар. Оларды келесідей анықтауға болады: операндтар- бұл нұсқаулар немесе директивалар әсер ететін объектілер (кейбір мәндер, регистрлер немесе жад ұяшықтары) немесе бұл нұсқаулар немесе директивалар әрекетін анықтайтын немесе нақтылайтын объектілер.

Операндтардың келесі классификациясын жүргізуге болады:

­ тұрақты немесе жедел операндтар;

­ адрестік операндтар;

­ жылжытылған операндтар;

мекенжай есептегіші;

­ регистрлік операнд;

­ базалық және индекстік операндтар;

­ құрылымдық операндтар;

жазбалар.

Операндтар – операция орындалатын объектілерді белгілейтін машиналық команданың бір бөлігін құрайтын элементар құрамдас бөліктер. Неғұрлым жалпы жағдайда операндтар деп аталатын күрделі құрылымдардың құрамдас бөліктері ретінде қосылуы мүмкін өрнектер.

Өрнектер біртұтас ретінде қарастырылатын операндтар мен операторлардың комбинациясы болып табылады. Өрнекті бағалау нәтижесі кейбір жад ұяшығының адресі немесе кейбір тұрақты (абсолюттік) мән болуы мүмкін.

­ 3 Ассемблер операторларының түрлері

Мүмкін түрлерін тізіп көрейік ассемблер мәлімдемелеріассемблер тіркестерін құрудың синтаксистік ережелері:

­ арифметикалық операторлар;

­ ауысым операторлары;

­ салыстыру операторлары;

­ логикалық операторлар;

­ индекс операторы;

­ типті қайта анықтау операторы;

­ сегментті қайта анықтау операторы;

­ құрылым типін атау операторы;

­ өрнек адресінің сегменттік компонентін алу операторы;

­ өрнектің ығысуын алу операторы.

1 Ассамблея директивалары

­ Ассемблер директивалары:

1) Сегменттеу директивалары. Алдыңғы талқылау барысында біз ассемблер тіліндегі бағдарламада нұсқаулар мен операндтарды жазудың барлық негізгі ережелерін білдік. Транслятор оларды өңдей алатындай және микропроцессор оларды орындай алатындай командалар тізбегін қалай дұрыс пішімдеу керектігі туралы мәселе ашық күйінде қалады.

Микропроцессордың архитектурасын қарастыра отырып, біз оның алты сегменттік регистрлері бар екенін білдік, олар арқылы ол бір уақытта жұмыс істей алады:

­ бір код сегментімен;

­ бір стек сегментімен;

­ бір деректер сегментімен;

­ үш қосымша деректер сегментімен.

Физикалық тұрғыдан сегмент – адрестері сәйкес сегмент регистріндегі мәнге қатысты есептелетін командалар және (немесе) деректер алып жатқан жад аймағы. Ассемблердегі сегменттің синтаксистік сипаттамасы 13-суретте көрсетілген конструкция:


­ 13-сурет – Ассемблердегі сегменттің синтаксистік сипаттамасы

Сегменттің функционалдығы бағдарламаны код блоктарына, деректерге және стектерге бөлуден гөрі біршама кеңірек екенін атап өткен жөн. Сегменттеу байланысты неғұрлым жалпы механизмінің бөлігі болып табылады модульдік бағдарламалау түсінігі.Ол компилятор құрған объект модульдерінің дизайнын біріздендіруді, соның ішінде әртүрлі бағдарламалау тілдеріндегілерді қамтиды. Бұл әртүрлі тілдерде жазылған бағдарламаларды біріктіруге мүмкіндік береді. Ол жүзеге асыруға арналған әртүрлі опциялармұндай біріктіру және SEGMENT директивасындағы операндтар арналған.

2) Листингтік бақылау директивалары. Листингтік бақылау директивалары келесі топтарға бөлінеді:

­ жалпы листингтік бақылау директивалары;

­ файлдар тізімін қосу үшін шығыс директивалары;

­ шартты құрастыру блоктары үшін шығыс директивалары;

­ макростар листингіне шығару директивалары;

­ листингте айқас сілтемелер туралы ақпаратты көрсетуге арналған директивалар;

­ листинг форматын өзгерту директивалары.

2 Процессордың нұсқаулар жинағы

Процессордың нұсқаулар жинағы 14-суретте көрсетілген.

Командалардың негізгі топтарын қарастырыңыз.

­ 14-сурет – Құрастыру нұсқауларының классификациясы

Командалар мыналар:

1 Деректерді тасымалдау командалары. Бұл нұсқаулар кез келген процессордың нұсқаулар жинағында өте маңызды орын алады. Олар келесі маңызды функцияларды орындайды:

­ процессордың ішкі регистрлерінің мазмұнын жадта сақтау;

­ мазмұнды бір жад аймағынан екіншісіне көшіру;

­ енгізу/шығару құрылғыларына жазу және енгізу/шығару құрылғыларынан оқу.

Кейбір процессорларда бұл функциялардың барлығы бір команда арқылы орындалады MOV (байт тасымалдау үшін - MOVB ) бірақ операндтарды шешудің әртүрлі әдістерімен.

Нұсқаудан басқа басқа процессорларда MOV тізімделген функцияларды орындау үшін тағы бірнеше командалар бар. Мәліметтерді беру командаларына ақпарат алмасу командалары да кіреді (олардың белгіленуі сөзге негізделгенАйырбастау ). Ішкі регистрлер арасында, бір регистрдің екі жартысы арасында ақпарат алмасуды қамтамасыз ету мүмкін болуы мүмкін (СВАП ) немесе регистр мен жад орны арасында.

2 Арифметикалық командалар. Арифметикалық нұсқаулар операнд кодтарын сандық екілік немесе BCD кодтары ретінде қарастырады. Бұл командаларды бес негізгі топқа бөлуге болады:

­ тұрақты нүктесі бар амалдар (қосу, алу, көбейту, бөлу) командалары;

­ өзгермелі нүкте нұсқаулары (қосу, алу, көбейту, бөлу);

­ тазалау командалары;

­ арттыру және азайту командалары;

­ салыстыру командасы.

3 Бекітілген нүктелі нұсқаулар процессор регистрлеріндегі немесе жадтағы кодтарда қалыпты екілік кодтардағыдай жұмыс істейді. Жылжымалы нүкте (нүкте) операцияларының нұсқаулары көрсеткіші және мантиссасы бар сандарды көрсету пішімін пайдаланады (әдетте бұл сандар екі дәйекті жад орнын алады). Заманауи қуатты процессорларда өзгермелі нүктелер жиынтығы тек төрт арифметикалық амалмен шектелмейді, сонымен қатар басқа да көптеген күрделі нұсқауларды қамтиды, мысалы, тригонометриялық функцияларды, логарифмдік функцияларды есептеу, сонымен қатар күрделі функциялардыбыс пен кескінді өңдеу үшін қажет.

4 Тазалау пәрмендері регистрге немесе жад ұяшығына нөлдік код жазуға арналған. Бұл пәрмендерді нөлдік кодты тасымалдау нұсқауларымен ауыстыруға болады, бірақ арнайы анық нұсқаулар әдетте тасымалдау нұсқауларынан жылдамырақ.

5 Көбейту (бірге арттыру) және азайту командалары

(бірге қысқарту) да өте қолайлы. Оларды негізінен бір қосу немесе бір алу нұсқауымен ауыстыруға болады, бірақ арттыру және азайту қосу және азайтудан жылдамырақ. Бұл нұсқаулар шығыс операнды болып табылатын бір кіріс операнды қажет етеді.

6 Салыстыру нұсқауы екі кіріс операндтарын салыстыруға арналған. Шындығында, ол осы екі операндтың айырмашылығын есептейді, бірақ шығыс операндын құрмайды, тек осы азайтудың нәтижесіне негізделген процессордың күй регистріндегі биттерді өзгертеді. Салыстыру нұсқауынан кейінгі нұсқау (әдетте көшу нұсқауы) процессордың күй регистріндегі биттерді талдайды және олардың мәндеріне негізделген әрекеттерді орындайды. Кейбір процессорлар жадтағы операндтардың екі тізбегін салыстыру үшін нұсқаулар береді.

7 Логикалық командалар. Логикалық командалар операндтар бойынша логикалық (разрядтық) операцияларды орындайды, яғни операнд кодтарын жеке сан ретінде емес, жеке разрядтар жиыны ретінде қарастырады. Осымен олар арифметикалық командалардан ерекшеленеді. Логикалық командалар келесі негізгі операцияларды орындайды:

­ логикалық ЖӘНЕ, логикалық НЕМЕСЕ, модуль 2 қосу (XOR);

­ логикалық, арифметикалық және циклдік ығысулар;

­ биттерді және операндтарды тексеру;

­ процессор күй регистрінің биттерін (жалауларын) орнату және тазалау ( PSW).

Логикалық нұсқаулар екі кіріс операндынан негізгі логикалық функцияларды биттік есептеуге мүмкіндік береді. Сонымен қатар, ЖӘНЕ операциясы көрсетілген биттерді мәжбүрлеп тазарту үшін қолданылады (операндтардың бірі ретінде бұл маска кодын пайдаланады, онда тазартуды қажет ететін разрядтар нөлге тең). НЕМЕСЕ операциясы көрсетілген биттерді орнатуды мәжбүрлеу үшін қолданылады (операндтардың бірі ретінде, біреуге орнатуды қажет ететін разрядтар бірге тең болатын маска коды пайдаланылады). XOR операциясы берілген биттерді инверттеу үшін қолданылады (операндтардың бірі ретінде инверттелетін разрядтар біреуге орнатылған маска коды пайдаланылады). Нұсқаулар екі кіріс операндын талап етеді және бір шығыс операнды құрайды.

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

9 Секіру пәрмендері. Jump командалары барлық түрдегі циклдарды, тармақтарды, ішкі бағдарлама шақыруларын және т.б. ұйымдастыруға арналған, яғни олар программаның ретті ағынын бұзады. Бұл нұсқаулар командаларды санауыш регистріне жаңа мән жазады және осылайша процессордың келесі нұсқауға емес, бағдарлама жадындағы кез келген басқа нұсқауға өтуіне себеп болады. Кейбір секіру пәрмендері секіру жасалған нүктеге оралуға мүмкіндік береді, ал басқалары жоқ. Егер қайтару қамтамасыз етілсе, онда процессордың ағымдағы параметрлері стекте сақталады. Егер қайтару қамтамасыз етілмесе, онда ағымдағы процессор параметрлері сақталмайды.

Артқы жолсыз өту пәрмендері екі топқа бөлінеді:

­ шартсыз секіру командалары;

­ шартты секіру нұсқаулары.

Бұл командалар сөздерді пайдаланадыТармақ (бұтақ) және секіру (секіру).

Шартсыз өту нұсқаулары қандай болса да жаңа мекен-жайға өтуді тудырады. Олар көрсетілген ығысу мәніне (алға немесе артқа) немесе көрсетілген жад мекенжайына өтуді тудыруы мүмкін. Ауыстыру мәні немесе жаңа мекенжай мәні кіріс операнды ретінде көрсетіледі.

Шартты өту командалары әрқашан секіруді тудырмайды, тек көрсетілген шарттар орындалғанда ғана. Мұндай шарттар әдетте процессордың күй регистріндегі жалаушалардың мәндері болып табылады ( PSW ). Яғни, өту шарты жалаушалардың мәндерін өзгертетін алдыңғы әрекеттің нәтижесі болып табылады. Барлығы 4-тен 16-ға дейін мұндай секіру жағдайлары болуы мүмкін.Шартты өту командаларының кейбір мысалдары:

­ нөлге тең болса секіру;

­ нөл емес болса секіру;

­ толып кетсе секіру;

­ толып кетпесе секіру;

­ нөлден үлкен болса секіру;

­ нөлден аз немесе тең болса, секіріңіз.

Егер ауысу шарты орындалса, онда жаңа мән команда санауыш регистріне жүктеледі. Егер секіру шарты орындалмаса, командалардың есептегіші жай ғана ұлғайтылады, ал процессор келесі нұсқауды ретімен таңдап, орындайды.

Тармақ шарттарын тексеру үшін арнайы шартты өту нұсқауының (немесе тіпті бірнеше шартты өту нұсқауларының) алдында болатын салыстыру нұсқауы (CMP) пайдаланылады. Бірақ жалаушаларды деректерді беру пәрмені, кез келген арифметикалық немесе логикалық команда сияқты кез келген басқа пәрмен арқылы орнатуға болады. Секіру командаларының өзі жалаушаларды өзгертпейтінін ескеріңіз, бұл жай ғана бірнеше секіру пәрмендерін бірінен соң бірін қоюға мүмкіндік береді.

Қайтарумен өту командаларының ішінде үзіліс командалары ерекше орын алады. Бұл нұсқаулар кіріс операнды ретінде үзу нөмірін (векторлық мекенжай) қажет етеді.

Шығару:

Ассемблер тілі машина тілінің символдық көрінісі болып табылады. Әрбір компьютер түрі үшін ассемблер тілі әртүрлі. Ассемблер тілінің бағдарламасы жад сегменттері деп аталатын жады блоктарының жинағы. Әрбір сегментте тіл сөйлемдерінің жинағы бар, олардың әрқайсысы бағдарлама кодының жеке жолын алады. Құрастыру мәлімдемелері төрт түрлі болады: командалар немесе нұсқаулар, макростар, директивалар, түсініктеме жолдары.

Бағдарлама мәтінін жазу кезінде жарамды таңбалардың барлығы латын әріптері болып табылады: А-З,а-з. Бұл жағдайда бас және кіші әріптер баламалы болып саналады; бастап сандар 0 бұрын 9 ; белгілері ? , @ , $ , _ , & ; бөлгіштер , . () < > { } + / * % ! " " ? = # ^ .

Ассемблер мәлімдемелерінің келесі түрлері және ассемблер өрнектерін құруға арналған синтаксистік ережелер қолданылады. арифметикалық операторлар, ауыстыру операторлары, салыстыру операторлары, логикалық операторлар, индекс операторы, типті қайта анықтау операторы, сегментті қайта анықтау операторы, құрылым типін атау операторы, өрнек адресінің сегментінің компонентін алу операторы, өрнектің орнын ауыстыру операторы.

Командалар жүйесі 8 негізгі топқа бөлінеді.

­ Тест сұрақтары:

1 Ассемблер тілі дегеніміз не?

2 Ассемблерде командаларды жазу үшін қандай белгілерді қолдануға болады?

3 Белгілер дегеніміз не және олардың мақсаты қандай?

4 Құрастыру нұсқауларының құрылымын түсіндіріңіз.

5 Ассемблер операторларының 4 түрін көрсетіңіз.

Құрылғы аппараттық деңгейде адам командаларын орындау үшін «нөлдер мен бірліктер» тілінде белгілі бір әрекеттер тізбегін орнату қажет. Ассемблер бұл мәселеде көмекші болады. Бұл командаларды машина тіліне аударумен жұмыс істейтін утилита. Дегенмен, бағдарлама жазу өте көп уақытты қажет ететін және күрделі процесс. Бұл тіл оңай және қарапайым әрекеттерді жасауға арналмаған. Үстінде осы сәтСіз қолданатын кез келген бағдарламалау тілі (Assembler тамаша жұмыс істейді) аппараттық құралдың жұмысына үлкен әсер ететін арнайы тиімді тапсырмаларды жазуға мүмкіндік береді. Негізгі мақсат - микро-нұсқаулар мен шағын кодтарды жасау. Бұл тіл, мысалы, Паскаль немесе Си тілдеріне қарағанда көбірек мүмкіндіктерді береді.

Ассемблер тілдеріне қысқаша сипаттама

Барлық бағдарламалау тілдері деңгейлерге бөлінеді: төмен және жоғары. Assembler «семьясының» синтаксистік жүйесінің кез келгені ең кең таралған және қазіргі тілдердің кейбір артықшылықтарын бірден біріктіретіндігімен ерекшеленеді. Олар компьютерлік жүйені толық пайдалана алатындығымен де басқалармен байланысты.

Компилятордың айырықша ерекшелігі - оны пайдаланудың қарапайымдылығы. Бұл тек жоғары деңгейлермен жұмыс істейтіндерден ерекшеленеді. Кез келген осындай бағдарламалау тілі ескерілсе, Assembler екі есе жылдам және жақсы жұмыс істейді. Оған жазу үшін жеңіл бағдарламакөп уақыт алмайды.

Тілдің құрылымы туралы қысқаша

Жалпы тілдің жұмысы мен құрылымы туралы айтатын болсақ, оның командалары процессордың командаларымен толық сәйкес келеді деп нақты айта аламыз. Яғни, ассемблер адамға жазуға ең қолайлы мнемоникалық кодтарды пайдаланады.

Басқа бағдарламалау тілдерінен айырмашылығы, Assembler жад ұяшықтарын жазу үшін адрестердің орнына арнайы белгілерді пайдаланады. Олар кодты орындау процесімен директивалар деп аталатын түрге аударылады. Бұл процессордың жұмысына әсер етпейтін салыстырмалы адрестер (олар машина тіліне аударылмаған), бірақ бағдарламалау ортасының өзі тану үшін қажет.

Әрбір процессордың өз желісі бар.Бұл жағдайда кез келген процесс дұрыс болады, оның ішінде аударылған.

Ассамблея тілінде бірнеше синтаксис бар, олар мақалада талқыланады.

Тіл мамандары

Ассемблер тілінің ең маңызды және ыңғайлы бейімделуі оны процессорға арналған кез келген бағдарламаны жазу үшін қолдануға болады, ол өте ықшам болады. Егер код үлкен болса, онда кейбір процестер қайта бағытталады Жедел Жадтау Құрылғысы. Сонымен қатар, олардың барлығы, әрине, білікті программист басқармаса, өте жылдам және сәтсіздіктерсіз жұмыс істейді.

Драйверлер, операциялық жүйелер, BIOS, компиляторлар, интерпретаторлар және т.б. барлығы ассемблер тіліндегі бағдарламалар.

Машинадан машинаға ауысатын бөлшектеуішті пайдаланған кезде, ол үшін түсініктемелер болмаса да, осы немесе басқа жүйелік тапсырманың қалай жұмыс істейтінін оңай түсінуге болады. Дегенмен, бұл бағдарламалар жеңіл болған жағдайда ғана мүмкін болады. Өкінішке орай, тривиальды емес кодтарды түсіну өте қиын.

Тілдің кемшіліктері

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

Тіпті ең көп жазу үшін қарапайым бағдарлама, бағдарламашы білікті болуы керек, ал оның білім деңгейі жеткілікті жоғары. Орташа маман, өкінішке орай, жиі нашар кодтарды жазады.

Егер бағдарлама жасалып жатқан платформа жаңартылса, онда барлық командалар қолмен қайта жазылуы керек - бұл тілдің өзі үшін қажет. Ассемблер процестердің денсаулығын автоматты реттеу және кез келген элементтерді ауыстыру функциясын қолдамайды.

Тілдік командалар

Жоғарыда айтылғандай, әрбір процессордың өз нұсқаулары бар. Кез келген тип бойынша танылатын қарапайым элементтер келесі кодтар болып табылады:


Директиваларды қолдану

Ең төменгі деңгейдегі микроконтроллерлерді тілде бағдарламалау (Assembler бұған мүмкіндік береді және тамаша жұмыс істейді) көп жағдайда сәтті аяқталады. Ресурсы шектеулі процессорларды қолданған дұрыс. 32 биттік технология үшін берілген тілтамаша жарасады. Директиваларды кодтарда жиі көруге болады. Бұл не? Және ол не үшін қолданылады?

Бастау үшін директивалар машина тіліне аударылмағанын атап өту керек. Олар компилятор қалай жұмыс істейтінін басқарады. Командалардан айырмашылығы, әртүрлі функцияларға ие бұл параметрлер әртүрлі процессорларға байланысты емес, басқа аудармашыға байланысты ерекшеленеді. Негізгі директивалар мыналарды қамтиды:


Есімнің шығу тарихы

«Ассемблер» тілі қалай аталады? Біз деректерді шифрлайтын аудармашы мен компилятор туралы айтып отырмыз. Ағылшын тілінен Ассемблер ассемблер дегеннен басқа ештеңені білдірмейді. Бағдарлама қолмен құрастырылмаған, автоматты құрылым қолданылған. Сонымен қатар, қазіргі уақытта пайдаланушылар мен мамандар терминдер арасындағы айырмашылықты жойып қойған. Көбінесе ассемблерді бағдарламалау тілдері деп атайды, бірақ ол жай ғана утилита.

Жалпы қабылданған ұжымдық атауға байланысты кейбір адамдарда бір ғана төмен деңгейлі тіл (немесе ол үшін стандартты нормалар) бар деген қате болжам бар. Бағдарламашы қандай құрылым туралы айтып жатқанын түсіну үшін осы немесе басқа ассемблер тілі қай платформа үшін қолданылатынын нақтылау қажет.

макроқұралдар

Салыстырмалы түрде жақында пайда болған ассемблер тілдерінде макро мүмкіндіктері бар. Олар бағдарламаны жазуды да, оны іске қосуды да жеңілдетеді. Олардың болуына байланысты аудармашы жазылған кодты бірнеше есе жылдам орындайды. Шартты таңдауды жасау кезінде сіз командалардың үлкен блогын жаза аласыз, бірақ макростарды пайдалану оңайырақ. Олар шарт орындалған немесе орындалмаған жағдайда әрекеттер арасында жылдам ауысуға мүмкіндік береді.

Макрос тілінің директиваларын пайдаланған кезде бағдарламашы Assembler макростарын алады. Кейде оны кеңінен қолдануға болады, ал кейде оның функционалдығы бір командаға дейін қысқарады. Олардың кодта болуы онымен жұмыс істеуді жеңілдетеді, оны түсінікті және көрнекі етеді. Дегенмен, сіз әлі де сақ болуыңыз керек - кейбір жағдайларда макростар, керісінше, жағдайды нашарлатады.

Ассемблер тілінің нұсқау құрылымы Машиналық командалар деңгейінде бағдарламалау – компьютерлік бағдарламалау мүмкін болатын ең төменгі деңгей. Машиналық нұсқаулар жүйесі машинаның аппараттық құралдарына нұсқаулар беру арқылы қажетті әрекеттерді орындау үшін жеткілікті болуы керек. Әрбір машина нұсқауы екі бөліктен тұрады: «не істеу керектігін» анықтайтын операциялық бөлік және өңдеу объектілерін анықтайтын операнд, яғни «не істеу керек». Ассемблер тілінде жазылған микропроцессордың машиналық нұсқауы келесі пішінге ие бір жолды құрайды: белгі нұсқаулығы/директивалық операнд(тар) ; түсініктемелер Белгі, пәрмен/директива және операнд кемінде бір бос орын немесе қойынды таңбасымен бөлінген. Нұсқау операндтары үтірмен бөлінген.

Ассемблер тілінің нұсқаулығының құрылымы Ассемблер тілінің нұсқауы компиляторға микропроцессор қандай әрекетті орындау керектігін айтады. Ассемблер директивалары – жинақтау процесіне немесе шығыс файлының қасиеттеріне әсер ететін бағдарлама мәтінінде көрсетілген параметрлер. Операнд деректердің бастапқы мәнін (деректер сегментінде) немесе нұсқаулықпен әрекет ететін элементтерді (код сегментінде) көрсетеді. Нұсқау бір немесе екі операндты болуы мүмкін немесе операндсыз болуы мүмкін. Операндтардың саны нұсқау коды арқылы жасырын түрде көрсетіледі. Егер пәрменді немесе директиваны келесі жолда жалғастыру қажет болса, онда кері қиғаш сызық қолданылады: "" . Әдепкі бойынша ассемблер командалар мен директивалардағы бас және кіші әріптерді ажыратпайды. Директивалар мен команда мысалдары Count db 1 ; Атауы, директивасы, бір операнд mov eax, 0 ; Команда, екі операнд

Идентификаторлар - айнымалы атаулар мен белгі атауларын белгілеу үшін қолданылатын жарамды таңбалар тізбегі. Идентификатор келесі таңбалардың бірінен немесе бірнешеуінен тұруы мүмкін: латын әліпбиінің барлық әріптері; 0-ден 9-ға дейінгі сандар; арнайы таңбалар: _, @, $, ? . Белгінің бірінші таңбасы ретінде нүктені пайдалануға болады. Сақталған ассемблер атауларын (директивалар, операторлар, пәрмен атаулары) идентификаторлар ретінде пайдалану мүмкін емес. Идентификатордың бірінші таңбасы әріп немесе арнайы таңба болуы керек. Идентификатордың максималды ұзындығы 255 таңбаны құрайды, бірақ аудармашы алғашқы 32 таңбаны қабылдайды, ал қалғандарын елемейді. Ассемблер директивасы жоқ жолда жазылған барлық белгілер қос нүктемен аяқталуы керек «:». Белгі, пәрмен (директива) және операнд жолдың кез келген нақты орнында басталуы қажет емес. Бағдарламаның оқуға ыңғайлы болуы үшін оларды бағанға жазу ұсынылады.

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

Түсініктемелер Бағдарламада түсініктемелерді пайдалану оның анықтығын жақсартады, әсіресе нұсқаулар жинағының мақсаты түсініксіз болған жағдайда. Түсініктемелер бастапқы модульдің кез келген жолында нүктелі үтірмен (;) басталады. Барлық таңбалар " оң жағында; ' жолдың соңына түсініктемелер беріледі. Түсініктемеде кез келген басып шығаруға болатын таңбалар болуы мүмкін, соның ішінде «бос орын». Түсініктеме бүкіл жолды қамтуы немесе сол жолдағы пәрменді орындауы мүмкін.

Ассемблер тілінің бағдарламасының құрылымы Ассемблер тілінің бағдарламасы модульдер деп аталатын бірнеше бөліктерден тұруы мүмкін, олардың әрқайсысы бір немесе бірнеше деректерді, стекті және код сегменттерін анықтай алады. Кез келген толық ассемблер тіліндегі бағдарлама оның орындалуы басталатын бір негізгі немесе негізгі модульді қамтуы керек. Модульде болуы мүмкін бағдарлама сегменттері, сәйкес директивалар арқылы жарияланған деректер мен стек сегменттері.

Жад үлгілері Сегменттерді жарияламас бұрын директива арқылы жад үлгісін көрсету керек. MODEL модификаторы memory_model, calling_convention, OS_type, stack_parameter Негізгі ассемблер тілінің жады үлгілері: жад үлгісі кодты адрестеу Деректерді адрестеу Операциялық жүйе коды және деректердің араласуы TINY MS-DOS ЖАҚЫНДА Жарамды SMALL NEAR MS-DOS, Windows жоқ ОРТА ҚЫЗЫҚ, Windows ЖАҚЫНДА MSDOS ЫҚЫМША ЖАҚЫНДА MS-DOS, Windows LAGE FAR MS-DOS жоқ, Windows жоқ HUGE FAR MS-DOS, Windows No NEAR Windows 2000, Windows XP, Windows Valid FLAT NEAR NT,

Жад үлгілері Шағын үлгі тек 16-биттік MS-DOS қолданбаларында жұмыс істейді. Бұл модельде барлық деректер мен код бір физикалық сегментте орналасады. Өлшем бағдарлама файлыбұл жағдайда 64 КБ аспайды. Шағын үлгі бір код сегментін және бір деректер сегментін қолдайды. Бұл үлгіні пайдалану кезінде деректер мен код жақын (жақын) ретінде адрестеледі. Орташа модель бірнеше код сегменттерін және бір деректер сегментін қолдайды, код сегменттеріндегі барлық сілтемелер әдепкі бойынша алыс деп саналады, ал деректер сегментіндегі сілтемелер жақын (жақын) болып табылады. Ықшам модель алыстағы деректерді (алыс) адрестеуді пайдаланатын бірнеше деректер сегменттерін және жақын маңдағы деректерді (жақын) адрестеуді пайдаланатын бір код сегментін қолдайды. Үлкен үлгі бірнеше код сегменттерін және бірнеше деректер сегменттерін қолдайды. Әдепкі бойынша, барлық код және деректер сілтемелері алыс деп саналады. Үлкен модель үлкен жады үлгісіне дерлік тең.

Жад үлгілері Жалпақ үлгі сегменттелмеген бағдарлама конфигурациясын болжайды және тек 32 биттік операциялық жүйелерде қолданылады. Бұл модель деректер мен код бірдей 32-бит сегментінде орналасқан шағын үлгіге ұқсас. Директиваға дейін жазық модельге арналған бағдарламаны әзірлеу. пәтер үлгісі директивалардың бірін орналастыруы керек: . 386, . 486, . 586 немесе. 686. Процессорды таңдау директивасын таңдау бағдарламаларды жазу кезінде қолжетімді командалар жиынын анықтайды. Процессорды таңдау директивасынан кейінгі p әрпі қорғалған жұмыс режимін білдіреді. Деректер мен кодты адрестеу жақын, барлық мекенжайлар мен көрсеткіштер 32 биттік.

жад үлгілері. MODEL модификаторы жад_моделі, шақыру_конвенциясы, OS_түрі, стек_параметрі Модификатор параметрі сегмент түрлерін анықтау үшін пайдаланылады және келесі мәндерді қабылдай алады: 16 пайдалану (таңдалған үлгінің сегменттері 16 разряд ретінде пайдаланылады) 32 пайдалану (таңдалған үлгінің сегменттері пайдаланылады) 32-бит ретінде). Calling_convention параметрі процедураны басқа тілдерден, соның ішінде жоғары деңгейлі тілдерден (C++, Pascal) шақыру кезінде параметрлерді беру жолын анықтау үшін қолданылады. Параметр келесі мәндерді қабылдай алады: C, BASIC, FORTRAN, PASCAL, SYSCALL, STDCALL.

жад үлгілері. MODEL модификаторы жад_моделі, шақыру_конвенциясы, OS_түрі, стек_параметрі OS_type параметрі әдепкі бойынша OS_DOS болып табылады және қазіргі уақытта осы параметр үшін жалғыз қолдау көрсетілетін мән болып табылады. stack_param параметрі келесіге орнатылған: NEARSTACK (SS регистрі DS-ке тең, деректер мен стек аймақтары бір физикалық сегментте орналасқан) FARSTACK (SS регистрі DS-ке тең емес, деректер мен стек аймақтары әртүрлі физикалық сегменттерде орналасқан). Әдепкі мән - NEARSTACK.

«Ештеңе жасамау» бағдарламасының мысалы. 686 P. МҮЛГІЛІК ТЕГІН, STDCALL. ДЕРЕКТЕР. CODE START: RET END START RET – микропроцессорлық команда. Бұл бағдарламаның дұрыс аяқталуын қамтамасыз етеді. Бағдарламаның қалған бөлігі аудармашының жұмысына байланысты. . 686 P - Pentium 6 (Pentium II) қорғалған режим командаларына рұқсат етілген. Бұл директива процессор үлгісін көрсету арқылы қолдау көрсетілетін ассемблер нұсқаулар жинағын таңдайды. . MODEL FLAT, stdcall – жадының жалпақ моделі. Бұл жад үлгісі Windows операциялық жүйесінде қолданылады. stdcall — конвенцияны қолдануға шақыратын процедура.

«Ештеңе жасамау» бағдарламасының мысалы. 686 P. МҮЛГІЛІК ТЕГІН, STDCALL. ДЕРЕКТЕР. КОД БАСТАУ: ҚАЙТА БАСТАУ. DATA – мәліметтерді қамтитын бағдарлама сегменті. Бұл бағдарлама стек пайдаланбайды, сондықтан сегментте. STACK жоқ. . КОД – кодты қамтитын программаның сегменті. БАСТАУ - белгі. END БАСТАУ – программаның соңы және компиляторға бағдарламаны START белгісінен бастау керектігі туралы хабарлама. Әрбір бағдарламаның соңын белгілейтін END директивасы болуы керек бастапқы кодбағдарламалар. END директивасына сәйкес келетін барлық жолдар еленбейді.END директивасынан кейінгі белгі компиляторға бағдарламаның орындалуы басталатын негізгі модульдің атын айтады. Бағдарламада бір модуль болса, END директивасынан кейінгі белгіні алып тастауға болады.

Ассемблер тілінің трансляторлары Аудармашы – бұл бағдарлама немесе техникалық құралдарБағдарламалау тілдерінің біріндегі бағдарламаны нысандық код деп аталатын мақсатты тілдегі бағдарламаға түрлендіретін. Қолдау көрсететін машиналық нұсқаулық мнемоникасынан басқа, әрбір аудармашыда көбінесе басқа ештеңемен үйлеспейтін өз директивалары мен макростары бар. Ассемблер тілінің аудармашыларының негізгі түрлері: MASM (Microsoft Assembler), TASM (Borland Turbo Assembler), FASM (Flat Assembler) - Томаш Гриштар (поляк) жазған еркін таратылатын көпжылдық ассемблер, NASM (Netwide Assembler) - а. Intel x архитектурасына арналған тегін ассемблер 86 ​​Саймон Тэтхэм Джулиан Холлмен бірге жасалған және оны қазір Source сайтындағы шағын әзірлеушілер тобы әзірлеуде. Forge. тор.

Src="https://present5.com/presentation/-29367016_63610977/image-15.jpg" alt="(!LANG:Microsoft-қа бағдарлама таратылуы визуалды студия 2005 1) Microsoft Visual Studio 2005 бағдарламасында File->New->Project және"> Program Translation мәзірін таңдау арқылы жобаны жасаңыз 1) File->New->Project мәзірін таңдап, жоба атын көрсету арқылы жоба жасаңыз (сәлем). .prj) және жобаны теріңіз: Win 32 Project. қосымша опциялар«Бос жобаны» көрсету үшін жоба шебері.

Src="https://present5.com/presentation/-29367016_63610977/image-16.jpg" alt="(!LANG:Microsoft Visual Studio 2005 бағдарламасындағы бағдарлама аудармасы 2) Жоба ағашында (Көру->Шешім Explorer) қосыңыз"> Трансляция программы в Microsoft Visual Studio 2005 2) В дереве проекта (View->Solution Explorer) добавить файл, в котором будет содержаться текст программы: Source. Files->Add->New. Item.!}

Microsoft Visual Studio 2005 бағдарламасындағы бағдарламаның аудармасы 3) Code C++ файл түрін таңдаңыз, бірақ кеңейтімі бар атауды көрсетіңіз. asm:

Microsoft Visual Studio 2005 бағдарламасындағы бағдарламаның аудармасы 5) Компилятор опцияларын орнату. Жоба файлы мәзірінде оң жақ түймешікті таңдаңыз Құрастыру ережелері…

Microsoft Visual Studio 2005 бағдарламасындағы бағдарламаның аудармасы және пайда болған терезеде Microsoft Macro Assembler таңдаңыз.

Microsoft Visual Studio 2005 бағдарламасындағы бағдарламаның аудармасы hello файлындағы оң жақ түймені басу арқылы тексеріңіз. Properties мәзірінен жоба ағашының asm параметрін таңдаңыз және General->Tool: Microsoft Macro Assembler параметрін орнатыңыз.

Src="https://present5.com/presentation/-29367016_63610977/image-22.jpg" alt="(!LANG:Microsoft Visual Studio 2005 бағдарламасындағы аударма 6) Build->Build hello.prj пәрменін таңдау арқылы файлды құрастырыңыз. ."> Трансляция программы в Microsoft Visual Studio 2005 6) Откомпилировать файл, выбрав Build->Build hello. prj. 7) Запустить программу, нажав F 5 или выбрав меню Debug->Start Debugging.!}

ОЖ бағдарламалау Windows бағдарламалау OC жүйесінде Windows API функцияларын (Application Program Interface, яғни интерфейс) пайдалануға негізделген. бағдарламалық қосымша). Олардың саны 2000-ға жетеді. Windows жүйесіне арналған бағдарлама негізінен осындай қоңыраулардан тұрады. -мен барлық өзара әрекеттесу сыртқы құрылғыларжәне операциялық жүйенің ресурстары, әдетте, осындай функциялар арқылы пайда болады. операция бөлмесі Windows жүйесіжалпақ жады үлгісін пайдаланады. Кез келген жад орнының мекенжайы бір 32-биттік регистрдің мазмұнымен анықталады. Windows үшін программалық құрылымдардың 3 түрі бар: диалогтық терезе (негізгі терезе диалог), консольдық немесе терезесіз құрылым, классикалық құрылым (терезе, фрейм).

Қоңырау Windows мүмкіндіктері API Анықтама файлында кез келген API функциясы function_name түрі ретінде көрсетіледі (FA 1, FA 2, FA 3) Түр – қайтарылатын мән түрі; FAX – формальды аргументтер тізімі олардың реті бойынша.Мысалы, int Message. Қорап (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Бұл функцияхабарламасы бар терезені және шығу түйме(лері) көрсетеді. Параметрлердің мағынасы: h. Wnd – хабарлама терезесі пайда болатын терезеге дескриптор, lp. Мәтін – терезеде пайда болатын мәтін, лп. Тақырып – терезе тақырыбындағы мәтін, u. Түр - терезе түрі, атап айтқанда, шығу түймелерінің санын көрсетуге болады.

Int Message Windows API функцияларын шақыру. Қорап (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); API функциясының барлық дерлік параметрлері іс жүзінде 32 биттік бүтін сандар: HWND - 32 биттік бүтін сан, LPCTSTR - 32 биттік жол көрсеткіші, UINT - 32 биттік бүтін сан. Функциялардың жаңа нұсқаларына өту үшін функциялардың атына «А» жұрнағы жиі қосылады.

Int Message Windows API функцияларын шақыру. Қорап (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); MASM пайдаланған кезде аттың соңына @N N қосу керек - берілген аргументтер стекте алатын байт саны. Win 32 API функциялары үшін бұл сан аргументтердің n есе 4 (әр аргументтегі байт) саны ретінде анықталуы мүмкін: N=4*n. Функцияны шақыру үшін ассемблердің CALL командасы қолданылады. Бұл жағдайда функцияның барлық аргументтері оған стек (PUSH командасы) арқылы беріледі. Аргументтің өту бағыты: СОЛДАН ОҢҒА - ТӨМЕН ЖОҒАРЫ. Алдымен u аргументі стекке итеріледі. түрі. Қоңырау көрсетілген функциякелесідей болады: CALL Message. қорап. [электрондық пошта қорғалған]

Int Message Windows API функцияларын шақыру. Қорап (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Кез келген API функциясын орындау нәтижесі әдетте EAX регистрінде қайтарылатын бүтін сан болып табылады. OFFSET директивасы – «сегменттердің ығысуы» немесе жоғары деңгейлі тіл терминдерімен айтқанда, жолдың басына арналған «көрсеткіш». C тіліндегі #define сияқты EQU директивасы тұрақты мәнді анықтайды. EXTERN директивасы компиляторға функция немесе идентификатор модульге сыртқы екенін айтады.

«Бәріне сәлем!» бағдарламасының мысалы. . 686 P. МҮЛГІЛІК ТЕГІН, STDCALL. STACK 4096. DATA MB_OK EQU 0 STR 1 ДБ «Менің бірінші бағдарламам», 0 STR 2 ДБ «Бәріне сәлем!», 0 HW DD ? EXTERN хабарлама. қорап. [электрондық пошта қорғалған]: ЖАҚЫНДА. КОД БАСТАУ: PUSH MB_OK PUSH OFFSET STR 1 PUSH OFFSET STR 2 PUSH HW CALL хабарламасы. қорап. [электрондық пошта қорғалған]ҚАЙТА БАСТАУ

INVOKE директивасы MASM тілінің трансляторы сонымен қатар макроқұрал - INVOKE директивасы арқылы функцияны шақыруды жеңілдетуге мүмкіндік береді: INVOKE функциясы, параметр1, параметр2, ... Функция шақыруына @16 қосудың қажеті жоқ; параметрлер функция сипаттамасында берілген ретпен дәл жазылады. аудармашы макростары параметрлерді стекке итереді. INVOKE директивасын пайдалану үшін сізде PROTO директивасын пайдаланатын функция прототипінің сипаттамасы келесі пішінде болуы керек: Хабарлама. қорап. PROTO: DWORD, : DWORD

Мақсаты бойынша пәрмендерді ажыратуға болады (IBM PC сияқты ДК ассемблер командаларының мнемоникалық опкодтарының мысалдары жақшада берілген):

l орындау арифметикалық амалдар(ADD және ADC - тасымалдаумен толықтырулар мен толықтырулар, SUB және SBB - қарыз алумен азайту және азайту, MUL және IMUL - таңбасыз және таңбалы көбейту, DIV және IDIV - таңбасыз және қолтаңбалы бөлу, CMP - салыстыру және т.б.);

l логикалық операцияларды орындау (НЕМЕСЕ, ЖӘНЕ, ЕМЕС, XOR, TEST және т.б.);

l мәліметтерді тасымалдау (MOV – жіберу, XCHG – алмасу, IN – микропроцессорға енгізу, OUT – микропроцессордан шығару және т.б.);

l басқаруды тасымалдау (бағдарлама тармақтары: JMP - шартсыз тармақ, CALL - процедураны шақыру, RET - процедурадан қайтару, J * - шартты тармақ, LOOP - циклды басқару және т.б.);

l символдық жолдарды өңдеу (MOVS – тасымалдау, CMPS – салыстыру, LODS – жүктеп алу, SCAS – сканерлеу. Бұл командалар әдетте префикспен (қайталау модификаторы) REP пайдаланылады;

l программалық үзілістер (INT – программалық үзілістер, INTO – толып кету кезіндегі шартты үзулер, IRET – үзуден қайтару);

l микропроцессорлық басқару (ST* және CL* - жалаушаларды орнату және тазалау, HLT - тоқтату, WAIT - күту режимі, NOP - бос және т.б.).

FROM толық тізімассемблер командаларын жұмыстардан табуға болады.

Мәліметтерді тасымалдау командалары

l MOV dst, src - мәліметтерді тасымалдау (жылжыту - src-ден dst-ке жылжыту).

Тасымалдаулар: регистрлер арасында немесе регистр мен жад арасында бір байт (егер src және dst байт пішімінде болса) немесе бір сөз (егер src және dst байт пішімінде болса) және регистрге немесе жадқа жедел мән жазады.

dst және src операндтары бірдей пішімге ие болуы керек - байт немесе сөз.

Src типті болуы мүмкін: r (регистр) – регистр, m (жад) – жады, i (кедергі) – жедел мән. Dst r, m типті болуы мүмкін. Операндтарды бір пәрменде пайдалануға болмайды: rsegm мен i; m типті екі операнд және rsegm типті екі операнд). Мен болуы мүмкін операнд қарапайым өрнек:

mov AX, (152 + 101B) / 15

Экспрессивті бағалау аударма кезінде ғана орындалады. Жалаулар өзгермейді.

l PUSH src – сөзді стекке қою (басу - итеру; src ішінен стекке басыңыз). src мазмұнын стектің жоғарғы жағына итереді - кез келген 16 биттік регистр (сегментті қоса) немесе 16 биттік сөзді қамтитын екі жад орны. Жалаулар өзгермейді;

l POP dst – стектен сөзді шығару (pop – pop; dst ішіндегі стектен санау). Стектің жоғарғы жағындағы сөзді жояды және оны dst - кез келген 16-биттік регистрге (сегментті қоса) немесе екі жад орнына орналастырады. Жалаулар өзгермейді.

Кіріспе.

Түпнұсқа программа жазылатын тіл деп аталады енгізутіл және оны процессор орындау үшін аударатын тіл - демалыс күнітіл. Енгізу тілін шығыс тілге түрлендіру процесі деп аталады тарату.Процессорлар программалау үшін пайдаланылмайтын екілік машина тілінде бағдарламаларды орындауға қабілетті болғандықтан, барлық бастапқы бағдарламаларды аудару қажет. белгілі екі жолаудармалар: жинақтау және түсіндіру.

Сағат құрастырубастапқы бағдарлама алдымен аударылатын тілдегі баламалы бағдарламаға толығымен аударылады, деп аталады объектбағдарлама, содан кейін орындалады. Бұл процесс арнайы қолдану арқылы жүзеге асырылады бағдарламалар,шақырды құрастырушы.Енгізу тілі екілік кодтардың машиналық (шығару) тілінің символдық көрінісі болып табылатын компилятор деп аталады. құрастырушы.

Сағат түсіндірулербастапқы бағдарлама мәтінінің әрбір жолы талданады (интерпретацияланады) және онда көрсетілген команда дереу орындалады. Бұл әдісті жүзеге асыру жатады аудармашы бағдарламасы.Түсіндіру ұзақ уақыт алады. Оның тиімділігін арттыру үшін аудармашы әрбір жолды өңдеудің орнына алдын ала барлығын түрлендіреді командатаңбаларға арналған жолдар (

). Символдардың құрылған тізбегі бастапқы бағдарламаға тағайындалған функцияларды орындау үшін қолданылады.

Төменде талқыланған ассемблер тілі компиляция арқылы жүзеге асырылады.

Тілдің ерекшеліктері.

Ассемблердің негізгі ерекшеліктері:

● тілде екілік кодтардың орнына символдық атаулар қолданылады - мнемотехника.Мысалы, қосу пәрмені үшін (

) мнемотехника қолданылады

азайту (

көбейту (

Бөлімшелер (

Символдық атаулар жады ұяшықтарын адрестеу үшін де қолданылады. Ассемблер тілінде программалау үшін екілік кодтар мен адрестердің орнына ассемблер екілік кодтарға аударатын символдық атауларды ғана білу керек;

әрбір мәлімдеме сәйкес келеді бір машина командасы(код), яғни ассемблер тіліндегі бағдарламада машиналық командалар мен операторлар арасында жеке сәйкестік бар;

● тіл қатынасты қамтамасыз етеді барлық объектілергежәне командалар. Жоғары деңгейлі тілдерде мұндай мүмкіндік жоқ. Мысалы, ассемблер тілі жалауша регистр битін және жоғары деңгейлі тілді тексеруге мүмкіндік береді (мысалы,

) мұндай мүмкіндік жоқ. Жүйелік бағдарламалау тілдері (мысалы, C) жиі аралық орынды алатынын ескеріңіз. Қол жетімділік жағынан олар ассемблер тіліне жақынырақ, бірақ оларда жоғары деңгейлі тілдің синтаксисі бар;

● ассемблер тілі әмбебап тіл емес.Микропроцессорлардың әрбір нақты тобының өзінің ассемблері болады. Жоғары деңгейлі тілдерде бұл кемшілік жоқ.

Жоғары деңгейлі тілдерден айырмашылығы, ассемблер тіліндегі бағдарламаны жазу және жөндеу көп уақытты алады. Осыған қарамастан ассемблер тілі болды кең қолданукелесі жағдайларға байланысты:

● Ассемблер тілінде жазылған программа жоғары деңгейлі тілде жазылған программадан әлдеқайда кішірек және жылдамырақ. Кейбір қолданбалар үшін бұл көрсеткіштер басты рөл атқарады, мысалы, көптеген жүйелік бағдарламалар(соның ішінде компиляторлар), несие карталарындағы бағдарламалар, ұялы телефондар, құрылғы драйверлері және т.б.;

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

Көптеген бағдарламаларда жалпы кодтың аз ғана пайызы бағдарламаның орындалу уақытының үлкен пайызына жауап береді. Әдетте, бағдарламаның 1%-ы орындалу уақытының 50%-ына, ал 10%-ы орындалу уақытының 90%-ына жауап береді. Сондықтан нақты жағдайда нақты бағдарламаны жазу үшін ассемблер де, жоғары деңгейлі тілдердің бірі де қолданылады.

Ассемблер тіліндегі оператор пішімі.

Ассемблер тіліндегі бағдарлама – әрқайсысы жеке жолды алып жатқан және төрт өрісті қамтитын командалар (мәлімдемелер, сөйлемдер) тізімі: белгі өрісі, операция өрісі, операнд өрісі және түсініктеме өрісі. Әрбір өрісте жеке баған болады.

Белгі өрісі.

1-баған белгі өрісі үшін бөлінген. Белгі символдық атау немесе идентификатор, мекенжайларжады. Бұл қабілетті болу үшін қажет:

● командаға шартты немесе шартсыз көшу;

● деректер сақталатын орынға қол жеткізу.

Мұндай мәлімдемелер таңбаланған. Атауды белгілеу үшін ағылшын алфавитінің (бас) әріптері мен сандары қолданылады. Атау әріптен басталып, қос нүктемен аяқталуы керек. Қос нүкте белгісін бөлек жолға, ал операция кодын келесі жолға 2-бағанға жазуға болады, бұл компилятор жұмысын жеңілдетеді. Қос нүктенің болмауы, егер олар бөлек жолдарда болса, белгі мен операциялық кодты ажырату мүмкін емес.

Ассемблер тілінің кейбір нұсқаларында қос нүктелер деректер белгілерінен кейін емес, нұсқаулар белгілерінен кейін ғана қойылады және жапсырма ұзындығы 6 немесе 8 таңбамен шектелуі мүмкін.

Белгі өрісінде бірдей атаулар болмауы керек, себебі белгі командалардың мекенжайларымен байланысты. Егер бағдарламаны орындау кезінде команданы немесе жадтан деректерді шақырудың қажеті болмаса, онда белгі өрісі бос қалады.

Транзакция коды өрісі.

Бұл өрісте мнемоникалық пәрмен немесе псевдокоманда бар (төменде қараңыз). Команданың мнемоникалық кодын тіл құрастырушылары таңдайды. Ассемблер тілінде

регистрді жадтан жүктеу үшін таңдалған мнемоникалық

), ал регистрдің мазмұнын жадта сақтау үшін – мнемотехника

). Ассемблер тілдерінде

сәйкесінше екі әрекет үшін бірдей атауды пайдалануға болады

Егер мнемоникалық атауларды таңдау ерікті болуы мүмкін болса, онда екі машиналық нұсқауларды пайдалану қажеттілігі процессордың архитектурасына байланысты.

Мнемотехниканы тіркеу ассемблер нұсқасына да байланысты (5.2.1-кесте).

Операнд өрісі.

Мұнда операцияны орындау үшін қажетті қосымша ақпарат берілген. Секіру нұсқауларына арналған операндтар өрісінде секіргіңіз келетін адрес, сонымен қатар машиналық команданың операндтары болып табылатын адрестер мен регистрлер көрсетіледі. Мысал ретінде мұнда 8-биттік процессорлар үшін пайдалануға болатын операндтар берілген

● сандық деректер,

әртүрлі санау жүйелерінде берілген. Қолданылатын санау жүйесін көрсету үшін тұрақтыдан кейін латын әріптерінің бірі жазылады: B,

Сәйкесінше екілік, сегіздік, он алтылық, ондық санау жүйелері (

жазылмауы мүмкін). Егер он алтылық санның бірінші цифры A, B, C болса,

Содан кейін алдына елеусіз 0 (нөл) қосылады;

● микропроцессордың ішкі регистрлерінің және жады ұяшықтарының кодтары

A, B, C әріптері түрінде M (ақпарат көздері немесе қабылдаушылар),

М немесе олардың кез келген санау жүйесіндегі адрестері (мысалы, 10В – регистрлік адрес

екілік жүйеде);

● идентификаторлар,

тіркелген әуе кемелері үшін,

Бірінші әріптер В

H; аккумулятор мен мүмкіндіктер регистрінің жұбы үшін -

; бағдарлама есептегіші үшін -

; стек көрсеткіші үшін -

● операндтардың мекенжайларын немесе шартты түрде келесі нұсқауларды көрсететін белгілер

(шарт орындалғанда) және шартсыз ауысулар.Мысалы, командадағы M1 операнды

таңбалау өрісінде мекен-жайы M1 идентификаторымен белгіленген командаға сөзсіз көшу қажеттілігін білдіреді;

● өрнектер,

арифметикалық және логикалық операторлар арқылы жоғарыда қарастырылған деректерді байланыстыру арқылы құрастырылған. Деректер кеңістігін сақтау жолы тіл нұсқасына байланысты екенін ескеріңіз. үшін ассамблея тілін әзірлеушілер

Сөзді анықтаңыз), кейінірек балама енгізді.

ол ең басынан процессорларға арналған тілде болды

Тілдік нұсқада

пайдаланылады

тұрақтыны анықтаңыз).

Процессорлар әртүрлі ұзындықтағы операндтарды өңдейді. Оны анықтау үшін ассемблерді әзірлеушілер әртүрлі шешімдер қабылдады, мысалы:

Әртүрлі ұзындықтағы II регистрлердің әртүрлі атаулары бар: EAX – 32-разрядты операндтарды орналастыру үшін (түрі

); AX - 16-бит үшін (түр

және AN - 8-бит үшін (түр

● процессорларға арналған

әр операциялық кодқа жұрнақтар қосылады: жұрнақ

Түрі үшін

; түрі үшін ".B" жұрнағы

әртүрлі ұзындықтағы операндтар үшін әртүрлі опкодтар пайдаланылады, мысалы, байтты, жарты сөзді жүктеу үшін (

) және 64-биттік регистрдегі сөздер операциялық кодтарды пайдаланады

тиісінше.

Пікірлер өрісі.

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

● компанияның процессорлары үшін тілдерде нүктелі үтір (;).

● тілдердегі леп белгісі (!).

Түсініктеме үшін сақталған әрбір бөлек жолдың алдында бастау таңбасы болады.

Псевдокомандалар (директивалар).

Ассемблер тілінде командалардың екі негізгі түрін ажыратуға болады:

негізгіпроцессордың машиналық кодына эквивалентті нұсқаулар. Бұл командалар бағдарламамен қамтамасыз етілген барлық өңдеуді орындайды;

псевдокомандаларнемесе директивалар,бағдарламаны код комбинациялары тіліне аудару процесіне қызмет көрсетуге арналған. Мысал ретінде, кестеде. 5.2.2 as-assembler бағдарламасының кейбір псевдокомандаларын көрсетеді

отбасы үшін

.

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

● пайда болған кезде қажетті пәрмендер тізбегін жазыңыз. Бұл тәсіл бағдарлама көлемінің ұлғаюына әкеледі;

● осы ретті процедураға (ішкі бағдарлама) реттеңіз және қажет болса, оны шақырыңыз. Мұндай шығудың кемшіліктері бар: әр жолы арнайы процедураны шақыру нұсқаулығын және қайтару нұсқауын орындауға тура келеді, ол қысқа және жиі қолданылатын реттілікпен бағдарламаның жылдамдығын айтарлықтай төмендетуі мүмкін.

Ең қарапайым және тиімді әдіскомандалар тізбегінің қайталануы пайдалану болып табылады макро,оны бағдарламада жиі кездесетін командалар тобын қайта аударуға арналған псевдокоманда ретінде қарастыруға болады.

Макрос немесе макронұсқау үш аспектімен сипатталады: макроанықтау, макро инверсия және макро кеңейту.

макроанықтама

Бұл бағдарлама мәтініндегі сілтемелер үшін пайдаланылатын бағдарлама командаларының бірнеше рет қайталанатын тізбегін белгілеу.

Макрос келесі құрылымға ие:

Өрнектер тізімі; макроанықтама

Жоғарыдағы макрос анықтама құрылымының үш бөлігі бар:

● тақырып

атауы бар макрос

Псевдокоманда

және параметрлер жиынтығы;

● нүктелі денемакро;

● команда

бітіру

макроанықтамалар.

Макрос параметрлер жинағы таңдалған нұсқаулар тобы үшін операнд өрісінде берілген барлық параметрлердің тізімін қамтиды. Егер бұл параметрлер бағдарламада ертерек берілсе, онда оларды макрос анықтамасының тақырыбында өткізіп жіберуге болады.

Таңдалған нұсқаулар тобын қайта жинау үшін атаудан тұратын қоңырау пайдаланылады

макрос және басқа мәндері бар параметрлер тізімі.

Ассемблер компиляция кезінде макрос анықтамасымен кездессе, оны макрос анықтамасы кестесінде сақтайды. Атаудың бағдарламасында кейінгі пайда болуымен (

) макростың негізгі бөлігімен ассемблер оны ауыстырады.

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

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

Макрос кеңейту бағдарламаны орындау кезінде емес, құрастыру процесінде болады. Таңбалар жолын өңдеу тәсілдері тағайындалады макроқұралдар.

Құрастыру процесі жүзеге асырылады екі өтуде:

● Бірінші өтуде барлық макрос анықтамалары сақталады және макрос қоңыраулар кеңейтіледі. Бұл жағдайда бастапқы бағдарлама оқылады және барлық макрос анықтамалары жойылатын бағдарламаға түрлендіріледі және әрбір макрос шақыру макрос денесімен ауыстырылады;

● Екінші рұқсат алынған бағдарламаны макростарсыз өңдейді.

Параметрлері бар макростар.

Параметрлері әртүрлі мәндерді қабылдай алатын қайталанатын командалар тізбегімен жұмыс істеу үшін макроанықтамалар берілген:

● бірге нақтымакрос шақырудың операнд өрісіне орналастырылатын параметрлер;

● бірге формальдыпараметрлері. Макросты кеңейту кезінде макростың негізгі бөлігінде пайда болатын әрбір ресми параметр сәйкес нақты параметрмен ауыстырылады.

параметрлері бар макростарды пайдалану.

1-бағдарлама командалардың екі ұқсас тізбегін көрсетеді, олардың біріншісі P және P ауыстырады.

Ал екіншісі

2-бағдарлама екі формальды P1 және P2 параметрі бар макросты қамтиды. Макросты кеңейту кезінде макростың ішіндегі әрбір P1 таңбасы бірінші нақты параметрмен ауыстырылады (P,

), ал P2 символы екінші нақты параметрмен ауыстырылады (

) №1 бағдарламадан. Макрос шақыруда

2-бағдарлама белгіленеді: P,

Бірінші нақты параметр,

Екінші нақты параметр.

1-бағдарлама

2-бағдарлама

MOV EBX,Q MOV EAX,Pl

MOV Q,EAX MOV EBX,P2

MOV P,EBX MOV P2,EAX

Кеңейтілген мүмкіндіктер.

Тілдің кейбір қосымша мүмкіндіктерін қарастырыңыз

Шартты тармақты нұсқауы және өту үшін белгісі бар макрос екі немесе одан да көп рет шақырылса, белгі қайталанады (белгілерді көшіру мәселесі), бұл қатені тудырады. Сондықтан әрбір қоңырауға (бағдарламашы) параметр ретінде жеке белгі тағайындалады. Тілде

белгі жергілікті деп жарияланған (

) және кеңейтілген мүмкіндіктердің арқасында ассемблер макрос кеңейтілген сайын басқа белгіні автоматты түрде жасайды.

басқа макростар ішіндегі макростарды анықтауға мүмкіндік береді. Бұл қосымша мүмкіндік бағдарламаны шартты байланыстырумен үйлескенде өте пайдалы. Қарастырыңыз

IF WORDSIZE GT 16 М2 МАКРО

Макро M2 оператордың екі бөлігінде де анықталуы мүмкін

Дегенмен, анықтама бағдарламаның 16 биттік немесе 32 биттік процессорда жинақталғанына байланысты. Егер M1 шақырылмаса, M2 макросы мүлде анықталмайды.

Тағы бір жетілдірілген мүмкіндік - макростар басқа макростарды, соның ішінде өздерін шақыра алады - рекурсивтіқоңырау шалу. Соңғы жағдайда, шексіз циклды болдырмау үшін макрос өзіне параметрді беруі керек, ол әрбір кеңейту кезінде өзгереді, сонымен қатар тексеруосы параметрді және параметр белгілі бір мәнге жеткенде рекурсияны аяқтайды.

Ассемблерде макростарды қолдану туралы.

Макростарды пайдаланған кезде ассемблер екі функцияны орындай алуы керек: макрос анықтамаларын сақтаңызЖәне макрос қоңырауларды кеңейту.

Макрос анықтамаларын сақтау.

Барлық макрос атаулары кестеде сақталады. Әрбір атау қажет болған жағдайда шақырылуы үшін сәйкес макросқа көрсеткішпен сүйемелденеді. Кейбір ассемблерлерде макрос атаулары үшін жеке кесте бар, басқаларында макрос атауларымен қатар барлық машина командалары мен директивалары бар жалпы кесте бар.

Құрастыру кезінде макросты кездестірген кезде құрылды:

жаңа кесте элементімакростың атымен, параметрлердің санымен және макрос денесі сақталатын басқа макросты анықтау кестесіне көрсеткішпен;

● тізім формальдыпараметрлері.

Жай таңбалар тізбегі болып табылатын макростың негізгі бөлігі макросты анықтау кестесінде оқылады және сақталады. Цикл денесінде кездесетін формальды параметрлер арнайы таңбамен белгіленеді.

Макростың ішкі көрінісі

2-бағдарлама (244-бет) үшін жоғарыдағы мысалдан:

MOV EAX, MOV EBX, MOV MOV &

мұнда нүктелі үтір каретканы қайтару таңбасы ретінде, ал & амперсанды формальды параметр таңбасы ретінде пайдаланылады.

Макрос қоңырау кеңейтімі.

Құрастыру кезінде макрос анықтамасы кездескен сайын ол макрос кестеде сақталады. Макрос шақырылған кезде ассемблер енгізу құрылғысынан енгізу деректерін оқуды уақытша тоқтатады және сақталған макрос денесін оқи бастайды. Макрос денеден алынған формальды параметрлер нақты параметрлермен ауыстырылады және шақыру арқылы беріледі. Параметрлердің алдында & белгісі ассемблерге оларды тануға мүмкіндік береді.

Ассемблердің көптеген нұсқалары болғанымен, құрастыру процестерінің ортақ мүмкіндіктері бар және көп жағынан ұқсас. Төменде екі жолды құрастырушының жұмысы қарастырылады.

Екі жолақты құрастырушы.

Бағдарлама бірнеше операторлардан тұрады. Сондықтан құрастыру кезінде келесі әрекеттер тізбегін қолдануға болатын сияқты:

● оны машина тіліне аудару;

● алынған машина кодын файлға, ал листингтің сәйкес бөлігін басқа файлға көшіру;

● бүкіл бағдарлама таратылғанша жоғарыдағы процедураларды қайталаңыз.

Алайда бұл әдіс тиімді емес. Мысал ретінде проблема деп аталады жетекші сілтеме.Егер бірінші оператор программаның ең соңында Р операторына өту болса, онда ассемблер оны аудара алмайды. Ол алдымен Р операторының адресін анықтауы керек, ал ол үшін бағдарламаны толық оқып шығу керек. Түпнұсқа бағдарламаның әрбір толық оқуы деп аталады өту.Екі өту арқылы алға анықтамалық есепті қалай шешуге болатынын көрсетейік:

бірінші өтуде жинаужәне барлық таңба анықтамаларын (белгілерді қоса) кестеде сақтаңыз және екінші өтуде әрбір операторды оқып, жинаңыз. Бұл әдіс салыстырмалы түрде қарапайым, бірақ бастапқы бағдарлама арқылы екінші өту қосымша енгізу/шығару уақытын қажет етеді;

● бірінші өтуде, түрлендірубағдарламаны аралық пішінге келтіріп, оны кестеде сақтаңыз, ал екінші өту бастапқы бағдарлама бойынша емес, кесте бойынша орындалады. Бұл құрастыру әдісі уақытты үнемдейді, өйткені екінші өтуде енгізу-шығару операциялары орындалмайды.

Бірінші өту.

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

;Мән – буфер өлшемі

Нұсқаулық белгі өрісіндегі символдық атауларға мағына беру арқылы ассемблер негізінен бағдарламаны орындау кезінде әрбір нұсқауға ие болатын адрестерді орнатады. Ол үшін құрастыру процесінде ассемблер сақтайды нұсқау адресінің есептегіші(

) арнайы айнымалы ретінде. Бірінші өтудің басында арнайы айнымалының мәні 0-ге орнатылады және сол пәрмен ұзындығы бойынша өңделген әрбір пәрменнен кейін ұлғаяды. Мысал ретінде, кестеде. 5.2.3 командалардың ұзындығын және санауыш мәндерін көрсететін бағдарламаның фрагментін көрсетеді. Кестелер бірінші өту кезінде жасалады символ атаулары, директиваларЖәне операциялық кодтар,және қажет болса сөзбе-сөзкесте. Литерал – ассемблер жадты автоматты түрде сақтайтын тұрақты шама. Қазіргі заманғы процессорларда тікелей мекенжайлары бар нұсқаулар бар екенін бірден байқаймыз, сондықтан олардың ассемблерлері литералдарға қолдау көрсетпейді.

Символдық кесте

әрбір атау үшін бір элементтен тұрады (5.2.4-кесте). Таңбалар кестесіндегі әрбір жазба атауды (немесе оған көрсеткішті), оның сандық мәнін және кейде кейбір қосымша ақпаратты қамтиды, олар мыналарды қамтуы мүмкін:

● белгімен байланысты деректер өрісінің ұзындығы;

● жадты қайта салыстыру биттері (бағдарлама ассемблер тағайындалған мекенжайдан басқа мекенжайда жүктелсе, символдың мәні өзгеретінін немесе өзгермейтінін көрсетеді);

● таңбаға процедурадан тыс қол жеткізуге болатыны туралы ақпарат.

Символдық атаулар – белгілер. Оларды операторлар арқылы көрсетуге болады (мысалы,

Директивалар кестесі.

Бұл кестеде бағдарламаны құрастыру кезінде пайда болатын барлық директивалар немесе псевдокомандалар тізімі берілген.

Операциялық код кестесі.

Әрбір операциялық код үшін кестеде жеке бағандар болады: операция кодының белгіленуі, 1 операнд, 2 операнд, операция кодының он алтылық мәні, нұсқаудың ұзындығы және нұсқау түрі (5.2.5-кесте). Операндтардың саны мен түріне байланысты операциялық кодтар топтарға бөлінеді. Пәрмен түрі топ нөмірін анықтайды және сол топтағы барлық пәрмендерді өңдеу үшін шақырылатын процедураны көрсетеді.

Екінші өту.

Екінші өтудің мақсаты- объектілік бағдарламаны құру және қажет болған жағдайда құрастыру хаттамасын басып шығару; әр түрлі уақытта бір орындалатын файлға жиналған процедураларды байланыстыру үшін байланыстырушыға қажетті шығыс ақпараты.

Екінші өтуде (біріншідегідей) мәлімдемелерді қамтитын жолдар бірінен соң бірі оқылады және өңделеді. Түпнұсқа оператор және одан он алтылық жүйеде алынған шығыс объекткодты басып шығаруға немесе кейінірек басып шығару үшін буферлеуге болады. Командалық мекенжай есептегішін қалпына келтіргеннен кейін команда шақырылады келесі мәлімдеме.

Түпнұсқа бағдарламада қателер болуы мүмкін, мысалы:

берілген таңба анықталмаған немесе бірнеше рет анықталған;

● Операция коды жарамсыз атаумен берілген (теру қатесіне байланысты), жеткілікті операндтармен қамтамасыз етілмеген немесе тым көп операндтары бар;

● оператор жоқ

Кейбір ассемблер анықталмаған таңбаны тауып, оны ауыстыруы мүмкін. Дегенмен, көп жағдайда қатесі бар оператор табылған кезде, ассемблер экранда қате туралы хабарламаны көрсетеді және құрастыру процесін жалғастыруға тырысады.

Ассемблер тіліне арналған мақалалар.

Мақала ұнады ма? Достарыңызбен бөлісіңіз!
Бұл мақала пайдалы болды ма?
Иә
Жоқ
Пікіріңізге рахмет!
Бірдеңе дұрыс болмады және сіздің дауысыңыз есептелмеді.
рахмет. Сіздің хабарламаңыз жіберілді
Мәтіннен қате таптыңыз ба?
Оны таңдаңыз, басыңыз Ctrl+Enterжәне біз оны түзетеміз!