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

Шынымен жұмыс істеуге арналған ассемблер тілінің командалары. Деңгейдегі ассемблер тілінде программалаудағы командалар құрылымы

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

С З AC П C

1-сурет

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

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

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

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

Бит С (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 командалық жүйесі болып табылады толық тізімМП орындай алатын элементарлық әрекеттер. Осы командалар арқылы басқарылатын МП қарапайым арифметикалық және логикалық операцияларды, мәліметтерді беру, екі мәнді салыстыру және т.б. сияқты қарапайым әрекеттерді орындайды. 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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

1. ДК архитектурасы……………………………………………………………5

    1.1. Тіркеулер.

    1.1.1 Жалпы мақсаттағы регистрлер.

1.1.2. сегменттік регистрлер

1.1.3 Жалау тізілімі

1.2. Есте сақтауды ұйымдастыру.

1.3. Деректерді көрсету.

1.3.1 Деректер түрлері

1.3.2 Таңба мен жолды бейнелеу

2. Құрастыру бағдарламасының мәлімдемелері …………………………………

    1. Ассемблер тілінің командалары

2.2. Адрестеу режимдері және машина нұсқау пішімдері

3. Псевдооператорлар ……………………………………………………….

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

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

3.2.1 Бағдарлама сегменттері. директиваны қабылдаңыз

3.2.3 Жеңілдетілген сегменттеу директивасы

4. Бағдарламаны құрастыру және байланыстыру ………………………….

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

    5.1 Жалпы командалар

    5.2 Стек командалары

5.3 Енгізу/шығару командалары

5.4 Мекенжайды қайта жіберу командалары

5.5 Жалаушаны тасымалдау пәрмендері

6. Арифметикалық командалар ………………………………………….

    6.1 Екілік бүтін сандарға арифметикалық амалдар

6.1.1 Қосу және азайту

6.1.2 Қабылдағышты бір көбейту және азайту командалары

6.2 Көбейту және бөлу

6.3 Белгіні өзгерту

7. Логикалық амалдар …………………………………………….

8. Ауысымдар және циклдік жылжулар ………………………………………

9. Жолдық амалдар ……………………………………………….

10. Логика және бағдарламаларды ұйымдастыру ……………………………………

10.1 Шартсыз секірулер

10.2 Шартты секірулер

10.4 Ассемблер тіліндегі процедуралар

10.5 INT үзеді

10.6 Жүйелік бағдарламалық қамтамасыз ету

10.6.1.1 Пернетақтаны оқу.

10.6.1.2 Экранда таңбаларды көрсету

10.6.1.3 Бағдарламаларды аяқтау.

10.6.2.1 Дисплей режимдерін таңдау

11. Дискінің жады ………………………………………………………..

11.2 Файлдарды бөлу кестесі

11.3 Дискіні енгізу/шығару

11.3.1 Файлды дискіге жазу

11.3.1.1 ASCIIZ деректері

11.3.1.2 Файл нөмірі

11.3.1.3 Дискілік файлды құру

11.3.2 Дискілік файлды оқу

Кіріспе

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

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

Кәсіби бағдарламашыны дайындаудың элементі міндетті түрде ассемблерді оқу болып табылады. Себебі ассемблер тілінде бағдарламалау басқа тілдерде тиімдірек бағдарламалар жасауға және оларды ассемблер тіліндегі бағдарламалармен біріктіруге мүмкіндік беретін ДК архитектурасын білуді талап етеді.

Нұсқаулық Intel микропроцессорларына негізделген компьютерлерге арналған ассемблер тілінде бағдарламалауды қарастырады.

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

    ДК архитектурасы.

Компьютердің архитектурасы – оның құрылымдық, схемалық және логикалық ұйымдастырылуын көрсететін компьютердің абстрактілі көрінісі.

Барлық заманауи компьютерлердің кейбір жалпы және жеке архитектуралық қасиеттері бар. Жеке қасиеттер белгілі бір компьютер моделіне ғана тән.

Компьютер архитектурасы концепциясы мыналарды қамтиды:

    компьютердің блок-схемасы;

    элементтерге қол жеткізу құралдары мен әдістері блок-схемаКОМПЬЮТЕР;

    регистрлердің жиынтығы және болуы;

    адресті ұйымдастыру мен әдістері;

    компьютерлік мәліметтерді ұсыну тәсілі мен форматы;

    компьютерлік машина нұсқауларының жиынтығы;

    машина нұсқаулығы форматтары;

    өңдеуді үзу.

Компьютердің аппараттық құралдарының негізгі элементтері: жүйелік блок, пернетақта, дисплей құрылғылары, диск жетектері, баспа құрылғылары (принтер) және әртүрлі байланыс құралдары. Жүйелік блокнегізгі платадан, қуат көзінен және опциялық тақталарға арналған кеңейту слоттарынан тұрады. Аналық платада микропроцессор, тек оқуға арналған жады (ROM), жедел жады(RAM) және сопроцессор.

      Тіркеулер.

Микропроцессордың ішінде ақпарат 32 регистрлер тобында (16 пайдаланушы, 16 жүйе) бар, бағдарламашы пайдалану үшін азды-көпті қолжетімді. Нұсқаулық 8088-i486 микропроцессорын бағдарламалауға арналғандықтан, бұл тақырыпты пайдаланушыға қолжетімді микропроцессордың ішкі регистрлерін талқылаудан бастаған дұрыс.

Пайдаланушы регистрлерін программист программаларды жазу үшін пайдаланады. Бұл регистрлерге мыналар жатады:

    сегіз 32-биттік регистрлер (жалпы мақсаттағы регистрлер) EAX/AX/AH/AL, EBX/BX/BH/BL, ECX/CX/CH/CL, EDX/DX/DLH/DL, EBP/BP, ESI/SI, EDI/DI, ESP/SP;

    алты 16-разрядты сегменттік регистрлер: CS,DS, SS, ES, FS,GS;

    күй және басқару регистрлері: EFLAGS/FLAGS жалау регистрі және EIP/IP нұсқау көрсеткішінің регистрі.

Бір 32-биттік регистрдің бөліктері қиғаш сызық арқылы көрсетіледі. E (кеңейтілген) префиксі 32-биттік регистрді пайдалануды білдіреді. Байттармен жұмыс істеу үшін L (төмен) және H (жоғары) префикстері бар регистрлер қолданылады, мысалы, AL, CH – регистрлердің 16-разрядты бөліктерінің төменгі және жоғары байттарын білдіреді.

        Жалпы регистрлер.

EAX/AX/AH/AL(Аккумулятор регистрі) - батарея. Көбейту мен бөлуде, енгізу-шығару операцияларында және жолдардағы кейбір операцияларда қолданылады.

EBX/BX/BH/BL - базалық регистр(базалық регистр), жадтағы мәліметтерді адрестеу кезінде жиі қолданылады.

ECX/CX/CH/CL - есептегіш(санау регистрі), цикл қайталанулар саны үшін есептегіш ретінде пайдаланылады.

EDX/DX/DH/DL - деректер реестрі(деректер регистрі), аралық деректерді сақтау үшін қолданылады. Кейбір командалар мұны талап етеді.

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

Ұзындығы 32, 16 немесе 8 бит элементтер жолын дәйекті өңдеуге мүмкіндік беретін жолды өңдеу пәрмендерін қолдау үшін мыналар қолданылады:

ESI/SI (бастапқы индекс регистрі) - индекс көзі. Ағымдағы бастапқы элементтің мекенжайын қамтиды.

EDI/DI (қашықтық индексінің тіркелімі) - индекс қабылдағыш(алушы). Тағайындалған жолдағы ағымдағы мекенжайды қамтиды.

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

ESP/SP (стек көрсеткішінің тіркелімі) - тіркелу көрсеткіш стек. Ағымдағы стек сегментіндегі стектің жоғарғы жағына көрсеткішті қамтиды.

EBP/BP (негізгі көрсеткіш тіркелімі) – стектің негізгі көрсеткішінің регистрі. Стек ішіндегі деректерге кездейсоқ қол жеткізуді ұйымдастыруға арналған.

1.1.2. сегменттік регистрлер

Микропроцессорлық программалық модельде алты бар сегменттік регистрлер: CS, SS, DS, ES, GS, FS. Олардың болуы Intel микропроцессорларының ЖЖҚ-ны ұйымдастыру және пайдалану ерекшеліктеріне байланысты. Микропроцессорлық аппараттық құралдан тұратын бағдарламаның құрылымдық ұйымдастыруын қолдайды сегменттер.Сегмент регистрлері қандай сегменттердің қазіргі уақытта қол жетімді екенін көрсету үшін пайдаланылады. Микропроцессор сегменттердің келесі түрлерін қолдайды:

    код сегменті.Құрамында бағдарлама командалары Бұл сегментке қол жеткізу үшін CS регистрін (код сегментінің регистрі) пайдаланыңыз - сегмент кодының регистрі. Ол микропроцессор қол жеткізе алатын машина нұсқаулығы сегментінің мекенжайын қамтиды.

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

    Стек сегменті.Бұл сегмент стек деп аталатын жад аймағы болып табылады. Микропроцессор стекті принцип бойынша ұйымдастырады – бірінші «келді», бірінші «сол». Стекке қол жеткізу үшін SS регистрі (стек сегментінің тіркелімі) пайдаланылады - стек сегментінің регистріСтек сегментінің мекенжайын қамтитын A.

    Қосымша деректер сегменті.Өңделетін деректер үш қосымша деректер сегментінде болуы мүмкін. Әдепкі бойынша деректер деректер сегментінде болады деп есептеледі. Қосымша деректер сегменттерін пайдаланған кезде олардың мекенжайлары пәрмендегі сегментті қайта анықтаудың арнайы префикстері арқылы анық көрсетілуі керек. Қосымша деректер сегменттерінің мекенжайлары ES, GS, FS регистрлерінде болуы керек (кеңейтілген деректер сегментінің регистрлері).

        Бақылау және күй регистрлері

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

EIP/IP пәрмен көрсеткішінің регистрі;

    EFLAGS/FLAGS жалау тізілімі.

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

EIP/IP (нұсқау көрсеткішінің регистрі) - көрсеткіш командалар. EIP/IP регистрінің ені 32 немесе 16 бит және ағымдағы команда сегментіндегі CS сегменті регистрінің мазмұнына қатысты орындалатын келесі нұсқаудың ығысуын қамтиды. Бұл регистр тікелей қол жетімді емес, бірақ ол өту нұсқаулары арқылы өзгертіледі.

EFLAGS/FLAGS (Тулар тіркелімі) - тіркелу жалаушалар. Бит тереңдігі 32/16 бит. Бұл регистрдің жеке биттері белгілі бір функционалдық мақсатқа ие және жалаушалар деп аталады. Жалау - бұл бит, егер қандай да бір шарт дұрыс болса, 1-ге («жалау орнатылды») және 0-ге («жалау жойылды») орнатылады. әйтпесе. Бұл тізілімнің төменгі бөлігі i8086 үшін FLAGS регистріне толығымен ұқсас.

1.1.3 Жалау тізілімі

Жалау регистрі 32 разрядты және EFLAGS атауына ие (1-сурет). Регистрдің жеке биттері белгілі бір функционалдық мақсатқа ие және жалаушалар деп аталады. Олардың әрқайсысына белгілі бір атау (ZF, CF және т.б.) беріледі. EFLAGS төменгі 16 биттері i086 және i286 микропроцессорлары үшін жазылған бағдарламаларды орындау кезінде пайдаланылатын 16 биттік FLAGS регистрін білдіреді.

Сурет 1 Жалаулар тізілімі

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

Шарт жалаушалары:

CF (туды алып жүру) - туды алып жүру. Ол 1 мәнін қабылдайды, егер бүтін сандарды қосқанда разрядтық торға «сәйкес келмейтін» тасымалдау бірлігі пайда болса немесе таңбасыз сандарды шегергенде олардың біріншісі екіншісінен аз болса. Ауыстыру командаларында тордан тыс бит CF-ге енгізіледі. CF көбейту нұсқауының мүмкіндіктерін де бекітеді.

OF (толып кету жалауы) толып кету жалауы. Таңбасы бар бүтін сандарды қосу немесе азайту кезінде модуль рұқсат етілген мәннен асатын нәтиже алынса (мантисса толып кетті және ол белгі битіне «көтерілді») 1 мәніне орнатылады.

ZF (нөлдік жалау) нөлдік жалау. Пәрменнің нәтижесі 0 болса, 1 мәнін орнатыңыз.

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

PF (паритет жалауы) - жалау паритет. Келесі пәрменнің нәтижесі жұп санды екілік құрайтын болса, ол 1-ге тең. Ол әдетте енгізу/шығару операциялары кезінде ғана есепке алынады.

AF (көмекші тасымалдау жалауы) - қосымша тасымалдау жалауы. Екілік-ондық сандармен амалдарды орындау мүмкіндіктерін бекітеді.

Күй жалаушалары:

DF (бағыт жалауы) бағыт жалауы. Жол пәрмендерінде жолдарды сканерлеу бағытын орнатады: DF=0 болғанда, жолдар «алға» (басынан аяғына дейін), DF=1 болғанда – қарама-қарсы бағытта сканерленеді.

IOPL (енгізу/шығару артықшылық деңгейі) - Енгізу/шығару артықшылық деңгейі.Тапсырманың артықшылығына байланысты енгізу-шығару командаларына қол жеткізуді басқару үшін микропроцессордың қорғалған режимінде қолданылады.

NT (кіріктірілген тапсырма) тапсырманы орналастыру жалаушасы.Микропроцессордың қорғалған режимінде бір тапсырманың екіншісіне кірістірілгенін жазу үшін қолданылады.

Жүйе жалаушасы:

IF (Үзіліс жалаушасы) - үзу жалаушасы. IF=0 болғанда процессор оған келетін үзулерге жауап беруді тоқтатады, IF=1 кезінде үзулерді блоктау жойылады.

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

RF (резюме жалауы) жалауын жалғастыру. Түзету регистрлерінен үзілістерді өңдеу кезінде қолданылады.

VM (виртуалды 8086 режимі) - виртуалды 8086 жалауы. 1 - процессор виртуалды 8086 режимінде жұмыс істейді 0 - процессор нақты немесе қорғалған режимде жұмыс істейді.

AC (туралауды тексеру) - туралауды басқару жалаушасы.Жадқа кіру кезінде туралауды басқаруды қосу үшін жасалған.

      Есте сақтауды ұйымдастыру.

Микропроцессор қол жеткізе алатын физикалық жады деп аталады жұмыс жады (немесе жедел жады ЖЕДЕЛ ЖАДТАУ ҚҰРЫЛҒЫСЫ).ЖЖҚ – бұл өзінің бірегей адресі (оның нөмірі) бар байт тізбегі физикалық.Физикалық мекенжай диапазоны 0-ден 4 ГБ-қа дейін. Жадты басқару механизмі толығымен аппараттық құралға негізделген.

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

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

    бет үлгісі. Бұл жағдайда жедел жады 4 Кбайт бекітілген өлшемді блоктар жиынтығы ретінде қарастырылады. Бұл модельдің негізгі қолданылуы ұйымға қатысты виртуалды жад, бұл бағдарламаларға физикалық жад көлемінен көбірек жад орнын пайдалануға мүмкіндік береді. Pentium микропроцессоры үшін ықтимал виртуалды жадтың өлшемі 4 ТБ дейін болуы мүмкін.

Бұл үлгілерді пайдалану және енгізу микропроцессордың жұмыс режиміне байланысты:

    Нақты мекенжай режимі (нақты режим).Режим i8086 процессорының жұмысына ұқсас. Алғашқы процессор үлгілеріне арналған бағдарламалардың жұмысы үшін қажет.

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

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

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

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

Нақты режимде физикалық адресті қалыптастыру

Нақты режимде физикалық мекенжай диапазоны 0-ден 1 Мбайтқа дейін. Ең үлкен сегмент өлшемі - 64 КБ. Белгілі бір нәрсеге сілтеме жасағанда физикалық мекенжайЖЖҚ сегменттің басының мекенжайы және сегмент ішіндегі ығысу арқылы анықталады. Сегменттің басталу адресі сәйкес сегмент регистрінен алынады. Бұл жағдайда сегмент регистрінде сегмент басының физикалық адресінің тек жоғарғы 16 биттері болады. 20 разрядты адрестің жетіспейтін төменгі төрт биті сегмент регистрінің мәнін солға 4 битке жылжыту арқылы алынады. Ауысым операциясы аппараттық құралда орындалады. Алынған 20-биттік мән сегменттің басына сәйкес келетін нақты физикалық мекенжай болып табылады. Яғни физикалық мекенжай«сегмент: офсет» жұбы ретінде көрсетіледі, мұндағы «сегмент» ұяшық жататын жад сегментінің бастапқы мекенжайының алғашқы 16 биті, ал «офсет» - осы ұяшықтың 16 биттік мекенжайы, осы жады сегментінің басы (мәні 16*сегмент +офсет ұяшықтың абсолютті адресін береді). Егер, мысалы, CS регистрінде 1234h мәні сақталса, онда 1234h:507h мекенжай жұбы 16*1234h+507h =12340h+507h = 12847h тең абсолютті адресті анықтайды. Мұндай жұп қос сөз түрінде, ал (сандарға қатысты) «инверттелген» түрде жазылады: бірінші сөзде ығысу, екіншісінде - сегмент бар, бұл сөздердің әрқайсысы өз кезегінде бейнеленген. «төңкерілген» пішін. Мысалы, 1234h:5678h жұбы былай жазылады:| 78 | 56| 34 | 12|.

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

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

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

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

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

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 директивасына кейінгі белгіні алып тастауға болады.

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