Proqramlaşdırma dilləri

Proqramlaşdırma dilləri

Dilini bilmədiyimiz insana nəyi isə başa salmaq üçün ya jestlərdən, ya da onun başa düşdüyü dildəki sözlərdən istifadə edirik. Kompüterin mərkəzi qurğusu olan prosessorun da öz dili var.
Maşın dili.
Kompüterin bilavasitə “başa düşdüyü” yeganə dil – sadəcə, ədədlər yığınından ibarət olan maşın dilidir [machine language]. Ədədlərlə işlədiyindən prosessor üçün komandaları kodlaşdırmaq, məsələn, ədədlərlə ifadə etmək lazımdır. Tutaq ki, 1 – toplamanı, 2 – vurmanı, 3 – bölməni (yaxud uyğun olaraq 01, 02, 03) və s. bildirir. Müəyyən əməliyyatı yerinə yetirmək üçün proses sora komandalardan əlavə verilənlər də lazımdır. Sadəlik üçün, tutaq ki, hər hansı uydurma prosessorun komandasının ümumi şəkli belədir:
Proqramlaşdırmada komandanın arqumenti, yəni verilənlər operand adlanır. Hər bir verilən, kompüterin yaddaşının xanalarında yerləşir. Bütün yaddaş xanalara bölünmüşdür və hər xananın öz nömrəsi – ünvanı olur. Beləliklə, hər bir operand iki parametrlə – qiyməti və yaddaşda olan yeri ilə təyin olunur. 00xx yazılışı xx ədədinin özünü, 01xx yazılışı isə yaddaşda xx nömrəli xananı göstərir. Bir sözlə, xx veriləninin qarşısında 00 olarsa, bu, verilənin özünü, 01 isə yerini göstərir. Onda 01 və 02 xanalarında yerləşmiş iki ədədin ədədi ortasını tapan proqram aşağıdakı şəkildə olacaq:
01 0101 0102 0103
03 0103 0002 0103
Birinci sətirdəki komandanı adi dildə ifadə edək: 01 xanasındakı verilənlə 02 komandasındakı veriləni topla və nəticəni 03 xanasına yaz. İkinci sətirdəki komanda isə aşağıdakı kimi ifadə olunar: 03 xanasındakı ve - riləni 2-yə böl və nəticəni yenidən 03 xanasına yaz. Proqramı bir sətirdə yazsaq belə alınar:
0101010102010303010300020103

Göründüyü kimi, maşın dilində yazılmış belə sadə proqram da açılması lazım olan “sirli bir aləmdir”. Uydurma olmayan, gerçək kompüterlərdə isə maşın kodu qat-qat mürəkkəb olur.
“Maşın kodu” deyəndə, maşın dilində yazılmış proqram başa düşülür. Belə kodda proqram tərtib etmək, sonra isə onun düzgünlüyünü yoxlamaq çox çətindir, çünki bunun üçün ya bütün komandaların kod və formatını yadda saxlamaq, ya da hər dəfə xüsusi cədvəllərdən istifadə etmək lazım gəlir. Kod laşdırmada azacıq səliqəsizlik, yazıda yanlışlıq, rəqəmlərin yerinin qarışdırılması gözlənilməz nəticələrə aparıb çıxarardı. Belə yanlışlığı tapmaq da asan iş deyildi, çünki proq ramçının qarşısında az-çox aydın dildə yazılmış alqoritm deyil, rəqəmlər yığını dururdu.
Proqramçılar öz işlərini yüngülləşdirmək üçün yollar arayırdılar; elə bir alət ya rat maq lazım idi ki, onun köməyilə kiçik detallara vaxt itirmədən proqram yazmaq mümkün olsun, özləri yaradıcılıqla, alqoritmlərin qurulması ilə məşğul olsunlar, qalan işlər isə kompüterə həvalə edilsin.

Assembler.
Maşın kodunda proqramlaşdırma “iynəylə yer qazmaq” kimi bir şeydir. Çox sadə hesablama məsələləri (məsələn, ədədin yaddaşdan prosessora yüklənməsi, onun başqa ədədlə toplanması, nəticənin yenidən yaddaşa yazılması) maşın kodlarında uzun-uzadı elə mürəkkəb şəkil alırdı ki, kiçik kərpic - lərdən böyük bir binanın necə tikil məsini təsəvvür etmək belə çətin idi. Assembler dilinin adı ingiliscə “assemble” – “toplamaq”, “yığmaq” sözündən götürülüb.
Bu vəziyyətdən çıxmaq üçün ilk addım komanda ların simvollarla əvəzlənməsi oldu, daha dəqiq de sək, komandalar adi söz lərin qısaltmaları ilə gös tə rildi. İdeya sadə olsa da, onun gerçəkləşdirilməsi yazılmış proqramların digər proqramçılar tərəfindən qavranılmasını asanlaşdırmağa, səhvlərin sayını azaltmağa, proq ramçıların işini yün gülləşdirməyə imkan verdi. Komandaların simvollar vasitəsilə yazılış siste - minə mnemonik yazı sistemi deyilir. Belə sistemin köməyilə yazılmış proqram nümunəsinə baxaq.
TOP X1, X2 > X3
BÖL X3, 2 > X3
Bu fraqmentin birinci sətri bildirir ki, yaddaşın 1 və 2 nömrəli Xanalarını TOPlayıb, nəticəni 3 nömrəli Xanaya yerləşdirmək lazımdır. İkinci sətir isə kompüterə yaddaşın 3 nömrəli Xanasını 2-yə BÖLüb, nəticəni yenə də 3 nömrəli xanaya yerləşdirmək göstərişini verir. Göründüyü kimi, belə yazılış yu xarıda verilmiş uy ğun maşın kodundakı yazılışdan daha anlaşıq lıdır.
Bu həm insanın, həm də kompüterin başa düşdü yü proqramlaşdırma dilinin yaradılması yolunda ilk addım idi.
İkinci addım prosedurlar kitabxanasının yara - dılması, yəni koddan təkrar-təkrar istifadə olunması idi. Ona qədər isə hər bir proqramçı hər dəfə öz “Amerikasını kəşf etməli” idi. Prosedurlar kitabxana la rı proqramçılara yeni mü rəkkəb proq - ramları qısa vaxt ərzində keyfiyyətlə tərtib etmək imkanı verirdi.
Bu iki istiqamət yeni proqramlaşdırma dillərinin yaradılması və inkişafı üçün özül oldu. Əlbəttə, assembler proqramçını işin ən arzu - olunmaz hissəsindən – operatorların əl ilə maşın koduna çevrilməsindən azad edir. Ancaq buna baxmayaraq, assembler dilinin iki böyük nöqsanı var. Birinicisini, ola bilsin, siz özünüz artıq sezdiniz: assembler dilində proqramlaşdırma çox diqqət və səbir tələb edən işdir. Mikroprosessorun işini birbaşa idarə edərkən həddən artıq xırda məsələlər nəzərə alınmalıdır.
İkinci çatışmazlıq assembler dilindəki proqramların “daşınabilən” [portable] olmamasıdır. Məsələn, assembler dilində Intel 8080 prosessoru üçün yazılmış proqramı Motorolla 6800 prosessorlu kompüterdə işlətmək olmur, proqramı həmin pro sessor üçün yenidən yazmaq lazım gəlir. Doğ ru dur, bu o qədər də çətin məsələ olmasa da, hər halda müəyyən işlər görülməlidir.
Top