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

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

Ассемблер тіліндегі құрылымдар

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

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

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

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

А- приорит құрылым әртүрлі типтегі элементтердің белгіленген санынан тұратын деректер түрі болып табылады.

Бағдарламада құрылымдарды пайдалану үшін үш нәрсені орындау керек:

    Сұраңыз құрылым үлгісі .

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

    Анықтаңыз құрылым данасы .

    Бұл кезең алдын ала анықталған (үлгіні пайдалану) құрылымы бар нақты айнымалыны инициализациялауды қамтиды.

    Ұйымдастыру құрылым мүшелеріне қол жеткізу .

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

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

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

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

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

Құрылым үлгісінің сипаттамасы

Құрылым үлгісінің мәлімдемесі келесі синтаксиске ие:

құрылым_атауы STRUC

құрылым_атауы ENDS

Мұнда деректерді сипаттау директивалары тізбегі болып табылады db, dw, dd, dqжәне дт.

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

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

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

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

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

Осы дерекқордың жазба құрылымын келесі үлгімен анықтайық:

Құрылым типі бар мәліметтерді анықтау

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

[айнымалы атауы] құрылым_атауы

    айнымалы атауы- берілгеннің айнымалы идентификаторы құрылымдық түрі.

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

    мәндер тізімі- бұрыштық жақшаға алынған құрылым элементтерінің бастапқы мәндерінің үтірмен бөлінген тізімі.

    Оның тапсырмасы да ерікті.

    Тізім толық емес болса, берілген айнымалыға арналған құрылымның барлық өрістері, егер бар болса, үлгідегі мәндермен инициализацияланады.

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

    Мысалыға: жеңімпаз жұмысшы.

Мысалы, жоғарыда сипатталған құрылым түрімен бірнеше айнымалыларды анықтайық.

Құрылымдық әдістер

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

Тіл белгілі бір құрылым данасында осы айнымалыларға қол жеткізу құралын қамтамасыз етуі керек. Командада қандай да бір құрылымның өрісіне сілтеме жасау үшін арнайы оператор қолданылады - символы». "(нүкте). Ол келесі синтаксисте қолданылады:

    мекенжай_өрнек- төменде көрсетілген синтаксистік ережелерге сәйкес кейбір құрылымдық түрдегі айнымалы идентификатор немесе жақшадағы өрнек (1-сурет);

    құрылым_өріс_атауы- құрылым үлгісінен өріс атауы.

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

Сонымен оператор « . " (нүкте) өрнекті бағалайды

Күріш. 5. Құрылым өрісіне қатынасу операторындағы мекенжай өрнегі синтаксисі

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

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

Сақ болыңыз, өйткені деректерді сақтау принципіне байланысты «төмен мекенжайда төмен байт»жастың ең жоғары саны қойылады ал, ал ең жасы Ах.

Оны түзету үшін жай ғана пәрменді пайдаланыңыз xchg al,ah:

mov ax,word ptr sotr1.age ;at al age sotr1

және бұл мүмкін:

Құрылымдар массивімен одан әрі жұмыс бір өлшемді массивпен бірдей орындалады. Мұнда бірнеше сұрақ туындайды:

Өлшеммен қалай күресуге болады және массив элементтерін индекстеуді қалай ұйымдастыруға болады?

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

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

Мысалыға:

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

mas_sotr жұмысшысы 10 dup()

mov bx,офсет mas_sotr

mov si,(жұмысшы типі)*2 ;si=77*2

mov di,(жұмысшы типі)*4 ;si=77*4

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

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

Төмендегі екі түрдегі деректердің тілінде болуы мүмкін, «хост иесінің» тағам дайындау немесе өнімді орналастыру кезінде үстелдің жұмыс аймағын (RAM) мүмкіндігінше тиімді пайдалануды қалауымен байланысты (бағдарлама деректері) ).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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