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

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

Тақырып 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). Ішкі жадыдепутат. Өңделген ақпаратты, сондай-ақ операция нәтижелерін сақтауға арналған. Регистрлерден 16 разрядты сөздерді өңдеу кезінде ВС, DE, HL жұптары қалыптасады және қосарлы регистр бірінші әріп – В, 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)

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

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

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

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

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

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

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

Жад үлгілері Сегменттерді жарияламас бұрын директива арқылы жад үлгісін көрсету керек. MODEL модификаторы memory_model, calling_convention, OS_type, stack_parameter Негізгі ассемблер тілінің жады үлгілері: жад үлгісі кодты адрестеу Деректерді адрестеу Операциялық жүйе MS-DOS ЖАҒЫНДА КІШКЕН ЖАҚЫНДА Кодтар мен деректердің араласуы Рұқсат етілген Шағын MS-DOS ЖАҒЫНДА, Windows жоқ MS-DOS ЖАҢЫНДА ОРТА ҚЫЗЫҚ, Windows ЖАҚЫНДА ОРТА ҚЫЗЫҚ MS-DOS жоқ, Windows ЖАҢЫНДА ҚЫСҚАНЫ жоқ FAR MS-DOS, Windows ҮЛКЕН FAR MS-DOS жоқ, Windows ҮЛКЕН FAR MS-DOS жоқ, Windows жүйесі жоқ Windows 2000, Windows XP, Windows рұқсат етілген FLAT NEAR NT,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ассемблер тілінің командалары (дәріс)

ДӘРІС ЖОСПАРЫ

1. Операциялардың негізгі топтары.

Pentium.

1. Операциялардың негізгі топтары

Микропроцессорлар келесі негізгі операциялар топтарын жүзеге асыратын командалар жинағын орындайды:

экспедиторлық операциялар,

арифметикалық амалдар,

логикалық операциялар,

ауысымдық операциялар,

салыстыру және сынақ операциялары,

бит операциялары,

Бағдарламаны басқару операциялары;

Процессорды басқару операциялары.

2. Процессор командаларының мнемокодтары Pentium

Командаларды сипаттау кезінде әдетте олардың мнемоникалық белгілеулері (мнемоникалық кодтар) пайдаланылады, олар Assembly тілінде программалау кезінде команданы көрсетуге қызмет етеді. Үшін әртүрлі нұсқаларКейбір пәрмендер үшін ассемблер мнемотехникасы әртүрлі болуы мүмкін. Мысалы, ішкі бағдарламаны шақыру пәрмені үшін мнемоникалық код пайдаланыладыҚОҢЫРАУ немесе JSR («Сатыңыз қосалқы бағдарлама”). Дегенмен, микропроцессорлардың негізгі түрлеріне арналған көптеген командалардың мнемоникалық кодтары бірдей немесе аздап ерекшеленеді, өйткені олар орындалатын операцияны анықтайтын сәйкес ағылшын сөздерінің аббревиатуралары болып табылады. Процессорлар үшін қабылданған командалық мнемотехниканы қарастырайық Pentium.

Алға жіберу пәрмендері. Бұл топтың негізгі командасы – командаMOV , ол екі регистр арасында немесе регистр мен жад ұяшығы арасында деректерді беруді қамтамасыз етеді. Кейбір микропроцессорлар екі жады ұяшығы арасындағы тасымалдауды, сонымен қатар жадыдан бірнеше регистрлердің мазмұнын топтық тасымалдауды жүзеге асырады. Мысалы, 68 отбасының микропроцессорлары Motorola ХХХ пәрменін орындаңызҚОСУ , ол бір жад ұяшығынан екіншісіне тасымалдауды қамтамасыз етеді және командаҚОЗҒАЛУ , ол жадқа жазады немесе жадтан берілген регистрлер жиынының мазмұнын жүктейді (16 регистрге дейін). КомандаXCHG екі процессор регистрінің немесе регистр мен жад ұяшығының мазмұнының өзара алмасуын жүзеге асырады.

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

Арифметикалық амалдарға арналған командалар. Бұл топтағы негізгі командалар қосу, алу, көбейту және бөлу болып табылады, олардың бірнеше нұсқалары бар. Қосу командалары ҚОСУ және алу SUB көмегімен сәйкес операцияларды орындаңызвекі регистрге, регистрге және жадыға ие болу немесе жедел операндты пайдалану. Командалар AD C , С.Б Б атрибуттың мәнін ескере отырып, қосу және азайту амалдарын орындауC, алдыңғы операцияны орындау процесінде беруді қалыптастыру кезінде орнатылады. Бұл командалардың көмегімен цифрлар саны процессордың сыйымдылығынан асатын операндтарды тізбектей қосу жүзеге асырылады. Команда NEG операндтың таңбасын өзгертіп, оны екі толықтауышқа айналдырады.

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

Логикалық командалар . Барлық дерлік микропроцессорлар логикалық операцияларды орындайды ЖӘНЕ, НЕМЕСЕ, Эксклюзивті НЕМЕСЕ, олар командалар арқылы бір аттас операндтық биттерде орындалады. ЖӘНЕ, НЕМЕСЕ, X НЕМЕСЕ . Операциялар екі регистрдің, регистрдің және жад орнының мазмұны бойынша немесе жедел операндты қолдану арқылы орындалады. Команда ЖОҚ Операндтың әрбір битінің мәнін түрлендіреді.

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

Салыстыру және тестілеу командалары . Операндты салыстыру әдетте нұсқаумен орындаладыCMP , ол функциялардың мәндерін орнату арқылы операндтарды алуды жүзеге асырады N, Z, V, Cнәтижеге сәйкес күй реестрінде. Бұл жағдайда алудың нәтижесі сақталмайды және операндтардың мәндері өзгермейді. Алынған сипаттамалық мәндерді кейінгі талдау салыстырмалы мәнді анықтауға мүмкіндік береді (>,<, =) операндов со знаком или без знака. Использование различных способов адресации позволяет производит сравнение содержимого двух регистров, регистра и ячейки памяти, непосредственно заданного операнда с содержимым регистра или ячейки памяти.

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

Битті пайдалану нұсқаулары . Бұл пәрмендер атрибуттың мәнін орнатадыCкүй регистрінде тексерілетін разрядтың мәніне сәйкесмлрд адрестелген операндта. Кейбір микропроцессорларда бит сынау нәтижесіне сәйкес белгі қойыладыЗ. Сынақ бит нөміріnкомандада көрсетілген регистрдің мазмұнымен немесе жедел операнд арқылы орнатылады.

Бұл топтың командалары тексерілген битті өзгертудің әртүрлі нұсқаларын жүзеге асырады BT осы биттің мәнін өзгеріссіз сақтайды.Command Б Т С сынақтан кейін мәнді орнатады млрд=1 және пәрмен Б Т C - мағынасы млрд=0.Пәрмен Б Т C бит bn мәнін тексергеннен кейін инверсиялайды.

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

- шартсыз басқаруды беру командалары;

- шартты өту командалары;

- бағдарлама циклдерін ұйымдастыру командалары;

- үзу командалары;

- мүмкіндікті өзгерту командалары.

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

Ішкі бағдарлама сонымен қатар пәрмен арқылы басқаруды сөзсіз беру арқылы шақырыладыҚОҢЫРАУ (немесе JSR ). Дегенмен, бұл жағдайда жүктеу алдындаДК ішкі программаның бірінші нұсқауының адресін көрсететін жаңа мазмұн, ішкі бағдарлама орындалғаннан кейін негізгі бағдарламаға (немесе ішкі бағдарламаларды кірістіру кезіндегі алдыңғы ішкі бағдарлама). Шартты өту нұсқаулары (бағдарлама тармақтары) жүктеледіДКәдетте күй регистріндегі әртүрлі атрибуттардың ағымдағы мәніне сәйкес орнатылатын белгілі бір шарттар орындалса, жаңа мазмұн. Шарт орындалмаса, программаның келесі командасы орындалады.

Сипаттарды басқару пәрмендері жазуды қамтамасыз етеді - белгілерді сақтайтын күй регистрінің мазмұнын оқуды, сонымен қатар жеке белгілердің мәндерін өзгертуді қамтамасыз етеді. Мысалы, Pentium процессорлары командаларды орындайды LAHF және SAHF , ол күй регистрінен белгілерді қамтитын төмен байтты жүктейді EFLAGрегистрдің төмен байтына дейін EAXжәне толтыру төмен байт EFLAGSтізілімнен Е АX.. Командалар CLC, STCтасымалдау жалауының мәндерін CF=0, CF=1 және пәрменді орнатыңыз CMCбұл мүмкіндіктің мәнін өзгертуге әкеледі.Шартты секірулер кезінде белгілер бағдарламаның орындалу ағынын анықтайтындықтан, әдетте бағдарламаны басқару үшін белгілерді өзгерту нұсқаулары қолданылады.

Процессорды басқару командалары . Бұл топқа процессордың немесе оның жеке блоктарының жұмыс режимін анықтайтын тоқтату командалары, операциясыз және бірқатар командалар кіреді. КомандаHLT бағдарламаның орындалуын тоқтатады және процессорды тоқтау күйіне қояды, одан шығу үзу немесе қайта іске қосу сигналдарын алған кезде орын алады (қалпына келтіру). Команда ЖОҚ Бағдарламаның кешігуін жүзеге асыру немесе бағдарламада пайда болған бос орындарды толтыру үшін ешқандай операцияны орындауға себеп болмайтын («бос» нұсқау) қолданылады.

Арнайы командалар CLI, STI үзу сұрауларының қызметін өшіру және қосу. Процессорларда Pentium бұл үшін басқару биті (жалауша) пайдаланыладыЕГЕРтіркелімде EFLAGS.

Көптеген заманауи микропроцессорлар пайдаланушыға немесе басқа құрылғыларға берілген жүйеде қолданылатын процессор түрі туралы ақпаратты алуға мүмкіндік беретін сәйкестендіру командасын береді. Процессорларда Пентуимпәрмен осыған арналған CPUID , оның барысында процессор туралы қажетті деректер регистрлерге енгізіледі EAX,ebx,ECX,EDXсодан кейін пайдаланушы немесе операциялық жүйе оқи алады.

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

Кейбір процессорлар BCD арифметикалық амалдарын орындайды немесе мұндай сандарды өңдеу кезінде нәтижелерді түзетуге арналған арнайы нұсқауларды орындайды. Көптеген жоғары өнімді процессорлар кіреді FPU - сандарды өңдеу блогыв «қалқымалы нүкте».

Бірқатар заманауи процессорларда бірнеше бүтін сандарды немесе сандарды топтық өңдеу жүзеге асырылады.в Принцип бойынша бір пәрменмен «қалқымалы нүкте». SIMD («Бір нұсқау – бірнеше деректер ”) - «Бір пәрмен – деректер көп». Бірнеше операндтар бойынша операцияларды бір уақытта орындау бейне және аудио деректермен жұмыс істегенде процессордың өнімділігін айтарлықтай арттырады. Мұндай операциялар кескіндерді өңдеуде, дыбыстық сигналдарды өңдеуде және басқа қолданбаларда кеңінен қолданылады. Бұл операцияларды орындау үшін процессорларға арнайы блоктар енгізіледі, олар әртүрлі типтегі процессорларда ( Pentium, Атлон) атын алдыMMX (“ Милти- Медиа кеңейтімі ”) – Мультимедиялық кеңейтім,SSE(« Streaming SIMD Extension ») – Ағынды SIMD - ұзарту, “3 DКеңейтім- 3D кеңейтімі.

Компанияның процессорларына тән қасиет Intel , 80286 үлгісінен бастап, процессор қорғалған виртуалды мекенжай режимінде жұмыс істегенде қамтамасыз етілетін жадқа кіру кезіндегі басымдықты басқару болып табылады - “Қорғалған режим ” (қорғалған режим). Бұл режимді жүзеге асыру үшін қабылданған басымдықты қол жеткізу алгоритміне сәйкес жадты қорғауды ұйымдастыруға қызмет ететін командалардың арнайы топтары қолданылады.

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

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

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

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

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және біз оны түзетеміз!