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



Кіріспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. 2
1. Регистрлер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. 3
2. ЭЕМ . де есептердің өтетін кезеңдері ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . 5
3. Ассемблер тілінде программалау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. 6
3.1. Ассемблер командасының пішімі ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 7
3.2. Жалғаноператорлар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 8
3.2.1. Мән беру жалғаноператорлары ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . 8
3.2.2. Деректерді анықтау жалғаноператорлары
3.2.3. Сегмент пен ішкіпрограммаларды анықтау жалғаноператорлары ... ... .. 9
3.2.4. Сырттық сілтеме жалғаноператорлары
3.2.5. Аудармалауды басқару жалғаноператорлары ... ... ... ... ... ... ... ... ... ... .. 10
3.2.6. Листингіні басқару жалғаноператорлары ... ... ... ... ... ... ... ... ... ... ... ... 10
3.3. Мекендету әлпілері ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . 11
3.4. Ассемблер командасының түрлері ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 13
3.4.1. Алып . орналастыру командалары ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . 13
3.4.2. Арифметикалық командалар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 15
3.4.3. Жеке разрядтармен жұмыс істеу командалары ... ... ... ... ... ... ... ... ... ... . 19
3.4.4. Басқару тізгінін ауыстыру командалары ... ... ... ... ... ... ... ... ... ... ... ... ... 21
3.4.5. Символдар қатарын өңдеу командалары ... ... ... ... ... ... ... ... ... ... ... ... ... 23
3.4.6. Санашықты басқару командалары ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 26
3.4.7. Үзу командалары ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. 26
4. Ассемблер командасының құрылымы ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. 27
5. Қорытынды ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..30
6. Қолданған әдебиеттер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .31
7. Қосымша А ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. 32
Электрондық есептеу мәшинесінің программалық жабдықтары жүйелік және қолданбалық болып екіге бөлінеді.Жүйелік программалық жабдықтар немесе
“жүйелік программалық қамтама” басқа программаларды жасау, дайындау және орындау үшін қажетті программалардан тұрады.Оған :
1) Операциялық жүйе ;
2) Жоғарғы деңгейлі тілдердің трансляторлары ассемблер;
3) Жазбахабар түзеткіштері және программаны жазуға көмектесе-тін тағы басқа программалар кіреді.
Операциялық жүйе жүйелік программалық қамтаманың түйіні болып табыла-ды.Ол ЭЕМ мен оны пайдаланушылардың дара қатынасын және мәшиненің ресурстарын тиімді пайдалануды қамтамасыз ететін жүйелік программалар-
дың жиынтығы болып келеді.
Ассемблер немесе жоғарғы деңгейлі тілде жазылған программаны мәши-нелік тілге аудару үшін аударғыш (транслятор) деп аталатын программалар
Қолданылады.Ассемблер тілінде жазылған программаның аударғышы ассем-
блер деп аталады, ал жоғарғы деңгейлі тілде жазылған программаның аудар-
ғыштары программа аударғыш-орындағыш (интерпретатор) немесе програм-
ма аударғыш (компилятор) деп аталады.
Жазбахабар түзеткіштері- ЭЕМ-нің сыртқы жадында сақталған немесе жаңадан жазылған жазбахабарды енгізу немесе өзгерту үшін қолданылатын
программа жазбахабар- ассемблер немесе жоғарғы деңгейлі тілде жазылған программа, деректер немесе есептер жиыны.
Программаны жазғаннан соң оны орындату үшін тағы екі жүйелік прог-рамма қажет.Көптеген операциялық жүйелерде кез келген жүйелік немесе орындалатын программаға қосуға болатын бағдарламахана деп аталатын про-
граммалар жиынтығы болады.Орындалатын программаны және бағдарлама-
хананы немесе басқа аудармаланған ішкі программаларды біріктіретін көмек-
ші программа байланыстар түзеткіш немесе программа құрастырғыш (компо- новщик) деп аталады. Орындалатын программаны жадыға орналастырушы программа жүктемелеуші (загрузчик) деп аталады.Кейде байланыстарды тү- зету мен жүктемелеу жұмыстарын бір программа атқарды.Қолданбалы прог- раммалық жабдықтар мәшинеде жұмыс істеушілердің өз есептерін шешу үшін жасалған программаларынан тұрады.
Кез келген есепті шығару алдында программа жазу үшін программалау ті-
лін таңдау мәселесі тұрады.Әрбір тілдің артықшылықтары мен кемшіліктері жайлы әр түрлі пікірлер бар.Көбіне программашы өзі әдеттенген тілді артық санайды.Жалпы алғанда, кез келген тілмен кез келген программаны жазуға болады.Мәселе программаны жазу қолайлығы және жазылған программаның
есептеу жылдамдығы мен оның мәшине жадында алатын орнында.Мысалы СИ, Паскаль, Бейсик тілдерінде есептеу және жазбахабармен жұмыс жасайтын
1. П.Абель. “Язык Ассемблера для IBM РС и программирования”/ Пер. с англ. М.: Высш.шк., 1992.
2. Л.Скэнлон. “Персональные ЭВМ IBM РС и ХТ. Программирование на языке ассемблере”/ Пер. С англ. – М.: Радио и связь.
3. В.Юров “Assembler”- СПб.:Питер,2001.

М а з м ұ н ы

Кіріспе
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... ... ... ... ... ... ... 2
1. Регистрлер
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... ... ... .. 3
2. ЭЕМ – де есептердің өтетін кезеңдері
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. 5
3. Ассемблер тілінде программалау
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 6
3.1. Ассемблер командасының пішімі
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . 7
3.2. Жалғаноператорлар
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... 8
3.2.1. Мән беру жалғаноператорлары
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. 8
3.2.2. Деректерді анықтау жалғаноператорлары
3.2.3. Сегмент пен ішкіпрограммаларды анықтау жалғаноператорлары
... ... .. 9
3.2.4. Сырттық сілтеме жалғаноператорлары
3.2.5. Аудармалауды басқару жалғаноператорлары
... ... ... ... ... ... ... ... ... ... ... 10
3.2.6. Листингіні басқару жалғаноператорлары
... ... ... ... ... ... ... ... ... ... ... ... . 10
3.3. Мекендету әлпілері
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... . 11
3.4. Ассемблер командасының түрлері
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . 13
3.4.1. Алып – орналастыру командалары
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .. 13
3.4.2. Арифметикалық командалар
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 15
3.4.3. Жеке разрядтармен жұмыс істеу командалары
... ... ... ... ... ... ... ... ... ... .. 19
3.4.4. Басқару тізгінін ауыстыру командалары
... ... ... ... ... ... ... ... ... ... ... ... ... . 21
3.4.5. Символдар қатарын өңдеу командалары
... ... ... ... ... ... ... ... ... ... ... ... ... 23
3.4.6. Санашықты басқару командалары
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . 26
3.4.7. Үзу командалары
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... .. 26
4. Ассемблер командасының құрылымы
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 27
5. Қорытынды
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... ... ... ..30
6. Қолданған әдебиеттер
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... .31
7. Қосымша А
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... ... ... .. 32

Кіріспе

Электрондық есептеу мәшинесінің программалық жабдықтары жүйелік және
қолданбалық болып екіге бөлінеді.Жүйелік программалық жабдықтар немесе
“жүйелік программалық қамтама” басқа программаларды жасау, дайындау және
орындау үшін қажетті программалардан тұрады.Оған :
1) Операциялық жүйе ;
2) Жоғарғы деңгейлі тілдердің трансляторлары ассемблер;
3) Жазбахабар түзеткіштері және программаны жазуға
көмектесе-тін тағы басқа программалар кіреді.
Операциялық жүйе жүйелік программалық қамтаманың түйіні болып табыла-ды.Ол
ЭЕМ мен оны пайдаланушылардың дара қатынасын және мәшиненің ресурстарын
тиімді пайдалануды қамтамасыз ететін жүйелік программалар-
дың жиынтығы болып келеді.
Ассемблер немесе жоғарғы деңгейлі тілде жазылған программаны мәши-
нелік тілге аудару үшін аударғыш (транслятор) деп аталатын программалар
Қолданылады.Ассемблер тілінде жазылған программаның аударғышы ассем-
блер деп аталады, ал жоғарғы деңгейлі тілде жазылған программаның аудар-
ғыштары программа аударғыш-орындағыш (интерпретатор) немесе програм-
ма аударғыш (компилятор) деп аталады.
Жазбахабар түзеткіштері- ЭЕМ-нің сыртқы жадында сақталған немесе
жаңадан жазылған жазбахабарды енгізу немесе өзгерту үшін қолданылатын
программа жазбахабар- ассемблер немесе жоғарғы деңгейлі тілде жазылған
программа, деректер немесе есептер жиыны.
Программаны жазғаннан соң оны орындату үшін тағы екі жүйелік прог-
рамма қажет.Көптеген операциялық жүйелерде кез келген жүйелік немесе
орындалатын программаға қосуға болатын бағдарламахана деп аталатын про-
граммалар жиынтығы болады.Орындалатын программаны және бағдарлама-
хананы немесе басқа аудармаланған ішкі программаларды біріктіретін көмек-
ші программа байланыстар түзеткіш немесе программа құрастырғыш (компо-
новщик) деп аталады. Орындалатын программаны жадыға орналастырушы программа
жүктемелеуші (загрузчик) деп аталады.Кейде байланыстарды тү- зету мен
жүктемелеу жұмыстарын бір программа атқарды.Қолданбалы прог- раммалық
жабдықтар мәшинеде жұмыс істеушілердің өз есептерін шешу үшін жасалған
программаларынан тұрады.
Кез келген есепті шығару алдында программа жазу үшін программалау ті-
лін таңдау мәселесі тұрады.Әрбір тілдің артықшылықтары мен кемшіліктері
жайлы әр түрлі пікірлер бар.Көбіне программашы өзі әдеттенген тілді артық
санайды.Жалпы алғанда, кез келген тілмен кез келген программаны жазуға
болады.Мәселе программаны жазу қолайлығы және жазылған программаның
есептеу жылдамдығы мен оның мәшине жадында алатын орнында.Мысалы СИ,
Паскаль, Бейсик тілдерінде есептеу және жазбахабармен жұмыс жасайтын
программалар жазу ыңғайлы.Бірақ жылдамдығы мен алатын орны жағынан алғанда
бұл онша тиімді болып шықпайды.Осының салдарынан
аталып өтілген программалау тілдерінің бәрінде ассемблерде жазылған прог-
раммалық жеке бөлшектер қолдану мүмкіндіктері ескерілген.
Басқа жағынан қарағанда жүйелік ресурстармен (регистр,бейнежады және
т.б.) байланысты қажет ететін программаларды ассемблер тілінде жазған ти
–імді.Бұнымен қатар ассемблер тілі, бірде бір жоғарғы деңгейлі тілде (СИ-ді
қоса) ассемблерлік қосындыларды тікелей пайдаланбаса жете алмайтын, мә-
шиненің барлық қорларына BIOS және DOS үзүлері деңгейінде жетуге мүм-
Кіндік жасайды.
Регистрлер.
Микропроцессор регистрлері.
Ассемблер тілінде программалаудың алдында МП-ң қандай регистрлерін
қолдануға болатынын анықтау қажет.Компьютердің программалық моделі - мен
танысуды МП-ң регистрлерінен бастайық.Регистр дегеніміз ақпарды тұрақты
немесе уақытша сақтауға арналған құрылғы.Уақытша сақтау – бір команда
орындалу мезгілі.Регистрлер аппарат арқылы жетерлік және программа арқылы
жетерлік (жалпы міндетті регистрлер) деп екіге бөлінеді.
Ең алғашқы 1970 жылы шыққан Intel фирмасының МП-і 4 разрядтың (биттік)
құрылғылар болған.1972 жылы 8 разрядты,арифметикалық амалдарын орындай
алатын МП жарыққа шықты,ал 16 разрядтық МП 1976 жылы пайда болды,ал 1985
жылы бұл фирма осы кезге дейінгі МП – мен жұмыс істей алатын 32 разрядтық
МП – ді шығарды.1993 жылдан бастап Pentium 32-і разрядты МП-і шыға
бастады,қазіргі кезде бұл МП-р кеңінен қолданылады. Pentium МП-ң
программалық моделі 32 регистрден тұрады : оларды 2 топқа бөлуге болады :
1) қолданбалы регистрлер – 16 ; 2) Жүйелік регистрлер – 16.
Ассемблер тілінде программалауда регистрлер жиі қолданылады .
Қолданбалы регистрлер.
1) Сегіз 32 разрядтық регистрлер жатады.Бұлар мәліметтер мен олардың
адрестерін сақтауға арналған.Регистрлердің белгіленуі : eaxaxahal;
ebxbxbhbl; ecxcxchcl; edxdxdhdl; ebpbp; esisi; edidi;
espsp.Бұл регис-трлер жалпы атқаратын регистрлер деп те аталады.
еax ax ebx
bx
ah al
bh bl

еcx cx
ch cl
Ebp bp

2) Алты 16 разрядтық сегмент регистрлері : cd,ds,ss,es,fs,gs7

CS
SS

3) 32 разрядтық жағдай және басқару регистрлері : жалау регистрі
eflagsflags және команда көрсету регистрі eipip.
eflags
Flags

CS
SS

Жалпы қызмет атқаратын регистрлер.
Бұл топтағы регистрлер өздерінің кіші бөліктерін қолдануға ғана мүмкіндік
береді.Ол үшін регистрдің кіші 8 және 16 разрядтық бөліктерін бөлек
қолдануға болады,мысалы : ax,ah,al, ал регистрдің 16 жоғарғы разрядын
қолдануға болмайды.
Бұл регистрлер МП-ң арифметикалық – логикалық құрылысының (АЛҚ)
құрамында орналасатындықтан оларды АЛҚ регистрі деп те атайды.
1) eaxaxahal регистрі – аккумулятор деп аталады және аралық
мәліметтерді сақтауға немесе арифметикалық амалдарды орындауға қолданылады.
2) ebxbxbhbl регистрі – негізгі регистр.Жадта орналасқан
мәліметтердің адресін сақтауға қолданылады.
3) ecxcxchcl регистрі – санауыш (счетчик) ретінде
қолданылады.Қайтала -
нып орындалатын командамен жұмыс істейді.Мысалы : Loop командасы СХ
регистрдің мәнін 1- ге азайтады.
4) edxdxdhdl регистрі – мәліметтер регистрі.Аралық мәліметтерді
сақтауға арналған.Келесі 2 регистр тізбекткліп орындалатын амалдарды
орындауға арналған.Мысалы : тізбектелген элементтерді өңдеу амалы.

5) esisi – индексті регистр,беру регистрі ретінде қолданылады.
6) edidi – индексті регистр,қабылдау регистрі ретінде қолданылады.
Стек дегеніміз – жадтың белгілі бір аумағы.Стекпен жұмыс істеу үшін
келесі регистрлер қолданылады :
7) espsp – стектіңең жоғарғы элементінің мекенін көрсетеді.
8) ebpbp – стекте орналасқан кез – келген элементпен жұмыс істеуге
арна - лады.
Ассемблер тілінде программа жазғанда пайдаланылатын регистрлерді
толығырақ қарастырайық.
BX,BP,SI,DI – базалық және нұсқатаңбалық регистрлер.Операндтарды
(операцияға қатысатын мәліметтер) мекендету кезінде деректердің мекені
командалардың тұлғасында емес,сол үшін әдейі арналған және базалық немесе
нұсқатаңбалық деп аталатын регистрлерде сақталады.
IP – комнда көрсеткіші.Бұл регистрде келесі орындалатын команданың
ығыстыру аралығы сақталады.Санашық IP регистрін CS – регистрімен (команда
сегменті) бірге 20 разрядтық физикалық мекенді тағайындау үшін пайдаланады:
CS регистрі орындалатын программаның сегментін анықтаса, IP регистрі
ығыстыру аралығын көрсетеді.Программа орындалған кезде IP регистрінің мәні
команданың өлшеміне тең байт санына өсіп отырады. Егер программа орындалу
тәртібі өзгеретін болса,онда басқару билігін өзгерту командалары
падаланылады.
SP – стек көрсеткішінің регистрі.Бұл регистрде стек үшін бөлінген жады
аймағының мекені сақталады.Стек аймағы деректерді уақытша сақтауға арналған
жадының бөлігі.Стекті қолданудың артықшылығы – деректерді сақтау үшін тек
бір ғана команда керек және программалаушы деректердің мекенін таңдау
жұмысынан босатылады.Стек көмегімен мәшине жадында орналасқан деректердің
мекенін есте сақтау үшін осы стек көрсеткіші падаланылады.Стекке жазудың
бір ерекшелігі : соңғы түскен дерек өзінің алдындағы деректен бұрын
шығады.Стекке жазу және оқу үшін PUSH пен POP командалары қолданылады.
Мысалы :
PUSH AX
PUSH BX
---------------
POP BX
POP
AX
Осындай деректерді сақтауды ұйымдастыру тәртібі LIFO деп аталады (Last
in,First out – соңғы кірген бірінші шығады).
Алдымен стек көрсеткіші жадының оған бөлінген аймақтың соңғы байтын
көрсетеді.Мәлімет (2 байт) жазылған сайын стек көрсеткішінің мәні азайып
тұрады.
Стек аймағы жалғаноператорлар арқылы анықталады :
SSEG SEGMENT STACK ; басы
DB 256 DUP(?)
SSEG ENDS ; соңы
Стектің мөлшерін DB (байттар),DW (сөздер) санымен көрсетуге болады .

ЭЕМ – де есептердің өтетін кезеңдері.
ASM.exe және MASM.exe – Ассемблер тілінен программа аударғыштар.Жоғарғы
деңгейлі тілде жазылған программаларды мәшинелік командаларға түрлендіру
үшін керек (*.ASM - - *.OBJ).ASM түрлендіргіші бар бастапқы дерекжиынды
OBJ түрлендіргіші бар дерекжиынға өзгертеді. OBJ түрлендіргіші бар
дерекжиын объектік деп аталады.Бұл объектік дерекжиынды жұмыс істеуге
болмайды.Себебі аудармалау 0 – дік базалық мекеннен басталады.
LINK.exe – программа құрастырғыш.Атқаратын негізгі міндеті - объектік
дерекжиынды орындалатын дерекжиынға өзгерту (*.OBJ - *.EXE).Прог - рамма
құрастырғыш істеген кезінде :
– жедел жадының кез келген жеріне орындалатын программаны орналас-
тыруға мүмкіндік беретін икемдеу жадуалын құрастырады ;
– бірнеше программаны біріктіріп, орындалатын дерекжиын құрастыруға,
макроанықтама жинағын қосуға,оверлейлік құрылымдар жасауға мүмкіндік пайда
болады.Ассемблер тілінде программа жазып және оны істету үшін төменде
көрсетілгендей бірнеше жұмыс орындау керек.
1. Әзірлеу және бастапқы дерекжиынды ЭЕМ – ге енгізу. Кез келген
жазбахабарлық түзеткішті пайдаланып,түрлендіргіші ASM (берілген аты бар)
дерекжиын жасау.
2. Бұл жазылған бастапқы дерекжиынды мәшинелік шартбелгіге
аудармалау.Ол үшін мына команданы пайдалануға болады :
MASM *.ASM.
Аудармалау нәтижесінде объектік дерекжиын алынады.Оған кез келген ат
беруге болады (егер аты көрсетілмесе,оған бастапқы дерекжиынның аты
беріледі),түрлендіргіші – ASM.Бұл дерекжиында әрбір Ассемблер командасына
сәйкес мәшинелік шартбелгі,әрбір макрокомандаға сәйкес макроанықтама
командалары,әрбір операндқа сәйкес ығыстыру аралығы көрсетіледі.Керек
болса LST дерекжиынын құрастыруға болады.Бұл дерекжиында жалған
шартбелгі,орындалатын оператордың реттік нөмірі,команданың шартбелгісі,
операндтардың салыстырмалы мекені көрсетіледі.Егер LST дерекжиынын
құрастыру жайында нұсқау болмаса,онда программаның қатесі ақпаралғы бетінде
көрсетіледі.Қате табылса,оны түзеткіш арқылы жөндеу және аудармалауды
қайталау керек.
3. Объектілік дерекжиынды орындалатын дерекжиынға ауыстыру :
LINK *.OBJ
Бұл команданың нәтижесінде *.OBJ - - *. EXE
Программа құрастырғыш жұмыс істегенде макроанықтағыш жиынтығын
пайдаланады,сілтемеде көрсетілген барлық дерекжиынды шақырады,бірнеше
объектілік дерекжиынды орындалатын бір дерекжиынға біріктіреді,оверлейлік
құрылым жасайды.LINK программасының жұмысының нәтижесінде EXE түрлендіргіші
бар орындалатын дерекжиын және МАР түрлендіргіші бар айқасқан сілтемелер
дерекжиыны құрастырылады.
4. Керек болған жағдайда орындалатын *. EXE дерекжиынға
(мәселен,DEBUGGER программасын пайдаланып) және бастапқы дерекжиынға
(түзеткіш арқылы) өзгеріс енгізу.

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

Ассемблер тілінде программа жазу кезінде қолданылатын кейбір қажетті
ұғымдарды атап өтейік.
Оператор-бұл белгілі бір әрекет жасау үшін мәшініге берілетін
нұскау,әрбір операторға мәшинелік команда сәйкес келеді.Операнд – әрекет
істелінетін деректердің мекенін көрсетеді.
Жалғаноператорлар – ассемблерге деректер және командалармен не істеу
керектігін анықтайтын нұсқау береді.Бірақ орындалатын EXE дерекжиынында бұл
жалғаноператоларға сәйкес мәшинелік шетбелгі болмайды.
Макрокоманда – бастапқы программадағы бірнеше мәшинелік командалардың
орнына жүретін символдың аталым.
1. Екілік тұрақты шама (0 немесе1).Бұл символдар міндетті түрде D
әріпімен бітіуі керек.
Мысалы:11101110D.
2. Оналтылық тұрақты мамалар (0-9,А,В,С,D,E,F).
Міндетті түрде бұлар Н әрпімен бітеді.Егер әріптен басталатын болса,онда
алдына 0 қойылады.
Мысалы : 0АВ127Н,4АН.
3.Ондық тұрақты шамалар (0-9).Соңына D әріпін қоюға да,қоймауға да бола
- ды.
4.Символдық тұрақты шамалар.Тырнақшаларға алынған кез келген символдар
немесе цифрлар жинағы.

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

[таңба:] шартбелгі [1-операнд] ,[2- операнд] [;түсініктеме].
Тік жақшаға алынған команданың бөліктрі ассемблер командасының түріне
байланысты оның құрамында болуы да болмауы да мүмкін.
Таңба.
Таңба символдардан тұрады.Бұл Символдар жинағы қос нүктемен (:) аяқта
–лады.
Таңбаның аталымы А – Z ,a – z латын әріптерімен , 0 – 9 сандарынан және ?,
(.), $, _, @ cимволдарынан тұрады.Ескертулер:
– таңба аталымының арасынды бос орын болмауы керек ;
– таңба аталымы ішінде нүкте (.) пайдаланылатын болса,ол бірінші болып
тұ-
руы керек;
– регистрлердің аттарын таңба ретінде пайдалануға болмайды;
– таңбаның аталымы үшін белгілі бір мағынаны білдіретін сөздер алған
ың –
ғайлы ;
– көп қайталанатын бірдей әріптерді пайдаланбаған дұрыс (Мысалы: АА
АА) .
Операцияның шартбелгісі.
Шартбелгі – команданың мнемоникалық шартбелгілерінен құралады. Таңбадан
және басқа операндтардан бос аралық арқылы бөлінеді. Команданың құрамында
міндетті түрде болуы керек.

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

Түсініктеме.
Белгісі-нүктелі үтір (;).Алдындығы команданың бөліктерін кемінде бір бос
аралық аркылы бөлінеді.

Жалғаноператорлар.
Жалғаноператорлар дегеніміз ассемблерге әртүрлі қимылдар
істеуге,белгілі регистрлер тағайындауға және т.б. әрекеттер істеуге нұсқау
беретін үлгі қалыптық аталымдар.Жалғаноператорлардың пішімі :
[аталым] жалғаоператор [операнд] [;түсініктеме]
Аталым таңбаға ұқсас. Айырмашылығы қос нүкте (:) жоқ.Ассемблер тілінде
60-қа жуық жалғаноператорлар бар. Жалғаноператорлар арқылы сегменттер мен
ішкіпрограммаларды анықтауға,командалар мен деректердің элементтеріне ат
беруге және т.б. қызметтер атқаруға болады.

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

Мысалы: K EQU 120
AHA EQU RATE
AT EQU 2*RAT
2. Бірнеше санды, өрнекті бір аталымға меншіктеу.
аталым=сан (өрнек)
Мысалы: К=120
K=K+1
2) Деректерді анықтау жалғаноператорлары.
Бұл топқа DВ,DW және DD жалғаноператоры кіреді.
[аталым] DB өрнек [,...]
DB жолғаноператоры айнымалы шаманың мәнін анықтайды немесе жедел
жадының берілген ұяшықтарына бастапқы мән береді және жедел жадыда бір
немесе бірнеше байт орын сақтап қояды.
Мысалы: KAP DB 0,1,5,8
TOH DB ?
AMAH DB 12 DUP(?)
DK DB 15 DUP (0)
DW жалған операторы DB жалғаноператоторына ұқсас,бірақ жадыда 2 байттық
сөздерге орын сақтап кетеді.
Мысалы:
GR DW ‘ЭВМ -90-6’
TABL DW 12 DUP (?)
DD жалғаноператоры 4 байттық сөздерге орын қалдырады.

3) Сегмент пен ішкі программаларды анықтау жалғаноператорлары.
1. SEGMENT және ENDS жалғаноператорлары сегменттің басы мен соңын
белгілейді, бірақ ассемблерге қандай сегмент екендігі жайлы аңықтама
бермейды (бұл міндетті ASSUME жалғаноператоры атқарады).
аталым SEGMENT
... ... ..
... ... ..
аталым ENDS
Мысалы:
DATA SEGMENT
AB DВ 15, 5 DUP (0)
AT DB 3, 7, 15
DATA ENDS
2. Жалғаноператор ASSUME қайсы регистр қандай сегментпен байналысты
екенін ассемблерге хабарлайды.
ASSUME регистр : сегменттің аты
Мысалы:
ASSUME DS: DSEG, SS:SSEG, СS:СSEG
3. PROC және ENDР жалған операторлары ішкіпрограмалардың
(процедуралардың) басы мен соңын көрсетеді.Ішкіпрограммаға NEAR (жақын)
немесе FAR (алыс) қашыктық сипаты тән :
аталым PROC [қашықтық сипаты]
... ... ... ...
... ... ... ...
... ... ... ...
аталым ENDP
Егер қашықтық сипаты NEAR болса немесе аталмаса,онда процедура өзін
шақырып отырған программамен бір сегментте орналасқан.Егер FAR сипаты
жазылса, онда ішкіпрограмма мен оны шақыратын программалық жеке бөлшек
әртүрлі сегментте орналасқан.

4) Сырттық сілтеме жалғаноператорлары.
1. PUBLIC – басқа программалық жеке бөлшектегі мәліметтерді пайдалануға
мүмкіндік береді.Пішімі:
PUBLIC анықтағыш [,...]
Анықтағыш ретінде айнымалы шама , таңба (PROC таңбасынан басқалары),
EQU жалғаноператорының аталымы болуы мүмкін.
2. EXTRN – басқа программалық жеке бөлшектерде (PUBLIC
жалғаноператоры арқылы) анықталған анықтағыштарды көрсетеді.
Пішімі:
EXTRN аталым : түрі [,...]
Айнымалы шаманы сипаттаған кезде оның түрін көрсету керек. Егер
а) аталым-деректер немесе қосымша сегменттегі анықтағыш болса,онда түрі
BYTE,WORD немесе DWORD болады;
б) аталым – ішкіпрограмманың таңбасы болса,онда түрі NEAR немесе FAR
болуы тиіс;
в) аталым-EQU немесе “ =” арқылы анықталған тұрақты шама болса ,онда
түрі ABS болады.
Мәселен: Айнымалы шама TOKL бір программалық жеке бөлшекте
анықталған,ал оны басқа программалық жеке бөлшекте пайдаланбақпыз.
Онда TOKL анықталған программалық жеке бөлшек мынадай операторлардан
тұрады:
PUBLIC TOKL
TOKL DW 0
ал екінші программалық жеке бөлшекте :
EXTRN TOKL : WORD
3. INCLUDE жалғаноператоры аудармалау кезеңде негізі программа мен осы
операторда аты көрсетілген программаны (немесе макроанықтаманы) біріктіруге
мүмкіндік береді.
Пішімі:
INCLUDE программа аты

5) Аудармалауды басқару жалғаноператоры.
Олардың ішінде ең көп қолданылатыны END жалғаноператоры.Бұл
жалғаноператорлар бастапқы программаның соңын көрсетеді және Ассемблерге
аудармалауды қайсы жерде тоқтату керектігі жайында нұсқау береді.Сондықтан
END жалғаоператоры әрбір прогаммалық жеке бөлшекте болу керек:
END [сөре таңбасы]
Программа операторға көрсетілген сөре таңбасынан сәйкес жерден бастап
жұмыс істейді.Егер программа бірнеше программалық жеке бөлшектен тұратын
болса,онда сөре таңбасы бір-ақ рет негізі программалық жеке бөлшекте ғана
көрсетеледі

6) Листингіні басқару жалғаноператорлары.
1.РAGE жалғаоператоры аудармалау листингісінің бетінің өлшемін
тағайындайды.
Пішімі:
PAGE қатар саны , бағана саны
Қатар саны 10-нан 225-ке дейін, бағана саны 60-тан 132-ге дейін болуы
мүмкін.
Егер бұл сандар операторда көрсетілмесе,онда қатар саны -57,ал бір
қатардағы символдар саны -80 тең деп саналады.
2. TITLE жалғаноператоры әрбір листингінің екінші жолында басылатын
жазбахабарды көрсетеді.
Пішімі:
TITLEжазбахабар
3. SUBTTL жалғаоператоры көрсетілген жазбахабарды листингінің үшінші
жолында басып шығаруға мүмкіндік береді.
SUBTTL жазбахабар.
Мекендету әлпілері
Операндтар регистрлерде,командалардың өзінде , мәшине жадында немесе
енғізу шығару порттарында орналасауы мүмкін.Мекендетудің 24 түрі бар.
Олар 7 топқы бөлінген:
1. Регистлік мекендету.
2. Тікелей мекендету.
3. Төте мекендету
4. Жанама регистрлік мекендету
5. База бойынша мекендету.
6. Индекстеумен қатар төте бойынша мекендету.
7. Индекстеумен қатар база бойынша мекендету.
Ассемблер операндтың түріне байналысты команданың әлпі өрісіне тиісті
мән тағайындалады.Саналық команданың әлпі өрісіне мәні бойынша осы
мекендетудың 7 түрінің ішінен керегін таңдап алады.Жедел жадыдағы
операндтың орнын анықтау үшін санашықтың есептеп тапқап ығыстыру аралығы
операндтың мекені (ООМ) деп аталады.Операндтың орыедалатын мекені –
сегменттің басынан санағанда операнд орналасқан жады аймағына дейін байт
арқылы өлшенген аралықты көрсететін 16 разрядты сөз.

1.Регистрлік мекендету.
Мекендетудің бұл түрінде операндтар регистрлерде орналасады :
MOV AX,BX
Екі операндтың бірі –AX ,екіншісі –BX регистрлерінде орналасқан.

2.Тікелей мекендету.
Мекендетудің бұл түрінде операнд – команданың өзінде орналасады.Мұны
келесі жағдайларды пайдалануға болады :
a) тұрақты шаманы операнд-таратқыш есебінде тағайындаған кезде :
MOV AX,500
б) тұрақты шаманың мәнін EQU жалған операторы арқылы анықтаған кезде :
K EQU 500
MOV AX,K
в) жадының кейбір аймағының мекнін анықтаған кезде :
MOV BX,offset TABLE

3. Төте мекендету.
Операнд сақталатын жедел жадының ұяшығының мекені мнемоникалық
шартбелгі арқылы анықталады.ООМ команданың құрамына оның бір бөлігі болып
кіреді. Операндтың физикалық мекені OOM-ге DS сегменттің 4 разрядқа
ығыстырылған мәнін қосқанға тең.

MOV АX, TABLE

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

4. Жанама регистрлік мекендету.
Операнд сақталатын жедел жады ұяшығының мекені регистрде орналасады.
ООМ базалық регистрде (ВХ) немесе ВР, SI, DI регистрлерінде орналасады.
Индекстік SI, DI регистрлерінде жиі өзгеріп тұратын деректер сақталады, ВХ
регистрі стектер сегментін пайдаланған кезде қолданылады :
MOV АX, [BX]
Тік жақшаның ішіндегі регистрдің мәні жады ұяшығының мекенін көрсетеді.
Кез келген анықтағыштың ығыстыру аралығы OFFSET командасы арқылы
табылады.
MOV BX, OFFSET TABLE
MOV АX, [BX]
5. База бойынша мекендету.
Операндтың орындалатын мекені жылжыту мөлшері мен базалық ВХ (немесе
ВР) регистрінің мәндерінің қосындысына тең :
MOV АX, [BX] + 4
MOV АX, [BX+ 4]
MOV АX, 4 [BX]

6.Индекстеумен қатар төте мекендету.
Операндтың орындалатын мекені жылжыту мөлшері мен индекстік DI (немесе
SI) регистрлердің мәндерінің қосындысына тең. Бұл мекендету берілген
жадуалдық керек элементтерін табу үшін пайдаланылады.Бұл жерде индекс
регистрі элементтің нөмірін көрсетеді :
MOV DI, 4
MOV AX, TABLE [DI]

7. Индекстеумен қатар база бойынша мекендету.
Операндтың орындалатын мекені базалық ВХ (немесе ВР) регистрінің мәні
мен индекстік DI (немесе SI) регистрінің мәнінің (кейде және ығыстыру
аралығының) қосындыларына тең. Бұл мекендету 2 өлшемді көпшемен жұмыс
жасағанда пайдаланылады. Мұнда DX көпшенің басын көрсетеді, ал DI (немесе
SI) және ығыстыру аралығы көпшенің жолы мен бағанасын (көпшенің кез келген
элементін) көрсетеді :
MOV AX, TABLE [BX] [DI] .

Ассемблер командасының түрлері.
Командалар атқаратын қызметтеріне байланысты 7 топқа бөлінеді :

1.Алып-орналастыру командалары.
2.Арифметикалық командалар.
3.Жеке разрядтармен жұмыс істейтін командалар.
4.Басқару тізгінін ауыстыру командалары.
5.Символдар қатарын өңдеу командалары.
6.Санашықты басқару командалары.
7.Үзу командалары.

1). Алып-орналастыру командалары.
Алып-орналастыру командалары регистрлар мен жедел жады ұяшықтарының
(немесе енгізушығару порттарының) арасында деректер мен мекендерді
айырбастау үшін керек.
Бұл командалар 4 топқа бөлінеді :
1. Жалпы міндеттік алып-орналастыру
командалары.
2. Енгізушығару командалары.
3. Мекен ауыстыру командалары.
4. Белгілерді көшіріп жазу командалары.
1. Жалпы міндеттік алып-орналастыру командалары.
1) MOV қабылдағыш,таратқыш
Мысалы :
MOV AX, TAB ; AX регистріне жедел жадының ТАВ ұяшығының

; мәнін
орналастыру.

MOV TAB, AX
MOV AX, BX
MOV AL, AH
MOV CX, 40
MOV TAB, 40
MOV командасын пайдаланған кездегі ескертулер:
a) Жедел жадының бір ұяшығының мәнін екінші ұяшыққа орналастыру үшін
жалпы міндеттік регистрлердің біреуін пайдалану керек.
MOV AX, TAB ; жедел жадының TAB ұяшығының мәнін
MOV TABL, AX ; TABL ұяшығына AX арқылы жазады .

ә) Бір сегменттік регистрдің мәнін екінші сегменттік регистрге ауыстыру
үшін жалпы міндеттік регистрлердің біреуін немесе стекті пайдалану керек.
MOV AX, ES ; ES- тің мәні ;
MOV DS, AX ; DS-ке жазылады.
б) Жедел жадының ұяшығының мәнін сегменттік регистрлерге орналастыру
үшін жалпы міндеттік регистрлердің біреуін пайдалану керек.
MOV BX ,TAB ; жедел жады ұяшығының мәні
MOV DS ,BX ; DS-ке жазылады.
в) Командалық сегмент регистрін (CS) қабылдағыш операнд есебінде
пайдалануға болмайды.
2).Стекке орналастыру-шығару командалы.
Стекке сөзді орналастыру командасың пішімі:
PUSH таратқыш
Әрбір PUSH командасы етектен сөзді шығару (оқу) POP командасы сәйкес
келеді:
POPқабылдағыш
Мысалы , PUSH AX
PUSH BX
... ... ... ..
... ... ... ..
POP BX
POP AX
Стектен оқу үдірісі оған жазудан теріс тәртіптен жүргізіледі (соңғы
жазылған сөз бірінші болып оқылады).Сегменттік регистрлердің арасында
деректер айырбастау үшін PUSH және POP командаларын пайдалануға болады.
PUSH ES ; ES - DS
... ... ...
... ... ...
POP DS
3)Айырбастау командасы :
XCHG 1- операнд , 2- операнд .
Екі операндтың мәнін ауыстырады.Бұл команда регистр мен регистрдің және
регистр мен жедел жадының мәндерін ауыстыру үшін пайдаланылады :
XCHG AX, BX ; AX-пен BX-тің мәндерін
ауыстырады
XCHG AX,TAB; AX-пен жедел жады ұяшығының
мәндірін
; ауыстырады
4)Жадуалдан керекті элементтерді шығару командасы.
XLAT таблица аты .
Бұл команда AL регистрінде нөмірі көрсетілген жадуалдың элементін
алып,AL регистріне жазады.Алдын ала BX регистрінде жадуал мекені,ал AX
регитрінде – сол жадуалдың керек элементінің нөмірі көрсетілуі қажет.
MOV AL, 5 ;AL-ге жадуал
элементінің нөмірн жазу;
MOV BX,OFFSET TABL ;жадуал мекенін BX-те
көрсету;
XLAТ TABL ;жадуалдын
нөмірі көрсетілген;

;элементін АL-ге жазу.

2.Енгізу шығару командалары.
Бұл командалар сыртқы құрылғылармен байланыс жасау үшін керек.Бұл командың
2 түрі бар:
IN сақтағыш,порт ;порттың мәнім сақтғышқа енғызу;
OUT порт,сақтағыш ; сақтағыштың мәнін портқа шығару.
Сақтағыш ретінде AL ,AX регистрлері пайдаланылады.Порт– сыртқы
құрылғының нөмірі (0-255).Команда порт операнды ретінде енгізу-шығару
портының нөмірі көрсетіледі немесе DX регистрі пайдаланылады.
IN AX , DX
OUT 61H,AL
OUT DX,AX
IN AX ,60H

3. Мекен ауыстыру командалары
1) LEA Рг 16 , ЖЖ16
Бұл команда жедел жады (ЖЖ) ұяшығың ығыстыру аралығын регистрге жазады.
Операнд Pг 16 ретінде жалпы міндеттік регистрдің кез келгенін пайдалануға
болады.ЖЖ 16 операндының сипаты WORD болуға тиіс.
LEA BX , TAB [DI]
Егер [DI] =5 болса , онда BX регистрінде TAB жадуалының 5-ші
элементінің мекені (ығыстыру аралығы) көрсетіледі.Бұл команда OFFSET
жалғаноператорымен барабар.
2) LDS Pг 16,ЖЖ 32
Бұл команда жедел жадыдан қос сөзді оқып , бұл ұяшықтың ығыстыру
аралығын (алғашқы 16 разрядты) командада көрсетілген регистрге
жазады.Ал,ұяшық орналасқан сегменттің нөмірін (соңғы 16 разрядты) DS
регитріне жазады :
LDS BX, MUS
3) LES Pг 16, ЖЖ 32
Жоғарыдағы командадан айырмашылығы ұяшық орналасқан сегменттің нөмірін
қосымша сегментке (ES) жазады.

4. Белгілерді көшіріп жазу командалары.
Бұл командалар белгілер регистрінің мәнін оқуға,өзгертуге,стекке жазуға
және стектен осы регистрге жазуға мүмкіндік береді.
1) LAHF-белгілер регистрінің CF,PF,AF,ZF,SF разрядтарының мәнін AH
регистрінің 0,2,4,6,7 разядтарына көшіріп жазуға мүмкіндік береді.
2) SAHF-бұл команда LAHF командасына керісінше жұмыс жасайды,яғни
AH регистрінің 0,2,4,6,7 разрядтарының мәндерін белгілер регистрінің OF,PF,
AF,ZF,SF разядтарына көшіріп жазады.
3) PUSHF-белгілер регистрінің мәнін стекке жазады.
4) POPF-стектен оқып,оқылған мәнді белгілер регистріне жазады.

2) Арифметикалық командалар.
Бұл командалар төмендегі көрсетілген сандармен әрекет жасау үшін
пайдаланылады :
- таңбасыз сандар (0-255 байт,0-65535 сөз);
- таңбалы сандар (егер ұзындығы байт болса,онда – 128 – ден 127,ал
сөзге тең болса, онда - 32768 - ден 32767 дейін сандар);
- жинақталған ондық сандар.Екілік шартбелгіленген ондық арифметикасында
(ЕШО арифметикасы) әрбір ондық цифр жарты байттық орын алады.
ЕШО арифметикасы шығаруенгізу операциясын жеңілдету және жылжымалы үтір
операцияларында жұмыс жасау үшін пайдаланылады. ЕШО арифмети- касында
арнайы қосу және алу командалары жоқ .Сондықтан бұл арифметикамен жұмыс
жасаған кезде бір жарты байттан екінші жарты байттан екінші жарты байтқа
тасымал болған-болмағанын байқап отыру қажет.
Мысалы : 38+29=67 0011 1000
0010 1001
... ... ... ... ..
0110 0001
AF=1
6 1
Егер AF=1, онда нәтижеге 6 қосу қажет (61+6=67);
- жинақталмаған ондық сандар.Мұнда 0-9 сандар жазылады,яғни әр байт
бір санға сәйкес.
1. Қосу командалары .
ADD қабылдағыш,таратқыш
Мұнда : қабылдағыш = қабылдағыш + таратқыш.
ADC қабылдағыш,таратқыш
Мұнда : қабылдағыш = қабылдағыш + таратқыш + тасымал (СF).
ADD AX, BX ; AX=AX+BX
ADD AL, MEM BYTE
ADD MEM, BX
ADD CX, 10
Бұл қосу командалары орындалған кезде белгілер регистрінің 6 разряды
(CF, ... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Ассемблер тілінде программалау туралы мәлімет
Жүйелік программалаудың негізгі ұғымдары мен анықтамалары туралы
Ассемблермен жұмыс
Ассемблер тілінде бағдарламалау
Ассемблер және макроассемблер тілдері
Программалау тілдері
Ассемблер тілінде программалау туралы ақпарат
«Ассемблер-күрделі машиналық тіл»
Программалау жүйесі мен тілдері
Транслятордың түрлері
Пәндер