Verilənlərrın təyini direktivlərı
Bir çox proqramlarda yaddaş xanalarına müəyyən qiymətlər mənimsətmək və ya yaddaş xanalarını ehtiyata almaq lazım gəlir. Belə hallarda D*[Define*] direktivindən istifadə edilir. Verilənlərin təyini və ehtiyat sahələrinin ayrılması direktivlərinin formatı aşağıdakı kimidir:
[ad] D* ifadə [,ifadə ].. .
Burada D* aşağıdakı formalardan biri kimi göstərilə bilər:
-DBİT- bit verilən üçün yaddaş sahəsi ayırır
-DB- verilən üçün yaddaşda 1 bayt sahə ayırır
-DW- verilən üçün yaddaşda 2 bayt sahə ayırır
-DD- verilən üçün yaddaşda 4 bayt sahə ayırır
-DF- verilən üçün yaddaşda 6 bayt sahə ayırır
-DP- verilən üçün yaddaşda 6 bayt sahə ayırır
-DQ- verilən üçün yaddaşda 8 bayt sahə ayırır
-DT- verilən üçün yaddaşda 10 bayt sahə ayırır.
ad – proqramda istifadə olunan verilənlər seqmentindəki nişanın və ya yaddaş xanasının simvolik adıdır.
İfadə – sual işarəsindən (?), sabit və sabitlər ardıcıllığından ibarət ola bilər. Sabitlər bir-birindən vergül işarəsi ilə ayrılırlar. Əgər ifadə sual (?) işarəsi olarsa dəyişənə başlanğıc qiymət verilmir, amma ehtiyat yaddaş sahəsi ayrılır.
DBIT –1 və ya 32 –yə qədər bitlər ardıcıllığı olub, “B” simvolu ilə bitməlidir. Məsələn:
SAY DBIT 100B ; baytda 00000100
TABLO DBİT 3 DUP (101B)
Əgər verilənin qiyməti dövrü olaraq təkrarlanarsa, onda bu verilənləri n DUP (x) kimi təyin edə bilərik. Burada n tam ədəd olub təkrarlanma sayını göstərir.
DB – bir bayta və ya bir baytlıq sahələr ardıcıllığını göstərir. Məsələn:
A DB ? ; A üçün 1 bayt yaddaş sahəsi ayrılır SAY DB 64 DUP (‘YAZI’) ; SAY üçün 256 bayt yaddaş sahəsi ayrılır SYMBOL DB ‘Z’ Text DB ‘program’ M DB 47H TABLO DB 14, 15, 16, 30, 57, 78, 77, 54 ;TABLO üçün 8bayt yaddaş sahəsi
; üçün 8bayt yaddaş sahəsi ayrılır.
DW –2 bayt (söz) uzunluqlu dəyişəni və ya dəyişənlər ardıcıllığını təyin edir. Bir sözdə 0-0FFFFH 16 –lıq ədəd və ya 0-65535 onluq ədəd göstərilə bilər. Məsələn:
AA DW ? A DW 25 DUP (0F1A8H) SAY DW 452 Yaddaşın adr, adr_full ünvan xanalarında dəyişənlərin yerləşməsinin proqram fraqmentinə baxaq: Perem_1 DB 0FFh Perem_2 DW 3A7Fh Perem_3 DD 0F54D567Ah Mas DB 10 DUP (“ “) Adr DW Perem_3 Adr_full DD Perem_3
Aşağıdakı şəkildə yuxarıdakı verilənlərin DS registri ilə təyin olunmuş yaddaş ünvanından başlayaraq yerləşməsinin ardıcıllığı göstərilmişdir (DUMP-ı).
Bu yaddaş dampına izahat verək. Göründüyü kimi verilənlər seqmenti ilə təyin edilən baza ünvanına nəzərən 0000 sürüşməsi ilə baytda simvolik adı perem_1 olan verilən yerləşir. Bu baytın məzmunu FFh-dır. Sonra isə söz uzunluqlu (iki bayt) perm_2 dəyişəninin qiyməti gəlir. Əvvəlcə qiyməti 7Fh olan bayt(ədədin kiçik hissəsi) sonra isə qiyməti 3Fh olan bayt(ədədin böyük hissəsi) gəlir. Analoji olaraq demək olar ki, perm_3 dəyişəninin qiymətləri 3-cü baytdan başlayaraq yerləşir. Mas adlı dəyişənin qiymətləri 7-ci baytdan başlayır və on dənə boşluq simvolundan (16-lıq kodu 20h-dır) ibarətdir. Proqram fraqmentinin növbəti iki sətrində DW və DD direktivlərinin operandlar sahəsində digər insiallaşdırma və ehtiyata alma direktivinin simvolik adından istifadə edilmişdir. Bunlar adr və adr_full adlı direktivlərdir. Bildiyimiz kimi hər bir ünvan iki komponentdən təşkil olunur: blokun nömrəsindən (seqmentin başlanğıc ünvanı) və başlanğıca nəzərən sürüşmədən. Əgər nişan tələb olunan əmrlə eyni seqmentdə yerləşərsə, onda ancaq sürüşməni göstərmək kifayətdir. Sürüşmənin uzunluğu 16 bitə bərabər olduğundan onun saxlanılması üçün DW direktivindən istifadə etmək lazımdır. Ona görə də
adr DW perm_3
direktivi adr dəyişəninə perm_3 nişanının 16 bitlik sürüşməsini mənimsətmişdir. Yəni, adr adlı sahədə 0003h ədədi saxlanılır. Sürüşməni saxlayan dəyişənə göstərici deyilir.
Əgər nişan ilə istinad edilən əmr ayrı-ayrı seqmentlərdə yerləşərsə, onda mikroprosessor nişanın həm blok nömrəsini, həm də sürüşməsini bilməlidir. Ünvanın hər iki komponentini DD direktivi vasitəsi ilə almaq olar. Ona görə də
adr_full DD perm_3
direktivi 32 bitlik adr_full dəyişəninə prem_3 nişanının 16 bitlik sürüşməsinin (0003h) və 16 bitlik blok nömrəsini (5591h) mənimsətmişdir.
Verilənlərin təsvirinin bu direktivlərindən istifadə edilərək elan edilən ixtiyari dəyişənə assembler aşağıdakı üç atributu mənimsədir:
1. Seqment (SEG)–dəyişəni saxlayan seqmentin başlanğıc ünvanı;
2. Sürüşmə (OFFSET) –dəyişənin bazanın başlanğıcına nəzərən sürüşməsi.
3. Tip (TYPE) dəyişənin elan direktivinə uyğun olaraq dəyişən üçün ayrılan baytlar sayını təyin edir.