Protsessor registrlari bilan bog‘langan funksiyalar
Protsessor registr Turbo-Paskal funksiyasi
CS Cseg
DS Dseg
SS Sseg
SP Sptr
TP programma kodining bajarilishida xotira taqsimoti.
MS DOS xotirasining yuqori chegarasi
|
Dinamik obyektlar uchun xotira qismi
|
UYUM
6
|
|
Overley buferi (zarur bo‘lsa)
|
5
|
Sseg:Sptr
|
Stekning to‘ldirilgan qismi («pastga» to‘ldiriladi)
|
Ctek (lokal o‘zgaruvchilar va parametrlarni
saqlash uchun)
4
|
Sseg:0000
|
Stekning bo‘sh qismi
|
|
Global o‘zgaruvchilar
|
Ma’lumotlar segmenti 3
|
Dseg:0000
|
Turlangan konstantalar
|
|
|
Sistema modulining (SYSTEM) ishchi kodi
|
Bu yerda EXE –fayl
|
|
Birinchi modulning (UNIT) ishchi kodi
|
nusxasi joylashadi
2
|
Agar kiritilgan bo‘lsa
|
Boshqa modullarning (UNIT) ishchi kodlari
|
|
|
Oxirgi modul (UNIT) ishchi kodi
|
|
|
Programma asosiy blokining ishchi kodi
|
|
PrefixSeg:0000
|
Programma prefiks segmenti (PSP 256 bayt)
|
1
|
Pointer turi. TPda maxsus adres turi Pointer–ko‘rsatgich aniqlangan Bu tur orqali xotira katagi adresini aniqlovchi o‘zgaruvchilarni e’lon qilishi mumkin.
Var p: pointer; uzunligi 4 Kbayt.
Adreslar bilan ishlash vositalari
Funksiya: tur
|
Qaytaradigan qiymati
|
Addr (x): Pointer
Seg(x): Word
Ofs(x): Word
Ptr(S,O:Word): Pointer
@x:
|
x obyektning xotiradagi adresi
x obyekt joylashgan segment
x obyekt uchun segmentdagi siljish
S segment O siljish bilan berilgan xotira katagiga ko‘rsatgich
x obyektning xotiradagi adresi
|
Addr(x), Seg(x), Ofs(x) va @ operatori X obyekt aniqlab beradi. Bu yerda X sifatida ixtiyoriy turdagi o‘zgaruvchi, obyektlar, protsedura va funksiyalar bo‘lishi mumkin (konstantalardan tashhari).
Misol:
Var x:string;
p, r:Pointer;
. . .
p:Addr(x);
q:@x; { pºq }
Pointer turidagi qiymatni ekranga chiqarib bo‘lmaydi, lekin segment va siljishlarni alohida chiqarish mumkin:
Writeln(‘Segment -’,Seg(p), ‘ Siljish - ’ , Ofs(p));
Ptr(Seg, Ofs : Word) – funksiyasi Addr funksiyasiga nisbatan teskari ish qiladi, ya’ni segment va siljish ko‘rsatadigan joyga ko‘rstagich hosil qiladi. Odatda bu funksiya dinamik strukturalarni xotiraning rezerv qilingan joylariga bog‘lash uchun ishlatiladi. Quyida ko‘rsatgichni videoxotiraga bog‘lashni ko‘rishimiz mumkin.
Type
VideoArray Array [0..3999] of byte;
Var
V:^VideoArray;
Begin
V:Ptr($B000,0);
...
{ V^[i] – bevosita videoxotira katagiga murojaat }
...
End;
26-Mavzu: Turbo-Paskal tilining maxsus vositalari
Reja:
Buyruq satri bilan ishlash
SHEHM xotirasiga murojaat
Ma’lumotlarni ko‘chirish protseduralari
Buyruq satri bilan ishlash. Buyruq satri deganda ishga tushi-rilayotgan fayl nomidan keyin keluvchi va bo‘sh joy («probel») bilan ajratiluvchi parametrlar ro‘yxati tushiniladi.
Misol.
c:g‘> copy a:g‘*.pas b:g‘*.pas
Turbo-Paskal tilidagi standart Paramcount va Paramstr funksiyalar ishchi fayllarni (exe-fayllarni) buyruq satrlari bilan ishlashi uchun xizmat qiladi.
Paramcount funksiyasi buyruq satrida fayl nomidan keyingi parametrlar sonini qaytaradi. Satrda faqat fayl nomi bo‘lgan holda funksiya 0 qiymat qaytaradi. Parametrlar soni aniqlangandan keyin ularning ixtiyoriy bittasini ParamStr(N) funksiyasi yordamida satr qiymat sifatida olishimiz mumkin (bu yerda N – parametrning tartib nomeri).
Misol.
Var s : String;
Begin
If Paramcount>1 Then s:Paramstr(1) Else Writeln(‘Fayl nomini kiriting’)
. . .
TP tilida programmani sozlashda parametrlarni Options rejimida Paramters qiymati sifatida berish mumkin.
SHEHM xotirasiga murojaat. Turbo-Paskal xotiraning ixtiyoriy fizik katagiga murojaat qilish uchun uchta massivni aniqlagan: Mem, MemW, MemL. Bu massivlar sistema tomonidan quyidagicha aniqlangan deb hisoblashimiz mumkin.
Var
Mem : Array of Byte absolute 0:0;
MemW : Array of Word absolute 0:0;
Mem L : Array of LongInt absolute 0:0;
Bu massivlar indekslarning berilishi bilan oddiy massivlardan farq qiladi. Indekslar xotira katagining Segment:Siljish formatida qiymat bo‘ladi.
Misol:
Mem[$B000:$0000]– ko‘rsatilgan adresdagi bayt qiymati;
MemW[$B000:$0000]- ko‘rsatilgan adresdagi so‘z qiymati;
MemL[$B000:$0000]-ko‘rsatilgan adresdagi ikkilangan so‘z qiymati;
Ishlatishga misol.
Mem[$50:0] xor1{Shift-PrtScr bosilishiga aks ta’sirni o‘chirish - yoqish}
Odatda Mem, MemW, MemL massivlari xotiraning sistemaviy sohasiga murojaat qilishda ishlatiladi.
Ma’lumotlarni ko‘chirish protseduralari. Bu Move protsedurasi bo‘lib, u o‘z mohiyati bo‘yicha mashina buyrug‘i darajasidagi amaldir.
Yozilishi.
Move (Var Sourse, Dest, Nbytes : Word);
Protsedura uchta parametrga ega bo‘lib, operativ xotiradagi Nbytes – bayt o‘lchamidagi ma’lumotlarni ko‘chirish uchun xizmat qiladi. Sourse – ixtiyoriy turdagi o‘zgaruvchi bo‘lib, ko‘chiriladigan xotira bo‘lagining adresi (uning birinchi bayti), Dest – xotiradagi ko‘chirish joyi (birinchi bayti).
Misol:
1) A massiv boshiga V massiv nusxasini olish uchun Move(B,A, SizeOf(B)) ko‘rinishidagi murojaatni yozishimiz kerak.
2) A massivdagi 1000 haqiqiy qiymatni 1-o‘rindan boshlab 100 ta o‘ringa o‘ngga siljitish kerak bo‘lsin.
Buning uchun
oddiy holda - For i:1000 Downto 1 Do A[i100] : A[i];
Move orqali - Move (A[1], A[100], 1000*SizeOf(Real));
Bu yerda nusxa olish yo‘nalishi Move tomonidan avtomatik tarzda aniqlanadi.
Do'stlaringiz bilan baham: |