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



Нормативтік сілтемелер 6
Пайданылатын қысқартулар мен белгілер 7
Кіріспе 8
1. Ассемблер тілінде программалау 9
2. Директивалар 12
3. Өрнектер 21
Пайдаланылған әдебиеттер і 35
Тақырыбының өзектілігі.
Курстық жұмыстың өзектілігі тақырыб бойынша қарастылылған материалдардың микропроцессорлық техникада пайдалуымен анықталады.
Курстық жұмыстың мақсаттары мен міндеттерімикропроцессорлық техникадағы пайдаланатын құрылғыларды қолдану принциптеріне негізделеді.
Практикалық қажеттілігі.
Курстық жұмыстың практикалық қажеттілігі қарастырылған программалау принциетерімен анықталады.
Курстық жұмыстың мазмұны тапсырманың және әдістемелік нұсқаудың талаптарына сәйкеседі [1].
1. Б.С. Есмағамбетов. «Цифрлық құрылғылар және микропроцессорлар» пәні бойынша 5В071900 «Радиотехника, электроника және телекоммуникациялар» мамандығы студенттеріне курстық жұмысты орындау үшін ӘДІСТЕМЕЛІК НҰСҚАУ. М.О.Әуезов атындағы ОҚМУ баспа орталығы, Шымкент қ., Тауке хан д., 5
2. Есмағамбетов Б.С. Басқару жүйелердргі микропро-цессорлық кешендер. Оқу құралы. Шымкент: «Әлем баспасы», 2013, 236с
3. Есмағамбетов Б.С. Цифрлық құрылғылары және микропроцессорлар. Оқу құралы. Шымкент: «Нұрлы бейне» баспасы, 2010, 184с
4. Григорьев В.Л. Программирование однокристальных микропроцессоров. – М.: Энергоатомиздат, 1987.М.В.Напрасник. Микропроцессоры и микроЭВМ.-М.: Высшая школа, 1989.

ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ
МИНИСТРЛІГІ
М.ӘУЕЗОВ атындағы ОҢТҮСТІК ҚАЗАҚСТАН МЕМЛЕКЕТТІК УНИВЕРСИТЕТІ
Автоматтандыру, ТЕЛЕКОММУНИКАЦИЯ және
БАСҚАРУ кафедрасы

КУРСТЫҚ ЖҰМЫС
пәні Цифрлық құрылғылар және микропроцессорлар
мамандығы: Радиотехника, электроника және телекоммуникациялар
тақырыбы: Ассемблер тілінде программалау

Жұмыс ____________
Бағасы
Бағасына қорғалды
___ ___________ 2015_ж.

Комиссия
____________
қолы, аты - жөні

____________
қолы, аты - жөні

Норма бақылау:
______________________
қолы, аты - жөні

Орындаған
Студент ________________________
Тобы _______________-
_______________________
қолы, аты - жөні,

Жетекші _____________________
қолы, аты - жөні,

Шымкент 2015 ж.
Ф.7.05 - 04
М.О. Әуезов атындағы Оңтүстік Қазақстан мемлекеттік университеті
Автоматтандыру, ТЕЛЕКОММУНИКАЦИЯ және
БАСҚАРУ кафедрасы

Бекітемін
Кафедра меңгерушісі
Исмаилов С.Ө. т.ғ.к., доцент
___________ 2015ж.
Цифрлық құрылғылар және микропроцессорлар
пәні бойынша курстық жұмыс
ТАПСЫРМА № 12
Студент тобы
Жұмыс тақырыбы: Ассемблер тілінде программалау
Бастапқы мәліметтер жоқ


Курстық жұмыстың мазмұны
Орындау мерзімі
Салыстырмалы көлемі (парақ саны)
1
Кіріспе
2 апта
1-2
2
Ассемблер тілінде программалау
5 апта
8-9
3
Директивалар
7 апта
1-2
4
Өрнектер
8 апта
5-6


Графикалық бөлімнің мазмұны
Орындау мерзімі
Парақ саны
Формат

Әдебиет:
1. Б.С. Есмағамбетов. Цифрлық құрылғылар және микропроцессорлар пәні бойынша әдістемелік нұсқау
2. Есмағамбетов Б.С. Цифрлық құрылғылары және микропроцессорлар. Оқу құралы. Шымкент: Нұрлы бейне баспасы, 2010, 184с
3.Есмағамбетов Б.С. Басқару жүйелердргі микропро-цессорлық кешендер. Оқу құралы. Шымкент: Әлем баспасы, 2013, 236с
Тапсырманың берілген күні _________, жұмысты қорғалған күні ______
Жұмыстың жетекшісі: _______________________
(аты - жөні, қолы)
Тапсырманы орындауға қабылдаған ____________________________
(күні, студенттің қолы)

Ф.7.04 - 06
Қазақстан республикасы білім және ғылым министрлігі
М.О. Әуезов атындағы Оңтүстік Қазақстан мемлекеттік университеті

Ақпараттық технологиялар және энергетика жоғары мектебі
Автоматтандыру, телекоммуникация және басқару кафедрасы

Бекітемін
Кафедра меңгерушісі
Исмаилов С.Ө. т.ғ.к., доцент
_________________2015ж.

Курстық жұмыс қорғау
Хаттамасы № 12

пәні: Цифрлық құрылғылар және микропроцессорлар

студент ___________________ тобы _________________-
(аты - жөні)
Курстық жұмыс тақырыбы Ассемблер тілінде программалау
Қорғау кезінде келесі сұрақтарға жауап алынды:
1. ___________________________________ ____________________________
2. ___________________________________ ____________________________
3. ___________________________________ ____________________________

Курстық жұмысты орындау кезінде алынған балл (60 мүмкіндіктен) _______, қорғау бағаланды (40 мүмкіндіктен ) __________ балл.
Сомалық баллы ____________
Жұмыстың бағасы ____________
Курстық жұмыстың жетекшісі ___________________

Комиссия мүшелері _________________________

Комиссия мүшелері _____________________________

Қорғау күні ___________________________2015ж.

Аннотация

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

Мазмұны

Нормативтік сілтемелер 6
Пайданылатын қысқартулар мен белгілер 7
Кіріспе 8
1. Ассемблер тілінде программалау 9
2. Директивалар 12
3. Өрнектер 21
Пайдаланылған әдебиеттер і 35

Нормативті сілтемелер

Белгілер
Атауы
ВСН 205-84
Технологиялық процестерді автоматтындыру жүйесінің электр құрылғыларының жобалау бойынша нұсқаулық
ГОСТ 2.708-81
Сандық және есептік техниканың электр схемаларын орындау ережесі
ГОСТ 2.755-87
Сызбадағы шартты графикалық белгілер.коммутациялық және байланыс желілер.
ГОСТ 2.754-72
Шартты шрафикалық электр құрылғылары және жоспардағы сымдар.
ГОСТ 2.601-95
Эксплуатациялық құжаттар (ЕСКД)
ФС ОҚМУ 4.6-002-2004 СМК
Оқу құжаттарын рәсімдеу ережелері. Графикалық құдаттарға қойылатын жалпы талаптар.
СНиП 3.05.07-85
Автоматтандыру жүйесі.
ПТҚ
Тұтынушылардың электр құрылғыларын техникалық пайдалану ережесі.
ТҚЕ

Тұтынушылардың электр құрылғыларын пайдалану кезінде техникалық қауіпсіздік ережелері
ВСН-329-78
Бақылау аспаптарының және автоматтаедыру құралдарын монтаждау мен жөндеу кезінде техникалық қауіпсіздігі бойынша нұсқаулық

Қолданылған қысқартулар мен белгілер

МП - микропроцессор
ЭЕМ - электронды есептеу машина

Кіріспе

Тақырыбының өзектілігі.
Курстық жұмыстың өзектілігі тақырыб бойынша қарастылылған материалдардың микропроцессорлық техникада пайдалуымен анықталады.
Курстық жұмыстың мақсаттары мен міндеттері микропроцессорлық техникадағы пайдаланатын құрылғыларды қолдану принциптеріне негізделеді.
Практикалық қажеттілігі.
Курстық жұмыстың практикалық қажеттілігі қарастырылған программалау принциетерімен анықталады.
Курстық жұмыстың мазмұны тапсырманың және әдістемелік нұсқаудың талаптарына сәйкеседі [1].

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

Ассемблер тілінде программалауды КР580 МП-ң мысалында қарастырайық [2,3,4].
Ассемблер тілінде келесі операторлар бар: бұйрықтық операторлар, берілгендерді тарату операторлары, және ассемблер директиволар. Бұйрықтық операторларды транслятор МП бұйрықтарына аударады (нәтижесінде олар орындалады); ассемблер директиволар - трансляторға арналған бұйрықтар.
Программаның бастапқы модулі ассемблер тіліндегі операторлардың (немесе сөйлемдердің) тізбегі болып табылады. Олардың классификациялары:
oo бұйрықтық операторлар, олар машиналық бұйрықтарына ассемблер арқылы аударылады. Оларда мнемоника* мен (міндетті түрде емес) бір не екі операнд болады;
oo программалық берілгендер үшін жады ұяшықтарын резервтейтін** берілгендерді тарату операторлары;
oo ассемблер үшін арнайы нұсқаулары бар ассемблер директивалары (немесе жалған бұйрықтар).
Кейде берілгендерді тарату операторларын директиваларға жатқызады.

Операторлар форматы.
Операторлардың форматтары еркін, яғни оператордың кез-келген өрісі (бөлігі) жолдың кез-келген позициясынан бастала алады, бірақ бөліктер алдыңғысынан бір немесе бірнеше пробелмен (бос орындармен) бөлінуі керек.
Бұйрықтық операторлардың форматының түрі:
{Белгі:} {Префикс} Операция коды {Операнд(тар)} {;Ескертулер}
Мәнерлі жақшамен міндетті емес өрістер (бөліктер) белгіленген.
Ассемблер директивасы мен берілгендерді тарату операторларының форматы келесі:
{Аты} Директива {Операнд(тар)} {;Ескертулер}.
Директива аты ешқашан қос нүктемен бітпейді. Кейбір директивалар атының міндетті түрде болуын талап етеді, мысалы, SEGMENT, ENDS, PROC және басқалары. Басқа директиваларда атының өрісі (бөлігі) бос болуы керек, мысалы, NAME, ASSUME, ORG, PUBLIC және басқалары.

Ескерту. Мнемоника* (немесе мнемокод) - оператордың (команданың) жазылуы, аталуы. Резервтеу** - кейінге сақтау
DB, DW, DD берілгендерді тарату операторларында аты міндетті емес.
Директива өрісі ассемблердің өзгермейтін негізгі сөздерінің біреунен болады және оның ассемблерлеу процессіндегі әрекеттерін анықтайды. Директива операндтары бұйрықтық операндтарға ұқсас.
Ассемблер тілінде үйлескен қолдануды талап ететін өзара байланысқан үш директива жұптары бар:
SEGMENTENDS (сегментсегменнт соңы).
PROCENDP (процедура немесе қосымша программапроцедура соңы).
MACROENDM (макробұйрықты анықтаудың басымакробұйрықты анықтаудың соңы).

Операторлардың элементтері.
Операторлар келесілерден тұрады:
oo маңызды сөздерден;
oo идентификаторлардан (белгі мен айнымалы шамалардан);
oo сандық тұрақты шамалардан (константалардан);
oo символдық тізбектерден;
oo арнайы символдардан;
oo ескертулерден.
Маңызды (немесе кейінге сақталған сөз) сөздер ассемблер үшін мағынасы бар атау болып табылады. Мысал ретінде бұйрықтар мен директивалар жазылуыларды (MOV, PROC, т.б.) алуға болады.
Идентификатор (белгілер мен айнымалылардың жалпы термині) - бұл программист анықтайтын символдар тізбегі. Тізбектігі бірінші символ әріп немесе @, -, ? символдарының бірі болуы керек, бірақ жалғыз ? белгі идентификатор бола алмайды. Басқа символдар латын алфавитінің жазбаша не жолдық әріпінен, не болмаса @, -, ? арнайы символдардың бірімен басталуы мүмкін. Ассемблер идентификаторларды бірінші символдар бойынша ажыратады.
Бұйрықтар операндтарының (регистрлер, айнымалылар, белгілер, тұрақты шамалар) операнд туралы кейбір ақпаратты ассемблерге хабарлайтын тип атрибуты бар. Мысалы, авс типі ассемблерге операндтық жады ұяшығының адресі емес, сандық тұрақты шама (константа) болып табылатындығын хабарлайды.
Ассемблер программист үшін МП регистрлерінің келесі жиынтығын анықтайды:
жалпылама BYTE типті - AL, AH, BL, BH, CL, CH, DL, DH регистрлері.
жалпылама WORD типті - AX, BX, CX, DX, SP, BP, SI, DI
сегменттік WORD типті - CS, DS, SS, ES.
Айнымалы шама - бұл символикалық аты бар программалық берілгендердің бірлігі. Айнымалы шаманың үш атрибуты бар:
1) сегмент (SEG) айнымалы шамасы бар сегментті анықтайды;
2) ығысу (OFFSET) айнымалы шамасының ол орналасқан сегменттің басынан (базадан) байттағы қашықтығын (диапазоны 0...65535) көрсетеді;
3) тип (TYPE), айнымалы шаманы сақтауға бөлінетін жады бірлігін анықтайды, яғни 1 (байт), 2 (сөз), 4 (екі сөз).
Ассемблер айнымалы шаманың атрибутын шығаратын машиналық бұйрық форматын анықтау үшін қолданады.
Белгі - бұл бұйрық орналасқан жады ұяшығына қатысты және басқару бұйрықтарында операнд ретінде қолдануға арналған атау. Белгінің 4 атрибуты бар:
oo сегмент атрибуты (айнымалы шаманың осындай атрибутына ұқсас);
oo ығысу атрибуты (айнымалы шаманың осындай атрибутына ұқсас);
oo қашықтық атрибуты (дистанция), тарату бұйрығы бойынша не сегмент ішінде (яғни екі байттық ығысу көмегімен басқару - NEAR типі), не өтпелі сегменттің сыртында (яғни, 4-байтты сегмент көрсеткішінің көмегімен: ығысу - FAR типі) орналасқан белгіге ауысу мүмкіндігін анықтайды,
oo CS сегменттік регистр туралы болжам. Трансляция* (1-ші өтуі) кезінде ассемблер белгіні операнд ретінде кездестірсе, ол оның ығысуын білмейді. Ол оның орналасуы туралы болжам жасайды: егер ығысу +- 128 байт аралығында екендігін білсе, жақын - NEAR, яғни SHORT.
Ассемблер егер келесі ережелердің бірі орындалса, атты белгі деп есептейді:
oo операция кодының алдындағы атау қос нүктемен аяқталса, мысалы,
NED: NOP
- атау LABEL директивасы атауының өрісінде орналасса, мысалы,
NED LABEL FAR
oo атау EQU директивасының өрісінде орналасса, мысалы,
NED EQU THIS NEAR
oo атау PROCENDP директива жұбы атауының өрісінде орналасса, мысалы,
NED PROC NEAR
.
.
.NED ENDP
Сандық тұрақты шама (константа) - бұл берілген теңдеу бойынша ассемблерлеу кезінде есептелетін сандық мән. Константа жады адресінен (белгі немесе айнымалы шама) санды анықтайтындығымен ерекшеленеді. Сандық константаларды негіздері 2(111001В), 8(16Q), 10(15 немесе 15D), 16(38Н, 0А3Н) санақ жүйелерінде көрсетуге болады. Егер константа символдан басталса, онда сан нольден басталады (0А3Н). Барлық сандардың диапазоны 16-разрядты екілік сандардың (белгілік разрядты қосқанда) диапазонына сәйкес келеді. Теріс сандар қосымша кодта көрсетіледі. Сандық константалар ретінде бір символдық (BYTE типті) және екі символдық (WORD типті) тізбектерді қолдануға болады, мысалы,

Ескерту. Трансляция* - программаны ассемблер тілінен машиналық кодтарына аудару процессі
NED EQU `AB'
MOV DX, NED

Жоғарыдағы фрагменті DX регистріне 4142Н он алтылық санды жүктеуді қамтамасыз етеді (ASCII кодында А әрібінің коды 41Н, ал В әрібі - 42Н).
Символдық тізбектер (немесе символдық константалар) - апострофтарға* кіргізіледі және әдетте максималды ұзындығы 255 символға дейін (жолды аудармадан басқа) болады. Мысалы,
FAM DB 'IVANOV'
Екіден көп символдары бар символдық тізбектер жадыны инициализациялау үшін ғана қолданады. Ассемблер тізбекті ASCII кодындағы тізбек символдарының кодталуына сәйкес келетін байттар тізбегі түрінде келтіреді.

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

Айнымалы шамаларды анықтау директивалар [2,3,4].
DB, DW, DD директивалары.
Директиваларды қарастыруды DB (байтты анықтау), DW (сөзді анықтау), DD ( екілік сөзді анықтау) берілгендерді анықтау директиваларынан бастайық.
Директивалар форматы.

айнымалы шаманың аты бастапқы мәні, [бастапқы мәні]...

Директивалардың мнемокодтары айнымалы шамалардың типін анықтайды (байт, сөз, екілік сөз). Директива операндының өрісі директивалар қанша байт, сөз, екілік сөз таратады және олардың бастапқы мәндері қандай болуы керектігін анықтайды. Айнымалы шаманың сегментінің атрибуты ол өзі анықталған сегмент болып табылады. Айнымалы шаманың ығысу атрибуты сегмент басынан айнымалы шаманың ұяшығына дейінгі байт санына тең.
Бастапқы мән ретінде жады бірлігі үшін инициализация мәні бар өрнек болуы мүмкін. Өрнектер сандық және адрестік болуы мүмкін.
Ескерту! DB, DW, DD директиваларынан басқа 386, 486, 586 микропроцессорлар үшін келесі директивалар да бар:
DP - көрсеткішті анықтау - 32-разрядты көрсеткіш.
DF - алыс көрсеткішті анықтау - 48-разрядты көрсеткіш.
DQ - төрт есе көбейген сөзді (8 байт) анықтау - нақты сандар.
DT - 10 байтты анықтау - BCD сандар.

Ескерту. Апостроф* - сөздің екі жоғарғы шетінде қойылатын үтір
Инициализацияланған және инициализацияланбаған сөздер.
Егер айнымалы шамалардың бастапқы мәндері маңызды болмаса, онда оларды инициализацияланбаған айнымалы шамалар ретінде анықтауға болады.
stud db ? ; белгісіз мәнді байт
morestud dw ?; белгісіз мәнді сөз.
Үлкен инициализацияланған кеңістікті бөлігін резервтеу үшін жақшадағы ? белгісі бар DUP өрнектерді қолдану керек.

Bigbuf dw 1000 DUP(?)
Массивтің бастапқы мәні
Массив өлшемі
Ұяшықтар иници- ялизацияланбайды
1000 инициализацияланбаған DW типті элементтерді ерекшелеу керекті жайлы ассемблер үшін нұсқау
; 1000-байттық буфер
Bigbuf dw 1000 DUP(?)
Массивтің бастапқы мәні
Массив өлшемі
Ұяшықтар иници- ялизацияланбайды
1000 инициализацияланбаған DW типті элементтерді ерекшелеу керекті жайлы ассемблер үшін нұсқау
; 1000-байттық буфер

Программаны іске қосқанда осы директива жасаған 1000-байттық буфер белгілі бір мәндері жоқ байттардан тұрады. Инициализацияланбаған айнымалы шамаларды қолданудың басты себебі - орындалатын файлдың өлшемін азайту болып табылады. Дискке қажетсіз байттарды жазудың орнына орындау кезінде инициализацияланбаған кеңістік бөлінеді. Ол үшін екі ережені ұстану керек:
1) Барлық инициализацияланбаған айнымалы шамаларды берілгендер сегментінде соңғы етіп орналастыру.
2) Инициализацияланбаған айнымалы шамалардың алдында UDATASEG директивасын қою. UDATASEG директивасын кезіктірісімен Turbo Assembler автоматты түрде бұл бөлікті соңғы инициализацияланған беттен кейін орналастырады.
Мысалдар:
DATA SEGMENT
D0 DB 0F1H ;бір байт F1H-қа тең
D1 DW 4567H ;4567H-қа тең бір сөз
D2 DW D2 ;0003-ке тең бір сөз
D3 DD ? ;инициализацияланбаған екілік сөз
D4 DB 20DUP(?) ;мәні жоқ 20 байт
D5 DW 10DUP(0) ;он нольдік сөздер
DATA ENDS
0F1
67
45
03
00
D0
D1
D2
Жадыда бұл мысал келесі түрде болады
0F1
67
45
03
00
D0
D1
D2
Жадыда бұл мысал келесі түрде болады

Атауы D2 DW директива 0003-ке тең сөзді анықтайды - бұл сегмент басына қатысты D2 айнымалы шамасының ығысуы, яғни бұл директивадағы сөз сегменттегі айнымалы шаманың адресін көрсетеді. Операнд өрісіндегі жалғыз сұрақ белгісі жады ұяшықтарының мазмұны директивада берілмейтіндігін білдіреді. DUP конструкциясы берілген жады бірліктерінің санын үлестіру мен инициалдау үшін қолданылады. DUP конструкцияларында элемент ретінде сандық және адрестік өрнектер, сұрақ белгісі, тізім немесе қайталанған DUP конструкциясы болуы мүмкін.
Жолдық айнымалы шамалар.
DB директивасы жолдық айнымалы шамаларды жасай алса да, ассемблер тілінде жолдарды оқу мен жазу, символдарды жою, бір жолды басқасымен салыстыру үшін жолдық бұйрықтар жоқ. Бұл әрекеттер процедура көмегімен орындалуы мүмкін.
Бірнеше жолдық форматтар бар, мысалы:
ASCII$ - жол - бұл $ доллар белгісімен аяқталатын ASCII - символдардың жиынтығы;
ASCIIZ - жол - бұл нольдік байтпен аяқталатын ASCII символдың жиынтығы.
ASCII$ - жол жасау үшін DB директивасын қолданған жөн.
str_$ db `Hello', '$'
str_$ db `Hello $'
ASCIIZ - жолдары көбірек таралған, олар да DB директивасымен жасалады.
str_0 db 'Hello', 0
ASCII - жолдарының ұзындығы бір байттан мың байтқа дейін болуы мүмкін.
Жолдың бірінші байты - бұл не ASCII символ, не нольдік ASCII символ деп те аталатын нольдік байт.
Егер бірінші символ 0-ге тең болса, онда жол нольдік, сондықтан нольдік ұзындықты айнымалы шамаларды жасау оңай.
sbuf db 81 dup(0) ;80- символды буфер
Мұндай әдіспен жолды жасау кезінде, DUP санағышын жол әрқашан да аяқталатын нольге орын қалуы үшін осы жолға жазылатын символдардың максималды санын 1-ге артық орнату керек.
Ескерту!
Тырнақшадағы тырнақша. DB директивасының көмегімен сипатталған жолдар не апострофқа ('), не тырнақшаға ('') алынуы мүмкін.
Жол ішіне тырнақшаны қосудың ең қарапайым әдісі барлық жолды және оның жеке бөліктерін ерекшелеу үшін тырнақшалардың әр түрлі типтерін қолданудан тұрады:
st1 db ' ″Керемет″ деді Иван', 0
st1 db ″ 'Бәрекелді' деді Григорий″, 0
Локальдық белгілер.
Белгілер глобальды және локальды болады. Глобальды белгілерге программаның кез-келген жерінен қол жеткізуге болады. Мұндай белгілер әрқайсысы әр түрлі болуы керек. Бұл қысқа ауысуларды орындау кезінде едәуір кедергі тудырады, мысалы,
CMP AX, 9 ;АХ=9?
JE SK егер АХ=9 болса, жолды өткізіп, төменге көшу.
ADD CX, 10 ;болмаса СХ-ке 10 қосу
SK:
SK белгісіне қысқа ауысулар, мысалы, JE, ассемблер тілінде программалау үшін өте жиі қолданылатын ауысулар болып табылады. Дәлірек айтқанда, басқа ешқандай бұйрықтар осы белгіге ауысуды орындамайды, демек, SK белгісі осы жерден басқа еш жерде керек емес. Мұндай ауысулар үлкен программаларда өте көп болуы мүмкін, сондықтан олардың әрқайсысына жаңа атау ойлап табу керек болады. Мұны оңайлату үшін TURBO ASSEMBLER программаның қажет бөлігінде ғана болатын локальдық белгілерді жасауға мүмкіндік береді.
Локальдық белгілер олардың @@ екі белгісінен басталатындығын есептемегенде, кез-келген басқа белгілерге ұқсайды. Мысалы,
@@ 20:
@@ TWO:
Назар аударыңыз! Локальдық белгі келесі глобальдық белгіге дейін болады.
Мысалы:
JMP THERE ; Глобальдық белгіге ауысу
@@ 20: INC AX
CMP AX, 30
JE @@20; Жоғарыға локальдық белгіге ауысу
THERE: CMP AX, 30
JE @@20; Төменге локальдық белгіге ауысу
XOR CX, CX
@@20:

Ассемблер тіліндегі массивтер*.
Ассемблер тілінде массивтерді сипаттау мен қолданудың арнайы бұйрықтары, құрылымдары немесе әдістері жоқ. Бірақ массивтермен жұмыс істеуге болады. Мысалы, бүтін сандардың массивін DUP операторын қолданып жасауға болады:
AR DB 10 DUP (?) - ; 10 бүтін сандар массиві.
10 мәннен тізбектілікті анықтауға болады:
AR DB 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Құраушы элементтерден де массив жасауға болады, мысалы жолдардан:
AR DB 20 DUP(?), 0 ; AR [0]
DB 20 DUP(?), 0 ; AR [1]
DB 20 DUP(?), 0 ; AR [3]

Үлкен массивтерді жасағанда келесі директиваларды қолданған жөн :
LABEL - белгі
REPT - қайталау
LABEL AR BYTE
REPT 100
DB 20 DUP(?), 0
ENDM
Бірінші жол BYTE типті AR белгіні сипаттайды. Мұнда басқа да типтерді қолдануға болады: WORD, DWORD және тағы басқа.
LABEL директивасы ассемблерге келесі берілгендерді қалай адрестеуді көрсетеді. Жадыда ол ешқандай кеңістікті резервтемейді.
REPT директивасы (белгілі бір сан рет қайталау) ассемблер тілінің кез-келген операторын қайталайды (берілген жағдайда 100 рет). REPT пен ENDM (макро соңы) арасында орналасқанның барлығы осы жолдарды қажетті сан рет тергендей етіліп қайталанады.
Анықтаудағы сипаттаманы әр кезде өзгертудің ыңғайлы әдісін қарастырайық. Мысалы, он бүтін элементтен массив жасау мен массивтің әр элементінде 0-ден 9-ға дейінгі мәндерді беру үшін келесі сипаттаманы қолдануға болады:
VAL = 0; мән беру директивасы
LABEL AR WORD
REPT 10
DW VAL
VAL = VAL+1; мән беру директивасы
ENDM

Массивтерді индекстеу.
Мәндерді оқу мен массивке жазу әдістерін қарастырайық.

Ескерту. Массив* - берілгендердің біркелкі үлкен аймағы
Мысалы, массивтің төртінші элементімен қалай қатынасуға болады? Ол үшін ассемблер тілінде массивтердің индекстері - қарапайым адрестер екендігін түсіну қажет. Сондықтан, массивке жазылған берілгендер типіне тәуелсіз, жеке мәндерді (яғни жеке элементтерді) индекстеу екі қадамға келіп тіреледі:
1) массив элементінің өлшемін I массив индексіне көбейту
2) нәтижені массивтің базалық адресіне қосу.
Мысал. Байттардың қарапайым массивінде егер I=0 болса, онда I*1=0*1=0 плюс ar адресі (база) массивтің ar[0] бірінші элементін анықтайды. ar[1] (I=1) екінші элементі базалық адрес плюс 1(I*1=1) адрес бойынша орналасқан.

Сурет 1. Массив индексті түрлендіру

Сонымен, массив индексінің мәнін жады адресіне түрлендіру керек. Мысал 1 суретте келтірілген.
Суреттен көретініміздей, 0 индексі 000D адресіне, яғни барлық массивтің базалық адресіне эквивалентті. 1 индексі 000E-ге, 2 индексі 000F-ке, осылайша 0014 адресі бар элементті анықтайтын 7 индексіне дейін сәйкес келеді.
Мысал. 100-битті массивтің элементтерімен жұмыс.
TURBO ASSEMBLER IDEAL режимі.
DATASEG
AR DB 100 DUP(?)
CODESEG
MOV AL, [AR+63]; Массивтің 64-ші элементін AL-ға қосу.
Көп жағдайларда массив индекстері етіп регистрлерді немесе жадыдағы айнымалы шамаларды қолданғанды жөн көреді. Адрестеудің базалық әдісі қолданылады, массив индекстерінің мәндерін ВХ регистріне жазуға болады.
Мысалы, AL регистріне index индексі бар AR массивінің элементін жүктеу керек болсын. Мұны былайша істеуге болады:
DATASEG
INDEX DW ?
ARRAY DB 10 DUP(?)
CODESEG
MOV BX, [INDEX] ; индекс мәнін алу
MOV AL, [BX+AR] ; AL--AR [INDEX]
Осы мақсатта SI және DI регистрлерін қолдануға болады
MOV SI, [INDEX] ; индекс мәнін алу
MOV AL, [SI+AR] ; AL--AR [INDEX]
MOV DI, [INDEX] ; индекс мәнін алу
MOV AL, [DI+AR] ; AL--AR [INDEX]

TYPE, LENGTH, SIZE операторлары.

Бұл кірістірілген операторлар ақпарат типі сұралатын өрнектерде қолданылады.
TYPE (тип) операторы айнымалы шама үшін қанша байт бөлінгендігін хабарлайды (1(DB), 2 (DW) немесе 4 (DD)). Бұл элементтің типі.
LENGTH (ұзындық) операторы белгілі бір айнымалы шамамен жолда үлестірілген жады негізгі бірліктерінің санын (байттарды, сөздерді немесе екілік сөздерді) хабарлайды. Массивтегі элементтер саны.
SIZE (өлшем) операторы айнымалы шаманы анықтау кезінде неше байт жады үлестірілгендігін хабарлайды. Бұл операторлар үшін келесі қатынас орындалады:

SIZEатауы = LENGTHатауы * TYPEатауы

Қарастырылып жатқан операторларды қолданудың мысалы:
DATASEG
AR DW 20 DUP(?) ;берілгендер сегментінде массивке бөлінетін ;жады, оның жадыдағы алатын орнын есептеу ;керек
SUB AX, AX ; АХ-ті нольге түсіру
MOV CX, LENGTH AR ; СХ-гі AR массиві элементтерінің саны
MOV SI, SIZE AR ; массив соңының индексі
SUM: SUB SI, TYPE AR; алдыңғы элементке ауысуды орындау үшін
; массив элементінің өлшемділігі азайтылады
ADD AX, AR [SI] ; элемент қосу
LOOP SUM ; цикл СХ нольге айналғанша қайталанады

Айнымалы шамалардың атрибуттарын ауыстыру.
Айнымалы шаманың үш атрибуты бар: тип, сегмент, сегменттегі ығысу.
Типті ауыстыру операторының форматы:

BYTE
WORD PTR айнымалы шаманың атауы
DWORD

тип PTR айнымалы шаманың атауы конструкциясы бұйрықта анық берілген типі бар айнымалы шаманың атауы атты ығысуды және сегментті қолдану керектігін білдіреді.
Мысал:
MOV BYTE PTR DW5, 7;
ADD AL, BYTE PTR DW5;
Типті ауыстыру операторы келесі типтес қатынастарда пайда болуы мүмкін көп мәнділіктің алдын алу үшін қолданылады:

INC [BХ] ; байт немесе сөз инкременті*
Байтпен операция жүргізу кезінде операнд типін анық анықтау керек:
INC BYTE PTR [BХ]
Сегмент атрибуты сегменттік регистр анық көрсеткішімен бұйрықта ауысады

ADD CX, ES:[SI]; сегмент типі анық көрсетілген.

RECORD директивасы

Ассемблер тілінде байт немесе сөз ішіндегі жеке биттердің және биттік тізбектердің символдық анықтауын орындауға болады. Мұндай анықтау жазу (RECORD) деп аталады. Әрбір жазуда аталған биттік тізбек (жеке жағдайда бір бит) өріс деп аталады. Жазуды анықтайтын RECORD директивасының форматы:

Аты RECORD өріс атауы:ұзындығы, {өріс атауы : ұзындығы}

Берілген директивадағы биттердің максималды саны 16-ға тең, ал минималды - 1-ге тең.
Жазуға қолданылған WIDTH (ені) операторы оның биттегі енін, яғни оны құрайтын барлық өрістердің ұзындықтарының қосындысын хабарлайды.
Жазба өлшемі оны орналастыру үшін қажетті байттар санына тең:1 (егер жазба ені 1...8 битке тең болса) немесе 2 (егер жазба ені 9...16 битке тең болса).
RECORD директивасы биттік өрістерге байтпен немесе сөзбен атау беруге мүмкіндік береді. TURBO ASSEMBLER өрістің орналасуын өзі есептейді.
Мысалы:
RECORD SBYTE SIGN: 1 , VAL: 7
Сөзден көп жазбаларды жасауға болмайды. RECORD типті айнымалы шамалар келесідей жасалады:
Ескерту. Инкремент* - ішіндегісіне 1-ді қосу
DATASEG
V1 SBYTE ;бұл өріспен бастапқы мән берілмейді.
V2 SBYTE 1;SIGN=1, VAL - келісілген бойынша
V3 SBYTE 5;SIGN- келісілген бойынша, VAL =5
V4 SBYTE 1, 127;SIGN=1, VAL=127
V5 SBYTE 3, 300;SIGN=1,VAL=44 (128 модулі бойынша ;өйткені 300=256+44

Әдетте, үнсіздік бойынша* Record айнымалышамалар өрісі 0 мәнінде болады. Бұны өзгерту үшін өрістің еніне теңдік белгісін және жаңадан ... жалғасы

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