Assembly dilinin əsas komponentləri və təlimat strukturu. Məlumat formatı və assembler dili əmrlərinin strukturu. “Sistem proqramlaşdırması” fənni üzrə

Giriş.

Mənbə proqramın yazıldığı dil deyilir giriş dil və onun prosessor tərəfindən icrası üçün tərcümə olunduğu dildir istirahət günlərində 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 verilişlər: tərtib və şərh.

At tərtib mənbə proqramı əvvəlcə tam olaraq çıxış dilində 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ış) dilini təmsil edən simvolik forması olan kompilyator adlanır. montajçı.

At şərhlər Mənbə proqramında mətnin 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 ona həvalə olunur tərcüməçi proqramı. Tərcümə çox vaxt aparır. Səmərəliliyini artırmaq üçün tərcüməçi hər bir sətri emal etmək əvəzinə əvvəlcə hamısını çevirir komanda 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.

assemblerin əsas xüsusiyyətləri:

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

) mnemonikadan 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ə sadəcə 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 əmrləri 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 bitlərini və yüksək səviyyəli dili (məsələn,

) bu qabiliyyətə malik deyil. Qeyd edək ki, sistem proqramlaşdırma dilləri (məsələn, C) tez-tez aralıq 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, proqramın assembler dilində yazılması və sazlanması çox vaxt aparır. Buna baxmayaraq, montaj dili qəbul edildi geniş istifadə aşağıdakı hallara görə:

● assembler dilində yazılmış proqram ölçüsünə görə əhəmiyyətli dərəcədə kiçikdir və yüksək səviyyəli dildə yazılmış proqramdan çox daha sürətli işləyir. 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 kartı proqramları, mobil telefonlar, cihaz sürücüləri və s.;

● bəzi prosedurlar tələb olunur tam giriş adətən yüksək səviyyəli dildə etmək 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 quraşdırılmış real vaxt sistemlərində 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 edə bilmək üçün lazımdır:

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

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

Bu cür ifadələr etiketlə təmin edilir. Adı göstərmək üçün ingilis əlifbasının (böyük) hərflərindən və rəqəmlərdən istifadə olunur. Adın əvvəlində hərf və sonunda iki nöqtə ayırıcı olmalıdır. İki nöqtə etiketi 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ı etiketi ayrı-ayrı sətirlərdə yerləşdiyi təqdirdə əməliyyat kodundan ayırmağa imkan vermir.

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ə etiketin uzunluğu 6 və ya 8 simvolla məhdudlaşdırıla bilər.

Etiket sahəsində eyni adlar olmamalıdır, çünki etiket əmr ü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ə əmr və ya psevdo-əmr üçün mnemonik kod var (aşağıya bax). Komanda mnemonik kodu dil tərtibatçıları tərəfindən seçilir. Assembly dilində

yaddaşdan registr yükləmək üçün mnemonic seçilir

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

). Assembly dillərində

hər iki əməliyyat üçün müvafiq olaraq 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ə müəyyən edilir.

Registrlərin mnemonikası 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 lazımdır. Atlama əmrləri üçün operand sahəsində keçidin edilməli olduğu ünvan, həmçinin maşın əmri üçün operand olan ünvanlar və registrlər göstərilir. Nümunə olaraq 8 bitlik prosessorlar üçün istifadə oluna bilən operandları veririk

● ə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 (

Bunu yazmağa ehtiyac yoxdur). 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;

● daxili mikroprosessor 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, 10B - qeydiyyat ünvanı

ikili sistemdə);

● identifikatorlar,

təyyarələrin qeydiyyatı üçün,

İlk hərflər B,

N; 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 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ə etməklə yuxarıda müzakirə olunan məlumatları birləşdirərək qurulur. Nəzərə alın ki, məlumat sahəsinin rezervasiya üsulu dil versiyasından asılıdır. Assembly dili tərtibatçıları üçün

Sözü təyin edin) və sonra daxil edildi Alternativ variant.

əvvəldən prosessorlar üçün dildə olan

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ə sözləri əməliyyat kodlarından istifadə edərək 64 bitlik registrə daxil edin

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ə insanlar üçü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ən proqramı dəyişdirmək üçün onlar lazım 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 xarakteri ola bilər:

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

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

Hər bir ayrıca şərh sətirindən əvvəl aparıcı simvol qoyulur.

Pseudo-əmrlər (direktivlər).

Assembly dilində əmrlərin iki əsas növü var:

əsas prosessor maşın koduna ekvivalent olan təlimatlar. Bu əmrlər proqramın nəzərdə tutduğu bütün emalları yerinə yetirir;

yalançı əmrlər və ya direktivlər, proqramın kod kombinasiyası dilinə tərcüməsi prosesinə xidmət etmək üçün nəzərdə tutulmuşdur. Cədvəldə nümunə olaraq. 5.2.2 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 tələb olunan ə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. Bu çıxışın çatışmazlıqları var: hər dəfə xüsusi prosedur çağırış əmrini və ardıcıllıq qısa və tez-tez istifadə olunarsa, proqramın sürətini xeyli azalda bilən qaytarma əmrini yerinə yetirməli olursunuz.

Ən sadə və təsirli üsuləmrlər zəncirinin təkrar təkrarlanmasından ibarətdir makro, proqramda tez-tez rast gəlinən bir qrup əmrləri yenidən tərcümə etmək üçün nəzərdə tutulmuş psevdo-komanda kimi təqdim edilə bilər.

Makro və ya makrokomanda üç aspektlə xarakterizə olunur: makrotərif, makroinversiya və makrouzatma.

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 tərifi aşağıdakı quruluşa malikdir:

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

Verilmiş makrotərif strukturunda üç hissəni ayırd etmək olar:

● başlıq

adı daxil olmaqla makro

Pseudo-əmr

və bir sıra parametrlər;

● nöqtələrlə işarələnmişdir bədən makro;

● komanda

məzuniyyət

makro təriflər.

Makro tərifi parametrlər dəsti seçilmiş təlimatlar qrupu üçün operand sahəsində verilmiş bütün parametrlərin siyahısını ehtiva edir. Əgər bu parametrlər proqramda əvvəllər verilmişdirsə, onda onların makro təyinat başlığında göstərilməsinə ehtiyac yoxdur.

Seçilmiş komandalar qrupunu yenidən yığmaq üçün addan ibarət müraciətdən istifadə olunur

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

Kompilyasiya prosesində 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ışlarda (

) 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ə onu makronun gövdəsi ilə əvəz etmək - makro genişlənməsi.

Əgər 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şıma qayıdır) kimi təqdim edilirsə, makro genişlənmə bu ardıcıllıqdan bəzi zəncirlərin digər zəncirlərlə əvəzlənmə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 üsulları təyin olunur makro deməkdir.

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

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

● ikinci keçid əldə edilən proqramı makrosuz emal edir.

Parametrləri olan makrolar.

Parametrləri müxtəlif qiymətlər ala bilən əmrlərin təkrar 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ı ehtiva edir, 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 ilk faktiki parametrlə (P,

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

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

proqram 2 işarələnib: 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.

Bəzi inkişaf etmiş dil xüsusiyyətlərinə baxaq

Şərti atlama əmri və atılacaq etiketdən ibarət makro iki və ya daha çox dəfə çağırılarsa, etiket dublikat olunacaq (dublikat etiket problemi), bu da xətaya səbəb olacaq. Buna görə də, hər bir zəng parametr kimi (proqramçı tərəfindən) ayrıca etiket təyin edir. Dildə

etiket yerli elan edilir (

) və qabaqcıl imkanlar 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 proqramın şərti əlaqələndirilməsi ilə birlikdə çox faydalıdır. Gəlin nəzərdən keçirək

IF WORDSIZE GT 16 M2 MAKRO

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

Bununla belə, tərif proqramın hansı prosessorda yığılmasından asılıdır: 16-bit və ya 32-bit. 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ə makro vasitələrin istifadəsi haqqında.

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

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, digərlərində isə makro adları ilə yanaşı, bütün maşın təlimatları və direktivlərinin yerləşdiyi ü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ə makronun 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ənin 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ənglərin 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 müvəqqəti olaraq daxiletmə qurğusundan daxil olan məlumatı oxumağı 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ərdən əvvəl və işarəsi assemblerə onları tanımağa imkan verir.

Assemblerin çoxlu versiyalarının 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 müzakirə olunur.

İki keçidli montajçı.

Proqram bir sıra ifadələrdən ibarətdir. Buna görə də, montaj edərkən aşağıdakı hərəkət ardıcıllığından istifadə edə biləcəyiniz 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 tərcümə olunana qədər sadalanan prosedurları təkrarlayın.

Lakin bu yanaşma effektiv deyil. Məsələn, sözdə problemdir irəli keçid.Əgər birinci ifadə proqramın ən sonunda yerləşən P ifadəsinə keçiddirsə, assembler onu tərcümə edə bilməz. O, əvvəlcə P operatorunun ünvanını müəyyən etməli və bunun üçün bütün proqramı oxumalıdır. Mənbə proqramının hər tam oxunuşu deyilir keçid. Gəlin, iki keçiddən istifadə edərək, keçidlə bağlı problemi necə həll edə biləcəyinizi göstərək:

ilk keçiddə etməlisən 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 I/O əməliyyatlarına əlavə vaxt sərf etməyi tələb edir;

● ilk keçiddə etməlisiniz çevirmək proqramı aralıq formaya salın və cədvəldə saxlayın və ikinci keçidi ilkin proqrama uyğun deyil, cədvələ uyğun yerinə yetirin. Bu montaj üsulu vaxta qənaət edir, çünki ikinci keçid giriş/çıxış əməliyyatlarını yerinə yetirmir.

İlk keçid.

İlk ötürmə qolu- 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 qorumaq və zəngləri göründükləri kimi genişləndirməkdir. Nəticə etibarı ilə həm simvol tərifi, həm də makro genişlənməsi bir keçiddə baş verir. Simvol ya ola bilər etiket, və ya məna,-you direktivindən istifadə edərək müəyyən bir ad təyin edilir:

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

Komanda etiketi sahəsində simvolik adlara məna verməklə assembler mahiyyətcə proqramın icrası zamanı hər bir əmrin malik olacağı ünvanları müəyyən edir. Bu məqsədlə montajçı montaj prosesi zamanı saxlayır 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. Cədvəldə nümunə olaraq. 5.2.3 əmrlərin uzunluğunu və sayğac qiymətlərini göstərən proqram fraqmentini göstərir. İlk keçiddə cədvəllər yaradılır simvolik adlar, direktivlərəməliyyat kodları, və lazım olduqda hərfi masa. Literal, assemblerin avtomatik yaddaş saxladığı sabitdir. Dərhal qeyd edək ki, müasir prosessorlarda dərhal ünvanları olan təlimatlar var, ona görə də onların assemblerləri literalları dəstəkləmir.

Simvol Ad Cədvəli

hər ad üçün bir elementdən ibarətdir (Cədvəl 5.2.4). Simvolik ad 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 yenidən bölüşdürülməsi 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,

Direktiv cədvəli.

Bu cədvəl proqramın yığılması zamanı rast gəlinə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, komandanın uzunluğu və əmr 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 ötürmənin məqsədi- obyekt proqramının yaradılması və lazım gəldikdə montaj protokolunun çapı; müxtəlif vaxtlarda yığılmış prosedurları bir icra edilə bilən faylda əlaqələndirmək üçün əlaqələndirici üçün 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-bir oxunur və işlənir. Onaltılıq sistemdə ondan əldə edilən orijinal operator və çıxış operatoru obyekt Kod çap oluna və ya sonra çap üçün buferə yerləşdirilə bilər. Komanda ünvanı sayğacını sıfırladıqdan sonra əmr çağırılır növbəti bəyanat.

Mənbə proqramında səhvlər ola bilər, məsələn:

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

● əməliyyat kodu etibarsız adla təmsil olunub (yazı səhvinə görə), kifayət qədər operand yoxdur və ya çoxlu operand var;

● operator yoxdur

Bəzi montajçılar qeyri-müəyyən simvolu aşkar edə və onu əvəz edə bilərlər. Bununla belə, əksər hallarda, səhv bəyanatı ilə qarşılaşdıqda, assembler ekranda səhv mesajı göstərir və montaj prosesini davam etdirməyə çalışır.

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

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

KOMPYUTER 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ə əmr strukturu.

EXE fayl strukturu (semantik təhlil).

COM fayl quruluşu.

Virusun fəaliyyət prinsipi və yayılması.

Sökücü.

Proqramlar.

Ön söz

Proqramçı peşəsi heyrətamiz və unikaldır. İndiki vaxtda elmi və həyatı ən müasir texnologiya olmadan təsəvvür etmək mümkün deyil. İnsan fəaliyyəti ilə bağlı hər şeyi onsuz etmək mümkün deyil kompüter texnologiyası. Bu isə onun yüksək inkişafına və kamilləşməsinə xidmət edir. Fərdi kompüterlərin inkişafı çox keçməmiş olsa da, bu müddət ərzində proqram məhsullarında nəhəng addımlar atılmışdır və bu məhsullar uzun müddət geniş istifadə olunacaqdır. Müvafiq texnologiya kimi kompüterlə bağlı bilik sahəsi də partlayışa məruz qalıb. Əgər kommersiya tərəfini nəzərə almasaq, o zaman deyə bilərik ki, peşəkar fəaliyyətin bu sahəsində heç bir yad adam yoxdur. Bir çox insanlar qazanc və ya gəlir üçün deyil, öz istəkləri ilə, həvəslə proqramlar hazırlayırlar. Təbii ki, bu, proqramın keyfiyyətinə təsir etməməlidir və bu biznesdə, belə demək mümkünsə, keyfiyyətli icra, sabit iş və bütün müasir tələblərə cavab verən rəqabət və tələbat 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 mikroprosessorların bəzi növləri var. Bu mikroprosessorlar bir-birindən bit dərinliyi və daxili sistem əmrləri ilə fərqlənir. Ən çox yayılmışlar: Intel, IBM, Celeron, AMD və s. Bütün bu prosessorlar 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, assembler dilində yazılmış proqramlar əhəmiyyətli dərəcədə az yaddaş və icra müddəti tələb edir. İkincisi, montaj dili və nəticədə yaranan maşın kodunu bilmək maşının arxitekturasını başa düşməyi təmin edir ki, bu da yüksək səviyyəli dildə işləyərkən təmin oluna bilməz. Əksər proqram mütəxəssisləri proqram yazarkən 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ə effektiv proqram təminatı tamamilə və ya qismən assembler dilində yazılmışdır. Yüksək səviyyəli dillər xüsusi dillərdən qaçmaq üçün hazırlanmışdır texniki xüsusiyyətlər xüsusi kompüterlər. Assembly dili isə öz növbəsində prosessorun spesifik xüsusiyyətləri üçün nəzərdə tutulub. Buna görə də konkret kompüter üçün assembler dili proqramı yazmaq üçün onun arxitekturasını bilməlisiniz. Bu günlərdə əsas görünüş proqram məhsulu EXE faylıdır. nəzərə alaraq müsbət tərəfləri Bu o deməkdir ki, proqramın müəllifi onun bütövlüyünə arxayın ola bilər. Ancaq çox vaxt bu vəziyyətdən uzaqdır. Sökən də var. Bir sökücü istifadə edərək, fasilələri və proqram kodlarını tapa bilərsiniz. Assemblerdə yaxşı bilən bir adam üçün bütün proqramı öz zövqünə uyğunlaşdırmaq çətin olmayacaq. Bəlkə də burada ən həll olunmayan problem yaranır - virus. İnsanlar niyə virus yazır? Bəziləri təəccüblə, bəziləri qəzəblə bu sualı verir, lakin buna baxmayaraq, bu işə hər hansı zərər vurmaq baxımından deyil, sistem proqramlaşdırmasına maraq kimi maraqlananlar hələ də var. Viruslar tərəfindən yazılır müxtəlif səbəblər. Bəzi insanlar sistem zənglərini sevir, digərləri assembler haqqında biliklərini artırır. 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 məlumat verir.

^ Assambleya dili.

İlk kompüterlərin yarandığı vaxtdan bu günə qədər proqramçıların assembler dili haqqında təsəvvürlərinin çevrilməsini izləmək maraqlıdır.

Bir vaxtlar assembly elə bir dil idi ki, onsuz kompüteri faydalı bir iş görməyə vadar edə bilməzsən. 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 gəlin ümumiyyətlə assembler dilinin nə olduğunu anlamağa çalışaq.

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 dili ə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üş Assembly dilində yazılmış proqramlar və bu dilin əks olunduğu ideyalar.

Assembler haqqında məlumat olmadan hardware ilə bağlı problemləri (və ya hətta üstəlik, proqramın sürətini artırmaq kimi aparatdan asılı olaraq) həqiqətən həll etmək mümkün deyil.

Bir proqramçı və ya hər hansı digər istifadəçi istənilən yüksək səviyyəli vasitələrdən, hətta virtual aləmlərin qurulması üçün proqramlardan istifadə edə bilər və bəlkə də kompüterin əslində onun proqramının yazıldığı dilin əmrlərini yerinə yetirdiyinə şübhə etmir, lakin onların dəyişdirilmiş təsviri. tamamilə fərqli bir dildən - maşın dilindən gələn darıxdırıcı və darıxdırıcı əmrlər ardıcıllığı şəklində. İndi təsəvvür edək ki, belə bir istifadəçinin qeyri-standart problemi var və ya bir şey işləmir. Məsələn, onun proqramı hansısa qeyri-adi qurğu ilə işləməli və ya kompüter avadanlığının iş prinsipləri haqqında bilik tələb edən digər hərəkətləri yerinə yetirməlidir. 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, demək olar ki, bütün yüksək səviyyəli dil kompilyatorları modullarını assembler modulları ilə birləşdirən vasitələrə malikdir və ya proqramlaşdırmanın montaj səviyyəsinə çıxışı dəstəkləyir.

Təbii ki, kompüter generalları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, bu biliklərin əksi və təcəssümü kimi kompüterin iş prinsipləri, onun arxitekturası və 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. Blok diaqram Şəxsi kompüter

Şəkildən (şəkil 1) aydın olur ki, kompüter hər biri sistem bloku adlanan bir bloka qoşulmuş bir neçə fiziki qurğudan ibarətdir. Məntiqlə düşünsək, onun bir növ koordinasiya cihazı rolunu oynadığı aydın olar. Sistem blokunun içərisinə baxaq (monitorun içərisinə girməyə çalışmaq lazım deyil - orada maraqlı bir şey yoxdur və bundan əlavə, təhlükəlidir): işi açın və bəzi lövhələrə, bloklara, birləşdirici naqillərə baxın. 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 üçün nəzərdə tutulub.

Şəkildəki diaqramı müzakirə edək. 2 bir qədər qeyri-ənənəvi üslubda.
Bir insanın yeni bir şeylə qarşılaşdığı zaman naməlum şeyi anlamağa kömək edə biləcək bəzi assosiasiyalar axtarması adi haldır. Kompüter hansı assosiasiyaları oyadır? Məsələn, mən çox vaxt kompüteri insanın özü ilə əlaqələndirirəm. Niyə?

Bir insan kompüter yaradanda, özünün dərin bir yerində, özünə bənzər bir şey yaratdığını düşünürdü. Kompüterdə xarici aləmdən informasiya qəbul etmək üçün orqanlar - klaviatura, siçan və maqnit disklər var. Şəkildə. 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ə RAM. 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 canlılarla müqayisə etmək olar.
Bu reflekslər dəsti maşın əmrləri sistemini təşkil edir. Kompüterlə nə qədər yüksək səviyyədə ünsiyyət qurmağınızdan asılı olmayaraq, bu, nəticədə maşın əmrlərinin darıxdırıcı və monoton ardıcıllığına düşür.
Hər bir maşın əmri bu və ya digər şərtsiz refleksi həyəcanlandırmaq üçün bir növ stimuldur. Bu stimula reaksiya həmişə birmənalı deyil və mikroproqram şəklində mikro komanda blokunda "sabitdir". Bu mikro proqram maşın əmrini yerinə yetirmək üçün hərəkətləri həyata keçirir, lakin müəyyən bir siqnal 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ə bir boşqabdır. qida (proqramlar) müəyyən qaydalara uyğun çatdırılır.mədə (kompüter). Yalnız kompüterin mədəsi pəhrizi, 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 olsa da, 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çı ikili ədədlərin müxtəlif birləşmələrinin mənasını anlamağa çalışmaq məcburiyyətində 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.

Bütün yuxarıda deyilənlərdən belə nəticəyə gələ bilərik ki, assembler dili kompüter üçün “doğma” olduğundan, ən effektiv 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 əmək tələb edən bir prosesdir. Buna görə də, əslində, onlar əsasən təmin etməli olan proqramları assemblerdə yazırlar səmərəli iş hardware ilə. Bəzən icra vaxtı və ya yaddaş sərfiyyatı baxımından kritik olan proqram bölmələri assemblerdə yazılır. Sonradan onlar alt proqramlar şəklində rəsmiləşdirilir və yüksək səviyyəli dildə kodla birləşdirilir.

Hər hansı bir kompüterin montaj dilini öyrənməyə yalnız bu dildə proqramlaşdırma üçün kompüterin hansı hissəsinin görünən və əlçatan qaldığını öyrəndikdən sonra başlamağın mənası var. Bu, proqramçının istifadəsinə bu və ya digər dərəcədə 32 registrdən ibarət mikroprosessor proqramı modeli adlanan kompüter proqramı modelidir.

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

^ 16 istifadəçi qeydiyyatı;

16 sistem qeydiyyatı.

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

Adından göründüyü kimi, istifadəçi registrləri istifadəçi registrləri adlanır, çünki 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 (GPR) də deyilir):

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

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

Bayraqlar bayraqları/bayraqları qeyd edir;

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

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

Niyə bu registrlərin çoxu kəsik işarələrlə 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 mikroprosessorlarının daha gənc 16 bitlik modelləri üçün yazılmış proqramların funksionallığını 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 qrupdakı bütün registrlər onların “aşağı” hissələrinə daxil olmağa imkan verir (bax. Şəkil 3). Bu rəqəmə nəzər saldıqda qeyd edək ki, bu registrlərin yalnız aşağı 16 və 8 bitlik 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 mikroprosessorlarının daha gənc 16 bitlik modelləri ilə uyğunluq üçün edilib.

Ü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 (Akkumulyatorun qeydiyyatı) - batareya.
Aralıq məlumatları saxlamaq üçün istifadə olunur. Bəzi əmrlər bu registrdən istifadə etməyi tələb edir;

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 komandalarda istifadə olunur. Onun istifadəsi çox vaxt gizli olur və müvafiq əmrin alqoritmində gizlənir.
Məsələn, dövrə dövrəsinin 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ərdə onun istifadəsi məcburidir; 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 olaraq emal edən əməliyyatları dəstəkləmək üçün istifadə olunur:

esi/si (Mənbə İndeksi reyestri) - mənbə indeksi.
Zəncirlənmiş əməliyyatlarda 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əncirlənmiş əməliyyatlardakı bu registr təyinat zəncirindəki cari ünvanı ehtiva edir.

Mikroprosessor arxitekturasında stack kimi məlumat strukturu aparat və proqram səviyyəsində dəstəklənir. Yığınla işləmək üçün mikroprosessorun təlimat sistemində 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 halda müvəqqəti saxlanılan hər bir 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ə edilə bilər və məlumatların stekdə saxlanması və oradan çıxarılması heç bir ad göstərilmədən effektiv push və pop əmrlərindən istifadə etməklə həyata keçirilir.
Yığın ə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 proqram qayıtdıqdan sonra yığından çıxarı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ə və icrası zamanı istifadə edə bilər. Fərqli xüsusiyyət Yığın, içindəki məlumatların alındığı unikal bir sıradır: istənilən vaxt yığında yalnız yuxarı element mövcuddur, yəni. element ən son yığına itələdi. Üst elementi yığından çıxarmaq növbəti elementi əlçatan edir. Yığın elementləri stek üçün ayrılmış yaddaş sahəsində, stekin aşağı hissəsindən (yəni onun maksimum ünvanından) başlayaraq ardıcıl olaraq azalan ünvanlarda 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 seqmentin bir hissəsi olmalıdır və ya ayrıca bir seqment təşkil etməlidir. İstənilən halda bu seqmentin seqment ünvanı SS seqment stek registrində yerləşdirilir. Beləliklə, SS:SP cüt registrləri əlçatan stek xanasının ünvanını təsvir edir: SS yığının seqment ünvanını, SP isə stekdə saxlanılan sonuncu məlumatın ofsetini saxlayır (şək. 4, a). Qeyd edək ki, ilkin vəziyyətdə yığın göstəricisi SP yığının dibinin altında yerləşən və ona daxil edilməyən xanaya işarə edir.

Şə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ə yığınla işləmək üçün xüsusi əmrlə (push) 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. Aşağıdakı yığın yükləmə əmri məs.

yığını Şəkildə göstərilən vəziyyətə qoyacaq. 1.10, c. Yığın indi iki elementi saxlayacaq və yalnız SP steck göstəricisi ilə göstərilən yuxarı element əlçatan olacaq. Bir müddətdən sonra stekdə saxlanılan registrlərin orijinal məzmununu bərpa etmək lazımdırsa, stekdən boşaltmaq üçün pop (push) əmrlərini 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ı stek üzərinə itələyir. Buna görə də, proqram ümumiyyətlə stekdən istifadə etməsə belə, o, hələ də proqramda olmalı və ən azı bir neçə onlarla sözdən ibarət olmalıdır. İlk nümunəmizdə yığına 128 söz ayırdıq, bu, əlbəttə ki, kifayətdir.

^ Assembler proqramının strukturu

Assembly dili proqramı yaddaş seqmentləri adlanan yaddaş bloklarının toplusudur. Proqram bir və ya bir neçə belə blok seqmentində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.

Assembler ifadələrinin dörd növü var:

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

makrokomandalar - proqram mətninin müəyyən şəkildə formatlanmış, yayım zamanı başqa cümlələrlə əvəz edilmiş cümlələri;

direktivlər, müəyyən 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;

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.

^ Assambleya 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. Montaj cümləsi formatı

düyü. 6. Direktiv formatı

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

Bu şəkillərdə:

etiket adı - dəyəri təyin etdiyi proqramın mənbə kodundakı cümlənin birinci baytının ünvanı olan identifikator;

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

əməliyyat kodu (OPC) və direktiv müvafiq maşın təlimatı, makro təlimat və ya tərcüməçi direktivi üçün mnemonik simvollardır;

operandlar hərəkətlərin yerinə yetirildiyi obyektləri təyin edən əmr, makro və ya assembler direktivinin hissələridir. Assembly dili operandları operator işarələrindən və bəzi qorunan sözlərdən istifadə etməklə ədədi və mətn sabitləri, etiketlər və dəyişən identifikatorları olan 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) onun çı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 keçid istiqamətinə diqqət yetirin, çünki yollar arasında sağdan sola izlənilə bilən bəzi yollar ola bilər. Mahiyyət etibarilə, sintaksis diaqramları proqramın daxil olan cümlələrini təhlil edərkən tərcüməçinin işinin məntiqini əks etdirir.

Proqram mətnini yazarkən məqbul simvollar bunlardır:

Hamısı 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 montaj dili cümlələri əmələ gəlir.

Leksemlə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 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. İ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ğı tapşırmaq olar (bu, standart olaraq edilir).

^Assembler əmrləri.

Assembler əmrləri tələblərinizi kompüterə ötürmək qabiliyyətini, məntiqi müqayisələr və proqram təşkili üçün proqramda (dövrlər və keçidlər) idarəetmənin ötürülməsi mexanizmini ortaya qoyur. Bununla belə, proqramlaşdırıla bilən tapşırıqlar nadir hallarda bu qədər sadədir. Əksər proqramlar müəyyən tələbə nail olunana qədər bir neçə əmrin təkrarlandığı bir sıra dövrələrdən və bir neçə hərəkətdən hansının yerinə yetirilməli olduğunu müəyyən edən müxtəlif yoxlamalardan ibarətdir. Bəzi təlimatlar təlimat 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 nəzarəti ö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ərə baxacağıq.

Müəyyən ə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 aşağı sətirində əmr yerinə yetirildikdən sonra bayraqların dəyərləri göstərilir. Aşağıdakı qeydlər 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 - əmr yerinə yetirildikdə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 ölçüsü, söz və ya qoşa söz registrlərindən birində operand;

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

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

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 diaqramı:

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

Məqsəd: bayt, söz və ya qoşa söz ölçülü iki mənbə və təyinat operandının əlavə edilməsi.

İş alqoritmi:

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

əlavə 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 qəbuledici operandın hüdudlarından kənara çıxarsa (daşma baş verir), onda bu vəziyyət cf bayrağını və sonradan adc əmrindən mümkün istifadəni təhlil etməklə nəzərə alınmalıdır. Məsələn, balta registrinə və ch yaddaş sahəsinə dəyərləri əlavə edək. Əlavə edərkən, daşma ehtimalını nəzərə alın.

Qeydiyyatdan əlavə registr və ya yaddaş:

|000000dw|modregr/rm|

AX registr (AL) üstəgəl dərhal dəyər:

|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 diaqramı:

Məqsəd:

qayıdış nöqtəsinin ünvanını stekdə saxlamaqla nəzarəti yaxın və ya uzaq prosedura ötürmək;

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

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

Yaxın etiket - 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ığının üzərinə itələnir. Sonra uzaq etiketə 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ş xanasını 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:

^ Komandanın icrasından sonra bayraqların vəziyyəti (tapşırıqların dəyişdirilməsi istisna olmaqla):

əmrin yerinə yetirilməsi bayraqlara təsir etmir

Tapşırıq dəyişdirildikdə, bayraq 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 qayıtma nöqtəsinin ünvanını saxlamaqla idarəetmənin alt proqrama çevik və çoxvariantlı ö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ə et)

Operandların müqayisəsi

^ Komanda diaqramı:

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 xatırlamayın).

Ərizə:
Bu əmr operandları dəyişmədən çıxarma yolu ilə iki operandın müqayisəsi üçün istifadə olunur. Komandanın nəticələrinə əsasən bayraqlar təyin edilir. Cmp əmri şərti keçid əmrləri və setcc dəyəri ilə təyin edilmiş bayt ilə istifadə olunur.

Obyekt kodu (üç format):

Qeydiyyat və ya qeyd ilə yaddaş:

|001110dw|modregr/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 diaqramı:

dec operand

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

İş alqoritmi:
komanda 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 dəyərini azaltmaq və ya qeydiyyatdan birini bir azaltmaq üçün istifadə olunur. Ancaq unutmayın ki, əmr cf bayrağına təsir etmir.

Qeydiyyatdan keçin: |01001reg|

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

DIV
(İmzasız BÖL)

İmzasız bölmə

Komandanın təsviri:

div bölücü

Məqsəd: İki işarəsiz ikili dəyər arasında bölmə əməliyyatını yerinə yetirin.

^ Əməliyyat 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ücü bayt ölçüsündədirsə, dividend balta registrində yerləşməlidir. Əməliyyatdan sonra hissə al-a, qalanı isə ah-a qoyulur;

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

əgər bölən ikiqat sözdürsə, onda dividend edx:eax registr cütlüyündə, dividendlərin aşağı dərəcəli 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 verir. 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 hallardan 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 edilir

^ Komanda diaqramı:

int kəsmə_nömrəsi

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

^ Əməliyyat alqoritmi:

bayraqları qeyd bayraqları/bayraqları və qayıdış ünvanını yığının üzərinə itələyin. Qayıdış ünvanı 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ə xidməti proqramına ötürmək. 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 əmrin ilk baytını əvəz etməklə kəsilmə nöqtələrini təyin etmək üçün müxtəlif proqram təminatının sazlayıcılarında istifadəni çox rahat edir. Əmrlər ardıcıllığında əməliyyat kodu 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ə emal proqramını çağırır.

Komandanın ikinci forması iki bayt tutur, 0cdh əməliyyat koduna malikdir və 0-255 diapazonunda vektor nömrəsi ilə kəsmə xidmətinə zəng etməyə imkan verir. Nəzarət ö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|

J.C.C.
JCXZ/JECXZ
(Şərt varsa tullanmaq)

(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 diaqramı:

jcc etiketi
jcxz etiketi
jecxz etiketi

Məqsəd: bəzi şərtlərdən asılı olaraq cari komanda 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, operand tərəfindən göstərilən xanaya keçin;

yoxlanılan şərt yanlışdırsa, onda idarəetməni növbəti komandaya köçürün.

jcxz/jecxz əmri üçün alqoritm:
ecx/cx registrinin məzmununun sıfıra bərabər olması şərtinin yoxlanılması:

vəziyyət yoxlanılırsa

Assembly dilində əmr strukturu Maşın əmrləri səviyyəsində proqramlaşdırma kompüter proqramlaşdırmasının mümkün olduğu minimum səviyyədir. Maşın əmr sistemi maşın avadanlığı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: "nə etməli" ni təyin edən əməliyyat və emal obyektlərini, yəni "nə etməli" ni təyin edən operand. Assembly dilində yazılmış mikroprosessor maşın təlimatı aşağıdakı formaya malik olan tək sətirdir: etiket əmri/direktiv operand(lar); şərhlər Etiket, əmr/direktiv və operand ən azı bir boşluq və ya nişan simvolu ilə ayrılır. Komandanın operandları vergüllə ayrılır.

Assembly dilinin komanda strukturu Assembler əmri tərcüməçiyə mikroprosessorun hansı hərəkəti yerinə yetirməli olduğunu 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 komanda hərəkətinin yerinə yetirildiyi elementləri (kod seqmentində) 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 direktiv növbəti sətirdə davam etdirilməlidirsə, əks kəsik işarəsi istifadə olunur: "" . Defolt olaraq, assembler əmrlər və direktivlər yazarkən böyük və kiçik hərflər arasında fərq qoymur. Direktiv və əmrlərin 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ı ifadə 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İdentifikatorun 255 simvolu var, 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ı konkret 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ı konkret 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ərdən istifadə onun aydınlığını artırır, xüsusən də əmrlər toplusunun məqsədi aydın olmayan yerlərdə. Şərhlər mənbə modulunda istənilən sətirdə nöqtəli vergül (;) ilə başlayır. "-nin sağındakı bütün simvollar; " sətirinin sonuna qədər bir şərh 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 dilinin proqram strukturu Assembly dilində yazılmış proqram modul adlanan bir neçə hissədən ibarət ola bilər ki, onların hər biri bir və ya bir neçə verilənlər, stek və kod seqmentlərini müəyyən edə bilər. Assembly dilində olan hər hansı tam proqram onun icrasına başlanılan bir əsas və ya əsas moduldan ibarət olmalıdır. Modulda ola bilər proqram seqmentləri, məlumat və stek seqmentləri müvafiq direktivlərdən istifadə edilərək elan edilmişdir.

Yaddaş modelləri Seqmentləri elan etməzdən əvvəl direktivdən istifadə edərək yaddaş modelini təyin etməlisiniz. MODEL modifikatoru yaddaş_model, çağırış_konvensiya, OS_type, stack_parameter Assemblyasiya dilinin əsas yaddaş modelləri: Yaddaş modeli Kodun ünvanlanması Məlumatların ünvanlanması əməliyyat sistemi MS-DOS YAXINDA KÖYÜK KÖYÜK MS-DOS YAXINDA Məqbul 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 Acceptable 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ə edərkən verilənlər və kodlar yaxın kimi ünvanlanır. Orta model birdən çox kod seqmentini və bir məlumat seqmentini dəstəkləyir, kod seqmentlərindəki bütün istinadlar defolt olaraq uzaq hesab olunur və məlumat seqmentindəki istinadlar yaxın hesab olunur. Kompakt model uzaq verilənlərin ünvanlanmasından (uzaq) istifadə edən bir neçə məlumat seqmentini və yaxın ünvandan (yaxınlığı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, koda və məlumatlara olan bütün 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ı qəbul edir və yalnız 32 bitlik əməliyyat sistemlərində istifadə olunur. Bu model verilənlər və kodun bir seqmentdə yerləşdiyi kiçik modelə bənzəyir, lakin 32-bitdir. 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 təlimatlar 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) proseduru çağırarkən parametrlərin ötürülmə üsulunu 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 parametri olaraq təyin edilir: NEARSTACK (SS registri DS-ə bərabərdir, verilənlər və stek sahələri eyni fiziki seqmentdə yerləşir) FARSTACK (SS registri DS-ə bərabər deyil, verilənlər və stek sahələri müxtəlif fiziki seqmentlərdə yerləşir). Defolt dəyər NEARSTACK-dır.

Heç bir şey etməyən bir proqram 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şinə aiddir. . 686 P - Pentium 6 (Pentium II) qorunan rejim əmrlərinə icazə verilir. Bu direktiv prosessor modelini göstərməklə dəstəklənən assembler təlimatlar dəstini seçir. . MODEL FLAT, stdcall - düz yaddaş modeli. Bu yaddaş modeli Windows əməliyyat sistemində istifadə olunur. stdcall - istifadə edilən çağırış proseduru.

Heç bir şey etməyən bir proqram nümunəsi. 686 P. MODEL YAPI, STDCALL. DATA. KOD BAŞLAYIN: YENİDƏN SON BAŞLAYIN. DATA verilənlərdən ibarət proqram seqmentidir. Bu proqram yığını istifadə etmir, buna görə də seqment. STACK yoxdur. . KOD kodu ehtiva edən proqram seqmentidir. START - etiket. END START - proqramın sonu və proqramın icrasının START etiketi ilə başlaması barədə kompilyatora mesaj. Hər bir proqramda sonu qeyd etmək üçü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 sonra göstərilən etiket tərcüməçiyə 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.

Assambleya dili tərcüməçiləri Translator - proqram və ya texniki vasitələr, proqramlaşdırma dillərindən birində təmsil olunan 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ə makro alətləri var, çox vaxt başqa heç nə ilə uyğun gəlmir. Assembly dili tərcüməçilərinin əsas növləri: 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) - pulsuz Intel x arxitekturası 86 üçün assembler, Simon Tatham tərəfindən Julian Hall ilə birlikdə yaradılmışdır və hazırda Source-da kiçik bir tərtibatçılar qrupu tərəfindən hazırlanır. Forge. xalis.

Src="https://present5.com/presentation/-29367016_63610977/image-15.jpg" alt="Microsoft Visual Studio 2005-də proqramın tərcüməsi 1) File->New- seçərək layihə yaradın. >Layihə menyusu 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="Proqramın Microsoft Visual Studio 2005-də 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-ə tərcüməsi 3) Code C++ fayl tipini seçin, lakin uzantılı adı göstərin. asm:

Proqramın Microsoft Visual Studio 2005-ə tərcüməsi 5) Kompilyator parametrlərini təyin edin. Layihə faylında Xüsusi Quraşdırma Qaydaları menyusuna sağ klikləyin...

Proqramı Microsoft Visual Studio 2005-ə tərcümə edin 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. Xüsusiyyətlər menyusunun asm layihə ağacını seçin və General->Tool: Microsoft Macro Assembler-i quraşdırın.

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

Windows ƏS-də 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 proqramı əsasən belə zənglərdən ibarətdir. ilə bütün qarşılıqlı əlaqə xarici cihazlarəməliyyat sistemi resursları isə, 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ş xanasının ü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əli, çərçivə).

Zəng edin Windows funksiyaları 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 – rəsmi arqumentlərin göründükləri ardıcıllıqla siyahısı.Məsələn, int Mesaj. Qutu(HWND h. Wnd, LPCTSTR lp. Mətn, LPCTSTR lp. Başlıq, UINT u. Növ); Bu funksiya mesajı və çıxış düyməsi (və ya düymə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 deskriptorudur, 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. Növ - pəncərə növü, xüsusən də çıxış düymələrinin sayını təyin edə bilərsiniz.

Windows API int Message funksiyalarının çağırılması. Qutu(HWND h. Wnd, LPCTSTR lp. Mətn, LPCTSTR lp. Başlıq, UINT u. Növ); 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 sətir üçün 32 bitlik göstəricidir, UINT 32 bitlik tam ədəddir. Funksiyanın yeni versiyalarına keçmək üçün funksiya adına tez-tez "A" şəkilçisi əlavə olunur.

Windows API int Message funksiyalarının çağırılması. Qutu(HWND h. Wnd, LPCTSTR lp. Mətn, LPCTSTR lp. Başlıq, UINT u. Növ); MASM-dən istifadə edərkən adın sonuna @N N əlavə etməlisiniz - ötürülən arqumentlərin stekdə tutduğu baytların sayı. Win 32 API funksiyaları üçün bu rəqəm arqumentlərin sayı n-nin 4-ə vurulması kimi müəyyən edilə bilər (hər arqumentdə bayt): N=4*n. Funksiyaya zəng etmək üçün assembler CALL təlimatından istifadə edin. Bu halda bütün funksiya arqumentləri ona stek vasitəsilə ötürülür (PUSH əmri). Arqumentlərin ötürülmə istiqaməti: SOLDAN SAĞA - AŞAĞIDA YUKARI. U arqumenti əvvəlcə yığına itələnəcək. Növ. Göstərilən funksiyaya zəng belə görünəcək: CALL Message. Qutu. A@16

Windows API int Message funksiyalarının çağırılması. Qutu(HWND h. Wnd, LPCTSTR lp. Mətn, LPCTSTR lp. Başlıq, UINT u. Növ); Hər hansı bir API funksiyasının icrasının nəticəsi adətən EAX registrində qaytarılan tam ədəddir. OFFSET direktivi "seqmentdə ofset"i və ya yüksək səviyyəli dil terminlərinə tərcümə edilərsə, xəttin əvvəlinə "göstərici"ni təmsil edir. EQU direktivi, SI-də #define kimi, sabiti təyin edir. EXTERN direktivi tərcüməçiyə funksiya və ya identifikatorun bu modul üçün xarici olduğunu bildirir.

“Hər kəsə salam!” proqramının 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 ? XARİCİ Mesaj. Qutu. A@16: YAXIN. KOD BAŞLAT: PUSH MB_OK PUSH OFFSET STR 1 PUSH OFFSET STR 2 PUSH HW CALL Mesajı. Qutu. A@16 RET SON BAŞLAYIN

INVOKE direktivi MASM dilinin tərcüməçisi həmçinin makro alətdən istifadə etməklə funksiya çağırışları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əçinin makro vasitəsi ilə parametrlər stek üzərində yerləşdirilir. 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 Əgər proqram çoxlu Win 32 API funksiyalarından istifadə edirsə, C: masm 32includeuser 32. inc direktivindən istifadə etmək məsləhətdir.

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

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

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

Assambleya dili hər bir ifadənin tam olaraq bir maşın əmrinə uyğun gəldiyi 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, həmçinin kitabxana proqramlarını birləşdirmək və xüsusi parametrləri göstərməklə simvolik göstərişlər ardıcıllığını yaratmaq adlanır. mikro komandalarda. Bu proqram adətən ROM-da yerləşir və ya bəzi xarici mediadan 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ə təlimatlara çı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 bacarıqlı istifadə etmək;

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

Mənbə proqramların itirilməsi halında hər hansı yüksək səviyyəli dillərdən tərtib edilmiş .exe və .com uzantılı icra edilə bilən proqramlara baxmaq və düzəltmək imkanı (DEBUG proqramının sazlayıcısında göstərilən proqramlara zəng etməklə və montajda onların displeyini dekompilyasiya etməklə). dil);

Ən kritik problemlərin həlli üçün proqramların tərtib edilməsi (maşın yönümlü dildə yazılmış proqram adətən daha effektivdir - yüksək səviyyəli dillərdən tərcümə nəticəsində əldə edilən proqramların 30-60 faizi daha qısa və daha sürətlidir)

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

Assembly dilində olan proqram yalnız bir kompüter ailəsində 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. Var:

İkili ədədlər B hərfi ilə bitir;

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

Onaltılıq rəqəmlər H hərfi ilə bitir.

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. Assembler dilində olan proqram yüksək səviyyəli dildə olan proqramdan (proqramçı üçün assemblerdən daha sadədir) nisbətən konkret maşının (daha dəqiq desək, MP) imkanlarından daha səmərəli istifadə edir. MP KR580VM80 üçün montaj dili nümunəsindən istifadə edərək maşın yönümlü dillərdə proqramlaşdırmanın əsas prinsiplərinə baxaq. Dildə proqramlaşdırma üçün ümumi metodologiyadan istifadə olunur. Proqramları qeyd etmək üçün xüsusi texniki üsullar hədəf MP-nin arxitekturasının və komanda sisteminin xüsusiyyətləri ilə əlaqələndirilir.

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

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

MP Port Yaddaş

S Z A.C. P C

Şəkil 1

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

A– 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 (GPR). 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. 16 bitlik sözləri emal edərkən registrlər BC, DE, HL cütlərini təşkil edir və qoşa registr birinci hərf - B, D, H adlanır. Registr cütlüyündə ən yüksəki birinci registrdir. H və L registrləri həm məlumatların saxlanması, həm də RAM hüceyrələrinin 16 bitlik ünvanlarının saxlanması üçün istifadə olunan xüsusi xüsusiyyətə malikdir.

FL– bayraq registri (işarə registri) MP-də arifmetik və məntiqi əməliyyatların yerinə yetirilməsi nəticəsinin beş işarəsinin saxlanıldığı 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ə olanların sayı cüt olduqda 1-ə təyin edilir.

AC rəqəmi nəticənin aşağı səviyyəli tetradından daşınma dəyərini saxlamaq üçün nəzərdə tutulmuş əlavə daşımadır.

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

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

SP– yığın göstəricisi, 16 bitlik registr, yığına daxil edilmiş son baytın yazıldığı yaddaş xanasının ünvanını saxlamaq üçün nəzərdə tutulmuşdur.

RS– proqram sayğacı (proqram sayğacı), yerinə yetiriləcək növbəti təlimatın ünvanını saxlamaq üçün nəzərdə tutulmuş 16 bitlik registr. Növbəti təlimat baytı alındıqdan dərhal sonra proqram sayğacının məzmunu avtomatik olaraq 1 artırılır.

0000Н – 07FF ünvanının ilkin yaddaş sahəsində var nəzarət proqramı və nümayiş proqramları. Bu ROM sahəsidir.

0800 – 0AFF - tədqiq olunan proqramları qeyd etmək üçün ünvan sahəsi. (RAM).

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

0ВВ0 – yığının başlanğıc ünvanı. (RAM).

Yığın, 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 yazılan son nömrə əvvəlcə atılır. Yığın göstəricisi məlumatın yazıldığı sonuncu yığın xanasının ü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 dilinin verilənlərin formatı və komanda strukturu

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

Data 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 onun formatı, yəni bayt-bayt müəyyən funksional sahələrə bölünən onun üçün ayrılmış bitlərin sayı ilə xarakterizə olunur.

Komanda formatı

MP KR580VM80 əmrləri bir, iki və ya üç bayt formatına malikdir. Çoxbaytlı əmrlər qonşu dillərdə yerləşdirilməlidir. Komanda 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, əmr formatını və onun icrası zamanı MP-nin verilənlər üzərində yerinə yetirməli olduğu hərəkətləri və ünvanlanma metodunu müəyyən edir, həmçinin verilənlərin yeri haqqında məlumatları ehtiva edə bilər.

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

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

Şəkil 4

Assembly dili əmrlərində əməliyyat kodu ingiliscə sözlərin qısaldılmış yazılış formasına malikdir - mnemonic notation. Mnemonika (yunan dilindən mnemonic - əzbərləmə sənəti) funksional məqsədi ilə əmrləri yadda saxlamağı asanlaşdırır.

İcra etməzdən əvvəl mənbə proqram assembler adlı 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 millət vəkilinin daxili registrlərində yerləşdirilə 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 yerləşdirilə bilər (ən nadir hal). Operandların yeri təlimat kodu ilə müəyyən edilir. Mövcüd olmaq müxtəlif üsullar, onun köməyi ilə təlimat kodu giriş operandının haradan götürüləcəyini və çıxış operandının hara yerləşdiriləcəyini müəyyən edə bilər. Bu üsullara ünvanlama metodları deyilir.

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

Birbaşa;

Qeydiyyatdan keçmək;

dolayı;

Yığılmış.

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

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

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

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

Yığın ünvanlama əmrin ünvana malik olmadığını güman edir. 16 bitlik SP registrinin (stek göstəricisi) məzmunundan istifadə edərək yaddaş hüceyrələrinin ünvanlanması.

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 (dəyişikliklər nəzərə alınmaqla 244).

Aşağıdakı komanda qrupları fərqləndirilir:

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

arifmetik;

Zeka oyunu;

Atlama əmrləri;

Giriş/çıxış, idarəetmə və yığın əmrləri.


Əmrlərin təsviri və proqramların tərtibi zamanı 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ış cihazı ünvanı
BYTE 2 Komandanın ikinci baytı
BAYT 3 Komandanın üçüncü baytı
R, R1, R2 Registrlərdən biri: A, B, C, D, E, H, L
R.P. Registr cütlərindən biri: B - BC cütünü təyin edir; D - DE cütünü təyin edir; H – HL cütünü təyin edir
RH Cütlüyün ilk reyestri
R.L. Cütlüyün ikinci reyestri
Λ Məntiqi vurma
V Məntiqi əlavə
Əlavə modulu iki
M Ünvanı HL registr cütünün məzmununu təyin edən yaddaş hüceyrəsi, yəni M = (HL)



Üst