Ассемблер тілі


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

Қазақ Ұлттық Аграрлық Университеті

Ақпараттық жүйелер кафедрасы

Курстық жұмыс

Тақырыбы: Ассемблер тілі

Орындаған: Мекебаева Г. Д.

ВТ-305К

Тексерген :Кенжалиева М. Д.

Алматы 2006 ж.

КУРСТЫҚ ЖҰМЫСТЫ ОРЫНДАУҒА ТАПСЫРМА

Студент:Мекебаева Г. Д.

Тақырыбы: «Ассемблер тілі»

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

Сызба материалдар саны: 11 сурет

Жұмыс жетекшісі: Кенжалиева М. Д .

Кіріспе

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

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

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

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

1. Ассемблер тіліне шолу

Машиналық тіл - негізі 0 мен 1-дің киындасуларының жиынынан тұратын тіл.

1950-ші жылдары программалаушылар программалау үшін машиналық тілдің символикалық (рәміздік) аналогін қолданған. Оны ассемблер деп атаған Ассемблер тілі сөздер жинағынан тұрады. Бұл сөздер жинағы электрондық есептеу машинасына қандай өрекет жасау керектігін көрсетеді. Жоғарғы деңгейлі тілдерге қарағанда ассемблер тілінің командалар жинағы ЭЕМ-нің буындарымен тікелей байланысты. Сондықтан ассемблер тілі машина-тәуелді және машина-бағдарлы программалау тілі деп саналады.

Ассемблер тілінің тиімділігі:

  • Тез орындалады, өйткені процессорды толығырақ басқарудың мүмкіндігі бар;
  • Компьтерге төмен деңгейде қатынас құруға болады.

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

Программаның бастапқы мәтіні кез келген мәтіндік редакторда теріледі де, . asm кеңеймесі бар файл түрінде сақталады.

Сосын TASM. EXE аударғыш (оны кейде компилятор деп те атайды) прграммасының көмегімен бастапқы мәтіндік файлдан Name. obj (машиналық тілдегі программаның мәтіні, бірақ ішкі командалар арасындағы байланыстары жөнге келтірілмеген) объектік кодасы бар файл алынады. Сонымен қатар ол Name. lst (листинг) және Name. crf (ерсілі-қарсылы сілтемелер) файлдарын қалыптастырады.

Осыдан кейін TLINK. EXE (құрастырғыш немесе байланыс редакторы) программасының көмегімен объектік файлдан ( деп аталатын) орындалаиын программа алынады. Сонымен қатар Name. map (карта файлын), Name. lib (кітапхана файлын), Name . def (анықтамалар файлын) және Name. res (ресурстар файлын) құрастыра алады.

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

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

Ассемблер сөйлемдері 3 түрлі болады:

  • Командалар. Бұлардың объектік кодасы бар және бұлар шағынпрпоцессорға не істеу керек екенін көрсетеді.
  • Макрокомандалар. Макрокоманда- бсатапқы программадғы бірнеше машиналық командалардың орнына жүретін символдық атау.
  • Директивалар(жалғаноператорлар) . Жалғаноператорлар Асссемблерге деректермен және командаларамен не істеу керектігін анықтайтын нұсқау береді. Сондықтан олар шағынпроцессордың емес, аударғыштың жұмысын басқарады ж»не орындалатын EXE файлында бқл жалғаноператоларға сәйкес машиналық кода болмайды.

Тіркегіштер

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

  • жалпы міндетті тіркегіштер;
  • мекендететін тіркегіштер;
  • сегментті тіркегіштер;
  • басқару тіркегіштері.

AX-AH AL

BX-BH BL

CX-CH CL

DX-DH DL

Жалпы міндетті тіркегіштер

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

ВХ тіркегіші-мекендету тіркегіші және есептеу тіркегіші сияқты қолданылады.

СХ 8088 шағын санашықтың командалары СХ тіркегішін санашық ретінде қолданады. Онда айнымалының қайталау саны сақталынады.

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

Мекендету тіркегіштері

8088 шағынсанашығында лперандтарды адрестеуге қатысатын 4, 16 биттік тіркегіш бар. Олардың біреуі бір уақытта жалпы міндетті тіркегіш болады. Бұл ВХ тіркегіші немесе базалық тіркегіш және де одан басқа 3 тіркегіш бар. Олар мыналар:

ВР бұл база көрсеткіші;

SI бұл таратқыш индексі;

DI бұл қабылдағыш индексі.

Басқару тіркегіштері. 8088 шағынсанашығында 3 16 биттік тіркегіштер бар. Олар алдымен басқару операцияларында қолданылады.

SP стектің көрсеткіші;

IP команданың көрсеткіші және тіркегіш жалаушалары.

Сегменттер регистрі(BIOS, IO. SYS, MsDOS. SYS, макроанықтауыш, макрокомандалар, жинақтауыш есептеулері(Д, С, В, А обьектілер модулі. ) )

CS программаны анықтау сегменттер регистрі

DS деректер құрылымымен жұмыс істейтін сегменттер регистрі

SS стекті сегментті регеистр

ES қосымша сегменттер регистрі.

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

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

SEGMENT -дерективасы жаңа сегментті бастайды;

ENDS -дерективасы оны аяқтайды;

ALIGN -дерективасы келесі жолдағы берілген дерективаны аргументтерге бөлетінадресін ауыстырады;

IQU -дерективасы кейбір өрнектерге символдық атаулар береді.

Стек

Стек және стек сегменті

Стек бұл сақтайтын жер, онымен жұмыс келесі принцип бойынша жүргізіледі:Стекке соңғы болып жазылған элемент, бірінші болып саналады. LK-де мұндай сақтау орнына зерденің кез-келген аймағын бөлуге болады, бірақта оған екі талап қойылады:оның өлшемі 64Кб-тан аспауы тиіс және оның бастапқы адресі 16 ретті болуы керек. Басқа сөзбен айтқанда, бұл адрес зерде сегменті болуы тиіс. Оны стек сегменті деп атайды. Оның басына, біз білетініміздей, SS сегментті регистр көрсетілуі тиіс:

SS🡪 стек сегменті(<=64Кб)

SP🡪 🡩

ДК-де стекті астынан үстіне қарай толтырады:бірінші элемент стек аймағының соңына жазылады, келесі элемент оның үстіне және т. с. с. Ал стектан бірінші болып, ең үстінгі элемент алынады. Сондықтан стек соңы тұрақты, ал үсті әрқашан қозғалып отырады. Осыны білу үшін, тағы бір (stack pointer, стекті көрсетуші) регистрі қолданылады. Онда стекке соңғы жазылған элементтің қай ұяшықта жатқанының адресі сақталады.

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

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

Сөздерді жазу және оқу

ДК-де стектік командалардың негізгілері болып стекке сөзді және стектен сөзді оқу командалары табылады.

-стекқа сөзді жазу:PUSH ор.

Мүмкін операнд түрі:т16 SP, т16.

PUSH(итеру) командасы стекке өзінің операндын жазады. Шартты түрде оны былай көрсетуге болады:

Push op SP🡪 op

SP 🡪 pop op

Есептің қойылымы

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

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

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

қызмет көрсету.

Есептің шешілуі:

1. Жаңа форма ашамыз;

2. Ашылған Form1-ге 1label, 2Button батырмаларын орналастырамыз. Сосын оларды Caption қасиетінен ішіндегі тексттерін былай деп өзгертеміз:

Label1-«Добро пожаловать!!!»

Button 1-«Меню»

Button2-«Закрыть»

3. Екінші формамызды құрамыз. Ол үшін, File-New-Form командаларын орындаймыз.

4. Меню батырмасын 2 рет шертіп, оның программасын жазамыз. Бұл программа 1-ші мен 2-ші форманың бірігуі болып табылады. Оларға ортақ батырма Меню батырмасы.

procedure TForm1. Button1Click(Sender: TObject) ;

begin

form2:=tform2. create(form1) ;

form2. showmodal;

end;

5. Ал Закрыть батырмасы үшін,

procedure TForm1. Button2Click(Sender: TObject) ;

begin

close;

end;

end.

6. Ашылған екінші формамызға келесі компаненттерді қоямыз:

  • 12 label. Олардың тексттерін Caption қасиетіне барып,

Label1-ді «Меню»

Label2-ні «Котлеты(пол. порция) »

Label3-ті «Пельмени(пол. порция) »

Label4-ті «Манты(полпорция) »

Label5-ті «Пловь(пол. порция) »

Label6-ны «150 тенге»

Label7-ні «140 тенге»

Label8-ді «110 тенге»

Label9-ды «90 тенге»

Label10-ды «Общая сумма:»

Label11-ді «Оплаченная сумма:»

Label12-ні «»деп өзгертеміз.

  • 6Edit орнатып, олардың ішін Text қасиетіне барып, бос қалдырамыз.
  • 6 Button орналастырып, тақырыптарын,

  • Button1-ді «Заказ»
  • Button2-ні «Сдача»
  • Button3-ті «Выход»
  • Button4-ті «О программе»
  • Button5-ті «Вычислить»
  • Button6-ны «Очистить» деп сәйкесінше жазамыз.

7. Осы жерде енді, Сдача батырмасын екі рет шерте отырып, программасын жазайық:

procedure TForm2. Button2Click(Sender: TObject) ;

var

a, b, c, d, j, k: real;

begin

a:=strtofloat(edit1. Text) ; a:=a*150;

b:=strtofloat(edit2. Text) ; b:=b*140;

c:=strtofloat(edit3. Text) ; c:=c*110;

d:=strtofloat(edit4. Text) ; d:=d*90;

j:=strtofloat(edit5. Text) ;

k:=j-(a) ;

k:=j-(b) ;

k:=j-(c) ;

k:=j-(d) ;

k:=j-(a+b+c) ;

k:=j-(a+b+d) ;

k:=j-(b+c+d) ;

k:=j-(d+c+a) ;

k:=j-(a+b+c+d) ;

edit6. Text:=floattostr(k) ;

end;

8. Заказ батырмасы үшін:

procedure TForm2. Button1Click(Sender: TObject) ;

var n, n1, n2, n3, n4: integer;

k: string [20] ;

m: string [25] ;

begin

k:= string (edit1. Text) ;

m:= string (edit2. Text) ;

n1:=strtoint(edit1. Text) ;

n2:=strtoint(edit2. Text) ;

n3:=strtoint(edit3. Text) ;

n4:=strtoint(edit4. Text) ;

n:=n1+n2+n3+n4;

if n>2 then

ShowMessage('Извените, заказать больше 1 порция блюды вы не можете!')

else

ShowMessage('Спосибо!Приходите ещё!Приятного аппетита!')

end;

end.

9. Вычислить батырмасына,

procedure TForm2. Button5Click(Sender: TObject) ;

var a, b, c, d: integer;

s: integer ;

begin

a:=strtoint(edit1. Text) ; a:=a*150;

b:=strtoint(edit2. Text) ; b:=b*140;

c:=strtoint(edit3. Text) ; c:=c*110;

d:=strtoint(edit4. Text) ; d:=d*90;

s:=a+b;

s:=a+c;

s:=a+d;

s:=b+c;

s:=b+d;

s:=c+d;

s:=a+b+c;

s:=a+b+d;

s:=b+c+d;

s:=d+c+a;

s:=a+b+c+d;

label11. Caption:=''+inttostr(s) ;

end;

10. О программе батырмасы үшін, мына программаны жазамыз:

procedure TForm2. Button4Click(Sender: TObject) ;

begin

form3:=Tform3. create(form2) ;

form3. showmodal;

end

11. Выход батырмасы үшін, ModalResult-mrCancel командаларын орындаймыз.

12. Очистка батырмасына,

procedure TForm2. Button6Click(Sender: TObject) ;

begin

edit1. Clear;

edit2. Clear;

edit3. Clear;

edit4. Clear;

edit5. Clear;

edit6. Clear;

end

13. Келесі формамыз-О программе

Бұл формаға 3 label, 1 Button қоямыз. Оларды суреттегідей етіп өзгертеміз.

14. Ең соңғы формамыз бұл-Сообщение. Оған бір Button және 1label

Орналастырамызда, Button-ды ОК дейміз. Оны ерекшелеп алып, ModalResult-mrОК командаларын орындаймыз.

15. Проектімізді сақтаймыз да, оны жүктейміз(запускаем)

Есептің нәтижесі:

1.

2. Меню батырмасын шерткенде,

3. Ескерту терезесінің шығуы:

4. Шартқа байланысты екінші терезенің шығуы:

5. Жалпы сумманың есептелінуі:

6. Тұтынушының ұсынған ақшасының қалған бөлігін қайтару:

7. О программе терезесі:

Программа листингісі:

unit Unit1;

interface

... жалғасы

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



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