|
9-Ma’ruza Assembler dasturlash tili va uning imkoniyatlari Yuqori sath tillari hisoblangan C, C+ va Java kabi dasturlash tillarida yozilgan bitta operatorni amalga oshirish uchun, bir nechta mashina buyruqlarini bajarish kerak bo‘ladi
|
bet | 1/2 | Sana | 20.05.2024 | Hajmi | 82,19 Kb. | | #246191 |
Bog'liq 9-Maruza
9-Ma’ruza
Assembler dasturlash tili va uning imkoniyatlari
Yuqori sath tillari hisoblangan C, C+ va Java kabi dasturlash tillarida yozilgan bitta operatorni amalga oshirish uchun, bir nechta mashina buyruqlarini bajarish kerak bo‘ladi. Har bir operatorga bittadan mashina buyrug‘i to‘g‘ri keladigan til esa – assembler tili deb ataladi.
Kompyuter texnikasining rivojlanishi dasturlash tillarida algoritmlarni yozib olish uchun turli xil yangi belgilar tizimlarining paydo boʻlish jarayonini belgilab berdi. Bunday tilning paydo boʻlishining maʼnosi dastur kodini soddalashtirishdan iborat edi. Dasturlash tillarini besh avlodga boʻlish qabul qilingan. Birinchi avlodga oʻtgan asrning 50-yillari boshlarida, birinchi kompyuterlar endigina paydo boʻlgan paytda tuzilgan tillar kiradi. Bu "bir satrda bir buyruq" prinsipi asosida qurilgan birinchi assembler tili edi.
XX asr davomida kompilyatorlar nazariyasi boʻyicha olib borilgan izlanishlar yuqori darajadagi dasturlash tillarini yaratishga olib keldi, ular koʻrsatmalarni uzatish uchun qulayroq sintaksisdan foydalanadilar.
Kompyuterning elektron qurilmalari ishlashning fizik tamoyillari shundan iboratki, kompyuter faqat bir va noldan iborat buyruqlarni — kuchlanishning pasayishi ketma-ketligini, yaʼni mashina kodini idrok eta oladi. Kompyuterlar rivojlanishining dastlabki bosqichida odam kompyuterga tushunarli tilda, mashina kodlarida dasturlar tuzishi kerak edi. Har bir koʻrsatma birliklar va nollarning turli kombinatsiyasi sifatida ifodalangan opkod hamda operand manzillaridan iborat edi. Shunday qilib, protsessor uchun har qanday dastur oʻsha paytda birlar va nollar ketma-ketligi sifatida qaragan. Keyinchalik kompyuter bilan muloqot qilish amaliyoti shuni koʻrsatdiki, bunday tilni oʻzlashtirish qiyin va noqulaydir. Uni ishlatganda 1 yoki 0 ni notoʻgʻri ketma-ketlikda yozib koʻplab xatolarga yoʻl qoʻyish ehtimoli juda yuqori edi. Dasturni boshqarish juda qiyin boʻlgan. Bundan tashqari, mashina kodlarida dasturlashda kompyuterning ichki tuzilishini, har bir blokning ishlash prinsipini yaxshi bilish kerak edi va bunday tildagi eng yomon narsashundaki, bu tildagi dasturlar — birlar va nollarning juda uzun ketma-ketligi mashinaga bogʻliq, yaʼni har bir kompyuter uchun oʻz dasturini tuzish kerak edi va mashina kodlarida dasturlash juda koʻp narsa: vaqt, ish va dasturchining eʼtiborini oshirishni talab etardi.
Tez orada mashina kodini yaratish jarayonini avtomatlashtirish mumkinligi maʼlum boʻldi. 1950-yildan boshlab dasturlarni yozish uchun mnemonik til — Assembler tilidan foydalanila boshlandi. Assembler tili mashina kodini inson uchun qulayroq shaklda koʻrsatishga imkon berdi: buyruqlar va bu buyruqlar bajariladigan obyektlarni belgilash uchun buyruqning mohiyatini aks ettiruvchi ikkilik kodlar oʻrniga harflar yoki qisqartirilgan maxsus soʻzlar qoʻllanilgan. Masalan, assembler tilida ikkita raqamni qoʻshish boʻyicha koʻrsatma add soʻzi bilan ifodalanadi, uning mashina kodi 000010 tarzida boʻladi. Assembler quyi darajadagi dasturlash tilidir. Quyi darajadagi dasturlash tili, bu muayyan turdagi protsessorga yoʻnaltirilgan va uning xususiyatlarini hisobga oladigan dasturlash tili demakdir. Bunday holda, “quyi” “yomon” degani emas, balki bu shuni anglatadiki, til operatorlari mashina kodiga yaqin va maxsus protsessor koʻrsatmalariga qaratilgan boʻladi. Assemblar tilining paydo boʻlishi dasturchilarning hayotini sezilarli darajada osonlashtiradi, chunki endi ular koʻzda miltillovchi nollar va birlar oʻrniga oddiy tilga yaqin belgilardan iborat buyruqlar bilan dastur yozishlari mumkin edi. Oʻsha vaqt uchun bu til innovatsiya edi va mashhur edi, chunki u kichik dasturlarni yozishga imkon berardi, bu esa oʻsha davr mashinalari uchun muhim mezon sanalgan. Ammo u orqali yirik dasturiy taʼminotlar ishlab chiqish murakkabligi boʻlganligi bois uchinchi avlod tillari hisoblanmish yuqori darajadagi tillarning paydo boʻlishiga olib keldi. Ammo assemblerdan foydalanish shu bilan tugamadi, u bugungi kungacha tor doiralarda mashhur boʻlib kelmoqda. Hozirgi vaqtda u dasturlarning alohida qismlarini yozishda yoki baʼzan dasturlarning oʻzini yozishda qoʻllaniladi.
Dasturlash - bu dasturlash tilida yozilgan dasturiy mahsulotlarni yaratish san'ati.
Dasturlash tili - bu kompyuter tomonidan o'qiladigan dasturlarni yozish uchun yaratilgan rasmiy ishora tizimi.
Dasturlash tillari uch turga bo'linadi:
mashina tillari. Bu odam uchun juda tushunarsiz, ammo kompyuter uchun juda tushunarli.
past darajadagi tillar. Masalan, Assembler.
yuqori darajadagi dasturlash tillari. Masalan, Paskal, C, Java.
M oris Uilkes – “Edsack” uchun mnemonik sxema va bitta tizimda (ingliz tilida assembly system deb nomlangan) yig‘ilgan dasturlar ketma-ketligidan iborat kutubhonani e’lon qiladi. U dasturlar bajarilishining ketma-ketligini tashkil qilgan bo‘lgan.
Mnemokod
|
Izoh
|
LDA 0B00
|
0B00 adresidan sonniolib yozish, yani xotiradagi sonni MPning birinchi ichki registry bo‘lgan akkumulyator (A)-ga yozish
|
CMA
|
(A)-da yozilgan sonni inkorlash
|
STA 0B01
|
Natija xotiraning 0B01 adresiga yozish
|
RST 1
|
Dasturni ishlashda to‘tatish
|
4.1-rasm. Xotirada yozilgan sonni inkorlash dasturi
Adres
|
Son
|
Izoh
|
0800
|
3A
|
LDA buyrug‘ining mashina kodi.
|
0801
|
00
|
Adresning kichik bayti
|
0802
|
0B
|
Adresning katta bayti
|
0803
|
2F
|
CMA buyrug‘ining mashina kodi
|
0804
|
32
|
STA buyrug‘ining mashina kodi.
|
0805
|
01
|
Adresning kichik bayti
|
0806
|
0B
|
Adresning katta bayti
|
0807
|
CF
|
RST 1 buyrug‘ining mashina kodi
|
4.2-rasm. Assemblerlangan dastur.
4.3-rasm. Dasturni xotira adreslari bo‘yicha joylashishi.
Adres
|
Mashina kodi
|
Metka
|
Mnemokod
|
Izoh
|
0800
|
3A 000B
|
|
LDA, 0B00
|
Sonni olib yozish
|
0803
|
2F
|
|
CMA
|
Sonni inkorlash
|
0804
|
32 010B
|
|
STA, 0B01
|
0B01adresi bo‘yicha yozish
|
0807
|
CF
|
|
RST 1
|
Dastur to‘xtatish
|
4.4-rasm. Dasturni bitta qatorda, bitta buyruq keltirilgan
ko‘rinishda yozilgan holati.
Assembler tilida ishlash oson emas. Biron bir dasturni assembler tilida yozish, o‘sha dasturni C, C+ va Java kabi dasturlash tillarida yozishga nisbatan ko‘p vaqt talab qiladi. Assemlerda dasturni to‘g‘ri ishlaydigan holatga keltirish ham (rus tilida – отладка программы) juda ko‘p vaqt talab qiladi. Shunday ekan assemblerda dasturlash nima uchun kerak - degan savol paydo bo‘ladi. Bunga asos qilib quyidagi ikki sababni ko‘rsatish mumkin: assembler tilida tuzilgan dasturlar unumdorligining yuqori bo‘lishi (rus tilida – высокая производительность программ) va ularda kompyuterning apparat vositalariga to‘g‘ridan-to‘g‘ri murojaat qila olish imkonining borligi. Yuqori malakaga ega bo‘lgan dasturchi, assembler tilida, yuqori sath tilida tuzilgan dasturga nisbatan, ancha kam xotira egallaydigan va anchagina tez ishlaydigan dasturlarni tuzishi mumkin. Ko‘p hollarda, yozilgan dasturning kamroq xotirani egallashi va tez bajarila olishi mumkinligi juda muhim ahamiyat kasb etadi. Hozirda ko‘pgina o‘rnatiladigan amaliy dasturlar, masalan – smart-kartalardagi va uyali telefonlardagi dasturlar, har-xil qurilmalarning drayverlari va BIOSning muolajalari (rus tilida – процедуры) ana shunday dasturlar sirasiga kiradi. Assembler tilini o‘rganish bilan biz, kompyuterning qanday ishlashini va uning ichki tuzilishi, ya’ni arxitekturasi qanday ekanligini mukammal o‘rganish imkoniyatiga ega bo‘lamiz.
Assembler tili operatorlari va ularni qo‘llash
Assembler tilida operator – unga mos mashina buyrug‘ining tuzilishini o‘zida ifodalaydi. Ammo turli xil kompyuterlar uchun ishlab chiqilgan assembler tillari, ko‘p jihatlari bilan o‘zaro o‘xshash bo‘lganliklari sababli, assembler tili haqida umumlashtirib ham gapirish mumkin. 4.5, 4.6 va 4.7-keltirilgan misollarda, Pentium 4, Motorola 680x0 va UltraSPARC protsessorlari asosida qurilgan kompyuterlar uchun assembler tilida yozilgan dasturlarning bo‘laklari keltirilgan. Barcha dasturlar N = I + J formulani hisoblashni amalga oshiradi. Barcha misollarda bo‘sh qatorgacha bo‘lgan operatorlar hisoblashlarni bajaradilar, bo‘sh qatordan pastda joylashgan operatorlar esa I, J va N o‘zgaruvchilar yozish uchun mo‘ljallangan xotirani ajratib qo‘yishni amalga oshiradilar.
FORMULA:
|
MOV
ADD
MOV
|
EAX.I
EAX.J
N.EAX
|
:Registr EAX=1
:Registr EAX=I+J
N=I+J
|
I
|
DD
|
3
|
4 bayt ajratish va ularga 3 qiymatini yozish
|
J
|
DD
|
4
|
4 bayt ajratish va ularga 4 qiymatini yozish
|
N
|
DD
|
0
|
4 bayt ajratish va ularga 0 qiymatini yozish
|
|
|
Bosh sahifa
Aloqalar
Bosh sahifa
9-Ma’ruza Assembler dasturlash tili va uning imkoniyatlari Yuqori sath tillari hisoblangan C, C+ va Java kabi dasturlash tillarida yozilgan bitta operatorni amalga oshirish uchun, bir nechta mashina buyruqlarini bajarish kerak bo‘ladi
|