Translyator. Kompilyator



Download 267,1 Kb.
Pdf ko'rish
bet2/2
Sana03.03.2022
Hajmi267,1 Kb.
#480343
1   2
Bog'liq
2-Maruza

Deklarativ dasturlash
bu dasturiy ta'minot qanday amalga oshirilishini aniq 
belgilashdan ko'ra, dastur nimani amalga oshirishi kerakligini belgilaydigan 
kompyuter dasturlash paradigmasi. Ushbu yondashuv tabiiy ravishda rasmiy 
mantiqiy tizimlarning dasturiy ta'rifiga mos keladi va ba'zi bir parallel ishlov berish 
dasturlarini dasturlashni soddalashtirish foydasiga ega. 
Obyektga yo’naltirilgan dasturlash yoki OYD – dasturlarni haqiqiy 
hayotiylikka asoslangan holdagi dasturlash usulidir. OYD ning protsedurali 
dasturlash tillari (masalan, Pascal, Basic, Fortran) dan asosiy farqi shundaki, OYD 
asosan obyektlarga asoslangan holda ishlasa, protsedurali dasturlash tillari asosan 
funksiyalarga asoslangan bo’ladi, ya’ni bu usuldagi dasturlashda har bitta 
buyruqlar qadamma-qadam bajarilib boriladi. 
Class
– OYDning markazi hisoblanadi va u har xil kodlar, ma’lumotlar va 
shu ma’lumotlar qay tarzda o’zgarishini ifodalovchi hususiyatlar saqlanadi. 
Boshqacharoq qilib aytadigan bo’lsak hayotiy obyektlarning qanday faoliyat 
yuritishi, nimalardan iborat ekanligi, qanday hususiyatlarga ega ekanligini 
tavsiflovchi kichik bir hujjat sifatida qarash ham mumkin. 
Class o’z ichiga o’zgaruvchilar va metodlar(funksiyalar) hamda qiymati 
o’zgarmaydigan konstantalarni oladi. Yana shuni ham ta’kidlash kerakki, har bitta 
klass bitta o’zgaruvchi tipi bo’lib ham hizmat qiladi. Xuddi Integer, String yoki 
boshqa tiplar kabi har bir class ham ma’lum bir tip sifatida qaralishi mumkin. 
Obyekt– 
bu class bilan farqli tushuncha xisoblanadi. Obyekt biz yozgan 
klassimizdagi har xil qoidalarga bo’ysunadigan ma’lumot bo’lib, u tezkor xotirada 
saqlanadi, class esa qattiq diskda saqlanadi. Har bir yasalgan obyekt tezkor 
xotiraning ma’lum bir yacheykalariga joylashadi. 
1.Dasturlardan foydalanib, biror ish bajarish va shu orqali natija olish, 
unchalik qiyin jarayon emas. Bir marotaba ko‘rib olgan inson, keyingi safar o‘zi 
bajara oladi. Ko‘pchilik adashtiradigan narsa, bu foydalanuvchi dasturchi 
deyilmaydi, faqatgina dastur foydalanuvchisi bo‘ladi xolos. Dasturchi, 
foydalanuvchilar foydalanishi uchun dastur yaratadi va bu jarayon juda murakkab 
hisoblanadi. 
Dasturchilik bilan shug‘ullanishni endi boshlagan yoshlar ko‘p qiyinchiliklarga 
duch kelishadi. Bu qiyinchiliklar asosan terminlarning tushunmasligidan kelib 
chiqadi. Bu maqolamda dasturlashning eng kerakli termini hisoblangan 
interpretator va kompilyator haqida yozib o‘taman. 
Dasturlash jarayonida dasturchi o‘z dasturini yaratish uchun xar hil turdagi 
kodlar yozadi. Kodlarnining qanday bo‘lishi qaysi dasturlash tilidan foydalanib, 
dastur tuzishga bog‘liq bo‘ladi. Dasturlash tillaridan C, C++, Java,… . Yozilgan 


kodlarni kompyuter tushunmaydi, kompyuter tushunishi uchun uchun bu kodlarni 
kompyuter tushunadigan tilga o‘zgartirish lozim. Mana shu vaziyatda yuqoridagi 2 
ta termin kerak bo‘ladi(kompilyator yoki interpretator). 
Kompyuter faqatgina raqamli kodlarni tushunadi, ya’ni 0 yoki 1. Bu 2 son 
orqali dastur tuzish juda qiyin hisoblanadi(manimcha bunday sonlar orqali dastur 
tuzuvchilar sanoqli bo‘lsa kerak). Shuning uchun, insonlar tushunadigan qilib 
dasturlash tillari yaratilgan. Ketma-ketlikni tushungandursiz, dasturchi dasturlash 
tillari orqali kodlar yozadi va bu kodlar kompyuter tushunadigan 0 va 1 sonlariga 
almashtiriladi va dastur kompyuterda ishlaydi, bu jarayonni kompilyator yoki 
interpretator amalga oshirib beradi. 
2.Interpretator — ham dastur ham jihoz ko‘rinishida bo‘lishi mumkin. Bu ham 
kompyuter tiliga o‘zgartirib berish vazifasini bajaradi, faqatgina ishlash 
texnologiyasi boshqacharoqdir. Interpretator, dasturlash tilida yozilgan kodlarni 
ketma — ket o‘qib, mashina tiliga o‘zgartirib boradi. Xatolik paydo bo‘lsa, o‘sha 
zahoti dasturchiga ma’lum qiladi. Bu ketma — ketlikda o‘zgartirish, 
kompilyatorga nisbatan sekinroq amalga oshiriladi(ba’zi holllarda kompilyatorga 
qaraganda 50 barobar sekin). Dastur natijasini ko‘rish uchun, har safar kodlarni 
interpretatordan o‘tkazish kerak bo‘ladi(kompilyatorga o‘xshab bir marotaba 
obyekt kod yaratib qo‘yib, keyin har doim ishlatishning iloji yo‘q). Bundan 
ko‘rinib turibdiki, interpretator asosan saytlar, umumiy holda veb dasturlashda 
ishlatiladi. Biror saytning yuklanishi jarayoni uzunligi, interpretatorda o‘zgartirish 
amalga oshirilishi bilan tushuntirilishi mumkin. Interpretator ishlatadigan 
dasturlash tillariga PHP, JavaScript, JScript, Basic,… misol bo‘la oladi. 
Bu ikki termin umumiy holda translyator deyiladi, ya’ni o‘zgartirgichlardir. 
Biror proyektlar qilganda bu 2 o‘zgartirgichlar birgalikda ham ishlatilishi mumkin. 
Biror dasturlash tili bilan jiddiy shug‘ullanmoqchi bo‘lsangiz, dastlab siz 
yozadigan kodlar qay tarzda kompyuter tiliga o‘zgartirilishini o‘rganib oling. Bu 
dasturlashning asosi hisoblanadi. 
3.Translyatorlar: Yuqori darajali (C, C++, Java, Phyton, …) yoki quyi darajali 
(assembly tillar) dasturlash tillarida yozilgan kodlarni mashina tiliga o'tkazish 
uchun ishlatiladigan programmalar — translyatorlardeb ataladi. 
Translyatorlarning 3 xil turi mavjud: 
Assembler 
Kompilyator 
Interpretator 
Assembler bu quyi darajali dasturlash tillarida yozilgan kodni mashina tiliga 
o'giruvchi translyatorlardir. Bu jarayonlar assmblatsiya (assembling) deb 
nomlanadi. 


Kompilyator va interpretatorlar esa yuqori darajli dasturlash tillarida yozilgan 
kodlarni mashina tiliga o'giruvchi translyatorlardir. Bu jarayonlar kompilatsiya va 
interpretatsiya deb nomlanadi.
4.Kompilyator — murakkab dasturdir, dasturlash tilida yozilgan barcha 
kodlarni birdaniga obyektli kodga o‘zgartirib beradi. Obyektli kodni yana ikkilik 
kod yoki mashina kodi deb ham atashadi. Keyinchalik bu obyektli kod 
kompyuterda to‘g‘ridan to‘g‘ri ishlatilishi mumkin bo‘ladi. Dasturlash tillarida 
yozilgan kodlar bu obyektli kodga ta’sir qilmaydi. Obyektli kodni o‘zgartirish 
uchun esa, qaytadan kompilyatsiya qilinib obyektli kod o‘zgartiriladi. Natija 
bajariladigan, .yexe ko‘rinishidagi fayl bo‘ladi. Bu faylni bloknotda ochib 
o‘zgartirib bo‘lmaydi, ya’ni bu fayl tayyor dastur hisoblanadi. Kompilyatorning 
kamchiligi sifatida, dasturlash tilidagi ma’lum bir qatorlani alohida tekshirish 
imkoniyati yo‘qligidir, uning uchun obyektli kod yaratib, uni ishga tushurish lozim 
bo‘ladi, ortiqcha ish bo‘lib qoladi. Undan tashqari ba’zi kompilyatorlar bir 
dasturlash tilidan, ikkinchisiga ham o‘zgartirib berishi mumkin. Kompilyator 
ishlatadigan dasturlash tillariga C, C++, Delphi larni misol qilib keltirish mumkin. 
5. Yuklagich––bu tizim programmasi bo‘lib, u obyekt programmani mashina 
xotirasiga yuklash vazifasini amalga oshiradi. Aksariyat yuklagichlar bundan 
tashqari ko‘chirish va bog‘lanishlarni ham amalga oshiradi. Odatda bog‘lash 
funksiyasi yuklash va ko‘chirish vazifalaridan ajratiladi. Bog‘lash – bog‘lash 
programmasi (bog‘lash taxriri) orqali, ko‘chirish va yuklash––yuklagich orqali 
bajariladi. Translyatorlar (assembler va komplyatorlar) har bir konkret tizimda 
biror standart shakldagi obyekt kodlarni yaratadilar. Shu sababli yuklagich va 
bog‘lash programmalari uchun programma matni qaysi tilda yozilgani ahamiyatsiz. 
Bu ma’ruzada yuklagichning asosiy vazifalaridan biri bo‘lgan obyekt 
programmani operativ xotiraga yozish va uning bajariluvchi birinchi adresiga 
boshqaruvni uzatishni ko‘rib chiqamiz. Yuklagichlar ikki turga bo‘linadi: absalyut 
va bog‘lovchi yuklagichlar. Soddalashtirilgan o‘quv mashinasi uchun yozilgan 
assembler programmasini xotiraga yuklash va unga boshqaruvni berish uchun 
absolyut yuklagich to‘g‘ri keladi. SO‘M uchun yozilgan programmaga mos obyekt 
programma qo‘yidagi ko‘rinishga ega bo‘lsin: 
H^COPY^0010000^00107A 


T^001000^1E^141033^482039^001036^281030^301015^482061^3C1003^00102
A^0C1039^00102D 
T^00101E^15^10C1036^482061^081033^4C0000^454F46^000003^ 000000 
T^002039^1E^041036^001030^E0205D^30203F^D8205D^281030^302057^5490
39^2C205E^38203F T^002057^1C^101036 ^4C0000^F1^0010000^ 
041030^E02079^302064^509039^DC2079^2C1036 T^002073^07 
^382064^382064^4C0000^05 
E^001000 
Absolyut yuklagichning ishi nisbatan sodda. Barcha ish bir o‘tishda amalga 
oshiriladi: birinchi navbatda berilgan programma to‘g‘riligi tekshiriladi. Masalan, 
programmaning operativ xotiraga sig‘ishi yoki yo‘qligi, buning uchun bosh qism 
yozuvi o‘qiladi. Keyin navbat bilan programma tanasi yozuvlari o‘qilib, 
ko‘rsatilgan adres bo‘yicha joylashtiriladi va nihoyat, tugallash yozuvi o‘qilgach 
programmaning boshlang‘ich adresiga boshqaruv uzatiladi. 
Bog‘lovchi yuklalich algoritmlari va jadvallari. Bog‘lovchi yuklalich 
algoritmi absalyut yuklagich algoritmiga nisbatan murakkab. Chunki unda obyekt 
programmalar o‘rtasida bog‘lanish tashqi nomlarda ko‘rsatgichlarni aniqlashga 
bog‘liqdir. Bu ko‘rsatgichlar tashqi nomlarga adreslar aniqlangandan keyingina 
qiymat qabul qiladi. Shu sababli bog‘lovchi yuklagich xuddi assemblerga o‘xshab 
ikkita o‘tishda amalga oshiriladi. Birinchi o‘tishda tashqi murojaatlar uchun 
adreslarni aniqlaydi, ikkinchi o‘tishda yuklagichni, ko‘chirish va bog‘lashlarni 
bajaradi. Bog‘lovchi yuklagich uchun tashqi nomlar jadvali –ESTAB zarurdir. Bu 
jadval SYMTABga o‘xshash bo‘lib, unda nomlar va tashqi marojaatlar adreslari 
(barcha boshqaruv seksiyalari uchun). Boshqa muhum o‘zgaruvchilar –
PROGADDR (programma yuklagich adresi) va CSADDR (boshqaruv seksiyasi 


adresi). PROGADDR – operativ xotiradagi bog‘lanuvchi programma yuklanishi 
zarur bo‘lgan programma boshlanish adresidir. Yuklagich bu adresni operatsion 
tizimdan oladi. SSADDR-ayni paytda yuklagich tomonidan qayta ishlanayotgan 
boshqaruv seksiyasining boshlanish adresi. Bu adres boshqaruv seksiyadagi borcha 
nisbiy adreslarga qo‘shiladi. Bog‘lovchi yuklagich birinchi o‘tishda obyekt 
programmaning faqat bosh qism yozuvi va aniqlovchi yozuvni qayta ishlaydi. 
Birinchi boshqaruv seksiyasi uchun PROGADDR boshlang‘ich adres bo‘ladi. 
Boshqaruv seksiyasi yozuvlaridan o‘qilgan nomlar (seksiya nomi , aniq yozuvdan 
nomlar) ESTABga qiymatlari bilan kiritiladi. Bu adreslar aniqlovchi yozuvdan 
qiymatlar CSADDR ga qo‘shishdan xosil bo‘ladi. Tugallash yozuvini o‘qigandan 
keyin boshqaruv seksiya uzunligi (CSLTH) CSADDR ga qo‘shiladi va bu qiymat 
keyingi boshqaruv seksiyasi uchun boshlang‘ich adres xisoblanadi. Birinchi 
o‘tishdan keyin ESTAB borcha tashqi nomlar va ular qiymatiga ega bo‘ladi. 
Programmani yuklash, ko‘chirish va bog‘lash amalda ikkinchi o‘tishda qilinadi. 
CSADDR o‘zgaruvchisi ayni paytda operativ xotiraga yuklanayotgan boshqaruv 
seksiyasining boshlanish adresi bo‘ladi. Programma tanasining navbatdagi yozuvi 
o‘qilganda, undan boyekt kod ko‘rsatilgan adresga yuklanadi (bu adresga 
CSADDR qiymati qo‘shiladi). Modifikator yozuv uchraganda modifikatsiyada 
ishlatilgan nom ESTAB dan qidiriladi va uning qiymati ko‘rsatilgan adresga 
qo‘shiladi yoki ayriladi. Yuklagich o‘z ishini yuklangan programmaga boshqaruvni 
berish bilan tugallaydi. 
Yuklagichning mashinaga bog‘liqmas xususiyatlari 
Bu 
bo‘limda 
yuklagichning 
mashinaga 
bog‘liqmas 
tomonlarini 
kutubxonalarning programmalarini izlash (standart programmani foydalanish), 
tashqi nomlarni o‘zgartirish va yo‘qotish, tashqi nomlarni avtomatik qayta ishlash 
va programmalarni overley yuklash masalalarini ko‘ramiz. 


Kutubxonalarda avtomatik izlash. Aksariyat bog‘lovchi yuklagichlar 
yuklanayotgan programma kutubxonalardan qismprogrammalarni avtomatik 
ravishda qo‘shish imkoniyatini beradi. Bu xolda programma tuzuvchidan faqat 
bunday programmalarni nomlarini tashqi nomlar ro‘yxatiga ko‘rsatish talab 
qilinadi. Bu mexanizmga kutubxonali izlash deb ataladi. Kutubxonali izlashni 
amalga oshirish uchun yuklagichlar malumot oqimida aniqlanmagan tashqi nomlar 
ro‘yxatiga ega bo‘lishi kerak. Buning uchun aniqlovchi yozuvdagi nomlar ularning 
adresi aniqlanmasdan oldin ESTAB jadvaliga kirgiziladi va maxsus belgi bilan 
belgilanadi. Nom qiymati (adresi) uchraganda, bu qiymat ESTABga kiritiladi va 
shu nom to‘liq aniqlangan xisoblanadi. 
Birinchi o‘tishdan keyin ESTABdan qiymatlari aniqlanmagan nomlar hal 
qilinmagan tashqi murojaatlar hosil bo‘ladi. Ularni hal qilish uchun yuklagich 
berilgan barcha kutubxonalarni qarab chiqish kerak (kutubxonalar malumot 
oqimining bir qismi sifatida qaraladi). Misol tariqasida SQRT funksiyasiga 
muroljaatni olishimiz mumkin. Kutubxonalarni tashkil qilishda maxsus fayl 
tuzulmasidan foydalaniladi. Bu tuzilish katalog (direktoriyaga) ega bo‘lib, unda 
borcha fayllar nomlari va ularning disk faylida joylashgan adreslari bo‘ladi. Ayrim 
operatsion tizimlar doimiy kutubxonalar katalogiga ega bo‘lib, bu hol izlash 
jarayonini tezlashtiradi. 
Yuklash jarayonini boshqarish. Yuklagichlar yuklash jarayonini o‘zgartirish 
imkonini beruvchi boshqaruv parametrini ishlatishi mumkin. 
Boshqaruv parametrlarini berish uchun mahsus boshqaruv tilidan 
foydalaniladi. Buruqlar . 
INCLUDE
()- bu buyruq 


yuklagichga ko‘rsatilgan programmani kutubxonadan o‘qish va uni kiruvchi 
oqimda malumot sifatida ishlatishni bildiradi. Navbatdagi buyruqlar BS yoki tashqi 
nomlarning ro‘yxatdan chiqarish va tashqi nomlarni o‘zgartirish imkoniyatini 
beradi: 
DELETE –– malumotlar oqimida ko‘rsatilgan seksiyani 
qarab chiqmaslik (hisobdan chiqish) buyrug‘i CHANGE <1-nom>, <2-nom>-<1 –
– nom>ni <2- nom>ga almashtirish. Misol uchun, COPY, WRREC, RDREC BS 
bo‘lgan programmani ko‘raylik. Bu uchta BS bita faylda (kutubxonada) joylashgan 
bo‘lsin. Faraz qilaylik , programma tuzuvchi COPY programmada RDREC va 
WRREC BS o‘rniga UTLIB xizmatchi programmalar to‘plamidan READ va 
WRITE qism programmalarini ishlatishmoqchi. Buning uchun programma matnini 
o‘zgartirish qilish yoki yuklagichga quyidagi mahsus buyruqlar ketma-ketligi 
berilishi mumkin: 
INCLUDE READ (UTLIB) INCLUDE RWITE (UTLIB) DELETE RDREC, 
WRREC, CHANGE RDREC, READ CHANGE WRREC, RWITE 
LIBRARY ––qo‘shimcha kutubxonalarni oqimga kiritish 
buyrug‘i. 
Bu kutubxonalar standart kutubxonalardan oldin qaraladi. 
NOCALL- yuklagichga ro‘yxatdan tashqi nomlar hal 
qilinmay qolishi kerak ekanligini bildiradi. Bu buyruq operativ xotirani tejaydi va 
yuklagich ishini yengillashtiradi. 
Programmalarning overley struktukasi. quyidagi rasmda 11 boshqaruv 


seksiyasidan tashkil torgan overley strukturali programmasining sxemasi (daraxti) 
va seksichlar uzunliklari keltirilgan. Bu yerda Ag‘ildiz BS, V,S yoki DFE 
seksiyalarini chaqirishi, V seksiya FFG yoki H chaqirishi mumkin. DFE yoki FFG 
birgalikda ishlaydigan seksiyalarni belgilanishi. Daraxt tugunlariga segmentlar 
deyiladi. Ildiz segment programma ish boshlashidan oldin yuklanadi va 
programma tugaguncha xotirada qoladi. Boshqa segmentlar ularga murojaat 
bo‘lgandagina xotiraga yuklanadi. Bir vaqtda operativ xotiraga yuklangan 
segmentlar aktiv segmentlar deyiladi. Misol uchun N BS bojarayotgan bo‘lsin , N 
ni V chaqiradi. V ni A , demak A, V, N segmentlari aktiv deyiladi. 
Bir sathdagi segmentlar bir vaqtda bajarilmaydi, shu sababli ular 
xotiraning ayni bir soxasidan foydalanishi mumkin. Agar boshqaruv birorta 
sigmentga berilsa, u o‘zi bilan bir sathdagi segmentning operativ xotiradagi 
o‘rnini egallaydi, natijada programma bajarilishi uchun ishlatiladigan operativ 
xotira programma umumiy xajmidan kam bo‘ladi. Overley prinsipidan 
foydalanishning tub moxiyati ham shundadur. Overley strukturasi programma 
yuklagich buyorug‘i yordamida beriladi. 


SEGMENT (< boshqaruv seksiyasi >). Bu buyruq 
segment nomini va unga kiruvchi BS ro‘yxatini aniqlaydi. Buyruqlar ketma –
ket joylashuvi ahamiyatlidir. Birinchi aniqlanadigan segment, keyingi 
segmentlar “ota-bola” munosbatini aniqlaydi. PARENT buyruhiga ko‘rsatilgan 
segmentlar uchun ota segment ekanligini bildiradi. Yuqorida overley 
tuzulishini (daraxtni) aniqlovchi buyruqlar ketma-ketligi keltirilgan. Overley 
programmalar uchun xotira taqsimoti ulardagi ota- bola shajaraviy holatiga 
qarab taqsimlanadi. Overley programmalarning asosiy xususiyati ularda 
xotiraga yuklanmagan programmaga murojaat qilishdadur. 
Programma ishlash jarayonida segmentlarni xotiraga yuklashni maxsus 
programma overley menedjeri amalga oshiradi. Bu programma alohida 
boshqaruv seksiyasida (misol uchun OVLMGR) joylashadi. OVLMGR 
programma strukturasi to‘g‘risidagi malumotlarga ega bo‘lishi kerak. Bu 
malumotlar segmentlar jadvali SEGTAB bo‘ladi. SEGTABni yuklagich 


yaratadi va o‘zak katalogining aloxida boshqaruv seksiyasi sifatida qo‘shib 
qo‘yadi. SEGTAB programma segmentlar shajarasini va har bir segment uchun 
ular kirish nuqtasini va SEGFILE dagi joylashuvi haqida malumot beradi. 
Aktiv segmentga (SEG 2) murojaat 
Aktiv bulmagan segmentga (SEG 6) murojaat 
Bundan tashqari SEGTABda o‘zak segmentdan (A) tashqari segmentlar 
uchun boshqaruvni uzatish soxasi bo‘ladi. Bu soxada kerakli segmentga 
boshqaruvni uzatish buyruqlarini o‘z ichiga oladi. 
Nazorat savollar 
1.Til protsessorlarining asosiy turlari.? 
2.Interpretatorning ishlash prinsipi? 
3.Translyator haqida tushuncha? 
4.Kompilyator haqida tushuncha? 
5.Bog‘lovchi haqida tushuncha? 
6.yuklagich haqida tushuncha? 

Download 267,1 Kb.

Do'stlaringiz bilan baham:
1   2




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©www.hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish