Assembler proqramlaşdırma dili

Verilənlərrın təyini direktivlərı

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.