31
ilə isə 16-23 bitlərinin yerini dəyişdirir. Ümumi şəkildə əmr aşağıdakı kimi yazılır:
BSWAP 32_mərtəbəli registr
Məsələn:
MOV EAX, 12345678h
BSWAP EAX
Bu əmrlər icra olunduqdan sonraEAX-in məzmunu 78563412 kimi olacaq.
PUSH və POP əmləri
PUSH və POP əmləri stekə yazma və ya stekdən oxuma əməliyyatlarında istifadə edilir. Stek,
proqram verilənlərinin müvəqqəti saxlandığı yaddaş sahəsidir. Bu zaman SP registri ilə stekin
zirvəsinin ünvanı təyin edilir. Əmrlərin ümumi yazılışı aşağıdakı kimidir:
PUSH mənbə
POP qəbuledici
PUSH əmri ilə 1, 2, və ya 4 bayt uzunluqlu registrlərin məzmunu və ya yaddaş ünvanındakı
məzmunu stek yaddaşın zirvəsinə yazılır. Mənbə kimi ümumi təyinatlı registr, seqment registri,
bilavasitə operand (ədəd) və ya dəyişəni götürmək olar. Məsələn:
PUSH DS ; DS məzmununu stekin zirvəsinə yazılır.
PUSH K1 ; K1 ünvanındakı məlumat stekin
; zirvəsinə yazılır.
POP K1;stekin zirvəsindəki məlumat K1 yaddaşına yazılır.
POP DS ; stekin zirvəsindəki məlumatı ; DS registrinə yazılır.
Proqram verilənlərini müvəqqəti saxlamaq üçün üç registrdən:
SS - stek seqmenti, ESP/SP-
stek göstəricisi və EBP/BP –stek baza göstəricisi registrlərindən istifadə olunur. Stekin ölçüsü
mikroprosessorun iş rejimindən asılı olaraq 64 kb (və ya mühafizə rejimində 4 qb) qədər ola bilər.
İstənilən anda yalnız bir stekə müraciət etmək olar ki, onun da ünvanı SS stek seqment registrində
yerləşdirilir. Bu cari
stek adlanır. Başqa stekə müraciət etmək üçün SS stek seqment registrinə
tələb olunan stekin ünvanını yükləmək lazımdır. Mikroprosessor steklə işləyən bütün əmrləri icra
edərkən avtomatik olaraq SS stek seqment registrindən istifadə edir.
Steklə işləmənin daha bir neçə xüsusiyyətini qeyd edək:
-
verilənləri stekə yazma və oxuma əməliyyatı LIFO (Last In First Out-“axırıncı gəldi
birinci getdi”) prinsipinə uyğun olaraq yerinə yetirilir;
-
Stekə yazma zamanı stek mümkün maksimal ünvandan kiçik ünvana doğru (yəni,
“aşağıdan artma”) artır;
-
ESP/SP və EBP/BP registlərindən yaddaşı ünvanlaşdırmaq üçün istifadə etdikdə,
Assembler avtomatik olaraq onların məzmunundakı qiyməti SS stek seqment registrindəki ünvana
nəzərən sürüşmə ünvanı olduğunu qəbul edir.
Ümumi şəkildə stekin təşkilinin strukturunu aşağıdakı kimi göstərmək olar:
Əməli yaddaş
0000:0000
Kod seqmenti
Verilənlər seqmenti
Stek seqmenti
SS:SP
Stekin zirvəsi
Stekin artma
istiqaməti
SS:FFFF
Stekin dibi
ƏY-nin böyük ünvanı
32
SS, ESP/SP və EBP/BP registrlərindən kompleks istifadə olunmasına
baxmayaraq, onların hər
birinin ayrıca təyinatı var. Registrlərin hansının ünvanlaşdırma üçün istifadə olunması,
seqmentləşdirmədə SEGMENT direktivinin
USE16 və USE32 modifikasıyasından asılıdır.
ESP/SP registrləri həmişə stekin zirvəsinin ünvanını göstərir. Başqa sözlə, stekə sonuncu daxil
edilən elementin sürüşməsi bu registr ilə təyin edilir. Əgər stek boşdursa, ESP registrlərinin
qiyməti seqmentin axırıncı baytının ünvanına bərabər olacaqdır.
Stekin başlanğıcı yaddaşın böyük ünvanında yerləşir. Şəkildə bu ünvan SS:FFFF cütlüyü ilə
işarə olunub. Burada FFFF sürüşməsi şərti daxil edilib. Onun real qiymətini isə proqramlaşdırıcı
öz proqramında, stek seqmentinin təsvirində verir. SS:FFFF ünvan cütlüyünün qiyməti real
rejimdə maksimal ölçüsü 64 Kbayt (0FFFFh) olan stek seqmentinin başlanğıcı kimi götürülür.
PUSH əmrinin işləmə alqoritmində (aşağıdakı şəklə bax) aşağıdakı xüsusiyyətləri nəzərə almaq
lazımdır:
1. 16 mərtəbəli stek seqmenti üçün SP –nin qiyməti 2 vahid ((SP)=(SP) –2) və ya 32 mərtəbəli
stek seqmenti üçün SP –nin qiyməti 4 vahid ((SP)=(SP) –4) azalır;
2. Mənbədəki
qiymət SS:SP və ya SS:ESP cütlüyü ilə göstərilən ünvandan yazılır.
Əməli yaddaş
Əməli yaddaş
0000:0000
0000:0000
Stek seqmenti
Stek seqmenti
SS:SP
Mənbənin
məzmunu
SS:SP
Stekin zirvəsi
Stekin köhnə
zirvəsi
SS:FFFF
Stekin dibi
SS:FFFF
Stekin dibi
PUSH
mənbə
əmrinə qədər
ƏY-nin böyük
ünvanı
PUSH
mənbə
əmrindən
sonra ƏY-nin
böyük ünvanı
Faktiki olaraq PUSH əmri ESP registrinin
qiymətini mənbənin baytla ölçüsü (1, 2 və ya 4)
qədər azaldır və mənbənin məzmunu yaddaşın SS:(ESP) ünvanına köçürür.
POP əmri stekin zirvəsində yerləşmiş baytı, sözü və ya ikiqat sözü qəbuledicidə yerləşdirir və
ESP registrinin
qiymətini, uyğun olaraq 1, 2 və ya 4 vahid artırır. Qəbuledici kimi ümumi təyinatlı
registrlər, seqment registləri (CS müstəsnə olmaqla) və ya dəyişən götürülə bilər.
POP əmrinin işləmə alqoritmi PUSH əmrinin işləmə alqoritminin əksinədir:
1. Stekin zirvəsinin məzmununu qəbulediciyə yazır;
2. 16 mərtəbəli stek seqmenti üçün SP –nin qiymətini 2 vahid ((SP)=(SP) +2) və ya 32
mərtəbəli stek seqmenti üçün SP –nin qiymətini 4 vahid ((SP)=(SP) +4) artırır.
Qeyd edək ki, PUSH və POP əmrlər cütlüyündən həmişə birlikdə istifadə olunur. Məsələn:
PUSH DS ; DS registrinin məzmununu
; stekin zirvəsinə yazılır
PUSH A ; A yaddaş xanasının məzmununu
; stekin zirvəsinə yazılır
POP A ; stekin zirvəsindəki verilən götürülərək
; A yaddaş xanasına yazılır