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

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

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

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

Pentium.

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

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

Экспедиция операциялары

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

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

Ауысым операциялары

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

Биттік операциялар

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

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

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

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

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

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

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

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

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

Shift пәрмендері. Микропроцессорлар адрестелген операндтардың арифметикалық, логикалық және циклдік ығысуын бір немесе бірнеше битпен орындайды. Ауыстырылатын операнд регистрде немесе жад орнында болуы мүмкін, ал ығысу биттерінің саны нұсқауда қамтылған жедел операнд арқылы анықталады немесе көрсетілген регистрдің мазмұнымен анықталады. Ауысу белгісі әдетте ауысымды жүзеге асыруға қатысадыCкүй тізілімінде (С.Р.немесе 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 , оның барысында процессор туралы қажетті деректер регистрлерге енгізіледі EAXEBXECXEDXсодан кейін пайдаланушы немесе операциялық жүйе оқи алады.

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

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

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

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

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

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

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

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

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

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

Жад үлгілері Сегменттерді жарияламас бұрын директива арқылы жад үлгісін көрсету керек. MODEL модификаторы memory_model, calling_convention, OS_type, stack_parameter Негізгі ассемблер тілінің жады үлгілері: жад үлгісі кодты адрестеу Деректерді адрестеу Операциялық жүйе коды мен деректердің араласуы TINY MS-DOS ЖАҚЫНДА Қабылданатын SMALL NEAR MS-DOS, Windows жоқ ОРТА ҚЫЗЫҚ, Windows ЖАҚЫНДА MSD- ЫҚЫМША ЖАҚЫНДА MS-DOS, Windows LEARGE FAR MS-DOS жоқ, Windows жоқ HUGE FAR MS-DOS, Windows No NEAR Windows 2000, Windows XP, Windows Acceptable FAT NEAR NT,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

INVOKE директивасы MASM тілінің трансляторы сонымен қатар макроқұралдың көмегімен функция шақыруларын жеңілдетуге мүмкіндік береді - INVOKE директивасы: INVOKE функциясы, параметр1, параметр2, ... Функция шақыруына @16 қосудың қажеті жоқ; параметрлер функция сипаттамасында берілген ретпен дәл жазылады. Транслятордың макросы арқылы параметрлер стекке орналастырылады. INVOKE директивасын пайдалану үшін сізде PROTO директивасын пайдалана отырып функция прототипінің сипаттамасы болуы керек: Хабарлама. Қорап. PROTO: DWORD, : DWORD Егер бағдарлама көптеген Win 32 API функцияларын пайдаланса, C: masm 32includeuser 32 қосу директивасын қолданған жөн. inc

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

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

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

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

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

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

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

    Орнату құрылым үлгісі .

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

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

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

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

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

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

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

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

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

Құрылым шаблонының сипаттамасы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Құрылыммен жұмыс істеу әдістері

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

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

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

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

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

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

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

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

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

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

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

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

немесе сіз мұны келесідей жасай аласыз:

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

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

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

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

Мысалыға:

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

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

mov bx,офсет mas_sotr

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

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

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

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

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

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

mov AX, (152 + 101B) / 15

Экспрессиялық бағалау тек аударма кезінде орындалады. Жалаушаларды өзгертпейді.

l PUSH src – сөзді стекке итеру (басу - итеру; src ішінен стекке басыңыз). src мазмұнын – кез келген 16 биттік регистрді (сегменттік регистрді қоса) немесе 16 биттік сөзді қамтитын екі жад ұяшығын – стектің жоғарғы жағына орналастырады. Жалаулар өзгермейді;

l POP dst - стектен сөзді шығару (pop - pop; стектен dst дейін санау). Стектің жоғарғы жағындағы сөзді жояды және оны dst - кез келген 16-разрядты регистрге (сегменттік регистрді қоса) немесе екі жад ұяшығына орналастырады. Жалаулар өзгермейді.

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

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

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

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

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

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

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

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

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

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

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

Тегтер

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

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

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

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

Командалар

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

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

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

Операндтар

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

  • Ешбір операнд ret ;Return
  • Бір операнд inc ecx ;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 директивасына кейінгі белгіні алып тастауға болады.




Жоғарғы