Assembly dili təlimat strukturu ehtiva edir. IBM-PC üçün Assembler dilinin komanda sisteminin ümumi xarakteristikası (əsas əmrlər toplusu, operandların ünvanlanmasının əsas üsulları). Assembler dilində proqramın strukturu. proqram seqmentləri. direktiv qəbul edin

Mövzu 1.4 Assembler mnemonikası. Komanda strukturu və formatları. Ünvanlaşdırma növləri. Mikroprosessor təlimat dəsti

Plan:

1 Assambleya dili. Əsas anlayışlar

2 Assembly dili simvolları

3 Assembler ifadələrinin növləri

4 Assambleya Direktivləri

5 Prosessor təlimat dəsti

1 Imontaj dili. Əsas anlayışlar

montaj dilimaşın dilinin simvolik təsviridir. Ən aşağı, aparat səviyyəsində maşındakı bütün proseslər yalnız maşın dilinin əmrləri (təlimatları) ilə idarə olunur. Buradan aydın olur ki, ümumi adına baxmayaraq, hər bir kompüter növü üçün montaj dili fərqlidir.

Assembly dili proqramı adlanan yaddaş bloklarının toplusudur yaddaş seqmentləri. Proqram bu blok seqmentlərdən bir və ya bir neçəsindən ibarət ola bilər. Hər bir seqment dil cümlələri toplusunu ehtiva edir, hər biri proqram kodunun ayrıca sətrini tutur.

Assambleya bəyanatları dörd növdür:

1) əmrlər və ya göstərişlər maşın əmrlərinin simvolik analoqları olan. Tərcümə prosesi zamanı montaj təlimatları mikroprosessorun göstərişlər toplusunun müvafiq əmrlərinə çevrilir;

2) makrolar -verilişin mətninin müəyyən qaydada rəsmiləşən cümlələri yayım zamanı başqa cümlələrlə əvəz olunur;

3) direktivlər,bəzi hərəkətləri yerinə yetirmək üçün assembler tərcüməçisinə göstərişlərdir. Direktivlərin maşın təsvirində qarşı tərəfi yoxdur;

4) şərh xətləri , rus əlifbasının hərfləri də daxil olmaqla istənilən simvolu ehtiva edir. Şərhlər tərcüməçi tərəfindən nəzərə alınmır.

­ Montaj proqram strukturu. assembler sintaksisi.

Proqramı təşkil edən cümlələr əmrə, makroya, direktivə və ya şərhə uyğun gələn sintaktik konstruksiya ola bilər. Assembler tərcüməçisinin onları tanıması üçün onlar müəyyən sintaktik qaydalara uyğun formalaşmalıdır. Bunun üçün ən yaxşısı qrammatika qaydaları kimi dilin sintaksisinin formal təsvirindən istifadə etməkdir. Bu kimi bir proqramlaşdırma dilini təsvir etməyin ən ümumi yolları - sintaksis diaqramlarıBackus-Naurun uzadılmış formaları.üçün praktik istifadə daha rahat sintaksis diaqramları. Məsələn, montaj dili ifadələrinin sintaksisi aşağıdakı 10, 11, 12-ci şəkillərdə göstərilən sintaksis diaqramlarından istifadə etməklə təsvir edilə bilər.

Şəkil 10 - Montaj cümləsi formatı


­ Şəkil 11 - Direktivlərin formatı

­ Şəkil 12 - Əmrlərin və makroların formatı

Bu rəsmlərdə:

­ etiket adı- identifikator, dəyəri onun işarə etdiyi proqramın mənbə kodunun cümləsinin birinci baytının ünvanıdır;

­ ad -bu direktivi eyni adlı digər direktivlərdən fərqləndirən identifikator. Müəyyən bir direktivin assembler tərəfindən işlənməsi nəticəsində bu ada müəyyən xüsusiyyətlər aid edilə bilər;

­ əməliyyat kodu (COP) və direktiv - bunlar müvafiq maşın təlimatı, makro təlimatı və ya kompilyator direktivi üçün mnemonik simvollardır;

­ operandlar -hərəkətlərin yerinə yetirildiyi obyektləri bildirən komanda, makro və ya assembler direktivinin hissələri. Assembler operandları ədədi və mətn sabitləri, dəyişən etiketləri və əməliyyat işarələrindən və bəzi qorunmuş sözlərdən istifadə edən identifikatorlarla ifadələrlə təsvir olunur.

Sintaksis diaqramları kömək edir tapın və sonra diaqramın girişindən (solda) onun çıxışına (sağ) gedən yolu keçin. Əgər belə bir yol varsa, cümlə və ya konstruksiya sintaktik cəhətdən düzgündür. Əgər belə bir yol yoxdursa, kompilyator bu konstruksiyanı qəbul etməyəcək.

­ 2 Assembly dili simvolları

Proqramların mətnini yazarkən icazə verilən simvollar bunlardır:

1) Hamı məktublar: A-Z,a-z. Bu halda böyük və kiçik hərflər ekvivalent sayılır;

2) rəqəmlər 0 əvvəl 9 ;

3) əlamətlər ? , @ , $ , _ , & ;

4) ayırıcılar , . () < > { } + / * % ! " " ? = # ^ .

Assembler cümlələr -dən düzəlir nişanlar, tərcüməçi üçün məna kəsb edən etibarlı dil simvollarının sintaktik cəhətdən ayrılmaz ardıcıllığıdır.

nişanlar bunlardır:

1) identifikatorlar - əməliyyat kodları, dəyişən adları və etiket adları kimi proqram obyektlərini təyin etmək üçün istifadə olunan etibarlı simvolların ardıcıllığı. İdentifikatorların yazılması qaydası belədir: identifikator bir və ya bir neçə simvoldan ibarət ola bilər;

2) simvol sətirləri - tək və ya əlavə edilmiş simvol ardıcıllığı ikiqat sitatlar;

3) aşağıdakı say sistemlərindən birində tam ədədlər : ikilik, onluq, onaltılıq. Assembler proqramlarında rəqəmlərin yazılması müəyyən qaydalara uyğun olaraq həyata keçirilir:

4) onluq ədədlərin identifikasiyası üçün heç bir əlavə simvol tələb olunmur, məsələn, 25 və ya 139. Proqramın mənbə kodunda identifikasiya üçün ikilik ədədlər onların tərkibinə daxil olan sıfırları və birləri yazdıqdan sonra latın hərfini qoymaq lazımdır” b”, məsələn 10010101 b.

5) hexadecimal ədədlərin qeydlərində daha çox konvensiya var:

Birincisi, onlar nömrələrdən ibarətdir. 0...9 , Latın əlifbasının kiçik və böyük hərfləri a,b, c,d,e,f və ya A,B,C,D,E,F.

İkincisi, tərcüməçi onaltılıq rəqəmləri tanımaqda çətinlik çəkə bilər, çünki onlar tək 0...9 rəqəmlərindən ibarət ola bilər (məsələn, 190845) və ya latın əlifbasının hərfi ilə başlaya bilər (məsələn, ef15). Tərcüməçiyə verilmiş leksemin onluq ədəd və ya identifikator olmadığını “izah etmək” üçün proqramçı xüsusi olaraq onaltılıq ədədi ayırmalıdır. Bunu etmək üçün, onaltılıq rəqəmi təşkil edən onaltılıq rəqəmlər ardıcıllığının sonunda Latın hərfini yazın " h". Bu ilkin şərtdir. Əgər onaltılıq rəqəm hərflə başlayırsa, ondan əvvəl başda sıfır işarəsi qoyulur: 0 ef15 h.

Demək olar ki, hər bir cümlədə hansısa hərəkətin həyata keçirildiyi və ya onun köməyi ilə həyata keçirildiyi obyektin təsviri var. Bu obyektlər adlanır operandlar. Onları belə müəyyən etmək olar: operandlar- bunlar təlimat və ya direktivlərin təsirinə məruz qalan obyektlərdir (bəzi dəyərlər, registrlər və ya yaddaş hüceyrələri) və ya bunlar təlimat və ya direktivlərin hərəkətini müəyyən edən və ya dəqiqləşdirən obyektlərdir.

Operandların aşağıdakı təsnifatını həyata keçirmək mümkündür:

­ daimi və ya dərhal operandlar;

­ ünvan operandları;

­ köçürülmüş operandlar;

ünvan sayğacı;

­ operandın qeydiyyatı;

­ baza və indeks operandları;

­ struktur operandlar;

qeydlər.

Operandlar, əməliyyatın yerinə yetirildiyi obyektləri ifadə edən maşın təlimatının bir hissəsini təşkil edən elementar komponentlərdir. Daha ümumi bir vəziyyətdə, operandlar adlanan daha mürəkkəb birləşmələrə komponentlər kimi daxil edilə bilər ifadələri.

İfadələri operandların və bütöv hesab edilən operatorların birləşmələridir. İfadələrin qiymətləndirilməsinin nəticəsi bəzi yaddaş xanasının ünvanı və ya hansısa sabit (mütləq) qiymət ola bilər.

­ 3 Assembler ifadələrinin növləri

Mümkün növləri sadalayaq assembler ifadələri və assembler ifadələrinin formalaşması üçün sintaktik qaydalar:

­ arifmetik operatorlar;

­ növbə operatorları;

­ müqayisə operatorları;

­ məntiqi operatorlar;

­ indeks operatoru;

­ növü ləğv edən operator;

­ seqmentin yenidən təyin edilməsi operatoru;

­ struktur tipinin adlandırılması operatoru;

­ ifadənin ünvanının seqment komponentinin alınması operatoru;

­ ifadə ofset alma operatoru.

1 Montaj Direktivləri

­ Assembler direktivləri bunlardır:

1) Seqmentləşdirmə direktivləri. Əvvəlki müzakirə zamanı biz assembler dili proqramında təlimatların və operandların yazılması üçün bütün əsas qaydaları öyrəndik. Tərcüməçinin onları emal edə bilməsi və mikroprosessorun icra edə bilməsi üçün əmrlərin ardıcıllığını necə düzgün formatlaşdırmaq məsələsi açıq qalır.

Mikroprosessorun arxitekturasını nəzərdən keçirərkən, onun eyni vaxtda işləyə biləcəyi altı seqment registrinin olduğunu öyrəndik:

­ bir kod seqmenti ilə;

­ bir yığın seqmenti ilə;

­ bir məlumat seqmenti ilə;

­ üç əlavə məlumat seqmenti ilə.

Fiziki olaraq, bir seqment, ünvanları müvafiq seqment registrindəki dəyərə nisbətən hesablanan əmrlər və (və ya) məlumatların tutduğu yaddaş sahəsidir. Assemblerdə seqmentin sintaktik təsviri Şəkil 13-də göstərilən konstruksiyadır:


­ Şəkil 13 - assemblerdə seqmentin sintaktik təsviri

Qeyd etmək lazımdır ki, seqmentin funksionallığı proqramı sadəcə kod, verilənlər və yığın bloklarına bölməkdən bir qədər daha genişdir. Seqmentasiya ilə əlaqəli daha ümumi mexanizmin bir hissəsidir modul proqramlaşdırma anlayışı. Bu, kompilyator tərəfindən yaradılmış obyekt modullarının, o cümlədən müxtəlif proqramlaşdırma dillərindən olanların dizaynının unifikasiyasını nəzərdə tutur. Bu, müxtəlif dillərdə yazılmış proqramları birləşdirməyə imkan verir. SEGMENT direktivindəki operandlar belə birliyin müxtəlif variantlarının həyata keçirilməsi üçün nəzərdə tutulmuşdur.

2) Siyahıya nəzarət direktivləri. Siyahıya nəzarət direktivləri aşağıdakı qruplara bölünür:

­ ümumi siyahıya nəzarət direktivləri;

­ fayl siyahısını daxil etmək üçün çıxış direktivləri;

­ şərti montaj blokları üçün çıxış direktivləri;

­ makroların siyahısına çıxış direktivləri;

­ siyahıda çarpaz istinadlar haqqında məlumatı göstərmək üçün direktivlər;

­ siyahı formatının dəyişdirilməsi direktivləri.

2 Prosessor təlimat dəsti

Prosessorun təlimat dəsti Şəkil 14-də göstərilmişdir.

Əsas komanda qruplarını nəzərdən keçirin.

­ Şəkil 14 - Montaj təlimatlarının təsnifatı

Əmrlər bunlardır:

1 Məlumat ötürmə əmrləri. Bu təlimatlar istənilən prosessorun təlimatlar toplusunda çox mühüm yer tutur. Onlar aşağıdakı əsas funksiyaları yerinə yetirirlər:

­ prosessorun daxili registrlərinin məzmununu yaddaşda saxlamaq;

­ məzmunun bir yaddaş sahəsindən digərinə kopyalanması;

­ I/O cihazlarına yazmaq və I/O cihazlarından oxumaq.

Bəzi prosessorlarda bütün bu funksiyalar tək bir göstərişlə yerinə yetirilir MOV (bayt köçürmələri üçün - MOVB ) lakin operandların ünvanlanmasının müxtəlif üsulları ilə.

Təlimatdan başqa digər prosessorlarda MOV sadalanan funksiyaları yerinə yetirmək üçün daha bir neçə əmr var. Məlumatların ötürülməsi əmrlərinə məlumat mübadiləsi əmrləri də daxildir (onların təyinatı sözə əsaslanır Mübadilə ). Daxili registrlər arasında, bir reyestrin iki yarısı arasında məlumat mübadiləsini təmin etmək mümkün ola bilər ( SWAP ) və ya registr və yaddaş yeri arasında.

2 Arifmetik əmrlər. Arifmetik təlimatlar operand kodlarına ədədi ikili və ya BCD kodları kimi baxır. Bu əmrləri beş əsas qrupa bölmək olar:

­ sabit nöqtə ilə əməliyyatlar üçün əmrlər (toplama, çıxma, vurma, bölmə);

­ üzən nöqtə təlimatları (toplama, çıxma, vurma, bölmə);

­ təmizləmə əmrləri;

­ artırma və azaltma əmrləri;

­ müqayisə əmri.

3 Sabit nöqtəli təlimatlar normal ikili kodlarda olduğu kimi prosessor registrlərində və ya yaddaşda olan kodlar üzərində işləyir. Üzən nöqtə (nöqtə) təlimatları eksponent və mantis ilə ədəd təqdimetmə formatından istifadə edir (adətən bu nömrələr ardıcıl iki yaddaş yerini tutur). Müasirdə güclü prosessorlarüzən nöqtəli göstərişlər dəsti yalnız dörd arifmetik əməliyyatla məhdudlaşmır, həm də bir çox başqa mürəkkəb təlimatları, məsələn, triqonometrik funksiyaların hesablanması, loqarifmik funksiyalar, həmçinin səs və təsvirin işlənməsi üçün lazım olan mürəkkəb funksiyaları ehtiva edir.

4 Clear əmrləri registr və ya yaddaş xanasına sıfır kodu yazmaq üçün nəzərdə tutulub. Bu əmrləri sıfır kodlu ötürmə təlimatları ilə əvəz etmək olar, lakin xüsusi aydın təlimatlar adətən ötürmə təlimatlarından daha sürətli olur.

5 Artırma (bir artır) və azaltma əmrləri

(bir azalma) da çox rahatdır. Prinsipcə, onlar bir əlavə və ya bir çıxma təlimatları ilə əvəz edilə bilər, lakin artım və azalma əlavə və çıxmadan daha sürətlidir. Bu təlimatlar həm də çıxış operandı olan bir giriş operandını tələb edir.

6 Müqayisə təlimatı iki giriş operandını müqayisə etmək üçündür. Əslində, bu iki operandın fərqini hesablayır, lakin çıxış operandını təşkil etmir, yalnız bu çıxmanın nəticəsi əsasında prosessor status registrindəki bitləri dəyişir. Müqayisə təlimatından (adətən sıçrayış təlimatı) sonrakı təlimat prosessorun status registrindəki bitləri təhlil edəcək və onların dəyərlərinə əsasən hərəkətlər edəcək. Bəzi prosessorlar yaddaşdakı iki operand ardıcıllığının zəncirvari müqayisəsi üçün göstərişlər verir.

7 Məntiq əmrləri. Məntiq göstərişləri operandlar üzərində məntiqi (bit üzrə) əməliyyatları yerinə yetirir, yəni operand kodlarını tək ədəd kimi deyil, ayrı-ayrı bitlər toplusu kimi nəzərdən keçirirlər. Bu baxımdan onlar fərqlənirlər arifmetik göstərişlər. Məntiq əmrləri aşağıdakı əsas əməliyyatları yerinə yetirir:

­ məntiqi AND, məntiqi OR, modul 2 əlavəsi (XOR);

­ məntiqi, arifmetik və tsiklik yerdəyişmələr;

­ bitlərin və operandların yoxlanılması;

­ prosessor status registrinin bitlərinin (bayraqlarının) qurulması və təmizlənməsi ( PSW).

Məntiq təlimatları iki giriş operandından əsas məntiq funksiyalarını bit-bit hesablamağa imkan verir. Bundan əlavə, AND əməliyyatı verilmiş bitlərin təmizlənməsini məcbur etmək üçün istifadə olunur (operandlardan biri maska ​​kodudur, burada təmizlənmə tələb edən bitlər sıfıra təyin olunur). OR əməliyyatı təyin edilmiş bitləri məcbur etmək üçün istifadə olunur (operandlardan biri kimi, birinə təyin edilməsini tələb edən bitlərin birinə bərabər olduğu maska ​​kodu istifadə olunur). XOR əməliyyatı verilmiş bitləri çevirmək üçün istifadə olunur (operandlardan biri kimi, ters çevriləcək bitlərin birinə təyin olunduğu maska ​​kodu istifadə olunur). Təlimatlar iki giriş operandını tələb edir və bir çıxış operandını təşkil edir.

8 Köçürmə əmrləri operand kodunu bit-bit sağa (aşağı bitlərə doğru) və ya sola (yuxarı bitlərə doğru) sürüşdürməyə imkan verir. Sürüşmə növü (boolean, arifmetik və ya tsiklik) ən əhəmiyyətli bitin (sağa sürüşdürüldükdə) və ya ən az əhəmiyyətli bitin (sola sürüşdürüldükdə) yeni dəyərinin nə olacağını müəyyənləşdirir və həmçinin ən əhəmiyyətli bitin köhnə dəyərinin olub olmadığını müəyyənləşdirir. bit haradasa (sola sürüşdürüldükdə) və ya ən az əhəmiyyətli bit (sağa sürüşdürüldükdə) saxlanılacaq. Fırlanan sürüşmələr operand kodunun bitlərini bir dairədə (sağa keçərkən saat əqrəbi istiqamətində və ya sola keçərkən saat əqrəbinin əksinə) dəyişməyə imkan verir. Bu halda, sürüşmə halqası daşıma bayrağını ehtiva edə bilər və ya olmaya da bilər. Daşıma bayrağı biti (istifadə edildikdə) sola fırlanma üçün ən əhəmiyyətli bitə və sağa fırlanma üçün ən az əhəmiyyətli bitə təyin olunur. Müvafiq olaraq, daşıma bayrağı bitinin dəyəri sola tsiklik yerdəyişmədə ən az əhəmiyyətli bitə və sağa dönmədə ən əhəmiyyətli bitə yenidən yazılacaqdır.

9 tullanma əmrləri. Jump əmrləri hər cür döngələri, filialları, alt proqram çağırışlarını və s. təşkil etmək üçün nəzərdə tutulmuşdur, yəni proqramın ardıcıl axını pozur. Bu təlimatlar təlimatların sayğac registrinə yeni qiymət yazır və bununla da prosessorun ardıcıl olaraq növbəti instruksiyaya deyil, proqram yaddaşında olan hər hansı digər göstərişə keçməsinə səbəb olur. Bəzi tullanma əmrləri atlamanın edildiyi nöqtəyə qayıtmağa imkan verir, digərləri isə yox. Qayıdış təmin edilərsə, o zaman cari prosessor parametrləri yığında saxlanılır. Əgər geri qaytarılmırsa, o zaman cari prosessor parametrləri saxlanmır.

Geri çəkilmədən atlama əmrləri iki qrupa bölünür:

­ qeyd-şərtsiz atlamalar əmrləri;

­ şərti atlama təlimatları.

Bu əmrlər sözlərdən istifadə edir Budaq (budaq) və tullanmaq (atlama).

Şərtsiz atlama əmrləri atlamağa səbəb olur yeni ünvan fərqi yoxdur. Onlar müəyyən edilmiş ofset dəyərinə (irəli və ya geri) və ya göstərilən yaddaş ünvanına sıçrayışa səbəb ola bilər. Ofset dəyəri və ya yeni ünvan dəyəri giriş operandı kimi müəyyən edilir.

Şərti atlama əmrləri həmişə sıçrayışa səbəb olmur, ancaq göstərilən şərtlər yerinə yetirildikdə. Belə şərtlər adətən prosessor status reyestrindəki bayraqların qiymətləridir ( PSW ). Yəni keçid şərti bayraqların dəyərlərini dəyişdirən əvvəlki əməliyyatın nəticəsidir. Ümumilikdə 4-dən 16-ya qədər belə tullanma şəraiti ola bilər.Şərti keçid əmrlərinə bəzi nümunələr:

­ sıfıra bərabər olduqda tullanmaq;

­ sıfır deyilsə tullanmaq;

­ daşqın olduqda tullanmaq;

­ daşqın olmadıqda tullanmaq;

­ sıfırdan çox olarsa tullanmaq;

­ sıfırdan az və ya bərabər olarsa tullanmaq.

Keçid şərti yerinə yetirilərsə, təlimat sayğacının registrinə yeni bir dəyər yüklənir. Əgər keçid şərti yerinə yetirilmirsə, təlimat sayğacı sadəcə olaraq artırılır və prosessor ardıcıl olaraq növbəti təlimatı seçir və yerinə yetirir.

Xüsusilə budaq şərtlərini yoxlamaq üçün şərti atlama təlimatından (və ya hətta bir neçə şərti keçid təlimatından) əvvəl gələn müqayisə təlimatı (CMP) istifadə olunur. Lakin bayraqlar məlumat ötürmə əmri, istənilən arifmetik və ya məntiq əmri kimi hər hansı digər əmrlə təyin edilə bilər. Qeyd edək ki, keçid əmrlərinin özləri bayraqları dəyişmir, bu, sadəcə bir-birinin ardınca bir neçə keçid əmrini qoymağa imkan verir.

Qayıdışla keçid əmrləri arasında kəsmə əmrləri xüsusi yer tutur. Bu təlimatlar giriş operandı kimi kəsmə nömrəsini (vektor ünvanı) tələb edir.

Nəticə:

Assembly dili maşın dilinin simvolik təsviridir. Hər bir kompüter növü üçün montaj dili fərqlidir. Assembly dili proqramı yaddaş seqmentləri adlanan yaddaş bloklarının toplusudur. Hər bir seqment dil cümlələri toplusunu ehtiva edir, hər biri proqram kodunun ayrıca sətrini tutur. Assambleya bəyanatları dörd növdür: əmrlər və ya göstərişlər, makrolar, direktivlər, şərh sətirləri.

Proqramların mətnini yazarkən etibarlı simvolların hamısı Latın hərfləridir: A-Z,a-z. Bu halda böyük və kiçik hərflər ekvivalent sayılır; dan rəqəmlər 0 əvvəl 9 ; əlamətlər ? , @ , $ , _ , & ; ayırıcılar , . () < > { } + / * % ! " " ? = # ^ .

Assembler ifadələrinin aşağıdakı növləri və assembler ifadələrinin formalaşması üçün sintaksis qaydaları tətbiq edilir. arifmetik operatorlar, yerdəyişmə operatorları, müqayisə operatorları, məntiqi operatorlar, indeks operatoru, növün yenidən təyin edilməsi operatoru, seqmentin yenidən müəyyənləşdirilməsi operatoru, struktur tipinin adlandırılması operatoru, ifadə ünvanının seqment komponentinin alınması operatoru, ifadə ofsetinin alınması operatoru.

Komanda sistemi 8 əsas qrupa bölünür.

­ Test sualları:

1 Assembly dili nədir?

2 Assemblerdə əmrlər yazmaq üçün hansı simvollardan istifadə etmək olar?

3 Etiketlər nədir və onların məqsədi nədir?

4 Montaj təlimatlarının strukturunu izah edin.

5 4 tip assembler ifadəsini sadalayın.

MİRZO ULUQBƏK ADINDA ÖZBƏKİSTAN MİLLİ UNİVERSİTETİ

KOMPUTER TEXNOLOGİYALARI FAKÜLTƏSİ

Mövzu haqqında: EXE faylının semantik təhlili.

Tamamlandı:

Daşkənd 2003.

Ön söz.

Assembly dili və təlimat strukturu.

EXE fayl strukturu (semantik təhlil).

COM faylının strukturu.

Virus necə işləyir və yayılır.

Sökücü.

Proqramlar.

Ön söz

Proqramçı peşəsi heyrətamiz və unikaldır. Dövrümüzdə elmi və həyatı ən müasir texnologiya olmadan təsəvvür etmək mümkün deyil. İnsan fəaliyyəti ilə əlaqəli hər şey onsuz edilə bilməz kompyuter elmləri. Bu isə onun yüksək inkişafına və kamilləşməsinə xidmət edir. Fərdi kompüterlərin inkişafı çox yaxında başlamasa belə, bu müddət ərzində proqram məhsullarında nəhəng addımlar atıldı və uzun müddət bu məhsullardan geniş istifadə olunacaq. Kompüterlə əlaqəli bilik sahəsi, əlaqəli texnologiya kimi partladı. Kommersiya tərəfini nəzərə almasaq, demək olar ki, peşəkar fəaliyyətin bu sahəsində heç bir yad adam yoxdur. Çoxları qazanc və ya qazanc üçün deyil, öz istəkləri ilə, həvəslə proqramların hazırlanması ilə məşğul olurlar. Əlbəttə ki, bu, proqramın keyfiyyətinə təsir etməməlidir və bu biznesdə, belə demək mümkünsə, rəqabət və keyfiyyətli performans, sabit iş və dövrümüzün bütün tələblərinə cavab verən tələb var. Burada 60-cı illərdə çox sayda lampa dəstini əvəz etməyə gələn mikroprosessorların görünüşünü də qeyd etmək lazımdır. Bir-birindən çox fərqli olan mikroprosessorların bəzi növləri var. Bu mikroprosessorlar bir-birindən bit tutumuna və daxili sistem əmrlərinə görə fərqlənir. Ən çox yayılmışlar: Intel, IBM, Celeron, AMD və s. Bu prosessorların hamısı Intel prosessorlarının qabaqcıl arxitekturasına aiddir. Mikrokompüterlərin yayılması iki əsas səbəbə görə assembler dilinə münasibətin yenidən nəzərdən keçirilməsinə səbəb oldu. Birincisi, montaj dilində yazılmış proqramlar əhəmiyyətli dərəcədə daha az yaddaş və işləmə müddəti tələb edir. İkincisi, montaj dilini və nəticədə yaranan maşın kodunu bilmək, yüksək səviyyəli bir dildə işləyərkən çətin ki, təmin edilən maşın arxitekturasını başa düşməyə imkan verir. Əksər proqram mühəndisləri proqram yazmaq daha asan olan Pascal, C və ya Delphi kimi yüksək səviyyəli dillərdə inkişaf etsə də, ən güclü və səmərəli proqram təminatı tam və ya qismən assembler dilində yazılmışdır. Yüksək səviyyəli dillər xüsusi dillərdən qaçınmaq üçün hazırlanmışdır texniki xüsusiyyətlər xüsusi kompüterlər. Və montaj dili, öz növbəsində, prosessorun spesifik xüsusiyyətləri üçün nəzərdə tutulmuşdur. Ona görə də konkret kompüter üçün assembler dilində proqram yazmaq üçün onun arxitekturasını bilmək lazımdır. İndiki vaxtda əsas görünüş proqram məhsulu EXE faylıdır. nəzərə alaraq müsbət tərəfləri bu, proqramın müəllifi onun toxunulmazlığına əmin ola bilər. Ancaq çox vaxt bu vəziyyətdən uzaqdır. Sökən də var. Bir sökücü köməyi ilə kəsmələri və proqram kodlarını tapa bilərsiniz. Assemblerdə yaxşı bilən adam üçün bütün proqramı öz zövqünə uyğun yenidən hazırlamaq çətin olmayacaq. Bəlkə də ən həll olunmayan problem məhz buradan qaynaqlanır - virus. İnsanlar niyə virus yazır? Bəziləri təəccüblə, bəziləri qəzəblə bu sualı verirlər, amma buna baxmayaraq, hələ də bu işə hansısa ziyan vurmaq baxımından deyil, sistem proqramlaşdırmasına maraq kimi maraqlananlar var. Virusları yazın müxtəlif səbəblər. Bəziləri sistem çağırışlarını bəyənir, digərləri assemblerdə biliklərini təkmilləşdirir. Bütün bunları öz yazımda izah etməyə çalışacağam kurs işi. O, həmçinin yalnız EXE faylının strukturu haqqında deyil, həm də montaj dili haqqında da məlumat verir.

^ Assambleya dili.

İlk kompüterlərin meydana çıxdığı vaxtdan başlayaraq bu günə qədər proqramçılar arasında assembler dili ilə bağlı fikirlərin transformasiyasını izləmək maraqlıdır.

Bir zamanlar assembler bir dil idi, bilmədən kompüteri faydalı bir şey etmək mümkün deyildi. Tədricən vəziyyət dəyişdi. Kompüterlə daha rahat ünsiyyət vasitələri ortaya çıxdı. Lakin, digər dillərdən fərqli olaraq, assembler ölmədi, üstəlik, prinsipcə bunu edə bilmədi. Niyə? Cavab axtarışında, ümumiyyətlə, assembler dilinin nə olduğunu anlamağa çalışacağıq.

Bir sözlə, assembler dili maşın dilinin simvolik təsviridir. Ən aşağı, aparat səviyyəsində maşındakı bütün proseslər yalnız maşın dilinin əmrləri (təlimatları) ilə idarə olunur. Buradan aydın olur ki, ümumi adına baxmayaraq, hər bir kompüter növü üçün montaj dili fərqlidir. Bu da aiddir görünüş assemblerdə yazılmış proqramlar və bu dilin əks olunduğu ideyalar.

Assembler haqqında məlumat olmadan hardware ilə əlaqəli problemləri (və ya hətta üstəlik, proqramın sürətini artırmaq kimi aparatla əlaqəli olanları) həqiqətən həll etmək mümkün deyil.

Proqramçı və ya hər hansı digər istifadəçi virtual aləmlərin qurulması üçün proqramlara qədər istənilən yüksək səviyyəli vasitələrdən istifadə edə bilər və bəlkə də kompüterin əslində proqramın yazıldığı dilin əmrlərini deyil, onların əmrlərini yerinə yetirdiyinə şübhə etmir. tamamilə fərqli bir dilin - maşın dilinin əmrlərinin darıxdırıcı və darıxdırıcı ardıcıllığı şəklində çevrilmiş təsvir. İndi belə bir istifadəçinin qeyri-standart problemi olduğunu və ya sadəcə bir şey səhv getdiyini təsəvvür edək. Məsələn, onun proqramı hansısa qeyri-adi cihazla işləməli və ya kompüter texnikasının prinsipləri haqqında bilik tələb edən digər hərəkətləri yerinə yetirməlidir. Bir proqramçı nə qədər ağıllı olsa da, ecazkar proqramını yazdığı dildə nə qədər yaxşı olsa da, assembler biliyi olmadan edə bilməz. Təsadüfi deyil ki, yüksək səviyyəli dillərin demək olar ki, bütün tərtibçiləri modullarını assemblerdəki modullarla birləşdirən və ya assembler proqramlaşdırma səviyyəsinə çıxışı dəstəkləyən vasitələrdən ibarətdir.

Təbii ki, kompüter vaqonlarının vaxtı artıq keçib. Necə deyərlər, sonsuzluğu qəbul edə bilməzsən. Ancaq ortaq bir şey var, hər hansı bir ciddi kompüter təhsilinin qurulduğu bir növ təməl var. Bu, kompüterin iş prinsipləri, onun arxitekturası və bu biliklərin əksi və təcəssümü kimi montaj dili haqqında biliklərdir.

Tipik müasir kompüter (i486 və ya Pentium əsaslı) aşağıdakı komponentlərdən ibarətdir (Şəkil 1).

düyü. 1. Kompüter və periferiya qurğuları

düyü. 2. Fərdi kompüterin blok sxemi

Şəkildən (şəkil 1) görünür ki, kompüter bir neçə fiziki qurğudan ibarətdir və onların hər biri sistem bloku adlanan bir bloka qoşulur. Məntiqlə aydındır ki, o, hansısa koordinasiya cihazı rolunu oynayır. Gəlin içəri nəzər salaq sistem bloku(monitorun içərisinə girməyə çalışmaq lazım deyil - orada maraqlı bir şey yoxdur, bundan əlavə təhlükəlidir): işi açıb bəzi lövhələri, blokları, birləşdirən telləri görürük. Onların funksional məqsədini başa düşmək üçün tipik kompüterin blok-sxeminə baxaq (şək. 2). O, mütləq dəqiqliyə iddia etmir və yalnız müasir fərdi kompüterin elementlərinin məqsədini, qarşılıqlı əlaqəsini və tipik tərkibini göstərmək məqsədi daşıyır.

Şəkildəki diaqramı müzakirə edək. 2 bir qədər qeyri-ənənəvi üslubda.
İnsan təbiətidir, yeni bir şeylə qarşılaşır, ona bilinməyənləri tanımağa kömək edə biləcək bəzi assosiasiyalar axtarır. Kompüter hansı assosiasiyaları oyadır? Məsələn, mənim üçün kompüter çox vaxt insanın özü ilə əlaqələndirilir. Niyə?

Özünün dərinliklərində hardasa kompüter yaradan insan elə bilirdi ki, özünə bənzər bir şey yaradır. Kompüterdə xarici aləmdən məlumatların qəbulu orqanları var - bu klaviatura, siçan, maqnit diskləridir. Əncirdə. 2 bu orqan sistem avtobuslarının sağında yerləşir. Kompüterdə alınan məlumatları "həzm edən" orqanlar var - bunlardır CPUram. Və nəhayət, kompüterdə emal nəticələrini verən nitq orqanları var. Bunlar da sağdakı cihazlardan bəziləridir.

Müasir kompüterlər təbii ki, insanlıqdan uzaqdır. Onları böyük, lakin məhdud şərtsiz reflekslər dəsti səviyyəsində xarici dünya ilə qarşılıqlı əlaqədə olan varlıqlarla müqayisə etmək olar.
Bu reflekslər dəsti maşın təlimatları sistemini təşkil edir. Kompüterlə nə qədər yüksək səviyyədə ünsiyyət qurmağınızdan asılı olmayaraq, sonda hər şey maşın təlimatlarının darıxdırıcı və monoton ardıcıllığına düşür.
Hər bir maşın əmri bu və ya digər şərtsiz refleksin həyəcanlanması üçün bir növ stimuldur. Bu stimula reaksiya həmişə birmənalı olur və mikroproqram şəklində mikro komandalar blokunda "bağlanır". Bu mikroproqram maşın əmrinin yerinə yetirilməsi üçün hərəkətləri həyata keçirir, lakin artıq müəyyənlərə verilən siqnallar səviyyəsindədir məntiq kompüter, bununla da kompüterin müxtəlif alt sistemlərini idarə edir. Bu, mikroproqram nəzarətinin sözdə prinsipidir.

İnsanla bənzətməni davam etdirərək qeyd edirik:kompüterin düzgün qidalanması üçün bir çox əməliyyat sistemləri, yüzlərlə proqramlaşdırma dilləri üçün kompilyatorlar və s. icad edilmişdir.Amma bunların hamısı, əslində, sadəcə, üzərində bir qabdır. qida (proqramlar) müəyyən qaydalara uyğun olaraq çatdırılır mədə (kompüter). Yalnız kompüterin mədəsi pəhrizli, monoton yeməyi sevir - ona birləşmələri maşın dilini təşkil edən sıfır və birlərin ciddi şəkildə təşkil edilmiş ardıcıllığı şəklində strukturlaşdırılmış məlumat verin.

Beləliklə, zahirən poliqlot olan kompüter yalnız bir dili - maşın təlimatlarının dilini başa düşür. Əlbəttə ki, kompüterlə ünsiyyət qurmaq və işləmək üçün bu dili bilmək vacib deyil, lakin demək olar ki, istənilən peşəkar proqramçı gec-tez onu öyrənmək zərurəti ilə üzləşir. Xoşbəxtlikdən, proqramçıya ikili ədədlərin müxtəlif birləşmələrinin mənasını anlamağa çalışmaq lazım deyil, çünki hələ 50-ci illərdə proqramçılar proqramlaşdırma üçün maşın dilinin simvolik analoqundan istifadə etməyə başladılar ki, bu da montaj dili adlanırdı. Bu dil maşın dilinin bütün xüsusiyyətlərini dəqiq əks etdirir. Məhz buna görə də yüksək səviyyəli dillərdən fərqli olaraq, hər bir kompüter növü üçün assembler dili fərqlidir.

Yuxarıda deyilənlərdən belə nəticəyə gələ bilərik ki, kompüter üçün assembler dili “doğma” olduğundan, ən səmərəli proqram yalnız onda yazıla bilər (bir şərtlə ki, onu ixtisaslı proqramçı yazsın). Burada bir kiçik "amma" var: bu, çox diqqət və praktik təcrübə tələb edən çox zəhmətli bir prosesdir. Buna görə də, reallıqda assembler əsasən təmin etməli olan proqramları yazır səmərəli iş hardware ilə. Bəzən proqramın icra müddəti və ya yaddaş sərfi baxımından kritik hissələri assemblerdə yazılır. Sonradan onlar alt proqramlar şəklində hazırlanır və yüksək səviyyəli dildə kodla birləşdirilir.

Hər hansı bir kompüterin montaj dilini öyrənməyə yalnız kompüterin hansı hissəsinin görünən və bu dildə proqramlaşdırma üçün əlçatan olduğunu öyrəndikdən sonra başlamağın mənası var. Bu sözdə kompüter proqramı modelidir, onun bir hissəsi proqramçı tərəfindən istifadə üçün az və ya çox olan 32 registrdən ibarət mikroprosessor proqramı modelidir.

Bu registrləri iki böyük qrupa bölmək olar:

^16 fərdi registr;

16 sistem qeydiyyatı.

Assembly dili proqramları registrlərdən çox istifadə edir. Əksər registrlərin xüsusi funksional məqsədi var.

Adından göründüyü kimi istifadəçi registrləri ona görə çağırılır ki, proqramçı öz proqramlarını yazarkən onlardan istifadə edə bilər. Bu registrlərə daxildir (Şəkil 3):

Məlumat və ünvanları saxlamaq üçün proqramçılar tərəfindən istifadə edilə bilən səkkiz 32 bitlik registr (ümumi təyinatlı registrlər (RON) da deyilir):

altı seqment registrləri: cs, ds, ss, es, fs, gs;

status və nəzarət registrləri:

Bayraqlar bayraqları/bayraqları qeyd edir;

eip/ip əmr göstəricisinin qeydiyyatı.

düyü. 3. i486 və Pentium mikroprosessorlarının istifadəçi registrləri

Niyə bu registrlərin çoxu kəsik işarəsi ilə göstərilir? Xeyr, bunlar fərqli registrlər deyil - onlar bir böyük 32 bitlik registrin hissələridir. Onlar proqramda ayrıca obyektlər kimi istifadə edilə bilər. Bu, i8086-dan başlayaraq Intel-dən daha gənc 16 bitlik mikroprosessor modelləri üçün yazılmış proqramların işləkliyini təmin etmək üçün edilib. i486 və Pentium mikroprosessorları əsasən 32 bitlik registrlərə malikdir. Onların sayı, seqment registrləri istisna olmaqla, i8086 ilə eynidir, lakin ölçüləri daha böyükdür, bu da təyinatlarında əks olunur - onlar var
prefiksi e (Genişləndirilmiş).

^ Ümumi təyinatlı registrlər
Bu qrupun bütün registrləri onların “aşağı” hissələrinə daxil olmağa imkan verir (bax. Şəkil 3). Bu rəqəmə baxdığınız zaman qeyd edin ki, bu registrlərin yalnız aşağı 16 və 8 bit hissələri öz-özünə ünvanlanma üçün istifadə edilə bilər. Bu registrlərin yuxarı 16 biti müstəqil obyektlər kimi mövcud deyil. Bu, yuxarıda qeyd etdiyimiz kimi, Intel-in daha gənc 16 bitlik mikroprosessor modelləri ilə uyğunluq üçün edilir.

Ümumi təyinatlı registrlər qrupuna aid olan registrləri sadalayaq. Bu registrlər fiziki olaraq arifmetik məntiq vahidinin (ALU) daxilində mikroprosessorda yerləşdiyi üçün onlara ALU registrləri də deyilir:

eax/ax/ah/al (Akkumulyator reyestri) - akkumulyator.
Aralıq məlumatları saxlamaq üçün istifadə olunur. Bəzi əmrlərdə bu registrdən istifadə tələb olunur;

ebx/bx/bh/bl (Baza registr) - əsas registr.
Bəzi obyektin əsas ünvanını yaddaşda saxlamaq üçün istifadə olunur;

ecx/cx/ch/cl (Sayma registri) - sayğac reyestri.
Bəzi təkrarlanan hərəkətləri yerinə yetirən əmrlərdə istifadə olunur. Onun istifadəsi çox vaxt gizli olur və müvafiq əmrin alqoritmində gizlənir.
Məsələn, dövrə təşkili əmri idarəetməni müəyyən ünvanda yerləşən komandaya ötürməklə yanaşı, ecx/cx registrinin qiymətini təhlil edir və bir azaldır;

edx/dx/dh/dl (Məlumat reyestri) - verilənlər reyestri.
eax/ax/ah/al registrində olduğu kimi, aralıq məlumatları saxlayır. Bəzi əmrlər onun istifadəsini tələb edir; bəzi əmrlər üçün bu, dolayısı ilə baş verir.

Aşağıdakı iki registr zəncirvari əməliyyatları, yəni hər biri 32, 16 və ya 8 bit uzunluğunda ola bilən elementlərin zəncirlərini ardıcıl emal edən əməliyyatları dəstəkləmək üçün istifadə olunur:

esi/si (Mənbə İndeksi reyestri) - mənbə indeksi.
Zəncirvari əməliyyatlardakı bu registr mənbə zəncirindəki elementin cari ünvanını ehtiva edir;

edi/di (Destination Index register) - qəbuledicinin (alıcının) indeksi.
Zəncirvari əməliyyatlardakı bu registr təyinat zəncirindəki cari ünvanı ehtiva edir.

Aparat və proqram səviyyəsində mikroprosessorun arxitekturasında yığın kimi məlumat strukturu dəstəklənir. Mikroprosessorun təlimat sistemində stek ilə işləmək üçün xüsusi əmrlər var və içərisində proqram modeli Bunun üçün mikroprosessorun xüsusi registrləri var:

esp/sp (Stack Pointer registri) - stack göstərici registri.
Cari yığın seqmentində yığının yuxarı hissəsinə göstərici ehtiva edir.

ebp/bp (Baza Göstərici registri) - yığın çərçivəsinin əsas göstərici registri.
Stack daxilində verilənlərə təsadüfi girişi təşkil etmək üçün nəzərdə tutulmuşdur.

Stek ixtiyari verilənlərin müvəqqəti saxlanması üçün proqram sahəsidir. Təbii ki, verilənlər verilənlər seqmentində də saxlanıla bilər, lakin bu zaman hər bir müvəqqəti saxlanılan məlumat üçün ayrıca adlandırılmış yaddaş xanası yaradılmalıdır ki, bu da proqramın ölçüsünü və istifadə olunan adların sayını artırır. Stackin rahatlığı ondan ibarətdir ki, onun sahəsi təkrar istifadə olunur və məlumatların stekdə saxlanması və oradan götürülməsi heç bir ad göstərilmədən səmərəli push və pop əmrlərindən istifadə etməklə həyata keçirilir.
Stek ənənəvi olaraq, məsələn, alt proqrama zəng etməzdən əvvəl proqram tərəfindən istifadə olunan registrlərin məzmununu saxlamaq üçün istifadə olunur ki, bu da öz növbəsində prosessor registrlərindən "öz məqsədləri üçün" istifadə edəcəkdir. Registrlərin orijinal məzmunu alt proqramdan qayıtdıqdan sonra yığından sızdırılır. Digər ümumi üsul tələb olunan parametrləri yığın vasitəsilə alt proqrama ötürməkdir. Alt proqram parametrlərin stekdə hansı ardıcıllıqla yerləşdirildiyini bilərək, onları oradan götürüb öz icrasında istifadə edə bilər. Fərqli xüsusiyyət stack, tərkibində olan məlumatların bir növ seçmə qaydasıdır: istənilən vaxt yığında yalnız yuxarı element mövcuddur, yəni. yığına yüklənmiş sonuncu element. Üst elementi yığından çıxarmaq növbəti elementi əlçatan edir. Yığın elementləri stek üçün ayrılmış yaddaş sahəsində, yığının aşağı hissəsindən başlayaraq (yəni onun maksimum ünvanından) ardıcıl olaraq azalan ünvanlara qədər yerləşir. Üst əlçatan elementin ünvanı SP yığın göstərici registrində saxlanılır. Proqram yaddaşının hər hansı digər sahəsi kimi, yığın hansısa seqmentə daxil edilməli və ya ayrıca seqment təşkil etməlidir. İstənilən halda həmin seqmentin seqment ünvanı SS seqment yığını registrində yerləşdirilir. Beləliklə, SS:SP cüt registrləri mövcud stek xanasının ünvanını təsvir edir: SS yığının seqment ünvanını, SP isə stekdə saxlanılan sonuncu verilənlərin ofsetini saxlayır (şəkil 4, a). Diqqət yetirək ki, ilkin vəziyyətdə SP steck göstəricisi yığının dibinin altında yerləşən və ona daxil olmayan xananı göstərir.

Şəkil 4. Stackin təşkili: a - ilkin vəziyyət, b - bir elementi yüklədikdən sonra (bu nümunədə AX registrinin məzmunu), c - ikinci elementi yüklədikdən sonra (DS registrinin məzmunu), d - birini boşaltdıqdan sonra element, e - iki elementi boşaltdıqdan və orijinal vəziyyətinə qayıtdıqdan sonra.

Yığına yükləmə xüsusi təkan yığını əmri ilə həyata keçirilir. Bu təlimat əvvəlcə yığın göstəricisinin məzmununu 2 azaldır və sonra operandı SP-də ünvana yerləşdirir. Məsələn, AX registrinin məzmununu stekdə müvəqqəti saxlamaq istəyiriksə, əmri yerinə yetirməliyik.

Yığın Şəkildə göstərilən vəziyyətə keçir. 1.10, b. Görünür ki, yığın göstəricisi iki bayt yuxarı (aşağı ünvanlara doğru) sürüşdürülür və push əmrində göstərilən operand bu ünvana yazılır. Yığına yükləmək üçün aşağıdakı əmr, məsələn,

yığını Şəkildə göstərilən vəziyyətə keçirəcək. 1.10, c. Yığın indi iki elementi saxlayacaq, yalnız yuxarı birinə daxil olmaq mümkündür, SP steck göstəricisi ilə işarələnir. Əgər müəyyən müddətdən sonra stekdə saxlanan registrlərin orijinal məzmununu bərpa etməliyiksə, stekdən pop əmrlərini (pop) yerinə yetirməliyik:

pop DS
pop AX

Yığın nə qədər böyük olmalıdır? Bu, proqramda nə qədər intensiv istifadə olunmasından asılıdır. Məsələn, yığında 10.000 baytlıq massiv saxlamağı planlaşdırırsınızsa, o zaman yığın ən azı bu ölçüdə olmalıdır. Nəzərə almaq lazımdır ki, bəzi hallarda stek sistem tərəfindən avtomatik olaraq istifadə olunur, xüsusən də int 21h interrupt əmrini yerinə yetirərkən. Bu əmrlə prosessor əvvəlcə qayıdış ünvanını stek üzərinə itələyir, sonra isə DOS registrlərin məzmununu və kəsilmiş proqramla bağlı digər məlumatları ora itələyir. Buna görə də, proqram stekdən ümumiyyətlə istifadə etməsə belə, yenə də proqramda olmalı və ən azı bir neçə onlarla sözdən ibarət ölçüsü olmalıdır. İlk nümunəmizdə yığına 128 söz qoyduq, bu mütləq kifayətdir.

^ Assambleya proqramının strukturu

Assembly dili proqramı yaddaş seqmentləri adlanan yaddaş bloklarının toplusudur. Proqram bu blok seqmentlərdən bir və ya bir neçəsindən ibarət ola bilər. Hər bir seqment dil cümlələri toplusunu ehtiva edir, hər biri proqram kodunun ayrıca sətrini tutur.

Assambleya bəyanatları dörd növdür:

maşın təlimatlarının simvolik əksi olan əmrlər və ya göstərişlər. Tərcümə prosesi zamanı montaj təlimatları mikroprosessorun göstərişlər toplusunun müvafiq əmrlərinə çevrilir;

makro əmrlər - proqram mətninin müəyyən tərzdə tərtib edilmiş və tərcümə zamanı başqa cümlələrlə əvəz olunan cümlələri;

assembler kompilyatoruna bəzi hərəkətləri yerinə yetirməyi əmr edən direktivlər. Direktivlərin maşın təsvirində qarşı tərəfi yoxdur;

rus əlifbasının hərfləri də daxil olmaqla istənilən simvoldan ibarət şərh sətirləri. Şərhlər tərcüməçi tərəfindən nəzərə alınmır.

^ Assembly dili sintaksisi

Proqramı təşkil edən cümlələr əmrə, makroya, direktivə və ya şərhə uyğun gələn sintaktik konstruksiya ola bilər. Assembler tərcüməçisinin onları tanıması üçün onlar müəyyən sintaktik qaydalara uyğun formalaşmalıdır. Bunun üçün ən yaxşısı qrammatika qaydaları kimi dilin sintaksisinin formal təsvirindən istifadə etməkdir. Proqramlaşdırma dilini bu şəkildə təsvir etməyin ən çox yayılmış üsulları sintaksis diaqramları və genişləndirilmiş Backus-Naur formalarıdır. Praktik istifadə üçün sintaksis diaqramları daha əlverişlidir. Məsələn, montaj dili ifadələrinin sintaksisini aşağıdakı şəkillərdə göstərilən sintaksis diaqramlarından istifadə etməklə təsvir etmək olar.

düyü. 5. Assembler cümlə formatı

düyü. 6. Direktivləri formatlayın

düyü. 7. Əmrlərin və makroların formatı

Bu rəsmlərdə:

etiket adı - dəyəri onun işarə etdiyi proqram mənbə kodu cümləsinin birinci baytının ünvanı olan identifikator;

ad - bu direktivi eyni adlı digər direktivlərdən fərqləndirən identifikator. Müəyyən bir direktivin assembler tərəfindən işlənməsi nəticəsində bu ada müəyyən xüsusiyyətlər aid edilə bilər;

əməliyyat kodu (COP) və direktiv müvafiq maşın təlimatının, makro təlimatın və ya tərcüməçi direktivinin mnemonik təyinatlarıdır;

operandlar - əməliyyatların yerinə yetirildiyi obyektləri bildirən komandanın hissələri, makro və ya assembler direktivləri. Assembler operandları ədədi və mətn sabitləri, dəyişən etiketləri və əməliyyat işarələrindən və bəzi qorunmuş sözlərdən istifadə edən identifikatorlarla ifadələrlə təsvir olunur.

^ Sintaksis diaqramlarından necə istifadə olunur? Çox sadədir: sizə lazım olan tək şey tapmaq və sonra diaqramın girişindən (solda) çıxışına (sağda) gedən yolu izləməkdir. Əgər belə bir yol varsa, cümlə və ya konstruksiya sintaktik cəhətdən düzgündür. Əgər belə bir yol yoxdursa, kompilyator bu konstruksiyanı qəbul etməyəcək. Sintaksis diaqramları ilə işləyərkən oxlarla göstərilən yan keçidin istiqamətinə diqqət yetirin, çünki yollar arasında sağdan sola izlənilə bilənlər ola bilər. Əslində, sintaktik diaqramlar proqramın daxil olan cümlələrini təhlil edərkən tərcüməçinin məntiqini əks etdirir.

Proqramların mətnini yazarkən icazə verilən simvollar bunlardır:

Bütün Latın hərfləri: A-Z, a-z. Bu halda böyük və kiçik hərflər ekvivalent sayılır;

0-dan 9-a qədər rəqəmlər;

İşarələr?, @, $, _, &;

Ayırıcılar, . ()< > { } + / * % ! " " ? \ = # ^.

Tərcüməçi üçün məna kəsb edən etibarlı dil simvollarının sintaktik cəhətdən ayrılmaz ardıcıllığı olan leksemlərdən yığıcı cümlələr əmələ gəlir.

Tokenlər bunlardır:

identifikatorlar əməliyyat kodları, dəyişən adları və etiket adları kimi proqram obyektlərini təyin etmək üçün istifadə olunan etibarlı simvolların ardıcıllığıdır. İdentifikatorların yazılması qaydası belədir: identifikator bir və ya bir neçə simvoldan ibarət ola bilər. Simvol olaraq siz Latın əlifbasının hərflərindən, rəqəmlərdən və bəzi xüsusi simvollardan - _, ?, $, @ istifadə edə bilərsiniz. İdentifikator rəqəm simvolu ilə başlaya bilməz. İdentifikatorun uzunluğu 255 simvola qədər ola bilər, baxmayaraq ki, tərcüməçi yalnız ilk 32 simvolu qəbul edir və qalanlarına məhəl qoymur. Seçimdən istifadə edərək mümkün identifikatorların uzunluğunu tənzimləyə bilərsiniz komanda xətti mv. Bundan əlavə, tərcüməçiyə böyük və kiçik hərfləri ayırd etməyi və ya onların fərqinə məhəl qoymamağı söyləmək olar (bu, standart olaraq edilir).

^ Assembly dili əmrləri.

Assembler əmrləri öz tələblərini kompüterə ötürmə qabiliyyətini, proqramda idarəetmənin ötürülməsi mexanizmini (döngülər və atlamalar) məntiqi müqayisələr və proqram təşkili üçün açır. Bununla belə, proqramlaşdırma tapşırıqları nadir hallarda bu qədər sadədir. Əksər proqramlar müəyyən tələbə çatana qədər bir neçə təlimatın təkrarlandığı bir sıra dövrələrdən və bir neçə hərəkətdən hansının yerinə yetiriləcəyini müəyyən etmək üçün müxtəlif yoxlamalardan ibarətdir. Bəzi əmrlər əmr göstəricisindəki ofset dəyərini birbaşa dəyişdirərək normal addımlar ardıcıllığını dəyişdirərək idarəetməni ötürə bilər. Daha əvvəl qeyd edildiyi kimi, müxtəlif prosessorlar üçün müxtəlif əmrlər var, lakin biz 80186, 80286 və 80386 prosessorları üçün bir sıra bəzi əmrləri nəzərdən keçirəcəyik.

Müəyyən bir əmri yerinə yetirdikdən sonra bayraqların vəziyyətini təsvir etmək üçün bayraqların bayraq registrinin strukturunu əks etdirən cədvəldən seçimdən istifadə edəcəyik:

Bu cədvəlin alt sətirində əmr yerinə yetirildikdən sonra bayraqların dəyərləri göstərilir. Bu vəziyyətdə aşağıdakı qeydlərdən istifadə olunur:

1 - əmr yerinə yetirildikdən sonra bayraq qoyulur (1-ə bərabər);

0 - əmr yerinə yetirildikdən sonra bayraq sıfırlanır (0-a bərabər);

r - bayrağın qiyməti əmrin nəticəsindən asılıdır;

Əmr yerinə yetirildikdən sonra bayraq müəyyən edilmir;

boşluq - əmri yerinə yetirdikdən sonra bayraq dəyişmir;

Sintaksis diaqramlarında operandları təmsil etmək üçün aşağıdakı qeydlərdən istifadə olunur:

r8, r16, r32 - bayt, söz və ya qoşa söz ölçülü registrlərdən birində operand;

m8, m16, m32, m48 - bayt, söz, qoşa söz və ya 48 bit yaddaş ölçüsündə operand;

i8, i16, i32 - bayt, söz və ya qoşa söz ölçüsündə dərhal operand;

a8, a16, a32 - kod seqmentində nisbi ünvan (ofset).

Əmrlər (əlifba sırası ilə):

*Bu əmrlər ətraflı təsvir edilmişdir.

ƏLAVƏ EDİN
(Əlavə)

Əlavə

^ Komanda konturları:

təyinat, mənbə əlavə edin

Məqsəd: bayt, söz və ya cüt söz ölçülərinin iki mənbə və təyinat operandlarının əlavə edilməsi.

İş alqoritmi:

mənbə və təyinat operandlarını əlavə edin;

əlavənin nəticəsini qəbulediciyə yazın;

bayraqlar qoydular.

Əmr yerinə yetirildikdən sonra bayraqların vəziyyəti:

Ərizə:
Əlavə əmri iki tam operand əlavə etmək üçün istifadə olunur. Əlavənin nəticəsi birinci operandın ünvanına yerləşdirilir. Əgər əlavənin nəticəsi təyinat operandının hüdudlarından kənara çıxarsa (daşma baş verir), onda bu vəziyyət cf bayrağını təhlil edərək və sonra adc əmrindən istifadə etməklə nəzərə alınmalıdır. Məsələn, balta registrinə və yaddaş sahəsinə ch dəyərləri əlavə edək. Əlavə edərkən, daşma ehtimalını nəzərə almalısınız.

Qeydiyyatdan əlavə registr və ya yaddaş:

|000000dw|modregr/rm|

AX (AL) və dərhal dəyəri qeyd edin:

|0000010w|--data--|w=1 olduqda məlumat|

Qeydiyyat və ya yaddaş üstəgəl dərhal dəyər:

|100000sw|mod000r/m|--data--|BW=01 olduqda verilənlər|

ZƏNG
(ZƏNG)

Prosedur və ya tapşırıq çağırmaq

^ Komanda konturları:

Məqsəd:

stekdə qayıdış nöqtəsinin ünvanını saxlamaqla nəzarətin yaxın və ya uzaq prosedura keçirilməsi;

tapşırıqların dəyişdirilməsi.

İş alqoritmi:
operand növü ilə müəyyən edilir:

Etiket yaxındır - eip / ip əmr göstəricisinin məzmunu yığına itələnir və etiketə uyğun gələn yeni ünvan dəyəri eyni registrə yüklənir;

Uzaq etiket - eip/ip və cs əmr göstəricisinin məzmunu yığına itələnir. Sonra uzaq işarəyə uyğun gələn yeni ünvan dəyərləri eyni registrlərə yüklənir;

R16, 32 və ya m16, 32 - idarəetmənin ötürüldüyü cari təlimat seqmentində ofsetləri ehtiva edən registr və ya yaddaş hüceyrəsini təyin edin. Nəzarət ötürüldükdə, eip/ip əmr göstəricisinin məzmunu yığının üzərinə itələnir;

Yaddaş göstəricisi - çağırılan prosedura 4 və ya 6 baytlıq göstərici olan yaddaş yerini təyin edir. Belə göstəricinin strukturu 2+2 və ya 2+4 baytdır. Belə bir göstəricinin təfsiri mikroprosessorun iş rejimindən asılıdır:

^ Əmr yerinə yetirildikdən sonra bayraqların vəziyyəti (tapşırıq keçidi istisna olmaqla):

əmrin icrası bayraqlara təsir etmir

Tapşırıq dəyişdirildikdə, bayraqların dəyərləri dəyişdirilən tapşırığın TSS status seqmentində bayraqlar reyestrinə dair məlumatlara uyğun olaraq dəyişdirilir.
Ərizə:
Zəng əmri geri dönüş nöqtəsinin ünvanını saxlamaqla idarəetmənin alt proqrama çevik və çoxşaxəli ötürülməsini təşkil etməyə imkan verir.

Obyekt kodu (dörd format):

Bir seqmentdə birbaşa ünvanlama:

|11101000|disp-aşağı|diep-yüksək|

Seqmentdə dolayı ünvanlama:

|11111111|mod010r/m|

Seqmentlər arasında dolayı ünvanlama:

|11111111|mod011r/m|

Seqmentlər arasında birbaşa ünvanlama:

|10011010|ofset-aşağı|ofset-yüksək|seg-aşağı|seg-yüksək|

CMP
(operandları müqayisə edin)

Operandların müqayisəsi

^ Komanda konturları:

cmp operand1, operand2

Məqsəd: iki operandın müqayisəsi.

İş alqoritmi:

çıxma (operand1-operand2) yerinə yetirmək;

nəticədən asılı olaraq bayraqlar təyin edin, operand1 və operand2-ni dəyişməyin (yəni nəticəni saxlamayın).

Ərizə:
Bu əmr iki operandı çıxma yolu ilə müqayisə etmək üçün istifadə olunur, operandlar isə dəyişmir. Əmrlərin icrası nəticəsində bayraqlar təyin edilir. Cmp təlimatı şərti keçid təlimatları və setcc dəyər təlimatı ilə təyin edilmiş bayt ilə istifadə olunur.

Obyekt kodu (üç format):

Qeydiyyat və ya Qeydiyyatlı Yaddaş:

|001110dw|modreg/m|

AX (AL) reyestri ilə dərhal dəyər:

|0011110w|--data--|w=1 olduqda məlumat|

Qeydiyyat və ya yaddaşla dərhal dəyər:

|100000sw|mod111r/m|--data--|sw=0 olduqda verilənlər|

DEC
(operandı 1 ilə azaldın)

Operandın bir azaldılması

^ Komanda konturları:

dec operand

Məqsəd: operandın yaddaşda və ya qeydiyyatda olan dəyərini 1 azaldın.

İş alqoritmi:
göstəriş operanddan 1-i çıxarır. Əmr yerinə yetirildikdən sonra bayraqların vəziyyəti:

Ərizə:
Dec əmri yaddaşda baytın, sözün, qoşa sözün qiymətini azaltmaq və ya qeydiyyatdan birini bir azaltmaq üçün istifadə olunur. Qeyd edək ki, əmr cf bayrağına təsir etmir.

Qeydiyyatdan keçin: |01001reg|

^ Qeydiyyat və ya yaddaş: |1111111w|mod001r/m|

DIV
(İmzasız BÖL)

Bölmə imzasızdır

Komanda sxemi:

div bölücü

Məqsəd: iki ikili işarəsiz qiymətlər üzərində bölmə əməliyyatını yerinə yetirmək.

^ İş alqoritmi:
Komanda iki operand tələb edir - dividend və bölən. Dividend gizli şəkildə müəyyən edilir və onun ölçüsü əmrdə göstərilən bölən ölçüsündən asılıdır:

bölən baytdırsa, dividend balta registrində yerləşməlidir. Əməliyyatdan sonra hissə al-a, qalanı isə ah-a qoyulur;

əgər bölən sözdürsə, onda dividend dx:ax registr cütlüyündə, dividendlərin aşağı hissəsi axda yerləşməlidir. Əməliyyatdan sonra əmsal axda, qalan hissəsi isə dx-də yerləşdirilir;

əgər bölən qoşa sözdürsə, onda dividend edx:eax registr cütlüyündə, dividendlərin aşağı hissəsi eax-da yerləşməlidir. Əməliyyatdan sonra bölmə eax-a, qalan hissəsi isə edx-ə yerləşdirilir.

^ Komandanın icrasından sonra bayraqların vəziyyəti:

Ərizə:
Komanda operandların tam bölünməsini həyata keçirir, bölmənin nəticəsini bölmə kimi və bölmənin qalan hissəsini qaytarır. Bölmə əməliyyatını yerinə yetirərkən bir istisna baş verə bilər: 0 - bölmə xətası. Bu vəziyyət iki vəziyyətdən birində baş verir: bölən 0-dır və ya hissə eax/ax/al registrinə sığmaq üçün çox böyükdür.

Obyekt kodu:

|1111011w|mod110r/m|

INT
(Kəsik)

Kəsinti xidmət rejiminə zəng etmək

^ Komanda konturları:

int kəsmə_nömrəsi

Məqsəd: təlimat operandının müəyyən etdiyi kəsmə nömrəsi ilə kəsmə xidmətinə zəng edin.

^ İş alqoritmi:

bayraqlar/bayraqlar reyestrini və qayıdış ünvanını yığının üzərinə itələyin. Qayıdış ünvanını yazarkən əvvəlcə cs seqment registrinin məzmunu, sonra eip/ip əmr göstəricisinin məzmunu yazılır;

if və tf bayraqlarını sıfıra sıfırlayın;

nəzarəti göstərilən nömrə ilə kəsmə idarəçisinə köçürün. Nəzarət ötürmə mexanizmi mikroprosessorun iş rejimindən asılıdır.

^ Komandanın icrasından sonra bayraqların vəziyyəti:

Ərizə:
Sintaksisdən göründüyü kimi, bu əmrin iki forması var:

int 3 - öz fərdi əməliyyat kodu 0cch var və bir bayt tutur. Bu vəziyyət, hər hansı bir təlimatın ilk baytını əvəz etməklə kəsilmə nöqtələrini təyin etmək üçün müxtəlif proqram təminatında istifadə etməyi çox rahat edir. Əmrlərin ardıcıllığında opcode 0cch olan əmrlə qarşılaşan mikroprosessor proqram təminatının sazlayıcısı ilə əlaqə saxlamağa xidmət edən vektor nömrəsi 3 olan kəsmə işləyicisini çağırır.

Təlimatın ikinci forması iki bayt uzunluğundadır, 0cdh əməliyyat koduna malikdir və 0-255 diapazonunda vektor nömrəsi ilə kəsmə xidməti rejiminə zəng etməyə imkan verir. İdarəetmənin ötürülməsinin xüsusiyyətləri, qeyd edildiyi kimi, mikroprosessorun iş rejimindən asılıdır.

Obyekt kodu (iki format):

Qeydiyyatdan keçin: |01000reg|

^ Qeydiyyat və ya yaddaş: |1111111w|mod000r/m|

JCC
JCXZ/JECXZ
(Şərt varsa tullanma)

(CX=Sıfır olduqda tullayın/ ECX=Sıfır olduqda atlayın)

Şərt yerinə yetirilirsə, atlayın

CX/ECX sıfırdırsa, atlayın

^ Komanda konturları:

jcc etiketi
jcxz etiketi
jecxz etiketi

Məqsəd: bəzi şərtlərdən asılı olaraq cari əmrlər seqmenti daxilində keçid.

^ Komanda alqoritmi (jcxz/jecxz istisna olmaqla):
Əməliyyat kodundan asılı olaraq bayraqların vəziyyətinin yoxlanılması (yoxlanılan vəziyyəti əks etdirir):

yoxlanılan şərt doğrudursa, operandla göstərilən xanaya keçin;

yoxlanılan şərt yalnışdırsa, onda nəzarəti növbəti komandaya keçirin.

jcxz/jecxz əmr alqoritmi:
ecx/cx registrinin məzmununun sıfıra bərabər olması şərtinin yoxlanılması:

yoxlanılan vəziyyət olduqda

Maşın təlimatları səviyyəsində proqramlaşdırma proqramlaşdırmanın mümkün olduğu minimum səviyyədir. Maşın təlimatları sistemi kompüterin avadanlıqlarına göstərişlər verməklə tələb olunan hərəkətləri həyata keçirmək üçün kifayət olmalıdır.

Hər bir maşın təlimatı iki hissədən ibarətdir:

  • əməliyyat otağı - "nə edəcəyini" müəyyən etmək;
  • operand - emal obyektlərinin müəyyən edilməsi, "nə etməli".

Mikroprosessorun montaj dilində yazılmış maşın təlimatı aşağıdakı sintaktik formaya malik tək sətirdir:

etiket əmri/direktivi operand(lar) ;şərhlər

Bu halda, sətirdəki məcburi sahə əmr və ya direktivdir.

Etiket, əmr/direktiv və operandlar (əgər varsa) ən azı bir boşluq və ya nişan simvolu ilə ayrılır.

Əgər əmr və ya direktivi növbəti sətirdə davam etdirmək lazımdırsa, əks slash işarəsi istifadə olunur: \.

Varsayılan olaraq, montaj dili əmrlərdə və ya direktivlərdə böyük və kiçik hərflər arasında fərq qoymur.

Kod sətirlərinin nümunəsi:

Countdb 1 ;Ad, direktiv, bir operand
hərəkət eax, 0 ;Əmr, iki operand
cbw; Əmr

Teqlər

Etiket montaj dilində aşağıdakı simvollar ola bilər:

  • latın əlifbasının bütün hərfləri;
  • 0-dan 9-a qədər rəqəmlər;
  • xüsusi simvollar: _, @, $, ?.

Nöqtə etiketin ilk simvolu kimi istifadə edilə bilər, lakin bəzi tərtibçilər bu simvoldan çəkinirlər. Qorunan montaj dili adları (direktivlər, operatorlar, komanda adları) etiket kimi istifadə edilə bilməz.

Etiketdəki ilk simvol hərf və ya xüsusi simvol (rəqəm deyil) olmalıdır. Maksimum uzunluq etiketlər - 31 simvol. Assembler direktivi olmayan sətirdə yazılan bütün etiketlər iki nöqtə ilə bitməlidir: .

Komandalar

Əmr mikroprosessorun hansı hərəkəti yerinə yetirməli olduğunu tərcüməçiyə bildirir. Məlumat seqmentində əmr (və ya direktiv) sahəni, iş sahəsini və ya sabiti müəyyən edir. Kod seqmentində göstəriş hərəkət (mov) və ya əlavə (əlavə) kimi hərəkəti müəyyən edir.

direktivlər

Assembler siyahının yığılması və yaradılması prosesini idarə etməyə imkan verən bir sıra operatorlara malikdir. Bu operatorlar adlanır direktivlər . Onlar yalnız proqramın yığılması prosesində hərəkət edirlər və təlimatlardan fərqli olaraq maşın kodları yaratmırlar.

operandlar

Operand – maşın əmrinin və ya proqramlaşdırma dili operatorunun icra olunduğu obyekt.
Təlimatda bir və ya iki operand ola bilər və ya ümumiyyətlə heç bir operand yoxdur. Operandların sayı birbaşa olaraq təlimat kodu ilə müəyyən edilir.
Nümunələr:

  • Heç bir operand yoxdur ;Qayıt
  • Bir operand inc ecx ;Exx artır
  • İki operand eax,12 əlavə edir;eax-a 12 əlavə edin

Etiket, əmr (direktiv) və operand sətirdə hər hansı müəyyən mövqedən başlamalı deyil. Bununla belə, proqramın daha çox oxunaqlı olması üçün onları bir sütunda yazmaq tövsiyə olunur.

Operandlar ola bilər

  • identifikatorlar;
  • tək və ya ikiqat dırnaq içərisində olan simvol sətirləri;
  • ikilik, səkkizlik, onluq və ya onaltılıq sistemdə tam ədədlər.
İdentifikatorlar

İdentifikatorlar – əməliyyat kodları, dəyişən adları və etiket adları kimi proqram obyektlərini təyin etmək üçün istifadə olunan etibarlı simvolların ardıcıllığı.

İdentifikatorların yazılması qaydaları.

  • İdentifikator bir və ya bir neçə simvol ola bilər.
  • Simvol kimi siz Latın əlifbasının hərflərindən, rəqəmlərdən və bəzi xüsusi simvollardan istifadə edə bilərsiniz: _, ?, $, @.
  • İdentifikator rəqəm simvolu ilə başlaya bilməz.
  • ID-nin uzunluğu 255 simvola qədər ola bilər.
  • Tərcüməçi identifikatorun ilk 32 simvolunu qəbul edir və qalanlarına məhəl qoymur.
Şərhlər

Şərhlər icra olunan sətirdən simvolla ayrılır; . Bu zaman nöqtəli vergüldən sonra və sətrin sonuna qədər yazılan hər şey şərhdir. Proqramda şərhlərin istifadəsi onun aydınlığını artırır, xüsusən də təlimatlar toplusunun məqsədi aydın olmayan yerlərdə. Şərhdə boşluqlar daxil olmaqla istənilən çap edilə bilən simvol ola bilər. Şərh bütün sətri əhatə edə bilər və ya eyni sətirdəki əmrə əməl edə bilər.

Montaj proqram strukturu

Assembly dilində yazılmış proqram adlanan bir neçə hissədən ibarət ola bilər modullar . Hər bir modul bir və ya daha çox məlumat, yığın və kod seqmentini müəyyən edə bilər. İstənilən tam assembler dili proqramı onun icrasına başlanılan bir əsas və ya əsas modulu ehtiva etməlidir. Modulda müvafiq direktivlərlə elan edilmiş kod, verilənlər və stek seqmentləri ola bilər. Seqmentləri elan etməzdən əvvəl siz .MODEL direktivindən istifadə edərək yaddaş modelini təyin etməlisiniz.

Assembly dilində "heç nə etməmək" proqramının nümunəsi:

686P
.MODEL YAPILI, STDCALL
.MƏLUMAT
.KOD
BAŞLAMAQ:

RET
SON BAŞLAYIN

Bu proqramda yalnız bir mikroprosessor təlimatı var. Bu əmr RET-dir. Proqramın düzgün şəkildə dayandırılmasını təmin edir. Ümumiyyətlə, bu əmr prosedurdan çıxmaq üçün istifadə olunur.
Proqramın qalan hissəsi tərcüməçinin işləməsi ilə bağlıdır.
.686P - Pentium 6 (Pentium II) qorunan rejim əmrlərinə icazə verilir. Bu direktiv prosessor modelini təyin etməklə dəstəklənən assembler təlimat dəstini seçir. Direktivin sonundakı P hərfi tərcüməçiyə prosessorun qorunan rejimdə işlədiyini bildirir.
.MODEL FLAT, stdcall düz yaddaş modelidir. Bu yaddaş modeli Windows əməliyyat sistemində istifadə olunur. stdcall
.DATA verilənlərdən ibarət proqram seqmentidir.
.CODE kodu ehtiva edən proqram blokudur.
START bir etiketdir. Assemblerdə etiketlər böyük rol oynayır, bunu müasir yüksək səviyyəli dillər haqqında demək olmaz.
END START - proqramın sonu və tərcüməçiyə proqramın START etiketindən başlamalı olduğu barədə mesaj.
Hər bir modulda sonu qeyd edən END direktivi olmalıdır mənbə kodu proqramlar. END direktivinə əməl edən bütün sətirlər nəzərə alınmır. END direktivinin buraxılması xəta yaradır.
END direktivindən sonrakı etiket kompilyatora proqramın icrasının başladığı əsas modulun adını bildirir. Proqramda bir modul varsa, END direktivindən sonrakı etiket buraxıla bilər.

Assembly dilinin təlimat strukturu Maşın təlimatları səviyyəsində proqramlaşdırma kompüter proqramlaşdırmasının mümkün olduğu minimum səviyyədir. Maşın təlimatları sistemi maşının aparatına təlimatlar verməklə tələb olunan hərəkətləri həyata keçirmək üçün kifayət olmalıdır. Hər bir maşın təlimatı iki hissədən ibarətdir: "nə etməli" ni təyin edən əməliyyat hissəsi və emal obyektlərini təyin edən operand, yəni "nə etməli". Assembly dilində yazılmış mikroprosessorun maşın təlimatı aşağıdakı formada olan tək sətirdir: etiket təlimatı/direktiv operand(lar) ; şərhlər Etiket, əmr/direktiv və operand ən azı bir boşluq və ya nişan simvolu ilə ayrılır. Təlimat operandları vergüllə ayrılır.

Assembly dili təlimatının strukturu Assembly dili təlimatı mikroprosessorun hansı hərəkəti yerinə yetirməli olduğunu kompilyatora bildirir. Assembly direktivləri proqram mətnində göstərilən, montaj prosesinə və ya çıxış faylının xüsusiyyətlərinə təsir edən parametrlərdir. Operand verilənlərin ilkin qiymətini (verilənlər seqmentində) və ya təlimatın (kod seqmentində) yerinə yetirəcəyi elementləri təyin edir. Təlimat bir və ya iki operandlı ola bilər və ya heç bir operand ola bilməz. Operandların sayı birbaşa olaraq təlimat kodu ilə müəyyən edilir. Əgər əmr və ya direktivin növbəti sətirdə davam etdirilməsi lazımdırsa, o zaman əks kəsik işarəsi istifadə olunur: "" . Default olaraq assembler əmrlərdə və direktivlərdə böyük və kiçik hərflər arasında fərq qoymur. Direktiv və əmr nümunələri Count db 1 ; Ad, direktiv, bir operand mov eax, 0 ; Komanda, iki operand

İdentifikatorlar dəyişən adlarını və etiket adlarını təyin etmək üçün istifadə olunan etibarlı simvolların ardıcıllığıdır. İdentifikator aşağıdakı simvollardan bir və ya bir neçəsindən ibarət ola bilər: latın əlifbasının bütün hərfləri; 0-dan 9-a qədər rəqəmlər; xüsusi simvollar: _, @, $, ? . Nöqtə etiketin ilk simvolu kimi istifadə edilə bilər. Qorunan assembler adları (direktivlər, operatorlar, komanda adları) identifikator kimi istifadə edilə bilməz. İdentifikatorun ilk simvolu hərf və ya xüsusi simvol olmalıdır. Maksimum identifikator uzunluğu 255 simvoldur, lakin tərcüməçi ilk 32 simvolu qəbul edir və qalanlarına məhəl qoymur. Assembler direktivi olmayan sətirdə yazılan bütün etiketlər iki nöqtə ":" ilə bitməlidir. Etiket, əmr (direktiv) və operand sətirdə hər hansı müəyyən mövqedən başlamalı deyil. Proqramın daha çox oxunaqlı olması üçün onları bir sütunda yazmaq tövsiyə olunur.

Etiketlər Assembler direktivi olmayan sətirdə yazılan bütün etiketlər iki nöqtə ":" ilə bitməlidir. Etiket, əmr (direktiv) və operand sətirdə hər hansı müəyyən mövqedən başlamalı deyil. Proqramın daha çox oxunaqlı olması üçün onları bir sütunda yazmaq tövsiyə olunur.

Şərhlər Proqramda şərhlərin istifadəsi onun aydınlığını artırır, xüsusən təlimatlar toplusunun məqsədi aydın olmayan yerlərdə. Şərhlər mənbə modulunun istənilən sətirində nöqtəli vergül (;) ilə başlayır. "-nin sağındakı bütün simvollar; ' sətirin sonuna qədər şərhlər var. Şərhdə "boşluq" daxil olmaqla istənilən çap edilə bilən simvol ola bilər. Şərh bütün sətri əhatə edə bilər və ya eyni sətirdəki əmrə əməl edə bilər.

Assembly dili proqramının strukturu Assembly dili proqramı modul adlanan bir neçə hissədən ibarət ola bilər və onların hər biri bir və ya bir neçə verilənlər, stek və kod seqmentlərini müəyyən edə bilər. İstənilən tam assembler dili proqramı onun icrasına başlanılan bir əsas və ya əsas modulu ehtiva etməlidir. Modulda müvafiq direktivlərlə elan edilmiş proqram, verilənlər və stek seqmentləri ola bilər.

Yaddaş Modelləri Seqmentləri elan etməzdən əvvəl direktivdən istifadə edərək yaddaş modelini təyin etməlisiniz. MODEL dəyişdirici yaddaş_model, çağırış_konvensiya, OS_type, stack_parameter Əsas montaj dili yaddaş modelləri: Yaddaş modeli Kod ünvanlama Məlumatların ünvanlanması Əməliyyat sistemi MS-DOS YAXINDA KİÇİK İcazə Verilir MS-DOS YAXINDA KİÇİK, MS-DOS YAXINDA ORTA FAR, Windows MS-DOS YAXINDA ORTA FAR, Windows YAXIN YAXIN MS-DOS, Windows BÖYÜK FAR MS-DOS, Windows BÖYÜK FAR MS-DOS, Windows NEAR Windows 2000, Windows XP, Windows Allowed FLAT NEAR NT,

Yaddaş Modelləri Kiçik model yalnız 16 bitlik MS-DOS proqramlarında işləyir. Bu modeldə bütün verilənlər və kod bir fiziki seqmentdə yerləşir. Bu halda proqram faylının ölçüsü 64 KB-dən çox deyil. Kiçik model bir kod seqmentini və bir məlumat seqmentini dəstəkləyir. Bu modeldən istifadə zamanı verilənlər və kodlar yaxın (yaxın) kimi ünvanlanır. Orta model çoxlu kod seqmentlərini və bir məlumat seqmentini dəstəkləyir, kod seqmentlərindəki bütün keçidlər defolt olaraq uzaq (uzaq) hesab olunur və məlumat seqmentindəki keçidlər yaxın (yaxın) hesab olunur. Kompakt model uzaq verilənlərin ünvanlanmasından (uzaqda) istifadə edən çoxlu məlumat seqmentlərini və yaxın verilənlərin ünvanlanmasından (yaxın) istifadə edən bir kod seqmentini dəstəkləyir. Böyük model çoxlu kod seqmentlərini və çoxlu məlumat seqmentlərini dəstəkləyir. Varsayılan olaraq, bütün kod və məlumat istinadları uzaq hesab olunur. Nəhəng model demək olar ki, böyük yaddaş modelinə bərabərdir.

Yaddaş Modelləri Düz model seqmentləşdirilməmiş proqram konfiqurasiyasını nəzərdə tutur və yalnız 32 bitlik əməliyyat sistemlərində istifadə olunur. Bu model kiçik modelə bənzəyir, çünki verilənlər və kod eyni 32 bitlik seqmentdə yerləşir. Direktivdən əvvəl düz model üçün proqram hazırlamaq. model mənzil direktivlərdən birini yerləşdirməlidir: . 386, . 486, . 586 və ya. 686. Prosessor seçimi direktivinin seçimi proqramların yazılması zamanı mövcud olan komandalar toplusunu müəyyən edir. Prosessor seçim direktivindən sonrakı p hərfi qorunan iş rejimi deməkdir. Məlumat və kod ünvanlanması yaxındır, bütün ünvanlar və göstəricilər 32 bitdir.

yaddaş modelləri. MODEL dəyişdirici yaddaş_model, çağırış_konvensiya, OS_type, stack_parameter Modifikator parametri seqment növlərini müəyyən etmək üçün istifadə olunur və aşağıdakı dəyərləri qəbul edə bilər: istifadə 16 (seçilmiş modelin seqmentləri 16-bit kimi istifadə olunur) istifadə 32 (seçilmiş modelin seqmentləri istifadə olunur) 32 bit kimi). Calling_convention parametri digər dillərdən, o cümlədən yüksək səviyyəli dillərdən (C++, Pascal) prosedur çağırarkən parametrlərin necə ötürüldüyünü müəyyən etmək üçün istifadə olunur. Parametr aşağıdakı qiymətləri qəbul edə bilər: C, BASIC, FORTRAN, PASCAL, SYSCALL, STDCALL.

yaddaş modelləri. MODEL dəyişdirici yaddaş_model, çağırış_konvensiya, OS_type, stack_parameter OS_type parametri defolt olaraq OS_DOS-dur və aktivdir Bu an bu, bu parametr üçün dəstəklənən yeganə dəyərdir. Yığın_parametri aşağıdakı kimi qurulub: NEARSTACK (SS registri DS-ə bərabərdir, verilənlər və stek regionları eyni fiziki seqmentdə yerləşir) FARSTACK (SS registri DS-ə bərabər deyil, verilənlər və stek regionları müxtəlif fiziki seqmentlərdə yerləşir). Defolt NEARSTACK-dır.

"Heç nə etməmək" proqramının nümunəsi. 686 P. MODEL YAPI, STDCALL. DATA. CODE START: RET END START RET - mikroprosessor əmri. Proqramın düzgün şəkildə dayandırılmasını təmin edir. Proqramın qalan hissəsi tərcüməçinin işləməsi ilə bağlıdır. . 686 P - Pentium 6 (Pentium II) qorunan rejim əmrlərinə icazə verilir. Bu direktiv prosessor modelini təyin etməklə dəstəklənən assembler təlimat dəstini seçir. . MODEL FLAT, stdcall - düz yaddaş modeli. Bu yaddaş modeli Windows əməliyyat sistemində istifadə olunur. stdcall istifadə üçün konvensiya çağıran prosedurdur.

"Heç nə etməmək" proqramının nümunəsi. 686 P. MODEL YAPI, STDCALL. DATA. KOD BAŞLAMA: YENİDƏN SON BAŞLAMA . DATA - verilənlərdən ibarət proqram seqmenti. Bu proqram yığını istifadə etmir, buna görə seqment. STACK yoxdur. . KOD - kodu ehtiva edən proqramın seqmenti. START - etiket. END START - proqramın sonu və tərtibçiyə proqramın START etiketindən başlamalı olduğu mesajı. Hər bir proqramda proqramın mənbə kodunun sonunu qeyd edən END direktivi olmalıdır. END direktivindən sonra gələn bütün sətirlər nəzərə alınmır.END direktivindən sonrakı etiket kompilyatora proqramın icrasının başladığı əsas modulun adını bildirir. Proqramda bir modul varsa, END direktivindən sonrakı etiket buraxıla bilər.

Assembly dili tərcüməçiləri Tərcüməçi proqram və ya texniki vasitələr Proqramlaşdırma dillərindən birində olan proqramı hədəf dildə obyekt kodu adlanan proqrama çevirən. Maşın təlimatı mnemonikasını dəstəkləməklə yanaşı, hər bir tərcüməçinin öz direktivləri və makroları var, çox vaxt başqa heç nə ilə uyğun gəlmir. Assembly dili tərcüməçilərinin əsas növləri bunlardır: MASM (Microsoft Assembler), TASM (Borland Turbo Assembler), FASM (Flat Assembler) - Tomasz Qryshtar (Polşa) tərəfindən yazılmış sərbəst paylanmış çox keçidli assembler, NASM (Netwide Assembler) - a. Intel x arxitekturası 86 üçün pulsuz assembler Simon Tatham tərəfindən Julian Hall ilə birlikdə yaradılmışdır və hazırda Source-da kiçik inkişaf qrupu tərəfindən hazırlanır. Forge. xalis.

Src="https://present5.com/presentation/-29367016_63610977/image-15.jpg" alt="(!LANG:Microsoft Visual Studio 2005-də proqram tərcüməsi 1) File->New->Project seçərək layihə yaradın. menyu və"> Трансляция программы в Microsoft Visual Studio 2005 1) Создать проект, выбрав меню File->New->Project и указав имя проекта (hello. prj) и тип проекта: Win 32 Project. В дополнительных опциях мастера проекта указать “Empty Project”.!}

Src="https://present5.com/presentation/-29367016_63610977/image-16.jpg" alt="(!LANG:Microsoft Visual Studio 2005-də proqram tərcüməsi 2) Layihə ağacında (View->Solution Explorer) əlavə edin"> Трансляция программы в Microsoft Visual Studio 2005 2) В дереве проекта (View->Solution Explorer) добавить файл, в котором будет содержаться текст программы: Source. Files->Add->New. Item.!}

Proqramın Microsoft Visual Studio 2005-də tərcüməsi 3) Code C++ fayl tipini seçin, lakin uzantı ilə adı göstərin. asm:

Proqramın Microsoft Visual Studio 2005-də tərcüməsi 5) Kompilyator seçimlərini təyin edin. Layihə faylı menyusunda sağ düyməni seçin Xüsusi Quraşdırma Qaydaları…

Proqramın Microsoft Visual Studio 2005-də tərcüməsi və görünən pəncərədə Microsoft Macro Assembler seçin.

Proqramın Microsoft Visual Studio 2005-də tərcüməsi Salam faylda sağ düymə ilə yoxlayın. Properties menyusundan layihə ağacının asm seçin və General->Tool: Microsoft Macro Assembler seçin.

Src="https://present5.com/presentation/-29367016_63610977/image-22.jpg" alt="(!LANG:Microsoft Visual Studio 2005-də proqram tərcüməsi 6) Build->Build hello.prj seçərək faylı tərtib edin. ."> Трансляция программы в Microsoft Visual Studio 2005 6) Откомпилировать файл, выбрав Build->Build hello. prj. 7) Запустить программу, нажав F 5 или выбрав меню Debug->Start Debugging.!}

ƏS Windows-da proqramlaşdırma Windows ƏS-də proqramlaşdırma API funksiyalarının (Application Program Interface, yəni proqram təminatı interfeysi) istifadəsinə əsaslanır. Onların sayı 2000-ə çatır. Windows üçün proqram əsasən belə zənglərdən ibarətdir. ilə bütün qarşılıqlı əlaqə xarici cihazlar və əməliyyat sisteminin resursları, bir qayda olaraq, belə funksiyalar vasitəsilə baş verir. əməliyyat otağı Windows sistemi düz yaddaş modelindən istifadə edir. İstənilən yaddaş yerinin ünvanı bir 32 bitlik registrin məzmunu ilə müəyyən ediləcək. Windows üçün proqram strukturlarının 3 növü var: dialoq (əsas pəncərə dialoqdur), konsol və ya pəncərəsiz struktur, klassik struktur (pəncərə, çərçivə).

Zəng edin Windows xüsusiyyətləri API Yardım faylında istənilən API funksiyası funksiya_adı növü kimi təqdim olunur (FA 1, FA 2, FA 3) Tip – qaytarılan dəyər növü; FAKS – formal arqumentlərin öz qaydasında siyahısı.Məsələn, int Mesaj. Qutu (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Bu funksiya mesajı və çıxış düyməsi(ləri) olan pəncərəni göstərir. Parametrlərin mənası: h. Wnd - mesaj pəncərəsinin görünəcəyi pəncərənin idarəsi, lp. Mətn - pəncərədə görünəcək mətn, lp. Başlıq - pəncərə başlığında mətn, u. Tip - pəncərə növü, xüsusən də çıxış düymələrinin sayını təyin edə bilərsiniz.

Windows API funksiyalarına zəng etmək int Message. Qutu (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); API funksiyasının demək olar ki, bütün parametrləri əslində 32 bitlik tam ədədlərdir: HWND 32 bitlik tam ədəddir, LPCTSTR 32 bitlik sətir göstəricisidir, UINT 32 bitlik tam ədəddir. Funksiyaların yeni versiyalarına keçmək üçün funksiyaların adına tez-tez "A" şəkilçisi əlavə edilir.

Windows API funksiyalarına zəng etmək int Message. Qutu (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); MASM-dən istifadə edərkən adın sonuna @N N əlavə etməlisiniz - ötürülən arqumentlərin yığında tutduğu baytların sayı. Win 32 API funksiyaları üçün bu rəqəm arqumentlərin sayı n dəfə 4 (hər arqumentdə bayt) kimi müəyyən edilə bilər: N=4*n. Funksiyaya zəng etmək üçün assemblerin CALL əmrindən istifadə olunur. Bu halda, funksiyanın bütün arqumentləri ona stek (PUSH əmri) vasitəsilə ötürülür. Arqumentin ötürülməsi istiqaməti: SOLDAN SAĞA - AŞAĞIDA YUKARI. Arqument u ilk olaraq yığına itələnəcək. növü. Göstərilən funksiyaya zəng etmək belə görünəcək: CALL Message. Qutu. [email protected]

Windows API funksiyalarına zəng etmək int Message. Qutu (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); İstənilən API funksiyasının yerinə yetirilməsinin nəticəsi adətən tam ədəddir və EAX registrində qaytarılır. OFFSET direktivi "seqment ofsetidir" və ya yüksək səviyyəli dil terminləri ilə desək, sətrin başlanğıcı üçün "göstərici"dir. EQU direktivi, C-də #define kimi, sabiti təyin edir. EXTERN direktivi kompilyatora funksiya və ya identifikatorun moduldan kənar olduğunu bildirir.

"Hər kəsə salam!" verilişinin nümunəsi. . 686 P. MODEL YAPI, STDCALL. STACK 4096. DATA MB_OK EQU 0 STR 1 DB "Mənim ilk proqramım", 0 STR 2 DB "Hər kəsə salam!", 0 HW DD ? EXTERN mesajı. Qutu. [email protected]: YAXIN. KOD BAŞLAT: PUSH MB_OK PUSH OFFSET STR 1 PUSH OFFSET STR 2 PUSH HW CALL Mesajı. Qutu. [email protected] YENİDƏN SON BAŞLAYIN

INVOKE direktivi MASM dilinin tərcüməçisi həmçinin makro alətdən istifadə etməklə funksiya çağırışını sadələşdirməyə imkan verir - INVOKE direktivi: INVOKE funksiyası, parametr1, parametr2, ... Funksiya çağırışına @16 əlavə etməyə ehtiyac yoxdur; parametrlər tam olaraq funksiyanın təsvirində verildiyi ardıcıllıqla yazılır. tərcüməçi makroları parametrləri yığına itələyir. INVOKE direktivindən istifadə etmək üçün sizdə PROTO direktivindən istifadə edərək funksiya prototipinin təsviri aşağıdakı formada olmalıdır: Mesaj. Qutu. PROTO: DWORD, : DWORD




Üst