Assembler proqramlaşdırma dili

Sətrlərin emalı əmrləri

Sətrlərin emalı əmrləri

Mikroprosessorun əmrlər sistemində simvollar sətrini emal edən bir sıra əmrlər mövcuddur ki, bunlara zəncirvari (dövrə) əmrlər və ya simvollar sətrini emal edən əmrlər deyilir. Bu adlandırmalar demək olar ki, sinonimdir. Simvollar sətrini emal edən əmrlər baytlar ardıcıllığı, zəncirvari əmrlər isə daha geniş mənada – söz və ya ikiqat sözlər ardıcıllığı üzərində əməliyyat aparır. Beləliklə bu əmrlər, bayt, söz və ikiqat söz elementlər ardıcıllığından təşkil olunmuş yaddaş blokları üzərində əməlliyat aparır. Blokların özü yaddaşda ikilik kodda saxlanan ədəd, simvol və həçinin istənilən başqa qiymətlərdən ibarət ola bilər.

Burada əsas məsələ blokun elementlərinin ölçüsünün mütləq bayt, söz və ikiqat söz uzunluğunda olması və elementlərin yaddaşın qonşu xanalarında yerləşməsidir. Blokların məzmunu mikroprosessor üçün heç bir əhəmiyyət kəsb etmir.

Mikroprosessor zəncirvari əmlərin köməyi ilə sətrlər üzərində sətrləri emal edən primitivlər (primtive- daha sadə formalara bölünə bilməyən: ən sadə struktur) adlanan yeddi əməliyyat apara bilir ki, bunların da hər biri dörd əmrlə yerinə yetirilir. Bu əmrlərdən birincisi iki operandlı, qalan üçü isə operansız olur. Operandsız əmrlərin hər biri uyğun elementin ölçüsündən asılı olaraq bayt, söz və ya ikiqat söz üzərində əməliyyat aparır. Assembler proqramının translasiyası zamanı həmişə operandlı əmrlər (belə maşın əmri olmadığından) translyator tərəfindən bu əmrin analoqu olan operandsız maşın əmrlərdən birinə çevirilir. Bütün zəncirvari əmrlər, sətrin cari elementini emal etməklə yanaşı növbəti elementə avtomatik keçidi təşkil emək kimi əsas xüsusiyyətə malikdir.

Sətrlər üzərində əməliyyatları yerinə yetirən əmrlər aşağıdakılardır:

1.	Sətrlərin göndərilməsi əmrləri:
MOVS qəbuledici_sətr, mənbə_sətr
MOVSB               ;bayt
MOVSW              ;söz
MOVSD              ;ikiqat söz ;
2.	Sətrlərin müqayisəsi əmrləri:
CMPS qəbuledici_sətr, mənbə_sətr
CMPSB              ;bayt
CMPSW             ;söz
CMPSD             ;ikiqat söz ;
3. Sətrlərin skanlaşdırılması əmrləri:
SCAS əbuledici_sətr
SCASB              ;bayt

SCASW             ;söz
SCASD             ;ikiqat söz ;
4. Elementin sətrdən yüklənməsi əmrləri:
LODS mənbə_sətr
LODSB              ;bayt
LODSW             ;söz
LODSD             ;ikiqat söz ;
5. Elementin sətrdə saxlanması əmrləri:
STOS qəbuledici_sətr
STOSB              ;bayt
STOSW             ;söz
STOSD            ;ikiqat söz ;
6.Giriş-çıxış portundan sətr  elementinin alınması əmrləri:
INS   qəbuledici_sətr, portun_nömrəsi
INSB              ;bayt
INSW             ;söz
INSD            ;ikiqat söz ;
7. Sətr elementinin giriş-çıxış portuna çıxarılması əmrləri:
OUTS portun_nömrəsi, mənbənin_ünvanı
OUTSB            ;bayt
OUTSW           ;söz
OUTSD            ;ikiqat söz 

Bu əmrlər qrupuna daxil olan bütün operandsız əmrlərdə sonuncu simvola uyğun olaraq: B – bayt, W - söz və D isə ikiqat söz göstəricisidir.

Mikroprosessorun strukturuna uyğun olaraq qəbuledici_sətr ünvanıES seqment registri ilə təyin olunan əlavə verilənlər seqmentində, mənbə_sətr isə ünvanıDS seqment registri ilə təyin olunan verilənlər seqmentində olmalıdır. Qeyd edək ki, seqmentin dəyişdirilməsi prefiksi vasitəsi ilə yalnız DS registrini dəyişdirmək olar, ES registrini isə dəyişdirmək olmaz. Ünvanların ikinci hissəsinin (sətrin sürüşdürilməsi) yeri dəqiq təyin olunmalıdır. Yəni, mənbə_sətr-in sürüşmə ünvanı ESI/SI (Source Index register-indeks registri), qəbuledici_sətr –in sürüşmə ünvanı isə EDI/DI (Destination Index register-indeks registri) registrində olmalıdır. Beləliklə, sətr operandlarının tam fiziki ünvanını təyin etmək üçün registrlər kimi aşağıdakı registrlər cütlüyündən istifadə olunur:

mənbə_sətr üçün - DS:ESI/SI registrlər cütlüyündən;

qəbuledici_sətr üçün isə - ES:EDI/DI registrlər cütlüyündən.

Aydındır ki, LDS və LES əmrləri (seqment: sürüşmə) yaddaş xanası haqqında tam göstəriş almağa imkan verir.

Sətr əmrləri sətrləri iki mümkün istiqamətlərdən birisi vasitəsi ilə emal edir:

1. Sətrin əvvəlindən sonuna doğru, yəni ünvanların artma istiqamətində;

2. Sətrin sonundan əvvəlinə doğru, yəni ünvanların azalma istiqamətində.

Qeyd edək ki, sətr əmrlərinin özləri, operandları ünvanlaşdıran registrləri modifikasiya edərək sətrin növbəti elementlərinə avtomatik keçidi təşkil edir. Bu modifikasiyanın yerinə yetirilməsi üçün baytların sayı əmrlərin koduna uyğun olaraq təyin olunur. Modifikasıyanın istiqaməti isə eflags/flags registrindəki DF bayrağının qiyməti ilə müəyyənləşir. Yəni:

1) əgər DF=0 olarsa, ESI/SI və EDI/DI indeks registrlərinin qiyməti avtomatik olaraq (inkrement əməliyyatı) artacaq, yəni sətr elementləri ünvanların artma istiqamətində emal olunacaq;

2) əgər DF=1 olarsa, ESI/SI və EDI/DI indeks registrlərinin qiyməti avtomatik olaraq (dekrement əməliyyatı) azalacaq, yəni sətr elementləri ünvanların azalma istiqamətində emal olunacaq.

DF bayrağının vəziyyətini iki operandsız əmrin köməyi ilə tənzimləmək olar:

CLD (Clear Direction Flag) –istiqamət bayrağını təmizləyir. Yəni, DF istiqamət bayrağına sıfır yazır;

STD (Set Direction Flag) - istiqamət bayrağının qiymətini bərpa edir. Yəni, DF istiqamət bayrağına vahid yazır.

Məntiqi olaraq təkrarlama prefikislərinin köməyi ilə bir sətr əmrindən istifadə etməklə bir qrup yaddaş elementlərini emal etmək olar. Təkrarlama prefikisinin özünün mnemonik işarəsi olur və onlar aşağıdakılardır:

REP, REPE və ya REPZ və REPNE və ya REPNZ.

Bu təkrarlama prefikisləri tələb olunan sətrin nişan sahəsində yazılır. Prefiksiz sətr əmri yalnız bir dəfə icra olunur. Prefiksli əmrlərdə isə əmrlər təkrar icra olunur və təkrarlanmaların sayı ECX/CX registirinin və ya ZF bayrağının vəziyyətinə görə təyin olunur.

REP (REPeat) təkrarlama prefikisi sətr elementlərinin (MOVS) göndərilməsi və (STOS) saxlanması əmrlərində istifadə olunur və REP verilmiş əmrləri ECX/CX registrinin qiyməti sıfır olana qədər təkrar icra olunmağa məcbur edir. Hər bir təkrarlamadan sonra ECX/CX registrinin qiyməti avtomatik olaraq bir vahid azaldılır.

REPE (REPeat while Equal) və ya REPZ (REPeat while Zero) prefiksləri bir birinə analoji olaraq işləyir və bu prefiksli əmrlər ECX/CX registrinin qiyməti sıfır olmayana qədər və ZF=1 olana qədər əməliyyatı təkrar icra olunmağa məcbur edir. Bu şərtlərdən biri ödənilmədikdə idarə proqramın növbəti əmrinin içrasına ötürülür. Hər bir təkrarlamadan sonra ECX/CX registrinin qiyməti avtomatik olaraq bir vahid azaldılır Burada ZF bayrağının qiymətinin analizinə əsaslanaraq, sətrlərin fərqli elementinin axtarılması prosesini (CMPS və SCAS əmrləri ilə birlikdə istifadə etməklə) yerinə yetirmək mümkündür.

REPNE (REPeat while Not Equal ) və ya REPNZ (REPeat while Not Zero) prefiksləri də bir birinə analoji olaraq işləyir və bu prefikslər REPE/REPZ prefikslərindən fərqli olaraq onlar ECX/CX registrinin qiyməti sıfır deyilsə və ZF =0 isə əməliyyatı təkrar icra olunmağa məcbur edir. Bu şərtlərdən biri ödənilmədikdə əmrlər işini dayandırır. Verilmiş prefikslərdən həmçinin CMPS və SCAS əmrləri ilə birlikdə sətrlərin uyuşan elementinin tapılması məqsədi ilə istifadə etmək olar. Hər bir təkrarlamadan sonra ECX/CX registrinin qiyməti avtomatik olaraq bir vahid azaldılır