Assembly dilinin əsas komponentləri və əmr strukturu. Məlumat formatı və montaj dili təlimat strukturu. Mövzu "Sistem proqramlaşdırması"

Giriş.

Orijinal proqramın yazıldığı dil deyilir giriş dil və onun prosessor tərəfindən icrası üçün tərcümə olunduğu dil - həftə sonu dil. Giriş dilinin çıxış dilinə çevrilməsi prosesi adlanır yayım. Prosessorlar proqramlaşdırma üçün istifadə edilməyən ikili maşın dilində proqramları icra edə bildiyi üçün bütün mənbə proqramların tərcüməsi zəruridir. məlumdur iki yol tərcümələr: tərtib və tərcümə.

At tərtib mənbə proqramı əvvəlcə tam olaraq hədəf dildə ekvivalent proqrama çevrilir, adlanır obyekt proqramı və sonra icra olunur. Bu proses xüsusi istifadə edərək həyata keçirilir proqramlar,çağırdı kompilyator. Giriş dilinin ikili kodların maşın (çıxış) dilinin simvolik təsviri olduğu kompilyator adlanır. montajçı.

At şərhlər mənbə proqram mətninin hər bir sətri təhlil edilir (şərh edilir) və orada göstərilən əmr dərhal yerinə yetirilir. Bu metodun həyata keçirilməsi ilə bağlıdır tərcüməçi proqramı. Tərcümə çox vaxt aparır. Səmərəliliyini artırmaq üçün hər bir sətri emal etmək əvəzinə tərcüməçi ilkin olaraq hamısını çevirir əmr simvollara sətirlər (

). Yaradılmış simvollar ardıcıllığı orijinal proqrama təyin edilmiş funksiyaları yerinə yetirmək üçün istifadə olunur.

Aşağıda müzakirə olunan montaj dili kompilyasiyadan istifadə etməklə həyata keçirilir.

Dilin xüsusiyyətləri.

Assembler əsas xüsusiyyətləri:

● ikili kodlar əvəzinə dil simvolik adlardan istifadə edir - mnemonics. Məsələn, əlavə əmri üçün (

) mnemonic istifadə olunur

Çıxarılmalar (

vurma (

Bölmələr (

s. Yaddaş hüceyrələrinə müraciət etmək üçün simvolik adlar da istifadə olunur. Assembler dilində proqramlaşdırmaq üçün binar kodlar və ünvanlar əvəzinə yalnız assemblerin binar kodlara çevirdiyi simvolik adları bilmək lazımdır;

hər bir ifadə uyğun gəlir bir maşın əmri(kod), yəni montaj dili proqramında maşın təlimatları ilə operatorlar arasında təkbətək yazışma var;

● dil girişi təmin edir bütün obyektlərə və komandalar. Yüksək səviyyəli dillərdə bu qabiliyyət yoxdur. Məsələn, montaj dili bayraq registrinin bitini və yüksək səviyyəli dili yoxlamağa imkan verir (məsələn,

) bu qabiliyyətə malik deyil. Qeyd edək ki, sistem proqramlaşdırma dilləri (məsələn, C) çox vaxt ara mövqe tutur. Əlçatanlıq baxımından onlar assembler dilinə daha yaxındırlar, lakin yüksək səviyyəli dilin sintaksisinə malikdirlər;

● montaj dili universal dil deyil. Mikroprosessorların hər bir xüsusi qrupunun öz assembleri var. Yüksək səviyyəli dillərdə bu çatışmazlıq yoxdur.

Yüksək səviyyəli dillərdən fərqli olaraq, montaj dili proqramının yazılması və sazlanması çox vaxt aparır. Buna baxmayaraq, assembler dilinə çevrildi geniş istifadə aşağıdakı hallara görə:

● Assembly dilində yazılmış proqram yüksək səviyyəli dildə yazılmış proqramdan çox kiçik və çox sürətlidir. Bəzi proqramlar üçün bu göstəricilər əsas rol oynayır, məsələn, bir çox sistem proqramları (tərtibçilər daxil olmaqla), kredit kartlarındakı proqramlar, mobil telefonlar, cihaz sürücüləri və s.;

● bəzi prosedurlar tələb olunur tam giriş yüksək səviyyəli dildə adətən mümkün olmayan aparatlara. Bu işə əməliyyat sistemlərində kəsilmələr və kəsmə işləyiciləri, həmçinin real vaxt rejimində quraşdırılmış sistemlərdə cihaz nəzarətçiləri daxildir.

Əksər proqramlarda ümumi kodun yalnız kiçik bir faizi proqramın icra müddətinin böyük bir hissəsinə cavabdehdir. Tipik olaraq, proqramın 1%-i icra müddətinin 50%-nə, proqramın 10%-i isə icra müddətinin 90%-nə cavabdehdir. Buna görə də, real şəraitdə müəyyən bir proqramı yazmaq üçün həm assembler, həm də yüksək səviyyəli dillərdən biri istifadə olunur.

Assembly dilində operator formatı.

Assembly dili proqramı hər biri ayrıca sətir tutan və dörd sahəni ehtiva edən əmrlərin (ifadələr, cümlələr) siyahısıdır: etiket sahəsi, əməliyyat sahəsi, operand sahəsi və şərh sahəsi. Hər bir sahənin ayrıca sütunu var.

Etiket sahəsi.

Sütun 1 etiket sahəsi üçün ayrılmışdır. Etiket simvolik ad və ya identifikatordur, ünvanlar yaddaş. Bunu bacarmaq üçün lazımdır:

● əmrə şərti və ya qeyd-şərtsiz keçid etmək;

● məlumatların saxlandığı yerə giriş əldə edin.

Bu cür ifadələr etiketlənir. Ad təyin etmək üçün ingilis əlifbasının (böyük) hərflərindən və rəqəmlərdən istifadə olunur. Ad hərflə başlamalı və iki nöqtə ilə bitməlidir. İki nöqtə işarəsi ayrıca sətirdə, əməliyyat kodu isə 2-ci sütunda növbəti sətirdə yazıla bilər ki, bu da tərtibçinin işini asanlaşdırır. İki nöqtənin olmaması etiket və əməliyyat kodunu ayrı-ayrı sətirlərdə olduqda ayırd etməyi qeyri-mümkün edir.

Montaj dilinin bəzi versiyalarında iki nöqtə yalnız təlimat etiketlərindən sonra qoyulur, məlumat etiketlərindən sonra deyil və etiket uzunluğu 6 və ya 8 simvolla məhdudlaşdırıla bilər.

Etiket sahəsində eyni adlar olmamalıdır, çünki etiket əmrlərin ünvanları ilə əlaqələndirilir. Proqramın icrası zamanı yaddaşdan əmr və ya verilənləri çağırmağa ehtiyac yoxdursa, etiket sahəsi boş qalır.

Əməliyyat kodu sahəsi.

Bu sahədə mnemonik və ya psevdokomanda var (aşağıya bax). Komanda mnemonik kodu dil tərtibatçıları tərəfindən seçilir. Assembly dilində

registri yaddaşdan yükləmək üçün seçilmiş mnemonic

) və registrin məzmununu yaddaşda saxlamaq üçün - mnemonika

). Assembly dillərində

hər iki əməliyyat üçün eyni addan istifadə edə bilərsiniz

Mnemonik adların seçimi ixtiyari ola bilərsə, onda iki maşın təlimatından istifadə ehtiyacı prosessor arxitekturası ilə bağlıdır.

Qeydiyyat mnemonikaları həm də assembler versiyasından asılıdır (Cədvəl 5.2.1).

Operand sahəsi.

Burada yerləşir əlavə informasiyaəməliyyatı yerinə yetirmək üçün tələb olunur. Keçmə göstərişləri üçün operandlar sahəsində keçid etmək istədiyiniz ünvan, həmçinin maşın təlimatı üçün operand olan ünvanlar və registrlər göstərilir. Nümunə olaraq, burada 8 bitlik prosessorlar üçün istifadə edilə bilən operandlar verilmişdir

● ədədi məlumat,

müxtəlif say sistemlərində təqdim olunur. İstifadə olunan say sistemini göstərmək üçün sabitdən sonra Latın hərflərindən biri gəlir: B,

Müvafiq olaraq, ikilik, səkkizlik, onaltılıq, onluq say sistemləri (

qeydə alınmaya bilər). Onaltılıq ədədin birinci rəqəmi A, B, C olarsa,

Sonra önə əhəmiyyətsiz bir 0 (sıfır) əlavə olunur;

● mikroprosessorun daxili registrlərinin və yaddaş hüceyrələrinin kodları

M (məlumat mənbələri və ya alıcıları) hərfləri şəklində A, B, C,

M və ya onların istənilən say sistemindəki ünvanları (məsələn, 10V - qeydiyyat ünvanı

ikili sistemdə);

● identifikatorlar,

qeydiyyatdan keçmiş təyyarə cütləri üçün,

İlk hərflər B

H; bir cüt akkumulyator və xüsusiyyət reyestri üçün -

; proqram sayğacı üçün -

; yığın göstəricisi üçün -

● operandların ünvanlarını və ya şərti olaraq növbəti təlimatları göstərən etiketlər

(şərt yerinə yetirildikdə) və qeyd-şərtsiz keçidlər. Məsələn, komandada M1 operandını

etiket sahəsində ünvanı M1 identifikatoru ilə qeyd olunan əmrə qeyd-şərtsiz keçid ehtiyacını bildirir;

● ifadələr,

arifmetik və məntiqi operatorlardan istifadə edərək yuxarıda müzakirə olunan məlumatları birləşdirərək qurulur. Nəzərə alın ki, məlumat sahəsinin saxlanma üsulu dilin versiyasından asılıdır. Assembly dili tərtibatçıları üçün

Söz təyin et) və sonradan təqdim edildi Alternativ variant.

ki, əvvəldən prosessorlar üçün dildə idi

Dil versiyasında

istifadə olunur

sabiti təyin edin).

Prosessorlar müxtəlif uzunluqlu operandları emal edir. Bunu müəyyən etmək üçün assembler tərtibatçıları müxtəlif qərarlar qəbul etdilər, məsələn:

Müxtəlif uzunluqlu II registrlərin müxtəlif adları var: EAX - 32 bitlik operandların yerləşdirilməsi üçün (növ

); AX - 16 bit üçün (növ

və AN - 8 bit üçün (növ

● prosessorlar üçün

hər bir əməliyyat koduna şəkilçilər əlavə olunur: şəkilçi

Növ üçün

; növü üçün ".B" şəkilçisi

müxtəlif uzunluqlu operandlar üçün müxtəlif əməliyyat kodları istifadə olunur, məsələn, bayt, yarım söz yükləmək üçün (

) və 64 bitlik registrdəki sözlər əməliyyat kodlarından istifadə edir

müvafiq olaraq.

Şərhlər sahəsi.

Bu sahədə proqramın hərəkətləri haqqında izahatlar verilir. Şərhlər proqramın işinə təsir etmir və bir şəxs üçün nəzərdə tutulub. Bu cür şərhlər olmadan hətta təcrübəli proqramçılar üçün tamamilə anlaşılmaz ola biləcək proqramı dəyişdirmək üçün onlara ehtiyac ola bilər. Şərh simvolla başlayır və proqramları izah etmək və sənədləşdirmək üçün istifadə olunur. Şərhin başlanğıc simvolu ola bilər:

● şirkətin prosessorları üçün dillərdə nöqtəli vergül (;).

Nida işarəsi(!) üçün dillərdə

Şərh üçün ayrılmış hər bir ayrıca sətirdən əvvəl başlanğıc simvolu gəlir.

Pseudo əmrlər (direktivlər).

Assembly dilində əmrlərin iki əsas növünü ayırd etmək olar:

əsas prosessorun maşın koduna ekvivalent olan təlimatlar. Bu əmrlər proqram tərəfindən təmin edilən bütün emalları yerinə yetirir;

yalançı əmrlər və ya direktivlər, proqramın kod birləşmələri dilinə tərcüməsi prosesinə xidmət etmək üçün nəzərdə tutulmuşdur. Nümunə olaraq, Cədvəldə. 5.2.2 as-assemblerdən bəzi psevdokomandaları göstərir

ailə üçün

.

Proqramlaşdırma zamanı elə hallar olur ki, alqoritmə görə eyni əmrlər silsiləsi dəfələrlə təkrar olunmalıdır. Bu vəziyyətdən çıxmaq üçün aşağıdakıları edə bilərsiniz:

● baş verən zaman istədiyiniz əmrlər ardıcıllığını yazın. Bu yanaşma proqramın həcminin artmasına səbəb olur;

● bu ardıcıllığı prosedura (alt proqrama) düzün və lazım olduqda onu çağırın. Belə bir çıxışın çatışmazlıqları var: hər dəfə xüsusi prosedur çağırış təlimatını və qısa və tez-tez istifadə olunan ardıcıllıqla proqramın sürətini xeyli azalda bilən qaytarma təlimatını yerinə yetirməli olursunuz.

Ən sadə və təsirli üsuləmrlər zəncirinin təkrar təkrarı istifadə etməkdir makro, proqramda tez-tez rast gəlinən bir qrup əmrləri yenidən tərcümə etmək üçün nəzərdə tutulmuş psevdokomanda kimi düşünülə bilər.

Makro və ya makro təlimat üç aspektlə xarakterizə olunur: makro tərif, makro inversiya və makro genişlənmə.

makro tərifi

Bu proqram mətnində istinadlar üçün istifadə olunan proqram əmrlərinin dəfələrlə təkrarlanan ardıcıllığı üçün təyinatdır.

Makro aşağıdakı quruluşa malikdir:

İfadələrin siyahısı; makro tərifi

Yuxarıdakı makro tərif strukturunun üç hissəsi var:

● başlıq

adını ehtiva edən makro

Pseudo-əmr

və bir sıra parametrlər;

● nöqtəli bədən makro;

● komanda

məzuniyyət

makro təriflər.

Makro parametrlər dəsti seçilmiş təlimat qrupu üçün operand sahəsində verilmiş bütün parametrlərin siyahısını ehtiva edir. Əgər bu parametrlər proqramda daha əvvəl verilmişdirsə, onda onlar makro tərifinin başlığında buraxıla bilər.

Seçilmiş təlimatlar qrupunun yenidən yığılması üçün addan ibarət zəng istifadə olunur

digər dəyərlərlə makro və parametrlər siyahısı.

Kompilyasiya zamanı assembler makro tərifi ilə qarşılaşdıqda onu makro təriflər cədvəlində saxlayır. Adın proqramında sonrakı çıxışları ilə (

) makronun gövdəsi ilə assembler onu əvəz edir.

Makro adının əməliyyat kodu kimi istifadə edilməsi deyilir makro tərs(makros zəng) və onun makronun gövdəsi ilə əvəz edilməsi - makro genişlənməsi.

Proqram simvollar ardıcıllığı (hərflər, rəqəmlər, boşluqlar, durğu işarələri və yeni sətirə keçmək üçün daşınma qayıdır) kimi təqdim edilirsə, makro genişlənmə bu ardıcıllığın bəzi sətirlərinin digər sətirlərlə əvəz edilməsindən ibarətdir.

Makro genişlənməsi proqramın icrası zamanı deyil, montaj prosesi zamanı baş verir. Simvol sətirlərini manipulyasiya etmək yolları təyin olunur makro alətlər.

Quraşdırma prosesi həyata keçirilir iki keçiddə:

● İlk keçiddə bütün makro təriflər saxlanılır və makro zənglər genişləndirilir. Bu halda, mənbə proqramı oxunur və bütün makro təriflərin çıxarıldığı proqrama çevrilir və hər bir makro çağırışı makro gövdəsi ilə əvəz olunur;

● İkinci keçid qəbul edilmiş proqramı makrosuz emal edir.

Parametrləri olan makrolar.

Parametrləri müxtəlif dəyərlər ala bilən əmrlərin təkrarlanan ardıcıllığı ilə işləmək üçün makro təriflər verilir:

● ilə faktiki makro çağırışın operand sahəsinə yerləşdirilən parametrlər;

● ilə formal parametrlər. Makro genişləndirmə zamanı makronun gövdəsində görünən hər bir formal parametr müvafiq faktiki parametrlə əvəz olunur.

parametrləri olan makrolardan istifadə.

Proqram 1 iki oxşar əmr ardıcıllığını göstərir, onlardan birincisi P və P-ni dəyişdirməsi ilə fərqlənir.

Və ikinci

2-ci proqrama P1 və P2 iki formal parametrləri olan makro daxildir. Makro genişləndirmə zamanı makro gövdə daxilindəki hər bir P1 simvolu birinci faktiki parametrlə (P,

) və P2 simvolu ikinci faktiki parametr ilə əvəz olunur (

) 1 nömrəli proqramdan. Makro çağırışda

proqram 2 qeyd olunur: P,

İlk faktiki parametr,

İkinci faktiki parametr.

Proqram 1

Proqram 2

MOV EBX,Q MOV EAX,Pl

MOV Q,EAX MOV EBX,P2

MOV P,EBX MOV P2,EAX

Genişləndirilmiş imkanlar.

Dilin bəzi inkişaf etmiş xüsusiyyətlərini nəzərdən keçirin

Şərti budaq təlimatı və keçid üçün etiketdən ibarət makro iki və ya daha çox dəfə çağırılarsa, etiket dublikatlanacaq (etiketin təkrarlanması problemi), bu da xətaya səbəb olacaq. Buna görə də, hər bir zəngə (proqramçı tərəfindən) parametr kimi ayrıca etiket verilir. Dildə

etiket yerli elan edilir (

) və təkmil funksiyalar sayəsində assembler hər dəfə makro genişləndirildikdə avtomatik olaraq fərqli etiket yaradır.

digər makrolar daxilində makroları müəyyən etməyə imkan verir. Bu inkişaf etmiş xüsusiyyət şərti proqram əlaqələndirilməsi ilə birlikdə çox faydalıdır. düşünün

IF WORDSIZE GT 16 M2 MAKRO

Makro M2 ifadənin hər iki hissəsində müəyyən edilə bilər

Bununla belə, tərif proqramın 16 bitlik və ya 32 bitlik prosessorda yığılmasından asılıdır. M1 çağırılmırsa, M2 makrosu ümumiyyətlə müəyyən edilməyəcək.

Başqa bir inkişaf etmiş xüsusiyyət odur ki, makrolar özləri də daxil olmaqla digər makroları çağıra bilər - rekursiv zəng edin. Sonuncu halda, sonsuz döngədən qaçmaq üçün makro özünə hər genişlənmə ilə dəyişən bir parametr ötürməlidir və həmçinin yoxlayın bu parametr və parametr müəyyən bir dəyərə çatdıqda rekursiyanı bitir.

Assemblerdə makroların istifadəsi haqqında.

Makroslardan istifadə edərkən assembler iki funksiyanı yerinə yetirə bilməlidir: makro tərifləri yadda saxlayınmakro zəngləri genişləndirin.

Makro təriflərin saxlanması.

Bütün makro adları cədvəldə saxlanılır. Hər bir ad müvafiq makroya bir göstərici ilə müşayiət olunur ki, lazım olduqda onu çağırmaq olar. Bəzi assemblerlərdə makro adları üçün ayrıca cədvəl var, digərlərində makro adları ilə yanaşı, bütün maşın əmrləri və direktivləri olan ümumi cədvəl var.

Montaj zamanı makro ilə qarşılaşdıqda yaradılmışdır:

yeni masa elementi makronun adı, parametrlərin sayı və makro gövdəsinin saxlanacağı başqa bir makro təyini cədvəlinə göstərici ilə;

● siyahı formal parametrlər.

Sadəcə simvollar silsiləsi olan makronun gövdəsi sonra oxunur və makro təriflər cədvəlində saxlanılır. Döngə gövdəsində baş verən formal parametrlər qeyd olunur xüsusi xarakter.

Makronun daxili təmsili

2-ci proqram üçün yuxarıdakı nümunədən (səh. 244) belədir:

MOV EAX, MOV EBX, MOV MOV &

burada nöqtəli vergül daşınma qayıdış simvolu kimi, & işarəsi isə formal parametr simvolu kimi istifadə olunur.

Makro zəng uzadılması.

Quraşdırma zamanı makro tərifi ilə qarşılaşdıqda, o, makro cədvəlində saxlanılır. Makro çağırılanda assembler daxiletmə qurğusundan daxilolma məlumatlarının oxunmasını müvəqqəti dayandırır və saxlanılan makro gövdəsini oxumağa başlayır. Makro gövdədən çıxarılan formal parametrlər faktiki parametrlərlə əvəz olunur və çağırışla təmin edilir. Parametrlərin qarşısında və işarəsi assemblerə onları tanımağa imkan verir.

Assemblerin bir çox versiyaları olmasına baxmayaraq, montaj prosesləri ümumi xüsusiyyətlərə malikdir və bir çox cəhətdən oxşardır. İki keçidli montajçının işi aşağıda nəzərdən keçirilir.

İki keçidli montajçı.

Proqram bir sıra operatorlardan ibarətdir. Buna görə də, montaj zamanı aşağıdakı hərəkət ardıcıllığından istifadə edilə biləcəyi görünür:

● onu maşın dilinə çevirmək;

● alınan maşın kodunu fayla, siyahının müvafiq hissəsini isə başqa fayla köçürmək;

● bütün proqram yayımlanana qədər yuxarıdakı prosedurları təkrarlayın.

Lakin bu yanaşma səmərəli deyil. Məsələn, sözdə problemdir aparıcı keçid.Əgər birinci ifadə proqramın ən sonundakı P ifadəsinə keçiddirsə, o zaman assembler onu tərcümə edə bilməz. O, əvvəlcə P operatorunun ünvanını müəyyən etməlidir və bunun üçün bütün proqramı oxumaq lazımdır. Orijinal proqramın hər bir tam oxunması deyilir keçid.İki keçiddən istifadə edərək irəli istinad problemini necə həll edə biləcəyimizi göstərək:

ilk keçiddə toplamaq və bütün simvol təriflərini (etiketlər daxil olmaqla) cədvəldə saxlayın və ikinci keçiddə hər bir operatoru oxuyun və yığın. Bu üsul nisbətən sadədir, lakin orijinal proqramdan ikinci keçid əlavə I/O vaxtını tələb edir;

● ilk keçiddə, çevirmək proqramı aralıq formaya salın və cədvəldə qeyd edin və ikinci keçid ilkin proqrama uyğun deyil, cədvələ uyğun olaraq həyata keçirilir. Bu montaj üsulu vaxta qənaət edir, çünki ikinci keçiddə heç bir giriş/çıxış əməliyyatı aparılmır.

İlk keçid.

İlk keçidin məqsədi- simvol cədvəli qurmaq. Yuxarıda qeyd edildiyi kimi, ilk keçidin başqa bir məqsədi bütün makro tərifləri saxlamaq və zəngləri göründükləri kimi genişləndirməkdir. Buna görə də, həm xarakter tərifi, həm də makro genişlənməsi eyni keçiddə baş verir. Simvol ya ola bilər etiket, və ya məna,-you direktivindən istifadə edərək xüsusi bir ad təyin edilir:

;Dəyər - bufer ölçüsü

Təlimat etiketi sahəsində simvolik adlara məna verməklə, assembler mahiyyətcə proqramın icrası zamanı hər bir təlimatın malik olacağı ünvanları təyin edir. Bunun üçün montaj prosesi zamanı assembler qənaət edir təlimat ünvanı sayğacı(

) xüsusi dəyişən kimi. Birinci keçidin əvvəlində xüsusi dəyişənin qiyməti 0-a təyin edilir və bu əmrin uzunluğu ilə işlənmiş hər bir əmrdən sonra artırılır. Nümunə olaraq, Cədvəldə. 5.2.3 əmrlərin uzunluğunu və sayğac qiymətlərini göstərən proqram fraqmentini göstərir. Cədvəllər ilk keçid zamanı yaradılır simvol adları, direktivlərəməliyyat kodları, və lazım olduqda hərfi masa. Literal, assemblerin avtomatik yaddaş saxladığı sabitdir. Dərhal qeyd edirik ki, müasir prosessorlarda birbaşa ünvanları olan təlimatlar var, buna görə də onların assemblerləri literalları dəstəkləmir.

Simvol cədvəli

hər ad üçün bir elementdən ibarətdir (Cədvəl 5.2.4). Simvol cədvəlinin hər bir elementi adın özünü (və ya onun göstəricisini), onun ədədi dəyərini və bəzən bəzi əlavə məlumatları ehtiva edir, bunlara aşağıdakılar daxil ola bilər:

● simvolla əlaqəli məlumat sahəsinin uzunluğu;

● yaddaşın remapping bitləri (proqram assemblerin nəzərdə tutulduğundan fərqli ünvanda yükləndikdə simvolun qiymətinin dəyişib-dəyişmədiyini göstərir);

● simvola prosedurdan kənardan daxil olmaq mümkün olub-olmaması haqqında məlumat.

Simvolik adlar etiketlərdir. Onlar operatorlar vasitəsilə müəyyən edilə bilər (məsələn,

Direktivlər cədvəli.

Bu cədvəl proqramın yığılması zamanı baş verən bütün direktivləri və ya psevdo-əmrləri sadalayır.

Əməliyyat kodu cədvəli.

Hər bir əməliyyat kodu üçün cədvəldə ayrıca sütunlar var: əməliyyat kodunun təyinatı, operand 1, operand 2, əməliyyat kodunun onaltılıq dəyəri, təlimatın uzunluğu və təlimat növü (Cədvəl 5.2.5). Əməliyyat kodları operandların sayına və növünə görə qruplara bölünür. Komanda növü qrup nömrəsini təyin edir və həmin qrupdakı bütün əmrləri emal etmək üçün çağırılan proseduru təyin edir.

İkinci keçid.

İkinci keçidin məqsədi- obyekt proqramının yaradılması və zəruri hallarda montaj protokolunun çap edilməsi; müxtəlif vaxtlarda yığılmış prosedurları bir icra edilə bilən faylda əlaqələndirmək üçün əlaqələndiriciyə lazım olan çıxış məlumatı.

İkinci keçiddə (birinci keçiddə olduğu kimi) ifadələri ehtiva edən sətirlər bir-birinin ardınca oxunur və işlənir. Orijinal operator və ondan onaltılıq sistemdə alınan nəticə obyekt kod çap oluna və ya daha sonra çap üçün bufer edilə bilər. Komanda ünvanı sayğacını sıfırladıqdan sonra əmr çağırılır növbəti bəyanat.

Orijinal proqramda səhvlər ola bilər, məsələn:

verilmiş simvol müəyyən edilmədikdə və ya bir dəfədən çox müəyyən edilmədikdə;

● Əməliyyat kodu etibarsız adla (yazı səhvinə görə) təmsil olunub, kifayət qədər operandlarla təmin edilməyib və ya çoxlu operandlara malikdir;

● operator yoxdur

Bəzi montajçılar qeyri-müəyyən simvolu aşkar edib onu əvəz edə bilər. Bununla belə, əksər hallarda xətalı ifadə aşkar edildikdə, assembler ekranda səhv mesajı göstərir və montaj prosesini davam etdirməyə çalışır.

Assambleya dilinə həsr olunmuş məqalələr.

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 CPU və işləyən yaddaş. 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ə yığınla işləmək üçün xüsusi əmrlər, mikroprosessor proqram modelində isə bunun üçün xüsusi registrlər 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. üçün praktik istifadə 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:

Hamı məktublar: 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

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 uzunluq identifikator 255 simvol, lakin tərcüməçi ilk 32-ni qəbul edir, qalanları nəzərə alınmı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.

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 ola bilər proqram seqmentləri, verilənlər və stek seqmentləri müvafiq direktivlərdən istifadə edilərək elan edilir.

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, belə ki, 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 sonu işarələyən END direktivi olmalıdır mənbə kodu proqramlar. 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

Mövzu 2.5 Prosessor proqramlaşdırmasının əsasları

Proqramın uzunluğu artdıqca müxtəlif əməliyyatlar üçün kodları yadda saxlamaq çətinləşir. Mnemonika bu məsələdə müəyyən köməklik göstərir.

Simvolik təlimat kodlaşdırma dili adlanır montajçı.

montaj dili hər bir ifadənin tam olaraq bir maşın təlimatına uyğun olduğu bir dildir.

Məclis proqramı assembler dilindən çevirmək, yəni əməliyyatların simvolik adlarını maşın kodları ilə, simvolik ünvanları mütləq və ya nisbi ədədlərlə əvəz etməklə maşın dilində proqram hazırlamaq, o cümlədən kitabxana proqramlarını daxil etmək və xüsusi parametrləri göstərməklə simvolik göstərişlərin ardıcıllığını yaratmaq adlanır. mikro göstərişlərdə. Bu proqram adətən ROM-a yerləşdirilir və ya hansısa xarici mühitdən RAM-a daxil edilir.

Assembly dili onu yüksək səviyyəli dillərdən fərqləndirən bir sıra xüsusiyyətlərə malikdir:

1. Bu, assembler dilinin ifadələri və maşın təlimatları arasında bir-bir yazışmadır.

2. Assembly dili proqramçısının hədəf maşında mövcud olan bütün obyektlərə və əmrlərə çıxışı var.

Maşın yönümlü dillərdə proqramlaşdırmanın əsaslarını başa düşmək aşağıdakılar üçün faydalıdır:



PC arxitekturasını daha yaxşı başa düşmək və kompüterlərdən daha yaxşı istifadə etmək;

Tətbiqi məsələlərin həlli üçün proqramlar üçün alqoritmlərin daha rasional strukturlarını hazırlamaq;

İstənilən yüksək səviyyəli dillərdən tərtib edilmiş .exe və .com uzantılı icra edilə bilən proqramlara baxmaq və onları düzəltmək imkanı, mənbə proqramları itirildikdə (bu proqramları DEBUG proqram sazlayıcısına çağırmaqla və onların displeyini montaj dilində dekompilyasiya etməklə) );

Ən kritik vəzifələrin həlli üçün proqramların tərtibi (maşın yönümlü dildə tərtib edilmiş proqram adətən daha səmərəlidir - yüksək səviyyəli dillərdən tərcümə nəticəsində əldə edilən proqramlardan 30-60 faiz daha qısa və daha sürətli)

Əsas proqrama ayrıca fraqmentlər kimi daxil edilmiş prosedurların həm yüksək səviyyəli dildə, həm də ƏS xidmət prosedurlarından istifadə etməklə həyata keçirilməsi mümkün olmadıqda həyata keçirilməsi üçün.

Assembly dili proqramı yalnız eyni ailənin kompüterlərində işləyə bilər, yüksək səviyyəli dildə yazılmış proqram isə potensial olaraq müxtəlif maşınlarda işləyə bilər.

Assembly dili əlifbası ASCII simvollarından ibarətdir.

Rəqəmlər yalnız tam ədədlərdir. Fərqləndirin:

B hərfi ilə bitən ikili nömrələr;

D ilə bitən onluq ədədlər;

N hərfi ilə bitən onaltılıq nömrələr.

ram, registrlər, məlumatların təqdimatı

Müəyyən bir sıra millət vəkilləri üçün fərdi proqramlaşdırma dili istifadə olunur - montaj dili.

Assembly dili maşın kodları və yüksək səviyyəli dillər arasında aralıq mövqe tutur. Bu dildə proqramlaşdırma daha asandır. Assembly dili proqramı yüksək səviyyəli dildə olan proqramdan (bu, proqramçı üçün assemblerdən daha asandır) müəyyən maşının (daha doğrusu, MP) imkanlarından daha rasional istifadə edir. Nümunə olaraq MP KR580VM80 üçün montaj dilindən istifadə edərək maşın yönümlü dillərdə proqramlaşdırmanın əsas prinsiplərini nəzərdən keçirəcəyik. Dildə proqramlaşdırma üçün ümumi bir texnikadan istifadə olunur. Proqramları qeyd etmək üçün xüsusi üsullar hədəf MP-nin arxitekturası və komanda sistemi xüsusiyyətləri ilə bağlıdır.

Proqram təminatı modeli MP KR580VM80 əsasında mikroprosessor sistemi

Şəkil 1-ə uyğun olaraq MPS-nin proqram modeli

MP Port Yaddaş

S Z AC P C

Şəkil 1

Proqramçının nöqteyi-nəzərindən KR580VM80 MP-də proqram üçün əlçatan olan aşağıdakı registrlər var.

– 8 bitlik akkumulyator reyestri. O, deputatın əsas reyestridir. ALU-da yerinə yetirilən istənilən əməliyyat emal ediləcək operandlardan birinin akkumulyatora yerləşdirilməsini nəzərdə tutur. ALU-da əməliyyatın nəticəsi də adətən A-da saxlanılır.

B, C, D, E, H, L– 8 bitlik ümumi təyinatlı registrlər (RON). Daxili yaddaş millət vəkili. İşlənmiş məlumatları, eləcə də əməliyyatın nəticələrini saxlamaq üçün nəzərdə tutulmuşdur. Registrlərdən 16 bitlik sözləri emal edərkən BC, DE, HL cütləri əmələ gəlir və ikili registr birinci hərf - B, D, H adlanır. Registr cütlüyündə birinci registr ən yüksəkdir. Həm məlumatların saxlanması, həm də RAM hüceyrələrinin 16 bitlik ünvanlarının saxlanması üçün istifadə olunan H, L registrləri xüsusi xüsusiyyətə malikdir.

FL– bayraq registri (xüsusiyyət registri) MP-də arifmetik və məntiqi əməliyyatların yerinə yetirilməsi nəticəsinin beş xüsusiyyətini saxlayan 8 bitlik registr. Şəkilə uyğun olaraq FL formatı

Bit C (CY - daşıma) - daşıma, arifmetik əməliyyatları yerinə yetirərkən baytın yüksək ardıcıllığından daşıma varsa, 1-ə təyin edilir.

Bit P (paritet) - paritet, nəticənin bitlərindəki vahidlərin sayı cüt olduqda 1-ə təyin edilir.

AC biti əlavə daşımadır, nəticənin aşağı tetradından daşınma dəyərini saxlamaq üçün nəzərdə tutulmuşdur.

Bit Z (sıfır) - əməliyyatın nəticəsi 0 olarsa, 1-ə təyin edin.

Nəticə mənfi olarsa, S (işarəsi) biti 1-ə, müsbət olduqda isə 0-a təyin edilir.

SP-- stek göstəricisi, 16 bitlik registr, stekə daxil edilmiş sonuncu baytın yazıldığı yaddaş yerinin ünvanını saxlamaq üçün nəzərdə tutulmuşdur.

RS– növbəti icra olunan təlimatın ünvanını saxlamaq üçün nəzərdə tutulmuş proqram sayğacı (proqram sayğacı), 16 bitlik registr. Növbəti təlimat baytı götürüldükdən dərhal sonra proqram sayğacının məzmunu avtomatik olaraq 1 artır.

0000H - 07FF ünvanının ilkin yaddaş sahəsində yerləşir nəzarət proqramı və demo proqramlar. Bu ROM sahəsidir.

0800 - 0AFF - öyrənilən proqramların qeydiyyatı üçün ünvan sahəsi. (RAM).

0В00 - 0ВВ0 - məlumatların yazılması üçün ünvan sahəsi. (RAM).

0BB0 yığının başlanğıc ünvanıdır. (RAM).

Stack məlumatların və ya ünvanların müvəqqəti saxlanması üçün nəzərdə tutulmuş xüsusi təşkil edilmiş RAM sahəsidir. Yığına atılan son nömrə yığından çıxarılan ilk nömrədir. Yığın göstəricisi məlumatın saxlandığı son yığın yerinin ünvanını saxlayır. Alt proqram çağırıldıqda, əsas proqrama qayıdış ünvanı avtomatik olaraq yığında saxlanılır. Bir qayda olaraq, hər bir alt proqramın əvvəlində onun icrasında iştirak edən bütün registrlərin məzmunu stekdə saxlanılır, alt proqramın sonunda isə stekdən bərpa olunur.

Assembly Language Data Format və Komanda Strukturu

Yaddaş MP KR580VM80 bayt adlanan 8 bitlik sözlərdən ibarət massivdir.Hər baytın yaddaş xanalarının ardıcıllığında yerini təyin edən öz 16 bitlik ünvanı var. MP həm ROM, həm də RAM ehtiva edən 65536 bayt yaddaşa müraciət edə bilər.

Məlumat formatı

Məlumat yaddaşda 8 bitlik sözlər şəklində saxlanılır:

D7 D6 D5 D4 D3 D2 D1 D0

Ən az əhəmiyyətli bit bit 0, ən əhəmiyyətli bit bit 7-dir.

Əmr formatı ilə xarakterizə olunur, yəni onun üçün ayrılmış bitlərin sayı bayt-bayt müəyyən funksional sahələrə bölünür.

Komanda formatı

MP KR580VM80 əmrləri bir, iki və ya üç baytlıq formata malikdir. Çox baytlı təlimatlar qonşu PL-lərə yerləşdirilməlidir. Komandanın formatı yerinə yetirilən əməliyyatın xüsusiyyətlərindən asılıdır.

Komandanın birinci baytı mnemonik formada yazılmış əməliyyat kodunu ehtiva edir.

O, əmrin formatını və onun icrası zamanı verilənlər üzərində MP-nin yerinə yetirməli olduğu hərəkətləri və ünvanlanma üsulunu müəyyən edir, həmçinin verilənlərin yerləşdiyi yer haqqında məlumatları ehtiva edə bilər.

İkinci və üçüncü baytlarda əməliyyat ediləcək verilənlər və ya verilənlərin yerini göstərən ünvanlar ola bilər. Əməliyyatların yerinə yetirildiyi məlumatlara operandlar deyilir.

Şəkil 2-ə uyğun olaraq tək baytlı əmr formatı

Şəkil 4

Assembly dili təlimatlarında opcode ingiliscə sözlərin qısaldılmış yazılış formasına malikdir - mnemonik notasiya. Mnemonika (yunan dilindən mnemonic - əzbərləmə sənəti) funksional təyinatına görə əmrləri yadda saxlamağı asanlaşdırır.

İcra etməzdən əvvəl mənbə proqram assembler adlanan tərcümə proqramı vasitəsilə kod kombinasiyalarının dilinə - maşın dilinə tərcümə olunur, bu formada MP-nin yaddaşına yerləşdirilir və sonra əmri yerinə yetirərkən istifadə olunur.


Ünvanlama üsulları

Bütün operand kodları (giriş və çıxış) haradasa yerləşməlidir. Onlar deputatın daxili registrlərində ola bilər (ən rahat və sürətli seçim). Onlar sistem yaddaşında yerləşdirilə bilər (ən ümumi seçim). Nəhayət, onlar I / O cihazlarında ola bilər (ən nadir hal). Operandların yeri təlimat kodu ilə müəyyən edilir. Mövcüd olmaq müxtəlif üsullar, bunun vasitəsilə təlimat kodu giriş operandının hara götürüləcəyini və çıxış operandının hara qoyulacağını müəyyən edə bilər. Bu üsullara ünvanlama metodları deyilir.

MP KR580VM80 üçün aşağıdakı ünvanlama üsulları mövcuddur:

Dərhal;

Qeydiyyatdan keçmək;

dolayı;

Yığın.

Dərhal ünvanlama operandın (girişin) təlimat kodundan dərhal sonra yaddaşda olmasını nəzərdə tutur. Operand adətən sabitdir ki, onu harasa göndərmək, nəyəsə əlavə etmək lazımdır və s. verilənlər komandanın ikinci və ya ikinci və üçüncü baytlarında yerləşir, verilənlərin aşağı baytı ikinci komanda baytında, məlumat baytı isə yüksəkdir. üçüncü əmr baytında.

Düz (aka mütləq) ünvanlama operandın (giriş və ya çıxış) yaddaşda kodunun təlimat kodundan dərhal sonra proqram daxilində yerləşdiyi ünvanda yerləşdiyini nəzərdə tutur. Üç baytlıq əmrlərdə istifadə olunur.

Qeydiyyatdan keçin ünvanlama operandın (giriş və ya çıxış) daxili MP registrində olmasını nəzərdə tutur. Tək bayt əmrlərində istifadə olunur

dolayı (qeyri-müəyyən) ünvanlama MP-nin daxili registrinin operandın özü deyil, onun yaddaşdakı ünvanını nəzərdə tutur.

Yığın ünvanlama əmrin ünvana malik olmadığını güman edir. Yaddaş hüceyrələrinə 16 bitlik SP registrinin məzmunu ilə ünvanlanması (stack göstəricisi).

Komanda sistemi

MP komanda sistemi MP-nin yerinə yetirə bildiyi elementar hərəkətlərin tam siyahısıdır. Bu əmrlərlə idarə olunan MP elementar arifmetik və məntiqi əməliyyatlar, məlumatların ötürülməsi, iki dəyərin müqayisəsi və s. kimi sadə hərəkətləri yerinə yetirir. MP KR580VM80-in əmrlərinin sayı 78-dir (244 modifikasiya daxil olmaqla).

Aşağıdakı komanda qrupları var:

Məlumat ötürülməsi;

arifmetik;

Zeka oyunu;

Atlama əmrləri;

Giriş-çıxış, idarəetmə və yığınla işləmək üçün əmrlər.


Əmrlərin təsvirində və proqramların yazılmasında istifadə olunan simvollar və abbreviaturalar

Simvol Azaldılması
ADDR 16 bitlik ünvan
DATA 8 bitlik məlumat
DATA 16 16 bit məlumat
PORT 8 bitlik giriş/çıxış ünvanı (giriş/çıxış cihazları)
BYTE 2 İkinci əmr baytı
BAYT 3 Üçüncü əmr baytı
R, R1, R2 Registrlərdən biri: A, B, C, D, E, H, L
RP Reyestr cütlərindən biri: B - təyyarə cütünü təyin edir; D - bir cüt DE təyin edir; H - HL cütünü təyin edir
RH Cütlüyün ilk reyestri
RL Cütlüyün ikinci reyestri
Λ Boole çarpması
V Boolean əlavəsi
Modul iki əlavə
M Ünvanı HL registr cütünün məzmununu təyin edən yaddaş hüceyrəsi, yəni M = (HL)



Üst