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

Негізгі ақпаратассемблер тілі туралы

Символдық ассемблер тілі машина тілінде бағдарламалаудың кемшіліктерін айтарлықтай жоя алады.

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

Ассемблер тілінде программалау кезінде енгізілген символдық атаулар әдетте программаның семантикасын көрсетеді, ал командалардың аббревиатурасы олардың негізгі қызметін көрсетеді. Мысалы: PARAM – параметр, TABLE – кесте, MASK – маска, ADD – қосу, SUB – азайту, т.б. т.б. Мұндай атаулар бағдарламашыға оңай есте қалады.

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

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

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

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

Ассемблер тілін қолдана отырып, бағдарламашы келесі параметрлерді орната алады:

әрбір микропроцессорлық машина тілінің командасының мнемотехникасы (символдық атауы);

ассемблер тілінде жазылған программа жолдарының стандартты форматы;

көрсетуге арналған формат әртүрлі жолдарменадрестеу және команда нұсқалары;

әр түрлі санау жүйелеріндегі символдық тұрақтыларды және бүтін тұрақтыларды көрсету форматы;

программаны құрастыру (аудару) процесін басқаратын псевдокомандалар.

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

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

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

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

· операция бөлмесі – «не істеу керектігін» анықтау;

· операнд – өңдеу объектілерін анықтау, «не істеу керек».

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

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

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

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

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

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

Тікелей адрестеу: Тиімді мекенжай өлшемі 8, 16 немесе 32 бит болуы мүмкін машина нұсқаулығының ығысу өрісімен тікелей анықталады.

mov eax, қосынды ; eax = қосынды

Ассемблер қосындыны деректер сегментінде сақталған сәйкес адреспен ауыстырады (әдепкі бойынша ds регистрімен адрестелген) және сома бойынша сақталған мәнді eax регистріне орналастырады.

Жанама адрестеуөз кезегінде келесі түрлері бар:

· жанама негізгі (регистрлік) адрестеу;

· офсетпен жанама негізгі (регистрлік) адрестеу;

· жанама индексті адрестеу;

· жанама негізгі индексті адрестеу.

Жанама негізгі (регистрлік) адрестеу.Бұл адрестеу арқылы операндтың тиімді мекенжайы sp/esp және bp/ebp (бұл стектің сегментімен жұмыс істеуге арналған арнайы регистрлер) қоспағанда, жалпы мақсаттағы регистрлердің кез келгенінде орналасуы мүмкін. Командадағы синтаксистік түрде бұл адрестеу режимі регистр атауын ішіне қосу арқылы көрсетіледі шаршы жақшалар.

mov eax, ; eax = *esi; *esi мекенжайындағы esi мәні

Кіріспе.

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

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

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

). Символдардың құрылған тізбегі бастапқы бағдарламаға тағайындалған функцияларды орындау үшін қолданылады.

Төменде талқыланған ассемблер тілі компиляция көмегімен жүзеге асырылады.

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

Ассемблердің негізгі мүмкіндіктері:

● тілде екілік кодтардың орнына символдық атаулар қолданылады - мнемотехника.Мысалы, қосу пәрмені үшін (

) мнемотехника қолданылады

Шешімдер (

көбейту (

Бөлімшелер (

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

әрбір мәлімдеме сәйкес келеді бір машина командасы(код), яғни ассемблер тіліндегі бағдарламада машина командалары мен операторлар арасында жеке сәйкестік бар;

● тіл қатынасты қамтамасыз етеді барлық объектілергежәне командалар. Жоғары деңгейлі тілдерде мұндай мүмкіндік жоқ. Мысалы, ассемблер тілі жалаулар регистрінің биттерін және жоғары деңгейлі тілді тексеруге мүмкіндік береді (мысалы,

) мұндай қабілет жоқ. Жүйелік бағдарламалау тілдері (мысалы, C) жиі аралық орынды алатынын ескеріңіз. Қол жетімділік жағынан олар ассемблер тіліне жақынырақ, бірақ жоғары деңгейлі тілдің синтаксисі бар;

● ассемблер тілі әмбебап тіл емес.Микропроцессорлардың әрбір нақты тобының өз ассемблері болады. Жоғары деңгейлі тілдерде бұл кемшілік жоқ.

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

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

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

Көптеген бағдарламаларда жалпы кодтың аз ғана пайызы бағдарламаның орындалу уақытының үлкен пайызына жауап береді. Әдетте, бағдарламаның 1%-ы орындалу уақытының 50%-ына, ал 10%-ы орындалу уақытының 90%-ына жауап береді. Сондықтан нақты жағдайда нақты бағдарламаны жазу үшін ассемблер де, жоғары деңгейлі тілдердің бірі де қолданылады.

Ассемблер тіліндегі оператор пішімі.

Ассемблер тіліндегі бағдарлама – командалар (мәлімдемелер, сөйлемдер) тізімі, олардың әрқайсысы жеке жолды алады және төрт өрісті қамтиды: белгі өрісі, операция өрісі, операнд өрісі және түсініктеме өрісі. Әрбір өрісте жеке баған болады.

Белгі өрісі.

1-баған белгі өрісі үшін бөлінген. Белгі символдық атау немесе идентификатор, мекенжайларжады. Бұл сізге қажет:

● командаға шартты немесе шартсыз көшу;

● деректер сақталған орынға қол жеткізу.

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

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

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

Операциялық код өрісі.

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

регистрді жадтан жүктеу үшін мнемоника таңдалған

), ал регистрдің мазмұнын жадта сақтау үшін - мнемотехника

). Ассемблер тілдерінде

екі әрекет үшін де сәйкесінше бір атауды пайдалануға болады

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

Регистрлердің мнемотехникасы ассемблер нұсқасына да байланысты (5.2.1-кесте).

Операнд өрісі.

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

● сандық деректер,

әртүрлі санау жүйелерінде берілген. Қолданылатын санау жүйесін көрсету үшін тұрақтыдан кейін біреуі қойылады Латын әріптері: IN,

Сәйкесінше екілік, сегіздік, он алтылық, ондық санау жүйелері (

Оны жазудың қажеті жоқ). Егер он алтылық санның бірінші цифры A, B, C болса,

Содан кейін алдына елеусіз 0 (нөл) қосылады;

● ішкі микропроцессорлық регистрлердің және жады ұяшықтарының кодтары

M (ақпарат көздері немесе қабылдаушылар) A, B, C әріптері түрінде,

М немесе олардың кез келген санау жүйесіндегі адрестері (мысалы, 10В – регистрлік адрес

екілік жүйеде);

● идентификаторлар,

әуе кемелерін тіркеу жұптары үшін,

Бірінші әріптер В,

N; аккумулятор мен мүмкіндіктер регистрінің жұбы үшін -

; бағдарлама есептегіші үшін -

;стек көрсеткіші үшін -

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

(егер шарт орындалса) және шартсыз ауысулар.Мысалы, командадағы M1 операнды

адресі белгі өрісінде M1 идентификаторымен белгіленген командаға сөзсіз көшу қажеттілігін білдіреді;

● өрнектер,

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

Сөзді анықтаңыз), кейінірек енгізілді Балама опция.

басынан бастап процессорлар тілінде болған

Тілдік нұсқада

пайдаланылады

Тұрақтыны анықтаңыз).

Процессорлар әртүрлі ұзындықтағы операндтарды өңдейді. Оны анықтау үшін ассемблерді әзірлеушілер әртүрлі шешімдер қабылдады, мысалы:

Әртүрлі ұзындықтағы II регистрлердің әртүрлі атаулары бар: EAX - 32-разрядты операндтарды орналастыру үшін (түрі

); AX - 16-бит үшін (түр

және AN - 8-бит үшін (түр

● процессорларға арналған

Әр операциялық кодқа жұрнақтар қосылады: жұрнақ

Түрі үшін

; түрі үшін ".B" жұрнағы

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

) және сөздерді операциялық кодтарды пайдаланып 64-биттік регистрге енгізіңіз

тиісінше.

Пікірлер өрісі.

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

● компанияның процессорлары үшін тілдерде нүктелі үтір (;).

леп белгісі(!) үшін тілдерде

Әрбір бөлек түсініктеме жолының алдында жетекші таңба болады.

Псевдокомандалар (директивалар).

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

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

псевдокомандаларнемесе директивалар,бағдарламаны код комбинациясы тіліне аудару процесіне қызмет көрсетуге арналған. Кестеде мысал ретінде. 5.2.2 ассемблердің кейбір псевдокомандаларын көрсетеді

отбасы үшін

.

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

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

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

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

Макрос немесе макрокоманда үш аспектімен сипатталады: макроанықтау, макроинверсия және макрокеңейту.

Макро анықтамасы

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

Макрос анықтамасы келесі құрылымға ие:

Өрнектер тізімі; Макро анықтамасы

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

● тақырып

макрос, соның ішінде атауы

Псевдокоманда

және параметрлер жиынтығы;

● нүктелермен белгіленген денемакро;

● команда

бітіру

макроанықтамалар.

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

Таңдалған командалар тобын қайта жинау үшін атаудан тұратын апелляция қолданылады

макрокомандалар және басқа мәндері бар параметрлер тізімі.

Ассемблер компиляция процесінде макрос анықтамасымен кездессе, оны макрос анықтамасы кестесінде сақтайды. Атаудың бағдарламасында кейінгі пайда болған кезде (

) макростың негізгі бөлігімен ассемблер оны ауыстырады.

Макрос атауын операциялық код ретінде пайдалану деп аталады макрореверс(макрос шақыру) және оны макростың негізгі бөлігімен ауыстыру - макро кеңейту.

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

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

Құрастыру процесі жүзеге асырылады екі өтуде:

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

● екінші рұқсат алынған бағдарламаны макростарсыз өңдейді.

Параметрлері бар макростар.

Параметрлері әртүрлі мәндерді қабылдай алатын қайталанатын командалар тізбегімен жұмыс істеу үшін макроанықтамалар берілген:

● бірге нақтымакрос шақырудың операнд өрісіне орналастырылатын параметрлер;

● бірге формальдыпараметрлері. Макросты кеңейту кезінде макростың негізгі бөлігінде пайда болатын әрбір ресми параметр сәйкес нақты параметрмен ауыстырылады.

параметрлері бар макростарды пайдалану.

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

Ал екіншісі

2-бағдарлама екі формальды P1 және P2 параметрі бар макросты қамтиды. Макросты кеңейту кезінде макростың ішіндегі әрбір P1 таңбасы бірінші нақты параметрмен ауыстырылады (P,

), ал P2 символы екінші нақты параметрмен ауыстырылады (

) №1 бағдарламадан. Макрос шақыруда

2-бағдарлама белгіленеді: P,

Бірінші нақты параметр,

Екінші нақты параметр.

1-бағдарлама

2-бағдарлама

MOV EBX,Q MOV EAX,Pl

MOV Q,EAX MOV EBX,P2

MOV P,EBX MOV P2,EAX

Кеңейтілген мүмкіндіктер.

Кейбір кеңейтілген тіл мүмкіндіктерін қарастырайық

Шартты өту пәрмені мен өту керек белгіні қамтитын макрос екі немесе одан да көп рет шақырылса, белгі қайталанады (көшірме белгі мәселесі), бұл қатені тудырады. Сондықтан әрбір қоңырау параметр ретінде жеке белгіні тағайындайды (бағдарламашы бойынша). Тілде

белгі жергілікті деп жарияланған (

) және кеңейтілген мүмкіндіктердің арқасында ассемблер макрос кеңейтілген сайын басқа белгіні автоматты түрде жасайды.

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

IF WORDSIZE GT 16 М2 МАКРО

M2 макросы оператордың екі бөлігінде де анықталуы мүмкін

Дегенмен, анықтама бағдарламаның қай процессорда жинақталғанына байланысты: 16-биттік немесе 32-биттік. Егер M1 шақырылмаса, M2 макросы мүлде анықталмайды.

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

Ассемблерде макроқұралдарды қолдану туралы.

Макростарды пайдаланған кезде ассемблер екі функцияны орындай алуы керек: макрос анықтамаларын сақтаңызЖәне макро қиындықтарды кеңейту.

Макрос анықтамаларын сақтау.

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

Құрастыру кезінде макросты кездестірген кезде құрылады:

кестенің жаңа элементімакростың атымен, параметрлер санымен және макростың негізгі бөлігі сақталатын басқа макросты анықтау кестесінің көрсеткішімен;

● тізім формальдыпараметрлері.

Жай таңбалар тізбегі болып табылатын макростың негізгі бөлігі макросты анықтау кестесінде оқылады және сақталады. Циклдің негізгі бөлігінде пайда болатын формальды параметрлер белгіленеді ерекше сипат.

Макростың ішкі көрінісі

2-бағдарламаға арналған жоғарыдағы мысалдан (244-бет) мынандай болады:

MOV EAX, MOV EBX, MOV MOV &

мұнда нүктелі үтір каретканы қайтару таңбасы ретінде, ал & амперсанды формальды параметр таңбасы ретінде пайдаланылады.

Макрос қоңырауларын кеңейту.

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

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

Екі жолақты ассемблер.

Бағдарлама бірнеше мәлімдемелерден тұрады. Сондықтан, құрастыру кезінде келесі әрекеттер тізбегін қолдануға болатын сияқты:

● оны машина тіліне аудару;

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

● бүкіл бағдарлама аударылғанша аталған процедураларды қайталаңыз.

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

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

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

Бірінші өту.

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

;Мән – буфер өлшемі

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

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

Таңба атауы кестесі

әрбір атау үшін бір элементтен тұрады (5.2.4-кесте). Символдық атаулар кестесінің әрбір элементі атауды (немесе оған көрсеткішті), оның сандық мәнін және кейде кейбір қосымша ақпаратты қамтиды, олар мыналарды қамтуы мүмкін:

● белгімен байланысты деректер өрісінің ұзындығы;

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

● таңбаға процедурадан тыс қол жеткізуге болатыны туралы ақпарат.

Символдық атаулар – белгілер. Оларды операторлар арқылы көрсетуге болады (мысалы,

Директивалық кесте.

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

Операциялық код кестесі.

Әрбір операция коды үшін кестеде жеке бағандар бар: операция кодының белгіленуі, операнд 1, операнд 2, операция кодының он алтылық мәні, команда ұзындығы және команда түрі (5.2.5-кесте). Операндтардың саны мен түріне байланысты операциялық кодтар топтарға бөлінеді. Пәрмен түрі топ нөмірін анықтайды және сол топтағы барлық пәрмендерді өңдеу үшін шақырылатын процедураны көрсетеді.

Екінші өту.

Екінші пастың мақсаты- объектілік бағдарламаны құру және қажет болған жағдайда құрастыру хаттамасын басып шығару; бір орындалатын файлға әр түрлі уақытта жиналған процедураларды байланыстыру үшін сілтеме жасаушыға қажетті шығыс ақпараты.

Екінші өтуде (біріншідегідей) мәлімдемелерді қамтитын жолдар бірінен соң бірі оқылады және өңделеді. Түпнұсқа оператор және одан он алтылық жүйеде алынған шығару операторы объектКодты басып шығаруға немесе кейінірек басып шығару үшін буферге қоюға болады. Командалық мекенжай есептегішін қалпына келтіргеннен кейін команда шақырылады келесі мәлімдеме.

Бастапқы бағдарламада қателер болуы мүмкін, мысалы:

берілген таңба анықталмаған немесе бірнеше рет анықталған;

● операция коды жарамсыз атаумен берілген (терме қатесіне байланысты), операндтары жеткіліксіз немесе операндтары тым көп;

● оператор жоқ

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

Ассемблер тіліне арналған мақалалар.

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

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

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

Ассамблея тіліәрбір айтылым дәл бір машина командасына сәйкес келетін тіл болып табылады.

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

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

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

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

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



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

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

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

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

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

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

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

Сандар тек бүтін сандар. Сонда бар:

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

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

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

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

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

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

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

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

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

С З А.С. П C

1-сурет

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

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

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

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

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

P бит (паритет) – паритет, нәтиженің биттеріндегі бірліктердің саны жұп болса, 1-ге орнатылады.

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

Z биті (нөл) – операцияның нәтижесі 0 болса, 1 мәніне орнатылады.

S бит (белгі) – нәтиже теріс болса 1-ге, ал нәтиже оң болса 0-ге орнатылады.

SP– стек көрсеткіші, 16 разрядты регистр, стекке енгізілген соңғы байт жазылған жад ұяшығының мекенжайын сақтауға арналған.

Р.С– келесі орындалатын команданың адресін сақтауға арналған 16 разрядты регистр (программалық есептегіш). Бағдарлама есептегішінің мазмұны келесі нұсқау байты алынғаннан кейін автоматты түрде 1-ге артады.

0000Н – 07FF мекенжайының бастапқы жады аймағында басқару бағдарламасы мен демонстрациялық бағдарламалар бар. Бұл ROM аймағы.

0800 – 0AFF – зерттелетін бағдарламаларды жазуға арналған мекенжай аймағы. (ЖЕДЕЛ ЖАДТАУ ҚҰРЫЛҒЫСЫ).

0В00 – 0ВВ0 - деректерді жазуға арналған адрес аймағы. (ЖЕДЕЛ ЖАДТАУ ҚҰРЫЛҒЫСЫ).

0ВВ0 – стектің бастапқы мекенжайы. (ЖЕДЕЛ ЖАДТАУ ҚҰРЫЛҒЫСЫ).

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

Мәліметтер форматы және ассемблер тілінің командалық құрылымы

MP KR580VM80 жады байт деп аталатын 8 разрядты сөздердің массиві болып табылады.Әр байттың жад ұяшықтарының тізбегіндегі орнын анықтайтын өзінің 16 разрядты адресі бар. МП ROM және жедел жадта болуы мүмкін 65536 байт жадты адрестей алады.

Деректер пішімі

Деректер жадта 8 разрядты сөздер түрінде сақталады:

D7 D6 D5 D4 D3 D2 D1 D0

Ең аз маңызды бит 0 бит, ең маңызды бит 7 бит.

Пәрмен оның пішімімен, яғни оған бөлінген биттердің санымен сипатталады, олар байт-байт бойынша белгілі бір функционалды өрістерге бөлінеді.

Пәрмен пішімі

MP KR580VM80 пәрмендері бір, екі немесе үш байт пішіміне ие. Көпбайтты командалар көрші тілдерде орналастырылуы керек. Пәрмен пішімі орындалатын операцияның ерекшеліктеріне байланысты.

Команданың бірінші байты мнемоникалық түрде жазылған операциялық кодты қамтиды.

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

Екінші және үшінші байттарда операциялар орындалатын деректер немесе деректердің орнын көрсететін мекенжайлар болуы мүмкін. Әрекеттер орындалатын мәліметтер операндтар деп аталады.

2-суретке сәйкес бір байт команда пішімі

4-сурет

Ассемблер тілінің командаларында операциялық код ағылшын сөздерін жазудың қысқартылған түрі – мнемоникалық белгіге ие. Мнемотехника (грек тілінен mnemonic – есте сақтау өнері) командаларды функционалдық мақсаты бойынша есте сақтауды жеңілдетеді.

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


Адресті анықтау әдістері

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

MP KR580VM80 үшін келесі адрестеу әдістері бар:

Тікелей;

Тіркелу;

Жанама;

Қапталған.

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

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

Тіркелу адрестеу операндтың (кіріс немесе шығыс) МП ішкі регистрінде болуын болжайды. Бір байтты командаларда қолданылады

Жанама (имплицитті) адрестеу МП ішкі регистрінде операндтың өзі емес, оның жадыдағы адресі болады деп болжайды.

Стек адрестеу пәрменде адрес жоқ деп есептейді. 16-биттік SP регистрінің (стек көрсеткіші) мазмұнын пайдаланып жад ұяшықтарын адрестеу.

Командалық жүйе

МП командалық жүйесі МП орындай алатын қарапайым әрекеттердің толық тізімі болып табылады. Осы командалар арқылы басқарылатын МП қарапайым арифметикалық және логикалық операциялар, мәліметтерді беру, екі мәнді салыстыру және т.б. сияқты қарапайым әрекеттерді орындайды. KR580VM80 МП командаларының саны 78 (244 өзгертулерді ескере отырып).

Келесі командалар топтары бөлінеді:

Мәліметтерді тасымалдау;

Арифметика;

Ой қозғау;

Секіру командалары;

Енгізу/шығару, басқару және стек командалары.


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

Таңба Қысқарту
ADDR 16-биттік мекенжай
ДЕРЕКТЕР 8-биттік деректер
ДЕРЕКТЕР 16 16-биттік деректер
ПОРТ 8-биттік енгізу/шығару құрылғысының мекенжайы
БАЙТ 2 Пәрменнің екінші байты
БАЙТ 3 Команданың үшінші байты
R, R1, R2 Регистрлердің бірі: A, B, C, D, E, H, L
Р.П. Регистрлік жұптардың бірі: В – ВС жұбын анықтайды; D - DE жұбын анықтайды; H – HL жұбын көрсетеді
RH Жұптың бірінші тіркелімі
Р.Л. Жұптың екінші реестрі
Λ Логикалық көбейту
В Логикалық қосу
Екінші модульді қосу
М Мекенжайы HL регистр жұбының мазмұнын көрсететін жад ұяшығы, яғни M = (HL)

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 микропроцессорларына негізделген компьютерлерге арналған ассемблер тілінде бағдарламалауды қарастырады.

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

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

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

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

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

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

    компьютердің блок-схемасының элементтеріне қол жеткізу құралдары мен әдістерін;

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

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

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

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

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

    өңдеуді үзу.

Компьютердің аппараттық құралдарының негізгі элементтері: жүйелік блок, пернетақта, дисплей құрылғылары, диск жетектері, басып шығару құрылғылары (принтер) және әртүрлі байланыс жабдықтары. Жүйелік блоканалық платадан, қуат көзінен және қосымша карталарға арналған кеңейту ұяшықтарынан тұрады. Жүйелік тақтада микропроцессор, тек оқуға арналған жады (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 (стек сегментінің тіркелімі) регистрін пайдаланыңыз - стек сегментінің регистрі, стек сегментінің мекенжайын қамтитын.

    Қосымша деректер сегменті.Өңделген деректер үш қосымша деректер сегментінде орналасуы мүмкін. Әдепкі бойынша деректер деректер сегментінде болады деп есептеледі. Қосымша деректер сегменттерін пайдаланған кезде олардың мекенжайлары пәрмендегі сегментті қайта анықтау префикстерінің көмегімен нақты көрсетілуі керек. Қосымша деректер сегменттерінің мекенжайлары 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|.

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

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

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

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

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

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

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

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

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

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

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

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




Жоғарғы