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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

МИРЗО ҰЛЫҒБЕК АТЫНДАҒЫ ӨЗБЕКСТАН ҰЛТТЫҚ УНИВЕРСИТЕТІ

КОМПЬЮТЕРЛІК ТЕХНОЛОГИЯЛАР ФАКУЛЬТЕТІ

Тақырыпқа: Семантикалық талдау EXE файлы.

Аяқталды:

Ташкент 2003 ж.

Алғы сөз.

Ассамблея тілі және нұсқау құрылымы.

EXE файл құрылымы (семантикалық талдау).

COM файлының құрылымы.

Вирус қалай жұмыс істейді және таралады.

Бөлшектеуіш.

Бағдарламалар.

Алғы сөз

Бағдарламашы мамандығы таңғажайып және ерекше. Біздің заманымызда ғылым мен өмірді онсыз елестету мүмкін емес соңғы технология. Адамның іс-әрекетімен байланысты барлық нәрсе онсыз мүмкін емес Информатика. Ал бұл оның жоғары дамуы мен жетілдірілуіне ықпал етеді. Дербес компьютерлердің дамуы жақында басталған жоқ, бірақ осы уақыт ішінде бағдарламалық өнімдерде орасан зор қадамдар жасалды және ұзақ уақыт бойы бұл өнімдер кеңінен қолданылады. Компьютермен байланысты білім саласы, сондай-ақ тиісті технология жарылды. Егер коммерциялық жағын ескермесек, кәсіби қызметтің бұл саласында бейтаныс адамдар жоқ деп айта аламыз. Көбісі пайда немесе пайда үшін емес, өз еркімен, құмарлықпен бағдарлама жасаумен айналысады. Әрине, бұл бағдарламаның сапасына әсер етпеуі керек және бұл бизнесте, былайша айтқанда, сапалы жұмыс, тұрақты жұмыс және қазіргі заманның барлық талаптарына жауап беру үшін бәсекелестік пен сұраныс бар. Мұнда сонымен қатар 60-шы жылдардағы микропроцессорлардың пайда болуын атап өткен жөн, олар ауыстырылды үлкен саншамдар жинағы. Бір-бірінен өте ерекшеленетін микропроцессорлардың кейбір түрлері бар. Бұл микропроцессорлар бір-бірінен разрядтың тереңдігі және кірістірілгендігі бойынша ерекшеленеді жүйелік командалар. Ең кең таралғандары: Intel, IBM, Celeron, AMD және т.б. Бұл процессорлардың барлығы Intel процессорларының жетілдірілген архитектурасына қатысты. Микрокомпьютерлердің таралуы екі негізгі себеп бойынша ассемблер тіліне деген көзқарасты қайта қарауды тудырды. Біріншіден, ассемблер тілінде жазылған бағдарламалар жады мен орындау уақытын айтарлықтай аз талап етеді. Екіншіден, ассемблер тілін және алынған машина кодын білу машина архитектурасы туралы түсінік береді, бұл тілде жұмыс істегенде әрең қамтамасыз етіледі. жоғары деңгей. Бағдарламалық жасақтама мамандарының көпшілігі Паскаль, С немесе Delphi сияқты жоғары деңгейлі тілдерде әзірленсе де, бағдарламаларды жазу оңай, ең қуатты және тиімді. бағдарламалық қамтамасыз етутолық немесе ішінара ассемблер тілінде жазылған. Жоғары деңгейлі тілдер ерекше болмау үшін жасалған техникалық ерекшеліктеріарнайы компьютерлер. Ал ассемблер тілі өз кезегінде процессордың нақты ерекшеліктеріне арналған. Сондықтан белгілі бір компьютерге ассемблер тілінде программа жазу үшін оның архитектурасын білу керек. Қазіргі кезде негізгі бағдарламалық өнім түрі EXE файлы болып табылады. Мұның оң жақтарын ескерсек, бағдарлама авторы оның мызғымастығына сенімді бола алады. Бірақ көбінесе бұл жағдайдан алыс. Сондай-ақ бөлшектеуші де бар. Бөлшектеуіштің көмегімен үзілістер мен бағдарлама кодтарын білуге ​​болады. Ассемблерді жақсы меңгерген адамға бүкіл бағдарламаны өз талғамына қарай қайта жасау қиын болмайды. Мүмкін, ең шешілмейтін мәселе - вирус осы жерден шыққан шығар. Неліктен адамдар вирус жазады? Бұл сұрақты біреулер таңғалып, біреулер ашумен қояды, бірақ соған қарамастан бұл тапсырмаға зиян келтіру тұрғысынан емес, қызығушылық ретінде қызығушылық танытатын адамдар әлі де бар. жүйелік бағдарламалау. Вирустар әртүрлі себептермен жазылады. Біреуі ұнайды жүйелік қоңыраулар, басқалары ассемблерде білімін жетілдіру. Мұның бәрін мен өзімнің мақаламда түсіндіруге тырысамын курстық жұмыс. Ол сонымен қатар EXE файлының құрылымы туралы ғана емес, сонымен қатар ассемблер тілі туралы да айтады.

^ Ассамблея тілі.

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

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

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

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

Бағдарламалаушы немесе кез келген басқа пайдаланушы виртуалды әлемдерді құруға арналған бағдарламаларға дейін кез келген жоғары деңгейлі құралдарды пайдалана алады және, мүмкін, тіпті компьютер шын мәнінде өз бағдарламасы жазылған тілдің командаларын емес, олардың орындайтынына күмәнданбайды. мүлде басқа тілдегі – машиналық тілдегі пәрмендердің скучно және түтіккен тізбегі түріндегі трансформацияланған бейнелеу. Енді мұндай пайдаланушыда стандартты емес мәселе бар немесе бірдеңе дұрыс болмады деп елестетіп көрейік. Мысалы, оның бағдарламасы қандай да бір ерекше құрылғымен жұмыс істеуі немесе компьютердің аппараттық құралдарының принциптерін білуді талап ететін басқа әрекеттерді орындауы керек. Программист қаншалықты ақылды болса да, ол өзінің тамаша бағдарламасын жазған тілде қаншалықты жақсы болса да, ассемблерді білмей жұмыс істей алмайды. Жоғары деңгейлі тілдердің барлық дерлік компиляторларында олардың модульдерін ассемблердегі модульдермен байланыстыру немесе ассемблердің бағдарламалау деңгейіне қол жеткізуді қолдау құралдары болуы кездейсоқ емес.

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

Әдеттегі заманауи компьютер (i486 немесе Pentium негізіндегі) келесі компоненттерден тұрады (1-сурет).

Күріш. 1. Компьютер және перифериялық құрылғылар

Күріш. 2. Блок-схема Дербес компьютер

Суреттен (1-сурет) компьютер бірнеше бөліктен тұратынын көруге болады физикалық құрылғылар, олардың әрқайсысы жүйе деп аталатын бір блокқа қосылған. Логикалық тұрғыдан оның қандай да бір үйлестіру құрылғысының рөлін атқаратыны анық. Жүйелік блоктың ішіне қарайық (монитордың ішіне кіруге тырысудың қажеті жоқ - бұл жерде қызықты ештеңе жоқ, оның үстіне қауіпті): корпусты ашып, бірнеше тақталарды, блоктарды, жалғау сымдарын қараңыз. Олардың функционалдық мақсатын түсіну үшін типтік компьютердің блок-схемасын қарастырайық (2-сурет). Ол абсолютті дәлдікті көрсетпейді және қазіргі дербес компьютер элементтерінің мақсатын, өзара байланысын және типтік құрамын көрсетуді ғана мақсат етеді.

Суреттегі диаграмманы талқылайық. 2 біршама дәстүрлі емес стильде.
Адамның табиғаты, жаңа нәрсемен танысу, оған белгісізді білуге ​​көмектесетін кейбір ассоциацияларды іздеу. Компьютер қандай ассоциацияларды тудырады? Мен үшін, мысалы, компьютер көбінесе адамның өзімен байланысты. Неліктен?

Өзінің бір жерінде компьютер жасап жатқан адам өзіне ұқсас нәрсені жасап жатырмын деп ойлады. Компьютерде сыртқы әлемнен ақпаратты қабылдауға арналған органдар бар - бұл пернетақта, тінтуір, дискілер магниттік дискілер. Суретте. 2 бұл органдар жүйелік автобустардың оң жағында орналасқан. Компьютерде қабылданған ақпаратты «қорытатын» органдар бар - бұлар Орталық Есептеуіш БөлімЖәне жедел жад. Және, ең соңында, компьютерде өңдеу нәтижелерін беретін сөйлеу органдары бар. Бұл да оң жақтағы кейбір құрылғылар.

Қазіргі компьютерлер, әрине, адамнан алыс. Оларды өзара әрекеттесетін тіршілік иелерімен салыстыруға болады сыртқы әлемшартсыз рефлекстердің үлкен, бірақ шектеулі жиынтығы деңгейінде.
Бұл рефлекстер жиынтығы машиналық нұсқаулар жүйесін құрайды. Компьютермен қаншалықты жоғары деңгейде қарым-қатынас жасасаңыз да, соңында бәрі машина нұсқауларының скучно және монотонды тізбегіне түседі.
Әрбір машина командасы осы немесе басқа шартсыз рефлекстің қозуының бір түрі болып табылады. Бұл тітіркендіргішке реакция әрқашан бір мәнді және микробағдарлама түрінде микрокомандалар блогында «байланысты». Бұл микробағдарлама машина командасын орындауға арналған әрекеттерді жүзеге асырады, бірақ қазірдің өзінде белгілі бір сигналдар деңгейінде логикакомпьютер, осылайша компьютердің әртүрлі ішкі жүйелерін басқарады. Бұл микропрограммалық басқару принципі деп аталады.

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

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

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

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

Бұл регистрлерді екі үлкен топқа бөлуге болады:

^16 теңшелетін регистрлер;

16 жүйелік регистрлер.

Ассемблер тіліндегі бағдарламалар регистрлерді өте көп пайдаланады. Регистрлердің көпшілігінің белгілі бір функционалдық мақсаты болады.

Аты айтып тұрғандай, пайдаланушы регистрлері бағдарламашы өз бағдарламаларын жазғанда пайдалана алатындықтан шақырылады. Бұл регистрлер мыналарды қамтиды (3-сурет):

Мәліметтер мен мекенжайларды сақтау үшін бағдарламашылар пайдалана алатын сегіз 32 разрядты регистрлер (жалпы мақсаттағы регистрлер (RON) деп те аталады):

алты сегменттік регистрлер: cs, ds, ss, es, fs, gs;

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

Жалаулар туларды/жалауларды тіркейді;

eip/ip пәрмен көрсеткішінің регистрі.

Күріш. 3. i486 және Pentium микропроцессорларының пайдаланушы регистрлері

Неліктен бұл регистрлердің көпшілігі қиғаш сызықпен көрсетілген? Жоқ, бұл әртүрлі регистрлер емес – олар бір үлкен 32-разрядты регистрдің бөліктері. Оларды бағдарламада жеке объектілер ретінде пайдалануға болады. Бұл i8086 бастап Intel компаниясының жас 16-биттік микропроцессорлық үлгілері үшін жазылған бағдарламалардың жұмыс қабілеттілігін қамтамасыз ету үшін жасалды. i486 және Pentium микропроцессорларында негізінен 32 разрядты регистрлер бар. Олардың саны, сегменттік регистрлерді қоспағанда, i8086 санымен бірдей, бірақ өлшемі үлкенірек, бұл олардың белгілеулерінде көрінеді - оларда бар
e префиксі (Кеңейтілген).

^ Жалпы мақсаттағы регистрлер
Осы топтың барлық регистрлері олардың «төменгі» бөліктеріне қол жеткізуге мүмкіндік береді (3-суретті қараңыз). Бұл суретке қарап отырып, бұл регистрлердің тек төменгі 16 және 8 разрядты бөліктерін өздігінен адрестеу үшін пайдалануға болатынын ескеріңіз. Бұл регистрлердің жоғарғы 16 биттері тәуелсіз нысандар ретінде қол жетімді емес. Бұл, жоғарыда атап өткеніміздей, Intel компаниясының жас 16-биттік микропроцессорлық үлгілерімен үйлесімділік үшін жасалады.

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

eax/ax/ah/al (Аккумулятор регистрі) - аккумулятор.
Аралық деректерді сақтау үшін қолданылады. Кейбір командаларда бұл регистрді пайдалану міндетті болып табылады;

ebx/bx/bh/bl (Базалық регистр) - негізгі регистр.
Кейбір объектінің негізгі адресін жадта сақтау үшін қолданылады;

ecx/cx/ch/cl (Санау регистрі) - есептегіш регистр.
Ол кейбір қайталанатын әрекеттерді орындайтын командаларда қолданылады. Оны қолдану көбінесе сәйкес команданың алгоритмінде жасырын және жасырын болады.
Мысалы, циклді ұйымдастыру командасы басқаруды белгілі бір адресте орналасқан командаға берумен қатар, ecx/cx регистрінің мәнін бірге талдайды және азайтады;

edx/dx/dh/dl (Мәліметтер регистрі) – деректер регистрі.
Дәл eax/ax/ah/al регистрі сияқты ол аралық деректерді сақтайды. Кейбір командалар оны пайдалануды талап етеді; кейбір командалар үшін бұл жанама түрде орын алады.

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

esi/si (Source Index регистрі) - бастапқы индекс.
Тізбек әрекеттеріндегі бұл регистр бастапқы тізбектегі элементтің ағымдағы мекенжайын қамтиды;

edi/di (Destination Index register) – қабылдаушының (алушының) индексі.
Тізбек операцияларындағы бұл регистр тағайындау тізбегіндегі ағымдағы мекенжайды қамтиды.

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

esp/sp (Stack Pointer регистрі) – стек көрсеткішінің регистрі.
Ағымдағы стек сегментіндегі стектің жоғарғы жағына көрсеткішті қамтиды.

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

Стек - бұл еркін мәліметтерді уақытша сақтауға арналған бағдарлама аймағы. Әрине, мәліметтерді деректер сегментінде де сақтауға болады, бірақ бұл жағдайда әрбір уақытша сақталған деректер үшін бағдарламаның өлшемін және пайдаланылатын атаулардың санын ұлғайта алатын жеке аталған жад ұяшығы құрылуы керек. Стектің ыңғайлылығы оның аумағын қайта пайдалану болып табылады, ал стекке деректерді сақтау және оларды сол жерден алу ешбір атауды көрсетпей, тиімді push және pop командалары арқылы жүзеге асырылады.
Стек дәстүрлі түрде, мысалы, ішкі бағдарламаны шақыру алдында бағдарлама пайдаланатын регистрлердің мазмұнын сақтау үшін пайдаланылады, ол өз кезегінде процессор регистрлерін «өз мақсаттары үшін» пайдаланады. Регистрлердің бастапқы мазмұны ішкі бағдарламадан оралған кезде стектен ағып кетеді. Тағы бір кең таралған әдіс - қажетті параметрлерді стек арқылы ішкі бағдарламаға беру. Ішкі программа параметрлердің стекке қандай ретпен орналастырылғанын біле отырып, оларды сол жерден алып, оны орындауда пайдалана алады. Стектің айрықша ерекшелігі ондағы деректердің іріктелуінің ерекше тәртібі болып табылады: кез келген уақытта стекте тек жоғарғы элемент қол жетімді, яғни. стекке жүктелген соңғы элемент. Стектен жоғарғы элементті шығару келесі элементті қолжетімді етеді. Стектің элементтері стекке бөлінген жады аймағында стектің төменгі жағынан (яғни оның максималды адресінен) ретімен төмендейтін адрестерге дейін орналасады. Жоғарғы қолжетімді элементтің мекенжайы SP стектің көрсеткіш регистрінде сақталады. Бағдарлама жадының кез келген басқа аймағы сияқты, стек кейбір сегментке қосылуы немесе бөлек сегментті құруы керек. Кез келген жағдайда сол сегменттің сегменттік мекенжайы SS сегменттік стек регистріне орналастырылады. Осылайша, SS:SP регистрлерінің жұбы қолжетімді стек ұяшығының мекенжайын сипаттайды: SS стектің сегменттік мекенжайын сақтайды, ал SP стекте сақталған соңғы деректердің ығысуын сақтайды (4-сурет, а). Бастапқы күйде стек көрсеткіші SP стектің астыңғы жағында жатқан және оған қосылмаған ұяшықты көрсететініне назар аударайық.

4-сурет. Стек ұйымдастыру: a - бастапқы күй, b - бір элементті жүктегеннен кейін (c бұл мысал- AX регистрінің мазмұны), в - екінші элементті жүктегеннен кейін (DS регистрінің мазмұны), d - бір элементті түсіргеннен кейін, e - екі элементті түсіріп, бастапқы күйіне оралғаннан кейін.

Стекке жүктеу арнайы push стекке командасы арқылы жүзеге асырылады. Бұл нұсқау алдымен стек көрсеткішінің мазмұнын 2-ге азайтады, содан кейін операндты SP мекенжайына орналастырады. Мысалы, стекке AX регистрінің мазмұнын уақытша сақтағымыз келсе, пәрменді орындауымыз керек.

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

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

pop DS
pop AX

Стек қаншалықты үлкен болуы керек? Бұл бағдарламада қаншалықты қарқынды пайдаланылғанына байланысты. Мысалы, стекке 10 000 байт массивін сақтауды жоспарласаңыз, онда стек кем дегенде осы өлшем болуы керек. Кейбір жағдайларда стекті жүйе автоматты түрде пайдаланатынын, атап айтқанда, int 21h үзу командасын орындау кезінде ескеру қажет. Бұл команданың көмегімен процессор алдымен қайтару адресін стекке итереді, содан кейін DOS регистрлердің мазмұнын және үзілген бағдарламаға қатысты басқа ақпаратты сол жерге итереді. Сондықтан, бағдарлама стекті мүлде қолданбаса да, ол бағдарламада болуы және кем дегенде бірнеше ондаған сөздердің өлшемі болуы керек. Бірінші мысалда біз стекке 128 сөз қойдық, бұл сөзсіз жеткілікті.

^ Ассемблер бағдарламасының құрылымы

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

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

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

макрокомандалар – бағдарлама мәтінінің белгілі бір түрде құрастырылған және аударма кезінде басқа сөйлемдермен ауыстырылатын сөйлемдері;

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

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

^ Ассемблер тілінің синтаксисі

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

Күріш. 5. Ассемблер сөйлем пішімі

Күріш. 6. Директиваларды пішімдеу

Күріш. 7. Командалар мен макростар форматы

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

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

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

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

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

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

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

Барлық латын әріптері: A-Z, a-z. Бұл жағдайда бас және кіші әріптер баламалы болып саналады;

0-ден 9-ға дейінгі сандар;

Белгілері?, @, $, _, &;

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

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

Токендер мыналар:

идентификаторлар - операциялық кодтар, айнымалы атаулар және белгі атаулары сияқты бағдарлама нысандарын белгілеу үшін қолданылатын жарамды таңбалар тізбегі. Идентификаторларды жазу ережесі келесідей: идентификатор бір немесе бірнеше таңбадан тұруы мүмкін. Таңбалар ретінде сіз латын әліпбиінің әріптерін, сандарды және кейбір арнайы таңбаларды - _, ?, $, @ пайдалана аласыз. Идентификатор цифрлық таңбадан басталуы мүмкін емес. Идентификатордың ұзындығы 255 таңбаға дейін болуы мүмкін, дегенмен аудармашы тек алғашқы 32 таңбаны қабылдап, қалғанын елемейді. Опцияны пайдаланып ықтимал идентификаторлардың ұзындығын реттеуге болады пәрмен жолы mv. Сонымен қатар, аудармашыға үлкен және кіші әріптерді ажыратуды немесе олардың айырмашылығын елемеуді айтуға болады (бұл әдепкі бойынша орындалады).

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

Құрастыру нұсқаулары олардың талаптарын компьютерге беру мүмкіндігін, логикалық салыстыру үшін бағдарламадағы басқаруды беру механизмін (циклдер мен секірулер) ашады. бағдарламаны ұйымдастыру. Дегенмен, бағдарламалау тапсырмалары соншалықты қарапайым емес. Көптеген бағдарламалар белгілі бір талапқа жеткенше бірнеше нұсқаулар қайталанатын циклдар сериясын және бірнеше әрекеттердің қайсысын орындау керектігін анықтау үшін әртүрлі тексерулерді қамтиды. Кейбір пәрмендер пәрмен көрсеткішіндегі ығысу мәнін тікелей өзгерту арқылы қадамдардың қалыпты ретін өзгерту арқылы басқаруды тасымалдай алады. Жоғарыда айтылғандай, әртүрлі процессорлар үшін әртүрлі командалар бар, бірақ біз 80186, 80286 және 80386 процессорларына арналған кейбір командалардың бірқатарын қарастырамыз.

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

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

1 - команда орындалғаннан кейін жалауша қойылады (1-ге тең);

0 - команда орындалғаннан кейін жалауша қалпына келтіріледі (0-ге тең);

r – жалаушаның мәні команданың нәтижесіне байланысты;

Команданы орындағаннан кейін жалауша анықталмаған;

бос орын – команданы орындағаннан кейін жалауша өзгермейді;

Синтаксистік диаграммаларда операндтарды көрсету үшін келесі белгілер қолданылады:

r8, r16, r32 – байт, сөз немесе қос сөз өлшемді регистрлердің біріндегі операнд;

m8, m16, m32, m48 - байт, сөз, қос сөз немесе 48 бит жады көлеміндегі операнд;

i8, i16, i32 – байт өлшемі, сөз немесе қос сөздің жедел операнды;

a8, a16, a32 - код сегментіндегі салыстырмалы адрес (офсет).

Командалар (алфавиттік ретпен):

*Бұл командалар егжей-тегжейлі сипатталған.

ҚОСУ
(Қосу)

Қосу

^ Пәрмен құрылымы:

тағайындалған жерді, көзді қосыңыз

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

Жұмыс алгоритмі:

бастапқы және тағайындалған операндтарды қосу;

қабылдаушыға қосу нәтижесін жазу;

жалаушаларды орнату.

Команда орындалғаннан кейінгі жалаушалардың күйі:

Қолдану:
Қосу пәрмені екі бүтін операндты қосу үшін қолданылады. Қосудың нәтижесі бірінші операндтың адресіне қойылады. Егер қосу нәтижесі тағайындалған операндтың шегінен шығып кетсе (толып кету орын алса), онда бұл жағдайды cf жалауын талдау, содан кейін adc пәрменін пайдалану арқылы ескеру керек. Мысалы, ax регистріне және жады аймағына ch мәндерін қосайық. Қосу кезінде толып кету мүмкіндігін ескеру керек.

Тіркелу плюс регистр немесе жад:

|000000dw|modregr/rm|

AX (AL) плюс дереу мәнді тіркеңіз:

|0000010w|--деректер--|дерек, егер w=1|

Тіркеу немесе жад плюс жедел мән:

|100000sw|mod000r/m|--деректер--|деректер, егер BW=01|

ҚОҢЫРАУ
(ҚОҢЫРАУ)

Процедураны немесе тапсырманы шақыру

^ Пәрмен құрылымы:

Мақсаты:

стекте қайтару нүктесінің адресін сақтай отырып басқаруды жақын немесе алыс процедураға ауыстыру;

тапсырманы ауыстыру.

Жұмыс алгоритмі:
операнд түрімен анықталады:

Белгі жақын – eip/ip пәрмен көрсеткішінің мазмұны стекке итеріледі және белгіге сәйкес жаңа мекенжай мәні сол регистрге жүктеледі;

Алыс белгі - eip/ip және cs пәрмен көрсеткішінің мазмұны стекке итеріледі. Содан кейін алыс белгіге сәйкес келетін жаңа мекенжай мәндері бірдей регистрлерге жүктеледі;

R16, 32 немесе m16, 32 - басқару тасымалданатын ағымдағы нұсқау сегментіндегі ығысуларды қамтитын регистрді немесе жад ұяшығын анықтау. Басқару тасымалданған кезде, eip/ip пәрмен көрсеткішінің мазмұны стекке итеріледі;

Жад көрсеткіші – шақырылатын процедураға 4 немесе 6 байт көрсеткіші бар жад орнын анықтайды. Мұндай көрсеткіштің құрылымы 2+2 немесе 2+4 байт. Мұндай көрсеткішті түсіндіру микропроцессордың жұмыс режиміне байланысты:

^ Пәрменді орындағаннан кейінгі жалаушалардың күйі (тапсырманы ауыстырып қосудан басқа):

команданың орындалуы жалаушаларға әсер етпейді

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

Нысан коды (төрт пішім):

Сегментте тікелей адрестеу:

|11101000|дисп-төмен|дип-жоғары|

Сегменттегі жанама адрестеу:

|11111111|мод010р/м|

Сегменттер арасындағы жанама адрестеу:

|11111111|мод011р/м|

Сегменттер арасындағы тікелей адрестеу:

|10011010|офсет-төмен|офсет-жоғары|сег-төмен|сег-жоғары|

CMP
(операндтарды салыстыру)

Операндтарды салыстыру

^ Пәрмен құрылымы:

cmp операнд1, операнд2

Мақсаты: екі операндты салыстыру.

Жұмыс алгоритмі:

алуды орындау (операнд1-операнд2);

нәтижеге байланысты жалаушаларды орнатыңыз, операнд1 және операнд2 өзгертпеңіз (яғни нәтижені сақтамаңыз).

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

Нысан коды (үш формат):

Тіркелген немесе тіркелген жад:

|001110dw|modreg/m|

AX (AL) регистрімен жедел мән:

|0011110w|--деректер--|дерек, егер w=1|

Регистр немесе жады бар жедел мән:

|100000sw|mod111r/m|--деректер--|деректер, егер sw=0|

ДЕК
(1 операндты азайту)

Операндтың бір кемуі

^ Пәрмен құрылымы:

дек операнд

Мақсаты: жадтағы операндтың немесе регистрдің мәнін 1-ге азайту.

Жұмыс алгоритмі:
нұсқау операндтан 1-ді азайтады. Команда орындалғаннан кейінгі жалаушалардың күйі:

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

Тіркелу: |01001reg|

^ Регистр немесе жад: |1111111w|mod001r/m|

DIV
(Бөлу қолтаңбасы жоқ)

Бөлім қол қойылмаған

Командалық схема:

div бөлгіш

Мақсаты: екілік белгісі жоқ екі мәнге бөлу операциясын орындау.

^ Жұмыс алгоритмі:
Команда екі операндты қажет етеді - дивиденд және бөлгіш. Дивиденд жанама түрде көрсетіледі және оның мөлшері бөлгіштің өлшеміне байланысты болады, ол командада көрсетілген:

егер бөлгіш байтпен болса, онда дивиденд ax регистрінде орналасуы керек. Операциядан кейін үлес ал-ға, ал қалғаны ah-ға қойылады;

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

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

^ Команданы орындағаннан кейінгі жалаушалардың күйі:

Қолдану:
Пәрмен операндтардың бүтін бөлінуін орындайды, бөлу нәтижесін бөлім ретінде және бөлімнің қалған бөлігін қайтарады. Бөлу операциясын орындау кезінде ерекше жағдай орын алуы мүмкін: 0 - бөлу қатесі. Бұл жағдай екі жағдайдың бірінде орын алады: бөлгіш 0-ге тең немесе бөлгіш eax/ax/al регистріне сыймас үшін тым үлкен.

Нысан коды:

|1111011w|mod110r/m|

INT
(Үзу)

Үзіліс қызметінің тәртібін шақыру

^ Пәрмен құрылымы:

int үзу_саны

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

^ Жұмыс алгоритмі:

жалаулар/жалаулар тіркелімін және қайтару мекенжайын стекке итеріңіз. Қайтару адресін жазу кезінде алдымен cs сегментінің регистрінің мазмұны жазылады, содан кейін eip/ip пәрмен көрсеткішінің мазмұны жазылады;

if және tf жалауларын нөлге қайтару;

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

^ Команданы орындағаннан кейінгі жалаушалардың күйі:

Қолдану:
Синтаксистен көріп отырғаныңыздай, бұл команданың екі түрі бар:

int 3 - өзінің жеке 0cch операциялық коды бар және бір байтты алады. Бұл жағдай кез келген нұсқаудың бірінші байтын ауыстыру арқылы тоқтау нүктелерін орнату үшін әртүрлі бағдарламалық құралды жөндеушілерде пайдалануды өте ыңғайлы етеді. Командалар тізбегінде 0cch opcode бар командаға тап болған микропроцессор бағдарламалық қамтамасыз етуді жөндеушімен байланысу үшін қызмет ететін 3 векторы бар үзу өңдеушісін шақырады.

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

Нысан коды (екі формат):

Тіркелу: |01000reg|

^ Регистр немесе жад: |1111111w|mod000r/m|

JCC
JCXZ/JECXZ
(Егер шарт болса секіру)

(CX=Нөл болса секіріңіз/ ECX=Нөл болса секіріңіз)

Шарт орындалса секіріңіз

CX/ECX нөлге тең болса, секіріңіз

^ Пәрмен құрылымы:

jcc белгісі
jcxz белгісі
jecxz белгісі

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

^ Команда алгоритмі (jcxz/jecxz қоспағанда):
Операциялық кодқа байланысты жалаушалардың күйін тексеру (ол тексерілетін шартты көрсетеді):

егер тексерілетін шарт ақиқат болса, онда операндпен көрсетілген ұяшыққа өтіңіз;

егер тексерілетін шарт қате болса, басқаруды келесі пәрменге беріңіз.

jcxz/jecxz пәрмен алгоритмі:
ecx/cx регистрінің мазмұны нөлге тең болу шартын тексеру:

егер тексерілген шарт болса

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|.

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

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

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 үлгісінен бастап, процессор қорғалған виртуалды мекенжай режимінде жұмыс істегенде қамтамасыз етілетін жадқа кіру кезіндегі басымдықты басқару болып табылады - “Қорғалған режим ” (қорғалған режим). Бұл режимді жүзеге асыру үшін қабылданған басымдықты қол жеткізу алгоритміне сәйкес жадты қорғауды ұйымдастыруға қызмет ететін командалардың арнайы топтары қолданылады.

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