101
Birinchi ko‘rinishda murakkab ko‘ringan
uzulishni tashkillashtirish
dasturlovchiga uzulishlarga ishlov beruvchi dasturlarni o‘zgartirishni osonlashtiradi,
ularni hotira xududining istalgan joyiga joylashtirish mumkin, ularni xoxishiy
o‘lchamga keltirish va xoxlagancha murakkablashtirish mumkin bo‘ladi.
Uzulishga ishlov berish dasturi bajarilayotgan vaqtda yangi uzulishga so‘rov
kelishi mumkin. Bu holda u ham bayon qilingan tartibda bajariladi,
lekin asosiy
dastur bo‘lib uzulgan dastur hisoblanadi. Bu esa
uzulishni ko‘p marotaba
joylashtirish deb ataladi
. Stek mexanizimi bu ko‘p
marotaba joylashtirilgan
uzulishlarni hech qandek muammosiz bajarilishini ta’minlab beradi, chunki stekdan
birinchi bo‘lib oxirgi saqlangan kod olinadi, ya’ni ushbu uzulishga ishlov berishdan
qaytish, bundan oldingi uzulishga ishlov berish dasturi amalga oshiriladi.
Qayt qilib o‘tishimiz kerakki, ancha murakkab hollarda uzulish vektorlar
jadvalida uzulishga ishlov berish dasturning boshlanish manzili emas, uzulishlar
deskriptori (bayon qiluvchi) joylashishi mumkin. Lekin
bu deskriptorning ishini
oxirgi natijasi bo‘lib baribir ham uzulishga ishlov berish dasturining boshlanish
manzili bo‘ladi. Uzilishlarni bajarilishini ta’minlashda stek hotira muhim o‘rinni
egallaydi.
Stek uchun hotira yoki stek (Stack)
– bu operativ hotiraning bir qismi bo‘lib,
axborotlarni LIFO (Last In – First Out) ish tartibida vaqtincha saqlash uchun hizmat
qiladi.
Stekning boshqa operativ hotiraga nisbatan farqli xususiyati – bu berilgan va
o‘zgartirib bo‘lmaydigan manzillash usulidir. Xoxishiy sonni (kodni) stekka
yozishda son quydagicha hosil qilinadigan manzil bo‘yicha yoziladi, ya’ni stek
ko‘rsatgichi registrining qiymatini dastlab birga kamaytirilgan (dekrementlangan)
qiymati (yoki ikkiga kamaytirilgan, agar 16-razryadli so‘z
hotiraga juft manzillarga
joylashtirigan bo‘lsa) manzil sifatida ishlatiladi. Stekdan sonni o‘qish vaqtida esa,
son manzili stek ko‘rsatgichining qiymatidan aniqlanadi, shundan so‘ng stek
ko‘rsatgichining bu qiymatini birga (inkrementlanadi) oshiriladi (yoki ikkiga).
Natijada oxirida yozilgan sonni birinchi o‘qiladi, birinchi yozilgan son esa oxiri
o‘qiladigan bo‘ladi. Bundek hotira turi LIFO yoki magazin turidagi hotira (masalan,
102
avtomat magaziniga joylashtirilgan oxirgi o‘q, birinchi bo‘lib ishlatiladi) deb
nomlanadi. Stekning ishlash tamoili 6.7-chizmada keltirilgan (hotira yacheykasining
manzili shartli ravishda olingan).
6.7-chizma. Stekning ishlash tamoili
Masalan, stek ko‘rsatgichining hozirdagi holati 1000008 va unga ikkita son
(so‘z) yozilishi kerak. Birinchi so‘z 1000006 manzil bo‘yicha yoziladi (yozishdan
oldin stek ko‘rsargichi ikkiga kamayadi). Ikkinchisi – 1000004 manzil bo‘yicha
yoziladi. Yozilgandan so‘ng stek ko‘rsatgichining qiymati – 1000004 bo‘lib qoladi.
Agarda yana stekdan ikkita so‘z o‘qilsa, u holda birinchi bo‘lib 1000004 manzildagi
so‘z o‘qiladi, o‘qilgandan so‘ng esa stek ko‘rsatgichi 1000006 teng bo‘lib qoladi.
Ikkinchi bo‘lib 1000006 manzildagi so‘z o‘qiladi va stek ko‘rsatgichi esa 1000008
teng bo‘lib qoladi. Hammasi oldingi holatga qaytdi. Birinchi yozilgan so‘z ikkinchi
bo‘lib o‘qiladi, ikkinchisi esa birinchi bo‘lib o‘qiladi.
Bundek manzillash usuliga zarurat ko‘p
marotaba joylashtiriladigan
dasturostilarda yaqqol namoyish bo‘ladi. Masalan, faraz qilaylik asosiy dastur
bajarilayotgan bo‘lsin va undan 1- dasturosti chaqirilsin. Agarda bizga axborotlar
qiymatini va asosiy dasturning ichki registrlarining qiymatini dasturosti bajarilish
vaqt oralig‘ida saqlashi kerak bo‘lsa, biz dasturostini chaqirishdan oldin ularni
stekda saqlab qo‘yamiz (stekka yozib olinadi), dasturosti bajarib bo‘lingandan so‘ng
esa ularni stekdan (o‘qiladi) qayta olinadi. Agarda 1-dasturostidan 2-dasturosti
chaqirilsa xuddi yuqorida keltirilgan operatsiyalarni
qayta takrorlanadi, ya’ni 1-
dasturostining ichki registrlarining qiymatini va axborotlarni stekka yozib olinadi.
Оператив хотира
Ўкиш
Ёзиш
Манзил
1000000
1000002
1000004
1000006
1000008
100000А
100000С
Стек
103
Tushunarliki, 2-dasturosti ichida stekning oxirida 1-dasturostining (birinchi
navbatda o‘qiladigan) axborotlari bo‘ladi, asosiy dasturning axborotlari esa
ichkariroqda bo‘ladi. Shu jumladan stekdan o‘qish holati bo‘lganda esa avtomatik
ravishda axborotni o‘qishni kerakli tartibiga rioya qilinadi. Dasturostilar soni ko‘p
bo‘lgan holda ham xuddi yuqorida keltirilgani kabi ishlaydi. Ya’ni, nimani ko‘p vaqt
saqlash kerak bo‘lsa, stekning ichkarirog‘iga yoziladi, oz vaqt saqlanib so‘ng
o‘qiladigan axborotlar esa yuzaroqqa yoziladi.
Har qandek protsessorning buyruqlar tizimining tarkibida stek bilan axborot
almashish uchun mahsus stekka yozish (PUSH) va stekdan o‘qish (POP) buyruqlari
inobatga olingan. Stekka nafaqat protsessorning barcha
ichki registrlarining
qiymatlarini yozish mumkin, yana belgilar registrining (protsessorning so‘z holati,
PSW) kiymatlarini ham yoziladi. Bundek hol esa, masalan, bu dasturostini
chaqirishdan oldin bajarilgan dasturostidan qaytilayotganda oxirgi buyruq natijasini
nazorat qiladi. Dasturlar va dasturostilar o‘rtasida axborotlarni uzatishni
osonlashtirish uchun yana shuningdek stekda axborotlarni ham saqlash mumkin.
Umumiy holda, stek uchun hotira xududi qancha ko‘p ajratilsa, dasturlovchi uchun
shuncha ko‘p imkoniyatlar hosil bo‘ladi va murakkab dasturlarni ishlash mumkin
bo‘ladi.