Assembler proqramlaşdırma dili

Birbaşa ünvanlaşdırma

Birbaşa ünvanlaşdırma

Birbaşa ünvanlaşdırma rejimində mənbə operand kimi icra ünvanı götürülür. Düz ünvanlaşdırma rejimində isə mənbə operand kimi sürüşmənin qiyməti və ya nişan götürülür. Məsələn:

MOV AX, table

Bu əmrin icrası zamanı translyatorun table nişanı üçün təyin etdiyi ünvandakı veriləndən istifadə edilir. Tutaq ki, translyator table nişanının ünvanını ‘0001’ kimi təyin edib və ünvanda ‘AABB’ veriləni yerləşib. Onda yuxarıdakı əmrin icrasından sonra AX registrində ‘BBAA’ veriləni yerləşəcəkdir (ümumiyyətlə yaddaşda adi yazılışdan fərqli olaraq verilənin kiçik hissəsi kiçik ünvanda yerləşir). Yuxarıdakı əmri sxematik olaraq aşğıdakı kimi göstərə bilərik:

təyin etdiyi ünvandakı veriləndən istifadə edilir. Tutaq ki, translyator table nişanının ünvanını ‘0001’ kimi təyin edib və ünvanda ‘AABB’ veriləni yerləşib. Onda yuxarıdakı əmrin icrasından sonra AX registrində ‘BBAA’ veriləni yerləşəcəkdir (ümumiyyətlə yaddaşda adi yazılışdan fərqli olaraq verilənin kiçik hissəsi kiçik ünvanda yerləşir). Yuxarıdakı əmri sxematik olaraq aşğıdakı kimi göstərə bilərik:

Qeyd edək ki, mikroprosessor effektiv ünvanı verilənin yerləşdiyi segmentin baza ünvanını 4 bit sola sürüşdürərək, onun üzərinə sürüşmənin qiyətini əlavə etəklə təyin edir. Assembler əmrlərində belə ünvanlaşdırmanın bir neçə formasından istifadə olunur.

Məsələn:

MOV AX, WORD PTR [0000]

DS:0000 ünvanındakı söz AX registrinə yüklənir.

Bu cür ünvanlaşdırma çox az tətbiq edilir. Aşağıdakı misalları nəzərdən keçirək.

a) DATA    SEGMENT
   PAR         DW  5
        ...
   DATA     ENDS
   CODE    SEGMENT
   MOV      AX, DATA
   MOV      DS, AX
        ...
   MOV AX, PAR  

par sözünü (onun fiziki ünvanı DS:0000) AX registrinə yazır. Göründüyü kimi alınan nəticə

MOV AX, WORD PTR [0000]

əmrinin icrasının nəticəsi ilə eyni olur.

b) əgər word_var dəyişəni ES registri ilə göstərilən seqentdə söz kimi təyin edilibsə və veriləni AX registrinə göndərmək lazımdırsa onda əmri aşağıdakı kimi yaza bilərik

MOV AX, ES: word_var

Bu halda Assembler özü word_var dəyişənin ünvanını təyin edəcək (yəni baza ünvanı DS-dən deyil ES-dən götüləcək).

v) MOV EBX, my_var

EBX registrinə ikiqat söz (4 bayt) uzunluğunda my_var yaddaş xanasının məzmunu yükləyir.

 

q)  JC ml   ; əgər CF=1 olarsa, ml nişanına keçid
     MOV  AL,  2
   ...
ml:  
   ...