Assembler proqramlaşdırma dili

Qiymətlərin qaytarılması və təyini əməliyyatları

Qiymətlərin qaytarılması və təyini əməliyyatları

əməliyyatları

Qiymətlərin qaytarılması əməliyyatları proqramdakı dəyişənlər və nişanlar haqqında informasiya verir.

Ünvan sayğacı – əməliyyatı, ($) dollar işarəsi ilə işarə olunur, cari qiyməti ünvan sayğacına qaytarır. Assembler translyatoru ilkin proqramda bu simvola rast gəldikdə, onun yerinə ünvan sayğacının cari qiymətini yerləşdirir. Məsələn:

message DB ‘bu sətrlər’

messagel EQU $ - message

Assembler, message sətrindəki simvolların sayını (0Ah) təyin edir və onu messagel sabitinə mənsub etdirir. Bu halda yaddaşı aşağıdakı kimi təsvir etmək olar:

seg <ifadə>

əməliyyatı ifadə üçün seqmentin fiziki ünvanını qaytarır. İfadə kimi nişan, dəyişən, seqment adı, qrupun adı və ya simvolik ad ola bilər.

offset <ifadə>

əməliyyatı ifadə-nin yerləşdiyi seqmentdə onun başlanğıcına nisbətən baytlarla sürüşməsinin qiymətinin alınmasını təmin edir.

Məsələn:

a)

MOV AX, SEG A1

MOV BX, OFFSET A1

1-ci əmr ilə A1 dəyişəni yerləşən blokun nömrəsi AX registrinə, 2-ci əmr ilə A1 dəyişənin bloka nəzərən sürüşməsinin qiymətini BX registrinə yazır.

b)

 

.data
sahe DW 5
…
.CODE
MOV ES,SEG sahe
MOV AX,OFFSET sahe 

 

ES:AX registrlər cütlüyünə sahedəyişənin tam ünvanı yüklənir (baza və sürüşmənin qiymətini)

type əməliyyatı verilənin tipinə uyğun ədədi qiyməti qaytarır.

style="float:left" />

Burada –2-FAR, -1-NEAR, 1-DB, 2-DW, ... , 8-QWORD, 10-TBYTE-nı göstərir.

PTR əməliyyatı nişan və ya dəyişənin tipini təyin etmək və ya dəqiqləşdirmək üçün tətbiq olunur və aşağıdakı kimi yazılır:

<tip > PTR <ifadə >

Burada <tip > aşağıdakı qiymətlərdən birini ala bilər: BYTE (1 bayt), WORD (2 bayt), DWORD (4 bayt ), FWORD (6 bayt ), QWORD (8 bayt ), TBYTE (10 bayt ), NEAR (yaxın nişan), FAR (uzaq nişan) ola bilər.

PTR əməliyyatını misallar üzərində izah edək.

Misallar:

1) d_wrd   DD  0
      ...
      mov  AL, BYTE PRT d_wrd+1   

AL registrinə ikiqat sözün ikinci baytını göndərir.

Bu proqram fraqmentini izah edək. Təyinata görə d_wrd dəyişəni ikiqat söz uzunluğundadır və yaddaşda 4 bayt sahə tutur:

Dəyişən üçün ayrılmış bütün sahəyə deyil, onun hər hansı baytına (məsələn, ikinci baytına) necə müraciət etmək olar?

Əgər yuxarıdıkı MOV əmri yerinə MOV AL , d_wrd+1 əmri olsa idi, onda translyator operandların tipinin eyni olmaması məlumatını verərdi. PRT əməliyyatı əmrdə verilənin tipini dəyişərək, əmrin icra olunmasına imkan yaradır.

2) word_tab DW 100 DUP (?)
        ...
first_byte  EQU BYTE PTR word_tab   

əməliyyatları nəticəsində word_tab-nin birinci baytına first_byte adı veriləcəkdir.

3)  fip   DW  0
     ...
     MOV BYTE PTR (fip+1), 0FFh

Bu fraqmentdə fip sahəsi word tipli olmasına baxmayaraq, translyatora onu bayt kimi qəbul etməsi məlumatını veririk və ikinci operandın effektiv ünvanını fip+1 sürüşməsindən hesablamağa məcbur edirik. Beləliklə fip sahəsinin ikinci baytına müraciət etmiş oluruq.

4) əğər proqramda

start: MOV CX, 100

sətri olarsa, onda start nişanı NEAR atributuna malik olur ki, bu da həmin seqmentdə yerləşən keçid əmri ilə ona müraciət etməyə imkan verir. Bu nişana başqa seqmentdəki əmrlə müraciət edilərsə, onda nişan FAR atributu ilə təyin olunmalıdır. Yəni

far_start EQU FAR PTR start

Beləliklə, başqa seqmentdən start nişanlı operatora müraciət etmək üçün, keçid əmrində far_start nişanını göstərmək lazımdır.

: - əməliyyatı segmentin yenidən təyin edilməsi əməliyyatdır. Əməliyyatın yazılışı aşağıdakı kimidir:

< seqment_ reg ><ünvan ifadə >

< nişan >

< dəyişən >

Bildiyimiz kimi mikroprosessor apparat səviyyəsində kod, stek və verilənlər segmentlərini dəstəkləyir. Mikroprosessor növbəti əmrin icra üçün seçilməsi zamanı mütləq CS registrinin məzmununu nəzərdən keçirir. Bu registrdə əmrlər segmentin fiziki başlanğıc ünvanı yerləşir. Sumaya görə verilənlərin ünvanının təyini üçün seqment registri kimi DS götürülür. Yəni, sürüşmənin qiyməti BX, Sİ və ya Dİ registrləri ilə təyin edilərsə baza registri kimi DS seçilir. Operandın ünvanı SP və ya BP registrlərində yerləşərsə mikroprosessor avtomatik olaraq baza registri kimi SS regstrini seçir.

DS:, ES:, SS:, FS: və GS:

segment registrlərini dəyişən əməliyyatları nişanın segment atributunu dəyişdirməyə imkan verir. Məsələn:

MOV AX, ES:[BP]

Burada mənbəninin sürüşmə ünvanını BP registrində yerləşməsinə baxmayaraq operand stek seqmentindən deyil, ES (əlavə) seqmentindən seçiləcəkdir.

This əməliyyatı ünvan sabiti yaradır. Bu sabitin atributu BYTE və ya WORD və yaxud NEARFAR məsafə atributları olur. Bu əməliyyatlardan sonra gələn əmrin ünvanı bu əmrin ünvanı ilə eynidir. Məsələn:

K2  EQU  THİS  BYTE
K1  DW     ?

1-ci əmr ünvan sabiti yaradır və bu sabitin qiyməti sonrakı K1 dəyişəninin ünvanına bərabər olur. Bunu PTR əmri ilə də yerinə yetirmək olar:

K2 EQU BYTE PTR K1

THİS əməliyyatı ilə əmrə FAR atributu vermək olar. Yuxarıda yazdığımız əmri aşağıdakı kimi göstərmək olar:

A1 EQU THİS FAR

MOV AX, K1

Burada MOV əmri FAR atributu alır. Bu əmrə başqa seqmentlərdən də müraciət etmək olar.

length - əməliyyatı dup direktivi ilə təyin edilən dəyişənlər üçün ehtiyata alınmış sahələrin sayını qaytarır. Məsələn:

A1 DW 50 DUP(?)

MOV AX, LENGTH A1

əmrlərinin icrasından sonra AX registrində 50 qiyməti olacaq.

size- əməliyyatı isə dup direktivi ilə təyin edilən dəyişənlər üçün ehtiyata alınmış sahələrin baytlarla uzunluğunu qaytarır.

Məsələn:

A2 DW 50 DUP (?)

MOV AX, SİZE A2

əmrlərinin icrasından sonra AX registrində 100 qiyməti olacaq.

HIGH və LOWəməliyyatları 16 –tı bitlik ifadənin uyğun olaraq böyük və kiçik baytının qiymətini qaytarır. Məsələn, əgər

const EQU 0ABCDh

direktivi ilə təyin olunubsa, onda

MOV AH, HIGH const

əmri AH registrinə 0ABh qiymətini yükləyəcəkdir.

İndeksləmə əməliyyatı - əməliyyat kvadrat mötərizə ilə işarə olunur və aşağıdakı formada göstərilir:

İfadə_1 [ İfadə_2]

Bu cür yazılışı translyator, İfadə_1-in qiyməti ilə mötərizədəki İfadə_2-nin qiymətinin toplanmasına göstəriş kimi qəbul edir.Yazılışda İfadə_1 parametri iştirak etməyə də bilər.

Misal:

a)

MOV AX, mas[SI]

əmri ilə mas+[SI] ünvanından söz AX registrinə göndərilir.

mas+[SI] yazılışı mas dəyişənin ünvanı ilə SI registrinin məzmunu toplanması (sürüşmənin təyini) deməkdir.

b)

MOV CX, WORD PTR [DI]

(DI) ünvanındakı sözü CX registrinə göndərir

v)

MOV DWORD PTR [SI], 0

DS:(SI) kimi təyin olan unvanından 4 bayta sıfr yazmaq