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

Құрастыру бағдарламасының құрылымы. Аннотация: Жоспар: Алғы сөз

Кіріспе.

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

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

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

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

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

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

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

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

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

азайту (

көбейту (

Бөлімшелер (

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

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

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

) мұндай мүмкіндік жоқ. Жүйелік бағдарламалау тілдері (мысалы, 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-кесте). Операндтардың саны мен түріне байланысты операциялық кодтар топтарға бөлінеді. Пәрмен түрі топ нөмірін анықтайды және сол топтағы барлық пәрмендерді өңдеу үшін шақырылатын процедураны көрсетеді.

Екінші өту.

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

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

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

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

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

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

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

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

Тақырып 2.5 Процессорды бағдарламалау негіздері

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

Символдық нұсқаулықты кодтау тілі деп аталады құрастырушы.

ассемблер тіліәрбір оператор дәл бір машина нұсқаулығына сәйкес келетін тіл болып табылады.

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

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

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

2. Ассемблер тіліндегі бағдарламашы мақсатты машинада бар барлық нысандар мен командаларға қол жеткізе алады.

Машинаға бағытталған тілдерде бағдарламалау негіздерін түсіну мыналар үшін пайдалы:



ДК архитектурасын жақсырақ түсіну және компьютерлерді жақсырақ пайдалану;

Қолданбалы есептерді шешуге арналған бағдарламалардың алгоритмдерінің неғұрлым ұтымды құрылымдарын әзірлеу;

Көру және өңдеу опциялары орындалатын бағдарламаларкез келген жоғары деңгейлі тілдерден құрастырылған .exe және .com кеңейтімдерімен, бастапқы бағдарламалар жоғалған жағдайда (көрсетілген бағдарламаларды DEBUG бағдарламасының жөндеушіге шақыру және олардың дисплейін ассемблер тілінде декомпиляциялау арқылы);

ең маңызды міндеттерді шешуге арналған бағдарламаларды құрастыру (машинаға бағытталған тілде құрастырылған бағдарлама әдетте тиімдірек – жоғары деңгейлі тілдерден аудару нәтижесінде алынған бағдарламалардың 30-60 процентіне қысқа және жылдамырақ

Негізгі бағдарламаға жеке фрагменттер ретінде енгізілген процедураларды іске асыру үшін, егер олар қолданылатын жоғары деңгейлі тілде де, ОЖ сервистік процедураларымен де орындалмайтын болса.

Ассемблер тіліндегі бағдарлама бір топтағы компьютерлерде ғана жұмыс істей алады, ал жоғары деңгейлі тілде жазылған бағдарлама әртүрлі машиналарда потенциалды түрде жұмыс істей алады.

Ассемблер тілінің алфавиті ASCII таңбаларынан тұрады.

Сандар тек бүтін сандар. Айырмау:

В әрпімен аяқталатын екілік сандар;

D әрпімен аяқталатын ондық сандар;

N әрпімен аяқталатын он алтылық сандар.

Жедел жад, регистрлер, мәліметтерді ұсыну

МП-ның белгілі бір қатары үшін жеке программалау тілі – ассемблер тілі қолданылады.

Ассемблер тілі машиналық кодтар мен жоғары деңгейлі тілдер арасында аралық орынды алады. Бұл тілде бағдарламалау оңайырақ. Ассемблер тіліндегі бағдарлама жоғары деңгейлі тілдегі (программистке ассемблерге қарағанда оңайырақ) қарағанда, белгілі бір машинаның мүмкіндіктерін (дәлірек айтқанда, MP) ұтымды пайдаланады. Мысал ретінде MP KR580VM80 үшін ассемблер тілін пайдалана отырып, машинаға бағытталған тілдерде бағдарламалаудың негізгі принциптерін қарастырамыз. Тілде бағдарламалау үшін жалпы әдістеме қолданылады. Бағдарламаларды жазудың арнайы әдістері мақсатты МП архитектурасы мен командалық жүйе мүмкіндіктерімен байланысты.

Бағдарламалық қамтамасыз ету моделі микропроцессорлық жүйе MP KR580VM80 негізінде

1-суретке сәйкес MPS бағдарламалық моделі

MP порттар жады

С З AC П C

1-сурет

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

БІРАҚ– 8 разрядты аккумулятор регистрі. Ол депутаттың негізгі тізілімі болып табылады. ALU-да орындалатын кез келген операция аккумуляторға өңделетін операндтардың біреуін орналастыруды қамтиды. ALU-дағы операцияның нәтижесі де әдетте А-да сақталады.

B, C, D, E, H, L– 8-разрядты жалпы мақсаттағы регистрлер (RON). MP ішкі жады. Өңделген ақпаратты, сондай-ақ операция нәтижелерін сақтауға арналған. Регистрлерден 16 разрядты сөздерді өңдеу кезінде ВС, DE, HL жұптары қалыптасады және қосарлы регистр бірінші әріп – В, D, H деп аталады. Регистрлер жұбында бірінші регистр ең жоғары болады. ерекше мүлікдеректерді сақтау үшін де, жедел жады ұяшықтарының 16-разрядты мекенжайларын сақтау үшін де пайдаланылатын H, L регистрлері бар.

FL– жалау регистрі (мүмкіндік регистрі) МП-да арифметикалық және логикалық амалдарды орындау нәтижесінің бес мүмкіндігін сақтайтын 8 разрядты регистр. Суретке сәйкес FL пішімі

Бит C (CY - тасымалдау) - тасымалдау, орындау кезінде байттың жоғары ретінен тасымалдау болған жағдайда 1-ге орнатылады. арифметикалық амалдар.

P бит (паритет) - паритет, нәтиженің биттеріндегі бірлік саны жұп болса, 1-ге орнатылады.

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

Z биті (нөл) – операцияның нәтижесі 0 болса, 1 мәніне орнатылады.

Егер нәтиже теріс болса, S (таңба) биті 1-ге, ал нәтиже оң болса 0-ге орнатылады.

SP-- стек көрсеткіші, 16-разрядты регистр, стекке енгізілген соңғы байт жазылған жад орнының мекенжайын сақтауға арналған.

Р.С– келесі орындалатын команданың адресін сақтауға арналған программалық есептегіш (программа санауышы), 16-разрядты регистр. Келесі нұсқау байты алынғаннан кейін бағдарлама есептегішінің мазмұны автоматты түрде 1-ге артады.

Бастапқы жады аймағында 0000H - 07FF мекенжайы орналасқан бақылау бағдарламасыжәне демонстрациялық бағдарламалар. Бұл ROM аймағы.

0800 - 0AFF - зерттелетін бағдарламаларды жазуға арналған мекенжай аймағы. (ЖЕДЕЛ ЖАДТАУ ҚҰРЫЛҒЫСЫ).

0В00 - 0ВВ0 - деректерді жазуға арналған мекенжай аймағы. (ЖЕДЕЛ ЖАДТАУ ҚҰРЫЛҒЫСЫ).

0BB0 - стектің бастапқы мекенжайы. (ЖЕДЕЛ ЖАДТАУ ҚҰРЫЛҒЫСЫ).

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

Ассемблер тілінің деректер пішімі және пәрмен құрылымы

MP KR580VM80 жады – бұл байт деп аталатын 8 разрядты сөздердің массиві.Әр байттың жад ұяшықтарының тізбегіндегі орнын анықтайтын өзінің 16 биттік адресі бар. МП 65536 байт жадты адрестей алады, оның ішінде ROM да, жедел жады да болуы мүмкін.

Деректер пішімі

Деректер жадта 8 разрядты сөздер түрінде сақталады:

D7 D6 D5 D4 D3 D2 D1 D0

Ең аз маңызды бит 0 бит, ең маңызды бит 7 бит.

Пәрмен пішіммен, яғни оған бөлінген биттердің санымен сипатталады, олар байт-байт бойынша белгілі бір функционалды өрістерге бөлінеді.

Пәрмен пішімі

MP KR580VM80 пәрмендері бір, екі немесе үш байт пішіміне ие. Көп байтты нұсқауларды көрші PL-де орналастыру керек. Команданың пішімі орындалатын операцияның ерекшелігіне байланысты.

Пәрменнің бірінші байты мнемоникалық түрде жазылған опкодты қамтиды.

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

Екінші және үшінші байттарда жұмыс істейтін деректер немесе деректердің орнын көрсететін мекенжайлар болуы мүмкін. Операциялар орындалатын мәліметтер операндтар деп аталады.

2-суретке сәйкес бір байт команда пішімі

4-сурет

Ассемблер тілінің нұсқауларында opcode ағылшын сөздерін жазудың қысқартылған түрі - мнемоникалық белгілерге ие. Мнемотехника (грек тілінен mnemonic – есте сақтау өнері) командаларды функционалдық мақсатына қарай есте сақтауды жеңілдетеді.

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


Адресті анықтау әдістері

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

MP KR580VM80 үшін келесі адрестеу әдістері бар:

Дереу;

Тіркелу;

жанама;

Стек.

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

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

Тіркелу адрестеу операндтың (кіріс немесе шығыс) ішкі МР регистрінде болуын болжайды. Бір байт командаларында қолданылады

Жанама (имплицитті) адрестеу МП ішкі регистрі операндтың өзі емес, оның жадыдағы адресі болып табылады деп болжайды.

Стек адрестеу пәрменде адрес жоқ деп есептейді. 16-биттік SP регистрінің (стек көрсеткіші) мазмұны бойынша жад орындарын адрестеу.

Командалық жүйе

MP командалық жүйесі болып табылады толық тізімМП орындай алатын элементарлық әрекеттер. Осы командалармен басқарылатын МП орындайды қарапайым қадамдар, мысалы, қарапайым арифметикалық және логикалық операциялар, деректерді беру, екі мәнді салыстыру және т.б. Пәрмендер саны MP KR580VM80 - 78 (соның ішінде 244 модификациясы).

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

Мәліметтерді тасымалдау;

Арифметика;

Ой қозғау;

Секіру командалары;

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


Командаларды сипаттауда және программаларды жазуда қолданылатын белгілер мен аббревиатуралар

Таңба Қысқарту
ADDR 16 биттік мекенжай
ДЕРЕКТЕР 8-биттік деректер
ДЕРЕКТЕР 16 16 биттік деректер
ПОРТ 8-биттік енгізу/шығару мекенжайы (енгізу/шығару құрылғылары)
БАЙТ 2 Екінші команда байты
БАЙТ 3 Үшінші команда байты
R, R1, R2 Регистрлердің бірі: A, B, C, D, E, H, L
RP Регистрлік жұптардың бірі: В – ұшақ жұбын орнатады; D - DE жұбын орнатады; H - HL жұбын көрсетеді
RH Жұптың бірінші тіркелімі
RL Жұптың екінші реестрі
Λ Бульдік көбейту
В Логикалық қосу
Екі модульді қосу
М Мекенжайы HL регистр жұбының мазмұнын көрсететін жад ұяшығы, яғни M = (HL)

Мақсаты бойынша пәрмендерді ажыратуға болады (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 - бос және т.б.).

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

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

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-биттік регистрге (сегментті қоса) немесе екі жад орнына орналастырады. Жалаулар өзгермейді.

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

Әрбір машина нұсқауы екі бөліктен тұрады:

  • операциялық бөлме – «не істеу керектігін» анықтау;
  • операнд – өңдеу объектілерін анықтау, «не істеу керек».

Ассемблер тілінде жазылған микропроцессордың машиналық нұсқауы келесі синтаксистік формасы бар бір жолды құрайды:

label командасы/директива операнд(лар) ;түсініктемелер

Бұл жағдайда жолдағы міндетті өріс команда немесе директива болып табылады.

Белгі, пәрмен/директива және операндтар (бар болса) кемінде бір бос орын немесе қойынды таңбасымен бөлінген.

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

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

Мысал код жолдары:

Санақ 1 ;Аты, директивасы, бір операнд
қозғалыс eax, 0 ;Команда, екі операнд
cbw; Команда

Тегтер

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

  • латын әліпбиінің барлық әріптері;
  • 0-ден 9-ға дейінгі сандар;
  • арнайы таңбалар: _, @, $, ?.

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

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

Командалар

Команда аудармашыға микропроцессордың қандай әрекетті орындау керектігін айтады. Деректер сегментінде пәрмен (немесе директива) өрісті, жұмыс кеңістігін немесе тұрақтыны анықтайды. Код сегментінде нұсқау жылжыту (mov) немесе қосу (қосу) сияқты әрекетті анықтайды.

директивалар

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

операндтар

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

  • Ешқандай операнд ret ;Return
  • Бір операнд inc ecx ;Increment ecx
  • Екі операнд eax,12 қосады;eax үшін 12 қосыңыз

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

Операндтар болуы мүмкін

  • идентификаторлар;
  • жалғыз немесе қос тырнақшаға алынған таңбалар жолы;
  • екілік, сегіздік, ондық немесе он алтылық жүйедегі бүтін сандар.
Идентификаторлар

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

Идентификаторларды жазу ережелері.

  • Идентификатор бір немесе бірнеше таңба болуы мүмкін.
  • Таңбалар ретінде сіз латын әліпбиінің әріптерін, сандарды және кейбір арнайы таңбаларды пайдалана аласыз: _, ?, $, @.
  • Идентификатор цифрлық таңбадан басталуы мүмкін емес.
  • Идентификатор ұзындығы 255 таңбаға дейін болуы мүмкін.
  • Аудармашы идентификатордың алғашқы 32 таңбасын қабылдап, қалғандарын елемейді.
Пікірлер

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

Құрастыру бағдарламасының құрылымы

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

Ассемблер тіліндегі «ештеңе істемейтін» бағдарламасының мысалы:

686P
.MODEL FLAT, STDCALL
.DATA
.КОД
БАСТАУ:

RET
БАСТАУ

Бұл бағдарлама тек бір микропроцессор нұсқаулығын қамтиды. Бұл пәрмен RET. Бұл бағдарламаның дұрыс аяқталуын қамтамасыз етеді. Жалпы бұл пәрмен процедурадан шығу үшін қолданылады.
Бағдарламаның қалған бөлігі аудармашының жұмысына байланысты.
.686P - Pentium 6 (Pentium II) қорғалған режим командаларына рұқсат етілген. Бұл директива процессор үлгісін көрсету арқылы қолдау көрсетілетін ассемблер нұсқаулар жинағын таңдайды. Директиваның соңындағы P әрпі аудармашыға процессордың қорғалған режимде жұмыс істеп тұрғанын хабарлайды.
.MODEL FLAT, stdcall — жадының жалпақ үлгісі. Бұл жад үлгісі қолданылады операциялық жүйе Windows. stdcall
.DATA – мәліметтерді қамтитын бағдарлама сегменті.
.CODE — кодты қамтитын программа блогы.
START — белгі. Ассемблерде этикеткалар үлкен рөл атқарады, оны қазіргі заманғы жоғары деңгейлі тілдер туралы айту мүмкін емес.
БАСТАУ END - бағдарламаның соңы және аудармашыға бағдарламаны START белгісінен бастау керектігі туралы хабарлама.
Әрбір модульде соңын белгілейтін END директивасы болуы керек бастапқы кодбағдарламалар. END директивасына сәйкес келетін барлық жолдар еленбейді. END директивасы өткізілмесе, қате жасалады.
END директивасынан кейінгі белгі компиляторға бағдарламаның орындалуы басталатын негізгі модульдің атын айтады. Бағдарламада бір модуль болса, END директивасынан кейінгі белгіні алып тастауға болады.

Тақырып 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 түрін көрсетіңіз.

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