O‘zbekiston respublikasi oliy va o’rta maxsus ta’lim vazirligi mirzo Ulug‘bek nomidagi O‘zbekiston milliy universiteti Jizzax filiali Informatika va axborot texnalogiyalari 103-19 gurux talabasi Jo’raboyev Haydarning mustaqil ishi


Assembler tilidagi programmani mashina tiliga o‘tkazuvchi maxsus programma translyator deyiladi, ayrim hollarda uni Assembler



Yüklə 0,6 Mb.
səhifə3/4
tarix06.02.2022
ölçüsü0,6 Mb.
#52163
1   2   3   4
Tizmli dasturlashdan mustaqil ishim

Assembler tilidagi programmani mashina tiliga o‘tkazuvchi maxsus programma translyator deyiladi, ayrim hollarda uni Assembler deb ham atashadi.

Mashina kodi - to'g'ridan-to'g'ri protsessor tomonidan talqin qilinadigan ma'lum bir kompyo’terning (protsessorning) buyruqlar tizimi. Ko'rsatma odatda protsessor registriga yozilgan bo’tun sondir. Protsessor ushbu raqamni o'qiydi va ushbu ko'rsatma bilan mos keladigan amalni bajaradi. Bu "Qanday qilib dasturchi bo'lish kerak" kitobida keng tarqalgan. Past darajadagi dasturlash tili (past darajadagi dasturlash tili) - bu mashina kodlarida dasturlashga imkon qadar yaqin bo'lgan dasturlash tili. Mashina kodlaridan farqli o'laroq, past darajadagi tilda har bir buyruq raqamga emas, balki qisqartirilgan buyruq nomiga (mnemonic) mos keladi. Masalan, ADD buyrug'i ADDITION uchun qisqa. Shuning uchun, past darajadagi tildan foydalanish dasturlarni yozishni va o'qishni ancha osonlashtiradi (mashina kodlarida dasturlash bilan taqqoslaganda). Past darajadagi til protsessorga xosdir. Masalan, agar siz PIC protsessori uchun past darajadagi dastur yozgan bo'lsangiz, u AVR protsessori bilan ishlamasligiga amin bo'lishingiz mumkin. Yuqori darajadagi dasturlash tili Inson tiliga iloji boricha yaqinroq bo'lgan dasturlash tili (odatda ingliz tiliga, lekin milliy tillarda dasturlash tillari mavjud, masalan, 1C tili rus tiliga asoslangan). Yuqori darajadagi til amalda ma'lum bir protsessorga yoki operatsion tizimga bog'lanmagan (agar aniq ko'rsatmalar ishlatilmasa). Assambleya tili Siz dasturlaringizni yozadigan past darajadagi dasturlash tili. Har bir protsessorning o'ziga xos yig'ish tili mavjud. Yig'uvchi Assambleya tilida yozilgan dasturingizning manba kodini bajariladigan faylga (EXE yoki COM kengaytmasi bo'lgan fayl) o'zgartiradigan (kompilyatsiya qiladigan) maxsus dasturdir. Aniqroq aytganda, faqat montajchini emas, balki bajariladigan dasturni yaratish uchun qo'shimcha dasturlar talab qilinadi. Keyinchalik bu haqda ko'proq ... Aksariyat hollarda, ular "assembler" deyishadi, lekin "assambleya tili" degan ma'noni anglatadi. Endi bilasizki, bular turli xil narsalar va buni aytish umuman to'g'ri emas. Garchi barcha dasturchilar sizni tushunishadi. MUHIM! Paskal, BASIC va boshqalar kabi yuqori darajadagi tillardan farqli o'laroq, har bir assambleyerning o'ziga xos yig'ish tili mavjud. Ushbu qoida assambleya tilini yuqori darajadagi tillardan tubdan ajratib turadi. Yuqori darajadagi tilda yozilgan dasturning manba kodlari (yoki oddiygina "manba kodi"), siz ko'p hollarda turli xil protsessorlar va turli xil operatsion tizimlar uchun turli xil kompilyatorlar bilan kompilyatsiya qilishingiz mumkin. Assambleyer manbalari bilan bu juda qiyin bo'ladi. Albatta, bu farq bir xil protsessorga mo'ljallangan turli xil montajchilar uchun deyarli sezilmaydi. Ammo masalaning haqiqati shundan iboratki, har bir protsessor uchun o'z montajchisi va o'ziga xos montaj tili mavjud. Shu ma'noda yuqori darajadagi tillarda dasturlash ancha osonlashadi.

Amallarning teskari polsha yozuvi. Bu amallarning postfiks yozilishidir. Amallarning infeks yozuviga nisbatan, polsha yozuvi operandlari o’z tartibi buyicha, amal ishoralari esa kat’iy bajarilish tartibida keladi. Xisoblash uchun stekdan foydalaniladi. Kamchiligi: Biz stekning yuqorisi bilangina ishlay olishimiz sababli, ifodalarni optimallashning iloji yuk.Ifodalar chapdan ungga karab chikiladi va elementlar quyidagi koida buyicha kayta ishlanadi: Algoritm:



1. Agar operand belgisi uchrasa u xolda u steka joylanadi (stekning yuqorisi bulib xisoblanadi) 2. Agar unar amal belgisi uchrasa u xolda bitta operand stekdan tortib chiqariladi, amal bajariladi va natija stekning yuqorisiga joylashadi. 3. Agar bunar amal belgisi uchrasa u xolda ikkita operand stekdan tortib chiqariladi, amal bajariladi va natija stekning yuqorisiga joylashadi.

Postfiks yozuv. Kundalik amaliyotda uchraydigan qavslarni o’z ichiga olgan oddiy arifmetik ifodalarni infeks ifodalar deb ataladi, chunki amal ishorasi operandlar orasida joylashadi. Xarakatlarning bajarilish tartibi bunday ifodalarda amallarning kattalik darajasi va qavslar bilan belgilanadi. Bunday ifodalarni xisoblash va kompilyatsiyalash ularni avvaldan amallarni bajarilish tartibini aniqlash maksadidi taxlil kilishni anglatadi.Arifmetik ifodalarni qavslarsiz yozish usullari mavjudki, ularda xaraktlar tartibi ifodadagi amal belgilari tartibi bilan beriladi. Yozuvlarning bunday ko’rinishini polsha yozuvlari yoki qavssiz yozuvlar deb ataladi. Polsha yozuvi prefiks bulishi mumkin, bu xolda amal ishorasi operandlardan avval keladi, va postfiks bulishi mumkin, bu xolda amal ishorasi operandlardan keyin keladi. Bunday qavssiz ifodalarni xisoblash va kompilyatsiyalash qavsli ifodalarga karaganda soddaroqdir, chunki amallar ifodalanish tartibida bajariladi va avvaldan taxlil talab etilmaydi. Prefiks polsha yozuvi (PrPZ) quyidagicha aniqlanadi. Agar infiks ifoda Ye bitta a operanddan iborat bulsa, u xolda PrPZ ifoda Ye bu a . Agar infiks ifoda Ye1*Ye2, bu yerda * amal belgisi, Ye1 va Ye2 operandlar uchun infiks ifoda, u xolda ushbu PrPz *Ye1’E2’ , bu yerda Ye1’,Ye2’ – Ye1 va Ye2 ifodalarning PrPZ idir. Agar (Ye) infiks ifoda bulsa, ushbu ifodaning PrPZi PrPz Ye si ham infiksdir. Sanab o’tilgan koidalar berilgan infiks ifodaning PrPZni ko’rish tartibini aniqlaydilar. Masalan, (a+b)*(s-d) ifoda uchun PrPZ ni quyidagicha ko’rish mumkin. Birinchi bajariluvchi amalning operandlarini aniqlaymiz. Ye1= (a+b) va Ye2 = (s-d). Aniqlashlarga ko’ra prefiks yozuv Ye1*Ye2 bu *Ye1’E2’ bu yerda Ye1’,Ye2’ – Ye1 va Ye2 ifodalarning PrPZ idir. Bu ifodalar uchun prefiks yozuvlarni ko’rishni bajaramiz. Ye1’ = +ab, Ye2’= -sd va natijada quyidagi ko’rinishni olamiz: *+ab-sd Postfiks yozuvda esa amal ishoralari operandlardan keyin quyilishi bilan farqlanadi. Masalan, infiks yozuv (A+V) ga postfiks yozuv AV+ mos keladi. Postfiks polsha yozuvi (PoPZ) quyidagicha aniqlanadi. Agar infiks yozuv Ye bitta a operanddan iborat bulsa, u xolda Ye ni PoPZ a buladi. Agar infiks ifoda Ye1*Ye2, bu yerda * amal belgisi, Ye1 va Ye2 operandlar uchun infiks ifoda, u xolda ushbu PoPz Ye1’E2’* , bu yerda Ye1’,Ye2’ – Ye1 va Ye2 ifodalarning PoPZ idir. Agar (Ye) infiks ifoda bulsa, ushbu ifodaning PoPZi PoPz Ye dir. Xuddi yuqoridagidek misolga PoPZni ko’ramiz. (a+b)*(s-d) Tashki amallarning operandlarini belgilaymiz. Ye1= (a+b) va Ye2 = (s-d). Bularning postfiks yozuvlarini topamiz: Ye1’ = ab+, Ye2’= sdIfodaga quyib Ye1’E2’* va natijada ab+sd-* ga ega bulamiz. Ifodalarning postfiks yozuvi ikkita kuchli xususiyatga ega bulib, ularni shuning uchun xam kompilyatorlarda keng kullaniladi. Ixtiyoriy ifodani yozish uchun qavslar shart emas, chunki amalda ishtiroq etuvchi operator operanddan keyin keladi, va operandlarni ko’rsatishdagi noaniqlik bulmaydi. Masalan, (A+V)+S postfiks yozuvda AV+S+, A+(V+S) esa postfiks yozuvda AVS+ ko’rinishda yoziladi. Navbatdagi operatorni o’qish vaktida mos operandlar ukib bulingan buladilar va operator boshka kushimcha bnrilganlarni o’qishsiz bajarilishi mumkin. Yuqorida aytilganlar binar amallarga xam tegishli bulib ularni unar amallarga xam kullash kiyin emas. Unar operator (teskari ~) ni argumentdan keyin quyish yetarlidir. Msaslan infiks yozuv ~A A~ ko’rinishda buladi, ~(A+V) ifoda esa AV+~ ko’rinishga ega buladi. Yuqoridagi xususiyatlarga asosan postfiks ko’rinishdagi ifoda quyidagi oddiy algoritm orkali xisoblanishi mumkin. while(lex!=NULL) // ifodada leksemalar kolmagunicha { lex= getNextLex( ); // keyingi leksemani o’qish if(isOperand(lex)) // leksema, agar operand bulsa push(lex); // leksemani stekga yozish if(isOperator(lex)) // leksema, agar operator bulsa push( performOperation(lex, pop( ), pop( ) )); /* oxirgi stekka yozilgan leksemalar ko’rsatayotgan amallarni bajarish va ushbu elementlarni amal natijasi bilan almashtirish; */ } Xisoblashlar natijasida ifodaning qiymati stekning yagona elementi bulib koladi. Bunday stek bilan amallar bajaruvchi algoritm ixtiyoriy kompilyatorning asosini tashkil etadi. Kupincha sintaksis taxlil bloki dasturni postfiks ko’rinishga aylantiradi, undan keyin kod generatori ob’yekt dasturni yuqoridagi usul bilan ifodalarni karab chikkan xolda ko’radi. Ko’rinib turibdiki, postfiks yozuvlarni xisoblash kiyinchilik tugdirmaydi, lekin infiks yozuvlarni postfiksga aylantirish murakkabroq ish. Faraz kilaylik til maxsuloti quyidagi ko’rinishga ega bulsin. A V i S Bu yerda A,V va S noterminal belgilardir, i esa terminal belgidir. Amal ishoralari terminal belgilar deb xisoblaymiz. U xolda bu maxsulot noterminal A infiks yozuv ekanligini va unda V va S «i» operator bilan birgalikda katnashayotganligini bildiradi. Xuddi shunday ifodaning postfiks ko’rinishi xam V va S operandlardan tashkil etiladi va ulardan sung «i» operatori keladi. Shunday kiltb bunday maxsulot uchun postfiks yozuv quyidagi ko’rinishga ega buladi. V uchun postfiks yozuv S uchun postfiks yozuv i Agar barcha terminal belgilar chikuvchi faylga shu tartibda chikarilsalar, u xolda barcha tilning frazalari postfiks ko’rinishida ifodalanadilar. 4.Semantik taxlil boskichlari 1. Kiruvchi dasturdagi kiruvchi tilning semantikasini tekshirish. Ushbu tekshiruv dasturning kiruvchi zanjirlarini kiruvchi dasturlash tili semantikasini talablariga mos quyishdan iborat. a:=v+s 2. Kompilyatorda dasturning ichki tasvirlanishini kiruvchi tilning semantikasi yordamida noaniq ko’rsatilgan operatorlarda kushish. Ushbu xarakatlar ifodalarning operandlari turlarini aylantirish va funksiyalar, protseduralarni parametrlarini o’zatish bilan boglik. 3. Dasturlash tillarining kiruvchi til bilan tugridan tugri boglanmagan elementar semantik normalarini tekshirish. Ushbu tekshiruv kupgina zamonaviy dasturlash tillari ko’rsatadigan servis funksiya xisoblanadi. Ushbuni bajarilishi majburiy shart emas. 4. Tilni leksik ulchovlarini identifikatsiyasi. O’zgaruvchilarni, toifalarni, protseduralarni, funksiyalarni va boshka dasturlashning leksik tillarni identifikatsiyasi– bu berilgan ob’yektlar va ularning kiruvchi dastur matnidagi ismlari urtasidagi bir qiymatlilikni o’rnatishdir.


Yüklə 0,6 Mb.

Dostları ilə paylaş:
1   2   3   4




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin