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


ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ

МИНИСТРЛІГІ

М. ӘУЕЗОВ атындағы ОҢТҮСТІК ҚАЗАҚСТАН МЕМЛЕКЕТТІК УНИВЕРСИТЕТІ

Автоматтандыру, ТЕЛЕКОММУНИКАЦИЯ және

БАСҚАРУ кафедрасы

КУРСТЫҚ ЖҰМЫС

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

мамандығы: Радиотехника, электроника және телекоммуникациялар

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

Жұмыс

Бағасы

Бағасына қорғалды

«___» 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

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

студент тобы -

(аты - жөні)

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

Қорғау кезінде келесі сұрақтарға жауап алынды:

Курстық жұмысты орындау кезінде алынған балл (60 мүмкіндіктен) , қорғау бағаланды (40 мүмкіндіктен ) балл.

Сомалық баллы

Жұмыстың бағасы

Курстық жұмыстың жетекшісі

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

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

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

Аннотация

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

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

Көлемі 35 бет, 5 сурет, 4 әдебиет қолданылған.

Мазмұны

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

Пайданылатын қысқартулар мен белгілер 7

Кіріспе 8

  1. Ассемблер тілінде программалау 9
  2. Директивалар 12
Өрнектер 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] .

Ассемблер тілінде келесі операторлар бар: бұйрықтық операторлар, берілгендерді тарату операторлары, және ассемблер директиволар. Бұйрықтық операторларды транслятор МП бұйрықтарына аударады (нәтижесінде олар орындалады) ; ассемблер директиволар - трансляторға арналған бұйрықтар.

Программаның бастапқы модулі ассемблер тіліндегі операторлардың (немесе сөйлемдердің) тізбегі болып табылады. Олардың классификациялары:

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

Кейде берілгендерді тарату операторларын директиваларға жатқызады.

Операторлар форматы.

Операторлардың форматтары еркін, яғни оператордың кез-келген өрісі (бөлігі) жолдың кез-келген позициясынан бастала алады, бірақ бөліктер алдыңғысынан бір немесе бірнеше пробелмен (бос орындармен) бөлінуі керек.

Бұйрықтық операторлардың форматының түрі:

{Белгі:} {Префикс} Операция коды {Операнд(тар) } {; Ескертулер}

Мәнерлі жақшамен міндетті емес өрістер (бөліктер) белгіленген.

Ассемблер директивасы мен берілгендерді тарату операторларының форматы келесі:

{Аты} Директива {Операнд(тар) } {; Ескертулер}.

Директива аты ешқашан қос нүктемен бітпейді. Кейбір директивалар атының міндетті түрде болуын талап етеді, мысалы, SEGMENT, ENDS, PROC және басқалары. Басқа директиваларда атының өрісі (бөлігі) бос болуы керек, мысалы, NAME, ASSUME, ORG, PUBLIC және басқалары.

Ескерту. Мнемоника * (немесе мнемокод) - оператордың (команданың) жазылуы, аталуы. Резервтеу ** - кейінге сақтау

DB, DW, DD берілгендерді тарату операторларында аты міндетті емес.

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

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

SEGMENT/ENDS (сегмент/сегменнт соңы) .

PROC/ENDP (процедура немесе қосымша программа/процедура соңы) .

MACRO/ENDM (макробұйрықты анықтаудың басы/макробұйрықты анықтаудың соңы) .

Операторлардың элементтері.

Операторлар келесілерден тұрады:

  • маңызды сөздерден;
  • идентификаторлардан (белгі мен айнымалы шамалардан) ;
  • сандық тұрақты шамалардан (константалардан) ;
  • символдық тізбектерден;
  • арнайы символдардан;
  • ескертулерден.

Маңызды (немесе кейінге сақталған сөз) сөздер ассемблер үшін мағынасы бар атау болып табылады. Мысал ретінде бұйрықтар мен директивалар жазылуыларды (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 атрибуты бар:

  • сегмент атрибуты (айнымалы шаманың осындай атрибутына ұқсас) ;
  • ығысу атрибуты (айнымалы шаманың осындай атрибутына ұқсас) ;
  • қашықтық атрибуты (дистанция), тарату бұйрығы бойынша не сегмент ішінде (яғни екі байттық ығысу көмегімен басқару - NEAR типі), не өтпелі сегменттің сыртында (яғни, 4-байтты сегмент көрсеткішінің көмегімен: ығысу - FAR типі) орналасқан белгіге ауысу мүмкіндігін анықтайды,
  • CS сегменттік регистр туралы болжам. Трансляция*(1-ші өтуі) кезінде ассемблер белгіні операнд ретінде кездестірсе, ол оның ығысуын білмейді. Ол оның орналасуы туралы болжам жасайды: егер ығысу ± 128 байт аралығында екендігін білсе, жақын - NEAR, яғни SHORT.

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

  • операция кодының алдындағы атау қос нүктемен аяқталса, мысалы,

NED: NOP

- атау LABEL директивасы атауының өрісінде орналасса, мысалы,

NED LABEL FAR

  • атау EQU директивасының өрісінде орналасса, мысалы,

NED EQU THIS NEAR

  • атау PROC/ENDP директива жұбы атауының өрісінде орналасса, мысалы,

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-байттық буфер

Программаны іске қосқанда осы директива жасаған 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

Жадыда бұл мысал келесі түрде болады

Атауы 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-ға қосу.

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

... жалғасы

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



Реферат Курстық жұмыс Диплом Материал Диссертация Практика Презентация Сабақ жоспары Мақал-мәтелдер 1‑10 бет 11‑20 бет 21‑30 бет 31‑60 бет 61+ бет Негізгі Бет саны Қосымша Іздеу Ештеңе табылмады :( Соңғы қаралған жұмыстар Қаралған жұмыстар табылмады Тапсырыс Антиплагиат Қаралған жұмыстар kz