Štruktúra pokynu pre montážny jazyk obsahuje. Formát údajov a štruktúra príkazov v jazyku zhromaždenia. Aritmetické príkazy ………………………………………………

Programovanie na úrovni strojových pokynov je minimálna úroveň, na ktorej je možné programovanie. Systém strojových pokynov musí byť dostatočný na vykonanie požadovaných akcií a vydávanie pokynov pre hardvér počítača.

Každá strojová inštrukcia sa skladá z dvoch častí:

  • operačná sála - určenie „čo robiť“;
  • operand - definovanie spracovávaných objektov, „čo s čím“.

Mikroprocesorová strojová inštrukcia napísaná v montážnom jazyku je jeden riadok v tejto syntaktickej podobe:

príkaz / príkazový štítok operand (s); komentáre

V takom prípade je príkaz alebo smernica povinným poľom v riadku.

Štítok, príkaz / smernica a operandy (ak existujú) sú oddelené najmenej jednou medzerou alebo znakom tabulátora.

Ak je potrebné v príkaze alebo smernici pokračovať na ďalšom riadku, použije sa znak spätnej lomky: \\.

V predvolenom nastavení montážny jazyk pri písaní príkazov alebo smerníc nerozlišuje medzi veľkými a malými písmenami.

Príklady riadkov kódu:

Počet db 1 ; Názov, smernica, jeden operand
mov eax, 0 ; Príkaz, dva operandy
cbw; Velenie

Značky

Štítok v jazyku zhromaždenia môže obsahovať nasledujúce znaky:

  • všetky písmená latinskej abecedy;
  • čísla od 0 do 9;
  • špeciálne znaky: _, @, $,?.

Ako prvý znak štítku možno použiť bodku, ale niektorí kompilátori tento znak neodporúčajú. Ako označenia nemožno použiť vyhradené názvy assemblerov (smernice, operátory, názvy príkazov).

Prvý znak na štítku musí byť písmeno alebo špeciálny znak (nie však číslo). Maximálna dĺžka štítku je 31 znakov. Všetky štítky, ktoré sú napísané v riadku, ktorý neobsahuje direktívu assemblera, musia končiť dvojbodkou :.

Príkazy

Velenie povie prekladateľovi, aké kroky by mal mikroprocesor podniknúť. V dátovom segmente príkaz (alebo smernica) definuje pole, pracovnú oblasť alebo konštantu. V segmente kódu inštrukcia definuje akciu, napríklad prenos (mov) alebo doplnenie (pridanie).

Smernice

Zostavovač má niekoľko operátorov, ktoré vám umožňujú riadiť proces zostavovania a generovania výpisu. Títo operátori sa nazývajú smernice ... Konajú iba pri zostavovaní programu a na rozdiel od pokynov negenerujú strojové kódy.

Operandy

Operand - objekt, na ktorom sa vykonáva strojová inštrukcia alebo operátor programovacieho jazyka.
Inštrukcia môže mať jeden alebo dva operandy alebo vôbec žiadne. Počet operandov je implicitne určený príkazovým kódom.
Príklady:

  • Žiadne operandy ret; Návrat
  • Jeden operand vrátane ecx; Zvýšte ecx
  • Dva operandy pridajú eax, 12; Pridať 12 do eax

Štítok, príkaz (smernica) a operand nemusia začínať na žiadnej konkrétnej pozícii v reťazci. Pre lepšiu čitateľnosť programu sa však odporúča zapísať ich do stĺpca.

Operandy môžu byť

  • identifikátory;
  • reťazce znakov uzavreté v jednoduchých alebo dvojitých úvodzovkách;
  • celé čísla v binárnom, osmičkovom, desatinnom alebo hexadecimálnom formáte.
Identifikátory

Identifikátory - postupnosti platných znakov používaných na označenie programových objektov, ako sú operačné kódy, názvy premenných a názvy štítkov.

Pravidlá písania identifikátorov.

  • Identifikátor môže mať jeden alebo viac znakov.
  • Ako symboly je možné použiť písmená latinskej abecedy, číslice a niektoré špeciálne znaky: _,?, $, @.
  • Identifikátor nemôže začínať znakom číslice.
  • Identifikátor môže mať až 255 znakov.
  • Prekladateľ akceptuje prvých 32 znakov identifikátora a zvyšok ignoruje.
Pripomienky

Komentáre sú od spustiteľného riadku oddelené znakom a; ... V tomto prípade je všetko, čo je napísané za bodkočiarkou a po koniec riadku, komentár. Použitie komentárov v programe zvyšuje jeho prehľadnosť, najmä ak nie je jasný účel súboru inštrukcií. Komentár môže obsahovať akýkoľvek tlačiteľný znak vrátane medzery. Komentár môže obsahovať celý riadok alebo môže nasledovať príkaz v rovnakom riadku.

Štruktúra montážneho programu

Program napísaný v montážnom jazyku môže byť zložený z niekoľkých častí, tzv modulov ... Každý modul môže mať definovaný jeden alebo viac segmentov údajov, zásobníka a kódu. Akýkoľvek kompletný montážny program musí obsahovať jeden hlavný alebo hlavný modul, z ktorého sa má spustiť jeho vykonávanie. Modul môže obsahovať segmenty kódu, dátové segmenty a segmenty zásobníka deklarované pomocou príslušných smerníc. Pred deklarovaním segmentov musíte určiť pamäťový model pomocou smernice .MODEL.

Príklad montážneho programu „nerobiť nič“:

686P
.MODEL FLAT, STDCALL
.ÚDAJE
.KÓD
ŠTART:

RET
KONIEC ŠTART

Tento program obsahuje iba jednu inštrukciu mikroprocesora. Tento príkaz je RET. Zaisťuje správne ukončenie programu. Všeobecne sa tento príkaz používa na ukončenie procedúry.
Zvyšok programu súvisí s prácou prekladateľa.
.686P - Povolené príkazy chráneného režimu Pentium 6 (Pentium II). Táto smernica vyberie podporovanú sadu inštrukčných inštrukcií zadaním modelu procesora. Písmeno P na konci smernice informuje prekladateľa, že procesor pracuje v chránenom režime.
.MODEL FLAT, stdcall je model plochej pamäte. Tento pamäťový model sa používa v operačnom systéme Windows. stdcall
.DATA - programový segment obsahujúci údaje.
.CODE - blok programu obsahujúci kód.
START je štítok. V montážnom jazyku zohrávajú štítky veľkú úlohu, čo neplatí v moderných jazykoch na vysokej úrovni.
KONIEC ŠTART - koniec programu a správa prekladateľovi, že program musí byť spustený z označenia START.
Každý modul musí obsahovať značku END na označenie konca zdrojový kód programov. Všetky riadky, ktoré nasledujú za smernicou END, sú ignorované. Ak vynecháte smernicu END, vygeneruje sa chyba.
Štítok určený za smernicou END informuje prekladateľa o názve hlavného modulu, z ktorého sa program spúšťa. Ak program obsahuje jeden modul, štítok za smernicou END možno vynechať.

Štruktúra inštrukcie v montážnom jazyku Programovanie na úrovni strojových inštrukcií je minimálna úroveň, na ktorej je možné počítačové programovanie. Sada pokynov pre stroj musí byť dostatočná na vykonanie požadovaných akcií vydaním pokynov pre hardvér stroja. Každá strojová inštrukcia sa skladá z dvoch častí: operačnej, ktorá definuje „čo má robiť“, a operandu, ktorý definuje objekty spracovania, teda čo má robiť. Inštrukcia mikroprocesorového stroja napísaná v jazyku Assembly je jedným riadkom v tejto podobe: návestie / inštrukcie operátora (ov) smernice; komentáre Štítok, príkaz / smernica a operand sú oddelené najmenej jednou medzerou alebo znakom tabulátora. Príkazy operandov sú oddelené čiarkami.

Štruktúra inštrukcie montážneho jazyka Inštrukcia montážneho jazyka hovorí prekladateľovi, aké kroky by mal mikroprocesor podniknúť. Direktívy asemblera sú parametre zadané v texte programu, ktoré ovplyvňujú proces montáže alebo vlastnosti výstupného súboru. Operand určuje počiatočnú hodnotu údajov (v dátovom segmente) alebo prvky, na ktoré má príkaz reagovať (v segmente kódu). Inštrukcia môže mať jeden alebo dva operandy alebo žiadne operandy. Počet operandov je implicitne určený príkazovým kódom. Ak je potrebné v príkaze alebo smernici pokračovať na ďalšom riadku, použije sa znak spätnej lomky: „“. V predvolenom nastavení Assembler pri písaní príkazov a smerníc nerozlišuje medzi malými a malými písmenami. Príklady direktív a príkazov Count db 1; Názov, smernica, jeden operand mov eax, 0; Velenie, dvaja operandi

Identifikátory sú sekvencie platných znakov, ktoré sa používajú na označenie mien premenných a názvov štítkov. Identifikátor môže pozostávať z jedného alebo viacerých z nasledujúcich znakov: všetky písmená latinskej abecedy; čísla od 0 do 9; špeciálne znaky: _, @, $ ,? ... Ako prvý znak štítku je možné použiť bodku. Ako identifikátory nemožno použiť rezervované názvy assemblerov (smernice, operátory, názvy príkazov). Prvý znak identifikátora musí byť písmeno alebo špeciálny znak. Maximálna dĺžka identifikátora je 255 znakov, ale prekladateľ akceptuje prvých 32 znakov, ostatné ignoruje. Všetky štítky, ktoré sú napísané v riadku, ktorý neobsahuje direktívu assemblera, musia končiť dvojbodkou „:“. Štítok, príkaz (smernica) a operand nemusia začínať na žiadnej konkrétnej pozícii v reťazci. Pre lepšiu čitateľnosť programu sa odporúča zapísať si ich do stĺpca.

Menovky Všetky menovky, ktoré sú napísané v riadku, ktorý neobsahuje direktívu assemblera, musia končiť dvojbodkou „:“. Štítok, príkaz (smernica) a operand nemusia začínať na žiadnej konkrétnej pozícii v reťazci. Pre lepšiu čitateľnosť programu sa odporúča zapísať si ich do stĺpca.

Komentáre Používanie komentárov v programe zvyšuje prehľadnosť, najmä keď nie je jasný zámer súboru inštrukcií. Komentáre začínajú na ľubovoľnom riadku zdrojového modulu bodkočiarkou (;). Všetky znaky vpravo od „; »Na koniec riadku je komentár. Komentár môže obsahovať akékoľvek tlačiteľné znaky vrátane medzery. Komentár môže obsahovať celý riadok alebo môže nasledovať príkaz v rovnakom riadku.

Štruktúra programu montážneho jazyka Program napísaný v montážnom jazyku môže pozostávať z niekoľkých častí, nazývaných moduly, v každej z ktorých je možné definovať jeden alebo viac údajových, zásobníkových a kódových segmentov. Akýkoľvek kompletný program v jazyku montážneho jazyka musí obsahovať jeden hlavný alebo hlavný modul, z ktorého sa má spustiť jeho vykonávanie. Modul môže obsahovať programové segmenty, dátové segmenty a zásobník deklarované pomocou príslušných smerníc.

Pamäťové modely Pred deklarovaním segmentov musíte špecifikovať pamäťový model pomocou direktívy. Modifikátor MODEL memory_model, call_convention, OS_type, stack_parameter Základné pamäťové modely montážneho jazyka: Pamäťový model Adresovanie kódu Adresovanie dát Operačný systém Kód a vkladanie dát TINY NEAR MS-DOS Povolené MALÉ V BLÍZKOSTI MS-DOS, Windows Nie MEDIUM FAR NEAR MS-DOS, Windows Nie KOMPAKTNÉ V BLÍZKOSTI MS-DOS, Windows No LARGE FAR MS-DOS, Windows No HUGE FAR MS-DOS, Windows No NEAR Windows 2000, Windows XP, Windows Allowed FLAT NEAR NT,

Pamäťové modely Malý model funguje iba v 16-bitových aplikáciách MS-DOS. V tomto modeli sú všetky údaje a kód umiestnené v jednom fyzickom segmente. Veľkosť programový súbor v takom prípade nepresahuje 64 KB. Malý model podporuje jeden segment kódu a jeden segment údajov. Dáta a kód sú pri použití tohto modelu adresované tak skoro. Stredný model podporuje viac segmentov kódu a jeden dátový segment, pričom všetky referencie v segmentoch kódu sú predvolene považované za ďaleko a referencie v dátovom segmente sú blízko. Kompaktný model podporuje viac dátových segmentov, ktoré používajú vzdialené adresovanie údajov, a jeden segment kódu, ktorý využíva blízke adresovanie. Veľký model podporuje viac segmentov kódu a viac segmentov údajov. V predvolenom nastavení sú všetky odkazy na kódy a údaje považované za vzdialené. Obrovský model je takmer ekvivalentný veľkému pamäťovému modelu.

Pamäťové modely Plochý model predpokladá nesegmentovanú konfiguráciu programu a používa sa iba v 32-bitových operačných systémoch. Tento model je podobný malému modelu v tom, že údaje a kód sú obsiahnuté v jednom 32-bitovom segmente. Pred smernicou vypracovať program pre plochý model. jeden vzor by mal byť umiestnený :. 386 ,. 486 ,. 586 alebo. 686. Voľba smernice pre výber procesora určuje množinu príkazov dostupných pri písaní programov. Písmeno p po smernici pre výber procesora znamená chránený prevádzkový režim. Adresovanie údajov a kódov je blízko, pričom všetky adresy a smerníky sú 32-bitové.

Pamäťové modely. Modifikátor MODEL memory_model, call_convention, OS_type, stack_parameter Parameter modifikátor sa používa na definovanie typov segmentov a môže nadobúdať nasledujúce hodnoty: use 16 (segmenty vybraného modelu sú použité ako 16-bitové) use 32 (segmenty vybraného modelu sú použité ako 32-bitové). Parameter call_convention sa používa na určenie spôsobu odovzdávania parametrov pri volaní procedúry z iných jazykov vrátane jazykov vyššej úrovne (C ++, Pascal). Parameter môže nadobúdať nasledujúce hodnoty: C, BASIC, FORTRAN, PASCAL, SYSCALL, STDCALL.

Pamäťové modely. Modifikátor MODEL memory_model, call_ convention, OS_type, stack_parameter OS_type je predvolený OS_DOS a v súčasnosti je jedinou podporovanou hodnotou pre tento parameter. Stack_parameter je nastavený na: NEARSTACK (register SS je DS, oblasti údajov a zásobníkov sa nachádzajú v rovnakom fyzickom segmente) FARSTACK (register SS sa nerovná DS, oblasti údajov a zásobníkov sa nachádzajú v rôznych fyzických segmentoch). Predvolená hodnota je NEARSTACK.

Príklad programu „nič nerobenie“. 686 P. MODEL BYT, STDCALL. ÚDAJE. CODE START: RET END START RET - príkaz mikroprocesora. Zaisťuje správne ukončenie programu. Zvyšok programu súvisí s prácou prekladateľa. ... 686 P - Povolené príkazy chráneného režimu Pentium 6 (Pentium II). Táto smernica vyberie podporovanú sadu inštrukčných inštrukcií zadaním modelu procesora. ... MODEL FLAT, stdcall je model plochej pamäte. Tento pamäťový model sa používa v operačnom systéme Windows. stdcall je použitá konvencia volania procedúr.

Príklad programu „nič nerobenie“. 686 P. MODEL BYT, STDCALL. ÚDAJE. ŠTART KÓDU: ZNOVU KONIEC ŠTART. DATA je programový segment obsahujúci údaje. Tento program nepoužíva zásobník, takže. STACK chýba. ... CODE je segment programu obsahujúci kód. START je štítok. KONIEC ŠTART - koniec programu a správa kompilátoru na spustenie vykonávania programu od štítku START. Každý program musí obsahovať END smernicu, ktorá označuje koniec zdrojového kódu programu. Všetky riadky, ktoré nasledujú za smernicou END, sú ignorované. Štítok uvedený za smernicou END informuje prekladateľa o názve hlavného modulu, z ktorého sa program spúšťa. Ak program obsahuje jeden modul, štítok za smernicou END možno vynechať.

Prekladatelia montážneho jazyka Prekladateľom je program alebo technické prostriedkyktorá prevádza program v jednom z programovacích jazykov na program v cieľovom jazyku s názvom objektový kód. Okrem podpory mnemotechniky strojových pokynov má každý prekladateľ svoju vlastnú sadu smerníc a makro nástrojov, ktoré sú často s čímkoľvek nekompatibilné. Hlavné typy prekladačov v jazyku assembler: MASM (Microsoft Assembler), TASM (Borland Turbo Assembler), FASM (Flat Assembler) - bezplatný viacpriechodový assembler od Tomasza Grishtara (poľský jazyk), NASM (Netwide Assembler) - bezplatný assembler pre architektúru Intel x 86, vytvoril Simon Tatham v spolupráci s Julianom Hall a v súčasnosti ho vyvíja malý vývojový tím na serveri Source. Forge. sieť.

Src \u003d "https://present5.com/presentation/-29367016_63610977/image-15.jpg" alt \u003d "(! LANG: Vysielanie programu do Microsoft Visual Studio 2005 1) Vytvorte projekt výberom File-\u003e New-\u003e Project a"> Трансляция программы в Microsoft Visual Studio 2005 1) Создать проект, выбрав меню File->New->Project и указав имя проекта (hello. prj) и тип проекта: Win 32 Project. В дополнительных опциях мастера проекта указать “Empty Project”.!}

Src \u003d "https://present5.com/presentation/-29367016_63610977/image-16.jpg" alt \u003d "(! LANG: Vysielanie programu do Microsoft Visual Studio 2005 2) V strome projektu (View-\u003e Solution Explorer) pridajte"> Трансляция программы в Microsoft Visual Studio 2005 2) В дереве проекта (View->Solution Explorer) добавить файл, в котором будет содержаться текст программы: Source. Files->Add->New. Item.!}

Preklad programu do Microsoft Visual Studio 2005 3) Vyberte typ súboru Code C ++, ale zadajte názov s príponou. asm:

Preklad programu do Microsoft Visual Studio 2005 5) Nastavte možnosti kompilátora. Pravým tlačidlom myši kliknite na ponuku Vlastné pravidlá zostavenia ... v súbore projektu.

Preklad programu do programu Microsoft Visual Studio 2005 a v zobrazenom okne vyberte Microsoft Macro Assembler.

Preklad programu v Microsoft Visual Studio 2005 Skontrolujte kliknutím pravým tlačidlom myši v ahoj. asm stromu projektu ponuky Vlastnosti a nastavte Všeobecné-\u003e Nástroj: Microsoft Macro Assembler.

Src \u003d "https://present5.com/presentation/-29367016_63610977/image-22.jpg" alt \u003d "(! LANG: Vysielanie programu do Microsoft Visual Studio 2005 6) Zkompilujte súbor výberom príkazov Zostaviť -\u003e Zostaviť ahoj. Prj."> Трансляция программы в Microsoft Visual Studio 2005 6) Откомпилировать файл, выбрав Build->Build hello. prj. 7) Запустить программу, нажав F 5 или выбрав меню Debug->Start Debugging.!}

Programovanie v OS Windows Programovanie v OS Windows je založené na použití funkcií API (Application Program Interface). Ich počet dosahuje 2000. Program pre Windows pozostáva vo veľkej miere z týchto hovorov. Všetky interakcie s externými zariadeniami a prostriedkami operačného systému sa vyskytujú spravidla prostredníctvom týchto funkcií. Prevádzkové systém Windows používa model plochej pamäte. Adresa ľubovoľného pamäťového miesta bude určená obsahom jedného 32-bitového registra. Existujú 3 typy programových štruktúr pre Windows: dialógové okno (hlavné okno - dialógové okno), konzolová štruktúra alebo štruktúra bez okien, klasická štruktúra (okno, drôtový model).

Volajte funkcie systému Windows API V súbore pomoci je akákoľvek funkcia API reprezentovaná ako typ function_name (FA 1, FA 2, FA 3) Type - typ návratovej hodnoty; ФАх - zoznam formálnych argumentov v poradí, v akom sa vyskytujú, napríklad int Správa. Box (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Táto funkcia zobrazuje okno so správou a výstupné tlačidlo (alebo tlačidlá). Význam parametrov: h. Wnd - rukoväť k oknu, v ktorom sa objaví okno so správou, lp. Text - text, ktorý sa objaví v okne, lp. Titulok - text v titulku okna, u. Typ - typ okna, najmä môžete definovať počet výstupných tlačidiel.

Volanie funkcií rozhrania Windows API v správe. Box (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Takmer všetky parametre funkcií API sú v skutočnosti 32-bitové celé čísla: HWND je 32-bitové celé číslo, LPCTSTR je 32-bitový ukazovateľ na reťazec, UINT je 32-bitové celé číslo. Prípona „A“ sa často pripája k názvu funkcie na prechod na novšie verzie funkcií.

Volanie funkcií rozhrania Windows API v správe. Box (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Ak používate MASM, musíte na koniec názvu pridať @N N - počet bajtov, ktoré zadané argumenty zaberajú v zásobníku. Pre funkcie Win 32 API možno toto číslo definovať ako počet argumentov n krát 4 (bajty v každom argumente): N \u003d 4 * n. Na vyvolanie funkcie použite príkaz CALL assembler. V takom prípade sú jej všetky argumenty funkcie odovzdané cez zásobník (príkaz PUSH). Smer odovzdávania argumentov: ZĽAVA DO VPRAVO - SPODNÉ Hore. Prvý argument, ktorý sa vloží do zásobníka, je u. Typ. Volanie zadanej funkcie bude vyzerať takto: CALL Message. Krabica. [chránené e-mailom]

Volanie funkcií rozhrania Windows API v správe. Box (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Výsledkom vykonania akejkoľvek funkcie API je spravidla celé číslo, ktoré sa vráti v registri EAX. Direktíva OFFSET je „posun segmentu“, alebo, čo sa týka vysokej úrovne, „ukazovateľ“ na začiatok riadku. Direktíva EQU, rovnako ako #define v jazyku C, definuje konštantu. Direktíva EXTERN hovorí prekladateľovi, že funkcia alebo identifikátor sú pre daný modul externé.

Príklad programu „Ahoj všetci!“ ... 686 P. MODEL BYT, STDCALL. STACK 4096. DATA MB_OK EQU 0 STR 1 DB "Môj prvý program", 0 STR 2 DB "Ahoj všetci!", 0 HW DD? EXTERN Správa. Krabica. [chránené e-mailom]: BLÍZKO. ŠTART KÓDU: PUSH MB_OK PUSH OFFSET STR 1 PUSH OFFSET STR 2 PUSH HW CALL Správa. Krabica. [chránené e-mailom] ZNOVU KONIEC ŠTART

Smernica INVOKE Prekladač jazyka MASM umožňuje tiež zjednodušenie volania funkcií pomocou nástroja pre makro - smernica INVOKE: funkcia INVOKE, parameter1, parameter2, ... K volaniu funkcie nie je potrebné pridávať znak @; parametre sa zapisujú presne v poradí, v akom sú uvedené v popise funkcie. parametre sú vložené do zásobníka makrami prekladača. na použitie smernice INVOKE musíte mať popis prototypu funkcie používajúci smernicu PROTO v tvare: Správa. Krabica. PROTO: DWORD ,: DWORD Ak program používa mnoho funkcií Win 32 API, je vhodné použiť direktívu include C: masm 32includeuser 32. inc

1. Architektúra počítača ………………………………………………………… 5

    1.1. Registre.

    1.1.1 Registre na všeobecné účely.

1.1.2. Segmentové registre

1.1.3 Register vlajok

1.2. Organizácia pamäti.

1.3. Prezentácia údajov.

1.3.1 Typy údajov

1.3.2 Zobrazenie znakov a reťazcov

2. Prevádzkovatelia montážneho programu ……………………………………

    1. Príkazy jazyka zhromaždenia

2.2. Režimy adresovania a formáty strojových pokynov

3. Pseudooperátori ……………………………………………………….

3.1 Smernice o definícii údajov

3.2 Štruktúra asemblerového programu

3.2.1 Segmenty programu. Predpokladajme smernicu

3.2.3 Zjednodušená smernica o segmentácii

4. Zostavenie a prepojenie programu ………………………….

5. Príkazy na zasielanie údajov …………………………………………….

    5.1 Všeobecné príkazy

    5.2 Príkazy pre prácu so zásobníkom

5.3 I / O príkazy

5.4 Príkazy na presmerovanie adries

5.5 Príkazy na zasielanie príznakov

6. Aritmetické príkazy ……………………………………………….

    6.1 Aritmetické operácie na binárnych celých číslach

6.1.1 Sčítanie a odčítanie

6.1.2 Príkazy na zvýšenie a zníženie prijímača o jednu

6.2 Násobenie a delenie

6.3 Zmena znamienka

7. Logické operácie ………………………………………………….

8. Smeny a cyklické smeny …………………………………………

9. Sláčikové operácie ………………………………………………….

10. Logika a organizácia programov ………………………………………

10.1 Bezpodmienečné skoky

10.2 Podmienené skoky

10.4 Rutiny v montážnom jazyku

10.5 Prerušenia INT

10.6 Systémový softvér

10.6.1.1 Čítanie klávesnice.

10.6.1.2 Zobrazovanie znakov na obrazovke

10.6.1.3 Ukončiť programy.

10.6.2.1 Výber režimov zobrazenia

11. Disková pamäť ……………………………………………………… ..

11.2 Tabuľka distribúcie súborov

11.3 Disk I / O

11.3.1 Zápis súboru na disk

11.3.1.1 Údaje vo formáte ASCIIZ

11.3.1.2 Číslo spisu

11.3.1.3 Vytvoriť súbor na disku

11.3.2 Čítanie súboru na disku

Úvod

Zberný jazyk je symbolické znázornenie strojového jazyka. Všetky procesy v osobnom počítači (PC) na najnižšej hardvérovej úrovni sa riadia iba príkazmi v strojovom jazyku (pokyny). Nie je možné skutočne vyriešiť problémy spojené s hardvérom (alebo dokonca problémy závislé od hardvéru, ako napríklad zlepšenie výkonu programu) bez znalosti assemblera.

Assembler je pohodlná forma príkazov priamo pre komponenty PC a vyžaduje znalosť vlastností a schopností integrovaného obvodu obsahujúceho tieto komponenty, konkrétne mikroprocesora PC. Montážny jazyk teda priamo súvisí s vnútornou organizáciou počítača. A nie je náhoda, že takmer všetci prekladači jazykov na vysokej úrovni podporujú prístup na programovú úroveň montážneho jazyka.

Súčasťou odbornej prípravy profesionálneho programátora je nevyhnutne štúdium asemblera. Je to tak preto, lebo programovanie v assembleri vyžaduje znalosť architektúry PC, čo vám umožňuje vytvárať efektívnejšie programy v iných jazykoch a kombinovať ich s programami v assembleri.

Príručka sa venuje problematike programovania v assembleri pre počítače na báze mikroprocesorov od spoločnosti Intel.

Tento výukový program je určený všetkým záujemcom o architektúru procesorov a základom programovania v assembleri, predovšetkým vývojárom softvéru.

    Architektúra PC.

Počítačová architektúra je abstraktné znázornenie počítača, ktoré odráža jeho štrukturálne, obvodové a logické usporiadanie.

Všetky moderné počítače majú niektoré spoločné a individuálne vlastnosti architektúry. Jednotlivé vlastnosti sú vlastné iba konkrétnemu počítačovému modelu.

Koncept počítačovej architektúry obsahuje:

    bloková schéma počítača;

    prostriedky a metódy prístupu k prvkom blokovej schémy počítača;

    súbor a dostupnosť registrov;

    organizácia a metódy adresovania;

    spôsob prezentácie a formát počítačových údajov;

    súbor pokynov pre počítačový stroj;

    formáty strojových pokynov;

    prerušiť manipuláciu.

Hlavné prvky počítačového hardvéru: systémová jednotka, klávesnica, zobrazovacie zariadenia, diskové jednotky, tlačové zariadenia (tlačiareň) a rôzna komunikácia. Systémová jednotka pozostáva zo základnej dosky, napájacieho zdroja a rozširujúcich slotov pre ďalšie karty. Na systémovej doske je umiestnený mikroprocesor, pamäť iba na čítanie (ROM), pamäť s náhodným prístupom (RAM) a koprocesor.

      Registre.

Vo vnútri mikroprocesora sú informácie obsiahnuté v skupine 32 registrov (16 používateľov, 16 systémov), ktoré sú do istej miery dostupné pre použitie programátorom. Pretože je výučba venovaná programovaniu pre mikroprocesor 8088-i486, je najlogickejšie začať túto tému diskusiou o interných registroch mikroprocesora, ktoré sú k dispozícii používateľovi.

Registre používateľov používa programátor na zápis programov. Medzi tieto registre patria:

    osem 32-bitových registrov (univerzálne registre) EAX / AX / AH / AL, EBX / BX / BH / BL, ECX / CX / CH / CL, EDX / DX / DLH / DL, EBP / BP, ESI / SI, EDI / DI, ESP / SP;

    šesť 16-bitových registrov segmentov: CS, DS, SS, ES, FS, GS;

    stavové a riadiace registre: register príznakov EFLAGS / FLAGS a register ukazovateľov inštrukcií EIP / IP.

Lomka označuje časti jediného 32-bitového registra. Predpona E (rozšírená) označuje použitie 32-bitového registra. Na prácu s bajtmi sa používajú registre s predponami L (low) a H (high), napríklad AL, CH - označujúce nízky a vysoký bajt 16-bitových častí registrov.

        Registre na všeobecné účely.

EAX / AX / AH / AL (register akumulátora) - batéria... Používajú sa pri násobení a delení, v I / O operáciách a v niektorých operáciách na reťazcoch.

EBX / BX / BH / BL - základný register (základný register), často používaný pri adresovaní údajov v pamäti.

ECX / CX / CH / CL - pult (register počtu), používaný ako počítadlo opakovania slučky.

EDX / DX / DH / DL - dátový register (dátový register), slúži na ukladanie medziprocesov. V niektorých príkazoch je to povinné.

Všetky registre v tejto skupine vám umožňujú prístup k ich „spodným“ častiam. Na adresovanie je možné použiť iba dolné 16- a 8-bitové časti týchto registrov. Horných 16 bitov týchto registrov nie je k dispozícii ako nezávislý objekt.

Na podporu príkazov na spracovanie riadkov, ktoré umožňujú postupné spracovanie reťazcov prvkov s dĺžkou 32, 16 alebo 8 bitov, použite:

ESI / SI (register registra zdrojov) - index zdroj... Obsahuje adresu aktuálneho zdrojového prvku.

EDI / DI (register indexu destilácie) - index prijímač (príjemca). Obsahuje aktuálnu adresu v reťazci prijímača.

V architektúre mikroprocesora na hardvérovo-softvérovej úrovni je podporovaná dátová štruktúra - komín. Na prácu so zásobníkom existujú špeciálne príkazy a špeciálne registre. Je potrebné poznamenať, že zásobník je naplnený smerom k menším adresám.

ESP / SP (register zásobníka poINTer) - registrovať ukazovateľ stoh... Obsahuje ukazovateľ na hornú časť zásobníka v aktuálnom segmente zásobníka.

EBP / BP (základný register POINTer) - register základného ukazovateľa stohu... Navrhnuté na usporiadanie náhodného prístupu k údajom vo vnútri zásobníka.

1.1.2. Segmentové registre

Mikroprocesorový softvérový model má šesť segmentové registre: CS, SS, DS, ES, GS, FS. Ich existencia je spôsobená špecifikami organizácie a využívania RAM mikroprocesormi Intel. Mikroprocesorový hardvér podporuje štrukturálnu organizáciu programu pozostávajúcu z segmenty. Registre segmentov sa používajú na označenie segmentov, ktoré sú momentálne k dispozícii. Mikroprocesor podporuje nasledujúce typy segmentov:

    Segment kódu.Obsahuje programové príkazy. Pre prístup do tohto segmentu použite register CS (register segmentového registra) - register kódov segmentov... Obsahuje adresu segmentu strojových inštrukcií, ku ktorým má mikroprocesor prístup.

    Dátový segment. Obsahuje údaje spracované programom. Pre prístup do tohto segmentu použite register DS (register dátových segmentov) - segmentový dátový registerktorá ukladá adresu dátového segmentu aktuálneho programu.

    Skladací segment. Tento segment predstavuje oblasť pamäte, ktorá sa nazýva zásobník. Mikroprocesor organizuje zásobník podľa princípu - prvý „dovnútra“, prvý „von“. Na prístup do zásobníka použite register SS (register segmentového zásobníka) - register segmentu zásobníkaobsahujúcu adresu segmentu zásobníka.

    Segment ďalších údajov. Spracované údaje môžu byť v troch ďalších segmentoch údajov. V predvolenom nastavení sa predpokladá, že údaje sú v dátovom segmente. Pri použití ďalších údajových segmentov je potrebné ich adresy výslovne špecifikovať pomocou špeciálnych predpísaní segmentov v predpise. Adresy ďalších údajových segmentov musia byť obsiahnuté v ES, GS, FS (rozšírené registre údajových segmentov).

        Kontrolné a stavové registre

Mikroprocesor obsahuje niekoľko registrov, ktoré obsahujú informácie o stave samotného mikroprocesora aj programu, ktorého príkazy sú momentálne načítané do potrubia. To:

Register príkazového ukazovateľa EIP / IP;

    príznaky registrácie EFLAGS / FLAGS.

Pomocou týchto registrov môžete získať informácie o výsledkoch vykonávania príkazov a ovplyvňovať stav samotného mikroprocesora.

EIP / IP (register poINTer inštrukcií) - ukazovateľ tímy... Register EIP / IP je široký 32 alebo 16 bitov a obsahuje posunutie nasledujúcej inštrukcie, ktorá sa má vykonať, vzhľadom na obsah registra segmentu CS v aktuálnom segmente inštrukcie. Tento register nie je priamo prístupný, ale mení sa príkazmi skoku.

EFLAGS / FLAGS (Vlajkový register) - registrovať vlajky... Bitová hĺbka 32/16 bitov. Jednotlivé bity tieto registre majú špecifický funkčný účel a nazývajú sa vlajky. Príznak je bit, ktorý má hodnotu 1 („príznak je nastavený“), ak je splnená určitá podmienka, a inak hodnotu 0 („príznak je vymazaný“). Spodná časť tohto registra je úplne analogická s registrom FLAGS pre i8086.

1.1.3 Register vlajok

Register vlajok je 32-bitový a má názov EFLAGS (obrázok 1). Jednotlivé bity registra majú špecifický funkčný účel a nazývajú sa vlajky. Každému z nich je priradené konkrétne meno (ZF, CF atď.). Dolných 16 bitov EFLAGS predstavuje 16-bitový register príznakov FLAGS používaný pri vykonávaní programov napísaných pre mikroprocesor i086 a i286.

Obr. 1 Register vlajok

Niektoré príznaky sa bežne označujú ako príznaky stavu; automaticky sa menia pri vykonávaní príkazov a opravujú určité vlastnosti ich výsledkov (napríklad či sa rovná nule). Ostatné vlajky sa nazývajú štátne vlajky; menia sa od programu a ovplyvňujú ďalšie správanie procesora (napríklad blokovanie prerušení).

Príznaky stavu:

CF (vlajka na prenášanie) - niesť vlajku... Preberá hodnotu 1, ak sa pri pridávaní celých čísel objavila deliaca jednotka, ktorá sa „nezmestila“ do bitovej mriežky, alebo ak pri odpočítaní nepodpísaných čísel bolo prvé z nich menšie ako druhé. V príkazoch shift je v CF nastavený bit, ktorý presiahol bitovú mriežku. CF tiež zachytáva vlastnosti príkazu na násobenie.

OF (príznak pretečenia) - vlajka pretečenia... Je nastavená na 1, ak sa pri sčítaní alebo odčítaní celých čísel so znamienkom získa výsledok, ktorý je v absolútnej hodnote väčší ako prípustná hodnota (mantisa pretiekla a „vyliezla“ do znakového bitu).

ZF (nulový príznak) - nulová zástava... Je nastavená na 1, ak je výsledok príkazu rovný 0.

SF (príznak SIgn) - vlajka podpísať... Je nastavená na 1, ak je výsledkom operácie so podpísanými číslami negatívny výsledok.

PF (paritný príznak) - vlajka parita... Rovná sa 1, ak výsledok nasledujúceho príkazu obsahuje párny počet binárnych. Zvyčajne sa berie do úvahy iba počas I / O operácií.

AF (pomocná vlajka na prenášanie) - extra vlajka na prenášanie... Opravuje zvláštnosti vykonávania operácií na binárnych desatinných číslach.

Príznaky stavu:

DF (smerová vlajka) - smerová vlajka... Nastavuje smer prezerania riadkov v príkazoch reťazca: pri DF \u003d 0 sa riadky skenujú „vpred“ (od začiatku do konca), pri DF \u003d 1 - v opačnom smere.

IOPL (úroveň privilégií vstupu / výstupu) - Úroveň privilégií I / O.Používa sa v chránenom režime mikroprocesora na riadenie prístupu k I / O príkazom v závislosti od oprávnenia úlohy.

NT (vnorená úloha) - príznak vnorenia úlohy.Používa sa v chránenom režime mikroprocesora na zaznamenanie skutočnosti, že jedna úloha je vnorená do inej.

Príznak systému:

IF (príznak prerušenia) - príznak prerušenia... Pri IF \u003d 0 procesor prestane reagovať na prichádzajúce prerušenia, pri IF \u003d 1 sa blokovanie prerušenia uvoľní.

TF (vlajka pasce) - stopový príznak... Ak je TF \u003d 1, procesor po vykonaní každej inštrukcie vykoná prerušenie (s číslom 1), ktoré je možné použiť pri ladení programu na jeho vysledovanie.

RF (príznak obnovenia) - obnovte vlajku... Používa sa pri spracovaní prerušení z registrov ladenia.

VM (režim virtuAL 8086) - virtuálna vlajka 8086. 1 procesor pracuje vo virtuálnom režime 8086. 0- procesor pracuje v reálnom alebo chránenom režime.

AC (kontrola zarovnania) - príznak kontroly zarovnania. Navrhnuté tak, aby umožňovali kontrolu zarovnania pri prístupe do pamäte.

      Organizácia pamäti.

Volá sa fyzická pamäť, ku ktorej má mikroprocesor prístup rAM (alebo pamäť s náhodným prístupom - RAM). RAM je reťazec bajtov, ktoré majú svoju vlastnú jedinečnú adresu (svoje číslo), tzv fyzický. Rozsah fyzických adries je od 0 do 4 GB. Mechanizmus správy pamäte je úplne založený na hardvéri.

Hardvér mikroprocesora podporuje niekoľko modelov využitia pamäte RAM:

    segmentovaný model... V tomto modeli je pamäť pre programy rozdelená na súvislé pamäťové oblasti (segmenty) a samotný program má prístup iba k údajom, ktoré sú v týchto segmentoch;

    model stránky... V tomto prípade sa RAM považuje za skupinu blokov pevnej veľkosti 4 KB. Hlavná aplikácia tohto modelu je spojená s organizáciou virtuálnej pamäte, ktorá umožňuje programom využívať pamäťový priestor väčší ako množstvo fyzickej pamäte. Pre mikroprocesor Pentium môže byť možná virtuálna pamäť až 4 TB.

Použitie a implementácia týchto modelov závisí od prevádzkového režimu mikroprocesora:

    Režim skutočnej adresy (skutočný režim). Režim je podobný ako v procesore i8086. Vyžaduje sa pre fungovanie programov vyvinutých pre prvé modely procesorov.

    Chránený režim. V chránenom režime je možné spracúvať viac úloh naraz, chrániť pamäť pomocou štvorúrovňového mechanizmu privilégií a jeho stránkovanie.

    Virtuálny režim 8086. V tomto režime je možné spustiť niekoľko programov pre i8086. V takom prípade je možná prevádzka programov v reálnom režime.

Segmentácia je mechanizmus adresovania, ktorý zaisťuje existenciu viacerých nezávislých adresných priestorov. Segment je nezávislý hardvérom podporovaný blok pamäte.

Každý program môže vo všeobecnosti pozostávať z ľubovoľného počtu segmentov, má však priamy prístup k trom hlavným: kódu, údajom a zásobníku - a k jednému až trom ďalším údajovým segmentom. Operačný systém umiestňuje programové segmenty do pamäte RAM na konkrétne fyzické adresy a potom umiestňuje hodnoty týchto adries do zodpovedajúcich registrov. Vo vnútri segmentu program pristupuje k adresám relatívne k začiatku segmentu lineárne, to znamená od adresy 0 a končiacej adresou rovnajúcou sa veľkosti segmentu. Relatívna adresa resp zaujatosť,ktorý mikroprocesor používa na prístup k údajom v rámci segmentu, sa nazýva efektívne.

Vytvorenie fyzickej adresy v reálnom režime

V reálnom režime je rozsah zmeny fyzickej adresy od 0 do 1 MB. Maximálna veľkosť segmentu je 64 KB. Keď sa hovorí o konkrétnom fyzická adresa RAM je určená adresou začiatku segmentu a posunom v rámci segmentu. Počiatočná adresa segmentu sa prevezme z príslušného registra segmentov. V tomto prípade obsahuje segmentový register iba horných 16 bitov fyzickej adresy začiatku segmentu. Chýbajúce spodné štyri bity 20-bitovej adresy sa získajú posunutím hodnoty registra segmentu doľava o 4 bity. Operácia posunu sa vykonáva v hardvéri. Výsledná 20-bitová hodnota je skutočná fyzická adresa zodpovedajúca začiatku segmentu. Tj fyzická adresa je určený ako pár: segment: offset, kde segment je prvých 16 bitov počiatočnej adresy pamäťového segmentu, ku ktorému bunka patrí, a offset je 16-bitová adresa tejto bunky, počítaná od začiatku tohto pamäťového segmentu (hodnota 16 * segment) + offset udáva absolútnu adresu bunky). Ak napríklad register CS ukladá hodnotu 1234h, potom pár adries 1234h: 507h definuje absolútnu adresu rovnú 16 * 1234h + 507h \u003d 12340h + 507h \u003d 12847h. Takýto pár je napísaný vo forme dvojitého slova a (čo sa týka čísel) v „obrátenej“ podobe: prvé slovo obsahuje ofset a druhé - segment a každé z týchto slov je zase prezentované v „obrátenej“ forme. Napríklad pár 1234h: 5678h bude napísaný takto: | 78 | 56 | 34 | 12 |.

Tento mechanizmus na vytvorenie fyzickej adresy umožňuje, aby bol softvér premiestniteľný, to znamená, že nezávisí od konkrétnych adries jeho načítania v pamäti RAM.

Úvod.

Volá sa jazyk, v ktorom je napísaný pôvodný program vchodjazyk a jazyk, do ktorého je preložený na vykonanie procesorom, je víkendjazyk. Proces konverzie vstupného jazyka do výstupného jazyka sa nazýva vysielať.Pretože procesory sú schopné vykonávať programy v strojovom jazyku binárnych kódov, ktorý sa na programovanie nepoužíva, je nevyhnutný preklad všetkých zdrojových programov. Známe dve cestypreklady: kompilácia a tlmočenie.

Kedy kompiláciapôvodný program sa najskôr úplne preloží do ekvivalentného programu vo výstupnom jazyku s názvom objektprogram a potom vykonaný. Tento proces je implementovaný pomocou špeciálneho programy,zavolal kompilátor.Volá sa kompilátor, pre ktorý je vstupný jazyk symbolickým vyjadrením strojového (výstupného) jazyka binárnych kódov asembler.

Kedy interpretáciekaždý riadok textu v zdrojovom programe je analyzovaný (interpretovaný) a okamžite sa vykoná príkaz v ňom uvedený. Implementáciou tejto metódy je poverený tlmočnícky program.Tlmočenie trvá dlho. Aby sa zvýšila jeho účinnosť, tlmočník namiesto spracovania každého riadku najskôr prevedie všetky tímreťazce znakov (

). Vygenerovaná postupnosť symbolov sa používa na vykonávanie funkcií priradených pôvodnému programu.

Nasledujúci jazyk zhromaždenia je implementovaný pomocou kompilácie.

Vlastnosti jazyka.

Hlavné vlastnosti assembleru:

● namiesto binárnych kódov používa jazyk symbolické názvy - mnemotechnické pomôcky.Napríklad pre príkaz sčítania (

) používa sa mnemotechnická pomôcka

Odčítanie (

násobenie (

Divízie (

a podobne. Symbolické názvy sa tiež používajú na adresovanie pamäťových miest. Pri programovaní v montážnom jazyku vám namiesto binárnych kódov a adries stačia poznať iba symbolické názvy, ktoré assembler prevedie do binárnych kódov;

každý výrok sa zhoduje jeden strojový príkaz(kód), to znamená, že existuje strojová korešpondencia medzi inštrukciami stroja a operátormi v programe montážneho jazyka;

● jazyk poskytuje prístup ku všetkým predmetoma tímy. Jazyky vysokej úrovne túto schopnosť nemajú. Napríklad montážny jazyk vám umožňuje skontrolovať registrový bit vlajok a jazyk na vysokej úrovni (napríklad

) túto schopnosť nemá. Upozorňujeme, že jazyky pre programovanie systému (napríklad C) sú často v medzipolohe. Z hľadiska prístupnosti sú bližšie k jazyku assembleru, majú však syntax na vysokej úrovni;

● montážny jazyk nie je univerzálny jazyk.Pre každú konkrétnu skupinu mikroprocesorov má svoj vlastný asembler. Jazyky vysokej úrovne nemajú túto nevýhodu.

Na rozdiel od jazykov vyššej úrovne je písanie a ladenie programu montážneho jazyka časovo náročné. Napriek tomu sa jazyk zhromaždenia dočkal široké využitiez dôvodu nasledujúcich okolností:

● program napísaný v montážnom jazyku je oveľa menší a funguje oveľa rýchlejšie ako program napísaný v jazyku vyššej úrovne. U niektorých aplikácií majú tieto ukazovatele prvoradú úlohu, napríklad mnohé systémové programy (vrátane kompilátorov), programy na kreditných kartách, mobilné telefóny, ovládače zariadení atď .;

● niektoré postupy vyžadujú úplný prístup k hardvéru, čo v jazykoch na vysokej úrovni zvyčajne nie je možné. Tento prípad zahŕňa prerušenia a obsluhy prerušenia v operačných systémoch, ako aj radiče zariadení vo vstavaných systémoch, ktoré fungujú v reálnom čase.

Vo väčšine programov je iba malé percento z celkového kódu zodpovedné za veľké percento času vykonania programu. 1% programu je zvyčajne zodpovedných za 50% času vykonania a 10% programu je zodpovedných za 90% času vykonania. Preto sa na napísanie konkrétneho programu v reálnych podmienkach používa assembler aj jeden z jazykov na vysokej úrovni.

Formát operátora v montážnom jazyku.

Program v montážnom jazyku je zoznam príkazov (príkazov, viet), z ktorých každý zaberá samostatný riadok a obsahuje štyri polia: pole štítku, pole operácie, pole operandu a pole komentára. Pre každé pole je samostatný stĺpec.

Pole štítku.

Pre pole štítku je pridelený stĺpec 1. Na štítku je symbolický názov alebo identifikátor, adresypamäť. Je to nevyhnutné, aby ste mohli:

● urobte podmienený alebo bezpodmienečný skok na príkaz;

● získať prístup k miestu, kde sú uložené údaje.

Takéto vyhlásenia sú označené štítkom. Na označenie mena sa používajú (veľké) písmená anglickej abecedy a číslice. Pred menom musí byť písmeno a pred koncom oddeľovač dvojbodky. Na samostatný riadok je možné napísať štítok s dvojbodkou a na ďalší riadok v stĺpci 2 operačný kód, čo zjednodušuje prácu kompilátora. Absencia dvojbodky neumožňuje odlíšiť štítok od operačného kódu, ak sú umiestnené na samostatných riadkoch.

V niektorých verziách montážneho jazyka sú dvojbodky umiestnené iba za štítkami príkazov, nie však za štítkami údajov, a dĺžka štítku môže byť obmedzená na 6 alebo 8 znakov.

V poli štítku by nemali byť rovnaké názvy, pretože štítok je priradený k adresám príkazov. Ak počas vykonávania programu nie je potrebné volať príkaz alebo dáta z pamäte, potom pole štítku zostáva prázdne.

Pole operačného kódu.

Toto pole obsahuje mnemotechnický kód príkazu alebo pseudopríkazu (pozri nižšie). Mnemotechnický kód príkazov vyberajú jazykoví dizajnéri. V montážnom jazyku

mnemotechnická pomôcka vybraná na načítanie registra z pamäte

) a na uloženie obsahu registra do pamäte - mnemotechnické pomôcky

). V montážnych jazykoch

pre obe operácie je možné použiť jeden názov, resp

Ak môže byť výber mnemotechnických názvov ľubovoľný, potom je potreba použitia dvoch strojových pokynov spôsobená architektúrou procesorov.

Mnemotechnická pomôcka registra závisí aj od verzie assemblera (tabuľka 5.2.1).

Pole operandu.

Nachádza sa tu Ďalšie informáciepotrebné na vykonanie operácie. V poli operandov pre inštrukcie skoku je označená adresa, na ktorú chcete skočiť, ako aj adresy a registre, ktoré sú operandmi strojovej inštrukcie. Ako príklad uvedieme operandy, ktoré možno použiť pre 8-bitové procesory

● číselné údaje,

prezentované v rôznych číselných systémoch. Na označenie použitého číselného systému je za konštantou jedno z latinských písmen: B,

Podľa toho sú binárne, osmičkové, hexadecimálne a desatinné číselné systémy (

nemusíte si to zapisovať). Ak je prvá číslica hexadecimálneho čísla A, B, C,

Potom sa vpredu pridá nevýznamná 0 (nula);

● kódy interných registrov mikroprocesora a pamäťových buniek

M (zdroje alebo príjemcovia informácií) vo forme písmen A, B, C,

M alebo ich adresy v ľubovoľnom číselnom systéme (napríklad 10B - adresa registrácie

v binárnom systéme);

● identifikátory,

pre registračné páry lietadiel,

Prvé písmená B,

H; za pár akumulátorov a register značiek -

; pre počítadlo príkazov -

; pre ukazovateľ zásobníka -

● štítky označujúce adresy operandov alebo ďalšie pokyny v podmienke

(ak je podmienka splnená) a bezpodmienečné skoky.Napríklad operand M1 v príkaze

znamená potrebu bezpodmienečného prechodu na príkaz, ktorého adresa v poli štítku je označená identifikátorom M1;

● výrazy,

ktoré sú skonštruované prepojením vyššie uvedených údajov pomocou aritmetických a logických operátorov. Upozorňujeme, že spôsob vyhradenia údajového priestoru závisí od jazykovej verzie. Vývojári montážneho jazyka pre jazyk

Definujte slovo) a neskôr zaviedli alternatívu.

ktorý bol od začiatku v jazyku pre procesory

V jazykovej verzii

používaný

Definujte konštantu).

Procesory spracúvajú operandy rôznych dĺžok. Na jeho definovanie vývojári asemblerov prijali rôzne rozhodnutia, napríklad:

II registre rôznych dĺžok majú rôzne názvy: ЕАХ - na umiestnenie 32-bitových operandov (typ

); АХ - pre 16-bit (typ

a AH - pre 8-bitové (typ

● pre spracovateľov

ku každému operačnému kódu sa pridávajú prípony: prípona

Pre typ

; prípona „.B“ pre typ

pre operandy rôznych dĺžok sa používajú rôzne operačné kódy, napríklad na načítanie bajtu, pol slova (

) a slová v 64-bitovom registri, používajú sa operačné kódy

resp.

Pole pre komentáre.

Toto pole poskytuje vysvetlenie akcií programu. Pripomienky nemajú vplyv na fungovanie programu a sú určené pre ľudí. Môže byť potrebné upraviť program, čo by bez týchto komentárov mohlo byť pre skúsených programátorov úplne nepochopiteľné. Komentár začína symbolom a slúži na vysvetlenie a zdokumentovanie programov. Počiatočný znak komentára môže byť:

● bodkočiarka (;) v jazykoch pre firemné procesory

výkričník (!) v jazykoch pre

Pred každým samostatným riadkom komentára je začiatočný znak.

Pseudopríkazy (smernice).

V assembleri existujú dva hlavné typy príkazov:

základnéinštrukcie, ktoré sú ekvivalentné so strojovým kódom procesora. Tieto príkazy vykonávajú všetko spracovanie poskytované programom;

pseudo príkazy,alebo smernice,určené na obsluhu procesu prekladu programu do jazyka kombinácie kódov. Ako príklad v tabuľke. 5.2.2 sú zobrazené niektoré pseudopríkazy zo vzorkovača striedavého prúdu

pre rodinu

.

Pri programovaní existujú situácie, keď sa podľa algoritmu musí ten istý reťazec príkazov opakovať mnohokrát. Z tejto situácie sa môžete dostať:

● napíšte požadovanú postupnosť príkazov, kedykoľvek sa vyskytnú. Tento prístup zväčšuje veľkosť programu;

● vytvorte túto postupnosť do postupu (podprogram) a v prípade potreby ju zavolajte. Tento výstup má svoje nevýhody: zakaždým, keď musíte vykonať špeciálny príkaz na volanie procedúry a príkaz na vrátenie, ktoré s krátkou a často používanou sekvenciou môžu výrazne znížiť rýchlosť programu.

Najjednoduchším a najefektívnejším spôsobom, ako opakovať reťazec príkazov viackrát, je použitie makro,o ktorých sa dá uvažovať ako o pseudopríkaze určenom na opätovné vysielanie skupiny príkazov, ktoré sa v programe často vyskytujú.

Makro alebo makro sa vyznačuje tromi aspektmi: makro-definíciou, makro-reverziou a makro-expanziou.

Makro definícia

Toto je označenie opakovanej postupnosti programových príkazov použitých pre odkazy v texte programu.

Definícia makra má nasledujúcu štruktúru:

Zoznam výrazov; Makro definícia

Vo vyššie uvedenej štruktúre definície makra možno rozlíšiť tri časti:

● názov

makro, ktoré obsahuje názov

Pseudovelenie

a súbor parametrov;

● označené bodkami telomakro;

● tím

koncovky

makrá.

Sada parametrov definície makra obsahuje zoznam všetkých parametrov uvedených v poli operandu pre vybranú skupinu príkazov. Ak sú tieto parametre v programe zadané skôr, potom ich možno v záhlaví definície makra vynechať.

Ak chcete znova zostaviť vybranú skupinu príkazov, použite adresu pozostávajúcu z mena

makrá a zoznam parametrov s inými hodnotami.

Keď asembler zistí počas kompilácie definíciu makra, uloží ju do tabuľky definícií makra. Pri ďalších vystúpeniach v programe mena (

) makra, assembler ho nahradí telom makra.

Nazýva sa použitie makra ako operačného kódu makro obeh(volaním makra) a jeho nahradenie telom makra je makro expanzia.

Ak je program reprezentovaný ako postupnosť znakov (písmená, číslice, medzery, interpunkcia a návrat na koniec textu, na ktorý chcete prejsť) nový riadok), potom makroexpanzia spočíva v nahradení niektorých reťazcov z tejto postupnosti inými reťazcami.

K rozšíreniu makra dochádza počas procesu montáže, nie počas vykonávania programu. Za spôsob manipulácie s reťazcami znakov je zodpovedný makrofinančné prostriedky.

Proces montáže sa vykonáva v dvoch priechodoch:

● pri prvom prechode sa uložia všetky definície makier a rozšíria sa volania makier. V takom prípade sa pôvodný program načíta a prevedie na program, v ktorom sa odstránia všetky definície makier a každé volanie makra sa nahradí telom makra;

● v druhom priechode je výsledný program spracovaný bez makier.

Parametrizované makrá.

Na prácu s opakovanými sekvenciami príkazov, ktorých parametre môžu mať rôzne hodnoty, sú k dispozícii nasledujúce definície makra:

● s skutočnéparametre, ktoré sú umiestnené v poli operandov makro volania;

● s formálneparametre. V procese rozširovania makra je každý formálny parameter, ktorý sa objaví v tele makra, nahradený zodpovedajúcim skutočným parametrom.

pomocou makier s parametrami.

Program 1 zobrazuje dve podobné postupnosti príkazov, ktoré sa líšia tým, že prvý z nich zamení P a

A druhý

Program 2 obsahuje makro s dvoma formálnymi parametrami P1 a P2. Počas rozšírenia makra je každý znak P1 vo vnútri tela makra nahradený prvým skutočným parametrom (P,

) a P2 sa nahrádza druhým skutočným parametrom (

) z programu č. 1. V makrozóne

program 2 je označený: P,

Prvý skutočný parameter,

Druhý skutočný parameter.

Program 1

Program 2

MOV EBX, Q MOV EAX, Pl

MOV Q, EAX MOV EBX, P2

MOV P, EBX MOV P2, EAX

Rozšírené možnosti.

Zvážme niekoľko pokročilých funkcií jazyka

Ak sa makro obsahujúce príkaz podmieneného vetvenia a štítok, na ktorom sa vetva vytvára, volá dvakrát alebo viackrát, štítok sa duplikuje (problém duplicitných štítkov), čo spôsobí chybu. Preto je každému parametru (programátorovi) ako parametru priradený samostatný štítok. V jazyku

štítok je vyhlásený za miestny (

) a vďaka svojim pokročilým funkciám assembler automaticky generuje iný štítok pri každom rozšírení makra.

umožňuje definovať makrá v rámci iných makier. Táto pokročilá funkcia je veľmi užitočná v kombinácii s podmieneným prepojením. Zvážte

AK WORDSIZE GT 16 M2 MACRO

Makro M2 je možné definovať v oboch častiach výkazu

Definícia však závisí od toho, na akom procesore je program zostavený: 16-bitový alebo 32-bitový. Ak sa M1 nezavolá, potom nebude makro M2 definované vôbec.

Ďalšou pokročilou funkciou je, že makrá môžu volať iné makrá vrátane seba - rekurzívnyhovor. V druhom prípade musí makro dostať sám o sebe parameter, ktorý sa pri každej expanzii mení, aby nezískal nekonečnú slučku, a skontrolovaťtento parameter a ukončenie rekurzie, keď parameter dosiahne určitú hodnotu.

O použití makier v assembleri.

Pri použití makier musí byť assembler schopný vykonávať dve funkcie: zachovať makrodefiníciea predĺžiť volanie makra.

Uchovávanie makier.

Všetky názvy makier sú uložené v tabuľke. Za každým menom nasleduje ukazovateľ na príslušné makro, aby bolo možné ho v prípade potreby zavolať. Niektoré kompilátory majú samostatnú tabuľku pre názvy makier, zatiaľ čo iné majú spoločnú tabuľku, v ktorej sú spolu s názvami makier umiestnené všetky pokyny a smernice týkajúce sa stroja.

Pri stretnutí s makrom počas montáže vytvoril:

nový prvok tabuľkys názvom makra, počtom parametrov a ukazovateľom na inú tabuľku definícií makier, kde bude uložené telo makra;

● zoznam formálneparametre.

Potom sa načíta telo makra a uloží sa do tabuľky definícií makier, čo je iba reťazec symbolov. Formálne parametre nájdené v tele slučky sú označené špeciálnym symbolom.

Interné znázornenie makra

z vyššie uvedeného príkladu pre program 2 (s. 244) je:

MOV EAX, MOV EBX, MOV MOV &

kde bodkočiarka sa používa ako znak návratu vozíka a znak & sa používa ako formálny znak parametra.

Rozšírenie makro hovorov.

Kedykoľvek sa počas montáže vyskytne makro, uloží sa do tabuľky makier. Keď sa makro volá, assembler dočasne pozastaví čítanie vstupu zo vstupného zariadenia a začne čítať uložené telo makra. Formálne parametre extrahované z tela makra sa nahradia skutočnými parametrami a poskytnú ich volanie. Znamienko & pred parametrami umožňuje, aby ich vzorník rozpoznal.

Napriek tomu, že existuje veľa verzií assemblera, procesy montáže majú spoločné znaky a sú si v mnohom podobné. Ďalej je diskutovaná práca dvojpriechodového asemblera.

Dvojpriechodový asembler.

Program sa skladá z niekoľkých operátorov. Preto sa zdá, že pri zostavovaní môžete použiť nasledujúcu postupnosť akcií:

● preložiť do strojového jazyka;

● preniesť prijatý strojový kód do súboru a zodpovedajúcu časť výpisu - do iného súboru;

● opakujte vyššie uvedené postupy, kým nebude preložený celý program.

Tento prístup však nie je efektívny. Príkladom je problém tzv spätné odkazy.Ak je prvým príkazom skok na príkaz P, ktorý sa nachádza na samom konci programu, potom ho assembler nemôže preložiť. Najskôr musí určiť adresu operátora P a na to je potrebné prečítať celý program. Každé úplné prečítanie pôvodného programu sa volá ulička.Poďme si ukázať, ako môžete vyriešiť problém prepojenia pomocou dvoch priechodov:

nasleduje prvá prihrávka zbieraťa uložte do tabuľky všetky definície symbolov (vrátane štítkov) a pri druhom prechode prečítajte a zostavte každého operátora. Táto metóda je pomerne jednoduchá, ale druhý prechod pôvodným programom vyžaduje ďalší čas strávený vstupno-výstupnými operáciami;

● pri prvom prechode, transformovaťprogram do intermediálnej formy a uložiť ho do tabuľky a druhý priechod vykonať nie podľa pôvodného programu, ale podľa tabuľky. Tento spôsob montáže šetrí čas, pretože pri druhom prechode sa nevykonávajú žiadne I / O.

Prvý prechod.

Prvý prechod terčom- zostaviť tabuľku symbolov. Ako už bolo uvedené vyššie, ďalším cieľom prvého priechodu je zachovať všetky makrá a rozšíriť hovory tak, ako sa objavujú. Preto sa definícia symbolu aj rozšírenie makra vyskytujú naraz. Symbol môže byť buď štítok,alebo hodnota,ktorému je pomocou smernice priradený konkrétny názov:

; Hodnota - veľkosť medzipamäte

Priradením hodnôt k symbolickým názvom v poli návestia inštrukcie zostavovateľ v podstate nastaví adresy, ktoré bude mať každá inštrukcia počas vykonávania programu. Za týmto účelom asembler počas procesu montáže šetrí počítadlo adresy príkazu(

) ako špeciálna premenná. Na začiatku prvého prechodu je hodnota špeciálnej premennej nastavená na 0 a zvyšuje sa po každom spracovanom príkaze o dĺžku tohto príkazu. Ako príklad v tabuľke. 5.2.3 je fragment programu označujúci dĺžku príkazov a hodnoty počítadla. Pri prvom prechode sa vytvoria tabuľky symbolické názvy, smernicea operačné kódy,a ak je to potrebné doslovnestôl. Literál je konštanta, pre ktorú si assembler automaticky rezervuje pamäť. Okamžite si všimneme, že moderné procesory obsahujú pokyny s okamžitými adresami, takže ich združení nepodporujú literály.

Tabuľka symbolických mien

obsahuje jeden prvok pre každé meno (tabuľka 5.2.4). Každý prvok tabuľky symbolických mien obsahuje samotný názov (alebo ukazovateľ na neho), jeho číselnú hodnotu a niekedy aj niektoré ďalšie informácie, ktoré môžu obsahovať:

● dĺžka dátového poľa spojeného so symbolom;

● bity realokácie pamäte (ktoré ukazujú, či sa hodnota symbolu mení, ak je program načítaný na inú adresu, ako zamýšľal assembler);

● informácie o tom, či je možné k symbolu získať prístup aj mimo postupu.

Symbolické názvy sú štítky. Môžu byť špecifikované pomocou operátorov (napríklad

Tabuľka smernice.

Táto tabuľka obsahuje zoznam všetkých smerníc alebo pseudopríkazov, ktoré sa vyskytujú pri zostavovaní programu.

Tabuľka prevádzkových kódov.

Pre každý operačný kód obsahuje tabuľka samostatné stĺpce: označenie operačného kódu, operand 1, operand 2, hexadecimálna hodnota operačného kódu, dĺžka príkazu a typ príkazu (tabuľka 5.2.5). Prevádzkové kódy sú rozdelené do skupín v závislosti od počtu a typu operandov. Typ príkazu určuje číslo skupiny a určuje postup, ktorý sa volá pri spracovaní všetkých príkazov v tejto skupine.

Druhý priechod.

Cieľ druhého priechodu- vytvorenie objektového programu a v prípade potreby tlač protokolu o zostavení; výstup informácií potrebných pre linker na prepojenie procedúr, ktoré boli zostavené v rôznom čase, do jedného spustiteľného súboru.

V druhom priechode (ako v prvom) sa riadky obsahujúce príkazy čítajú a spracúvajú jeden po druhom. Pôvodný operátor a výsledný výstup v hexadecimálnom systéme objektkód je možné vytlačiť alebo uložiť do vyrovnávacej pamäte pre neskoršiu tlač. Po vynulovaní počítadla adries príkazov sa vyvolá ďalší výpis.

Pôvodný program môže obsahovať chyby, napríklad:

daný symbol je nedefinovaný alebo definovaný viackrát;

● operačný kód je reprezentovaný neplatným menom (kvôli preklepu), nie je dodávaný s dostatkom operandov alebo má príliš veľa operandov;

● neexistuje operátor

Niektorí zostavovatelia môžu vyzdvihnúť nedefinovaný symbol a nahradiť ho. Avšak vo väčšine prípadov, keď sa zistí vyhlásenie s chybou, asembler zobrazí chybové hlásenie na obrazovke a pokúsi sa pokračovať v procese montáže.

Články venované jazyku zhromaždenia.

Aby stroj mohol vykonávať ľudské príkazy na hardvérovej úrovni, je potrebné nastaviť určitú postupnosť akcií v jazyku „nuly a jednotky“. Zostavovateľ sa stane v tejto veci asistentom. Jedná sa o obslužný program, ktorý pracuje s prekladom príkazov do strojového jazyka. Písanie programu je však veľmi namáhavý a komplikovaný proces. Účelom tohto jazyka nie je vytvárať jednoduché a jednoduché akcie. V súčasnosti vám akýkoľvek použitý programovací jazyk (Assembler funguje skvele) umožňuje písať špeciálne efektívne úlohy, ktoré výrazne ovplyvňujú fungovanie hardvéru. Hlavným účelom je vytvorenie mikropríkazov a malých kódov. Tento jazyk poskytuje viac možností ako napríklad Pascal alebo C.

Stručný popis jazykov asemblerov

Všetky programovacie jazyky sú rozdelené do úrovní: nízka a vysoká. Ktorýkoľvek zo syntaktických systémov „rodiny“ Assemblerovcov sa líši v tom, že spája naraz niektoré výhody najrozšírenejších a najmodernejších jazykov. Majú spoločné s ostatnými, že počítačový systém je možné plne využívať.

Charakteristickou črtou kompilátora je jeho ľahké použitie. Vďaka tomu sa líši od tých, ktoré fungujú iba na vysokých úrovniach. Ak vezmete do úvahy akýkoľvek taký programovací jazyk, Assembler je dvakrát rýchlejší a lepší. Napísať do nej odľahčený program netrvá príliš dlho.

Stručne o štruktúre jazyka

Ak hovoríme všeobecne o práci a štruktúre fungovania jazyka, môžeme s istotou povedať, že jeho príkazy úplne zodpovedajú príkazom procesora. To znamená, že Assembler používa mnemotechnické kódy, ktoré sú pre človeka najpohodlnejšie na písanie.

Na rozdiel od iných programovacích jazykov používa Assembler na zápis do pamäte namiesto adries konkrétne štítky. S procesom vykonávania kódu sú preložené do takzvaných smerníc. Jedná sa o relatívne adresy, ktoré neovplyvňujú činnosť procesora (nie sú preložené do jazyka stroja), ale sú potrebné na rozpoznanie samotným programovacím prostredím.

Každý riadok procesora má svoj vlastný. V takom prípade bude akýkoľvek proces vrátane preloženého správny

Montážny jazyk má niekoľko syntaxí, ktorým sa budeme v článku venovať.

Plusy jazyka

Najdôležitejšou a najpohodlnejšou vlastnosťou montážneho jazyka bude, že doň môžete napísať ľubovoľný program pre procesor, ktorý bude veľmi kompaktný. Ak sa ukáže, že je kód obrovský, potom sú niektoré procesy presmerované na rAM... Zároveň všetko vykonávajú dostatočne rýchlo a bez porúch, pokiaľ ich samozrejme neovláda kvalifikovaný programátor.

Vodiči, oS, BIOS, kompilátory, tlmočníci atď. Sú všetko programy v jazyku assembleri.

Pri použití demontážneho automatu, ktorý prekladá zo stroja na stroj, môžete ľahko pochopiť, ako funguje táto alebo táto systémová úloha, aj keď pre ňu neexistuje vysvetlenie. To je však možné iba vtedy, ak sú programy ľahké. Bohužiaľ je dosť ťažké porozumieť netriviálnym kódom.

Nevýhody jazyka

Pre začínajúcich programátorov (a často aj pre profesionálov) je, bohužiaľ, ťažké analyzovať jazyk. Assembler vyžaduje detailný popis požadovaný príkaz. Z dôvodu potreby použitia strojových pokynov sa zvyšuje pravdepodobnosť chybných akcií a zložitosť vykonania.

Aby toho napísalo čo najviac jednoduchý program, programátor musí byť kvalifikovaný a jeho úroveň vedomostí je dostatočne vysoká. Priemerný špecialista, bohužiaľ, často píše zlé kódy.

Ak je aktualizovaná platforma, pre ktorú je program vytvorený, musia byť všetky príkazy prepísané ručne - vyžaduje to samotný jazyk. Montážny program nepodporuje funkciu automatickej regulácie stavu procesov a výmeny akýchkoľvek prvkov.

Jazykové príkazy

Ako už bolo spomenuté vyššie, každý procesor má svoju vlastnú sadu pokynov. Najjednoduchšie prvky, ktoré rozpoznáva každý typ, sú nasledujúce kódy:


Pomocou smerníc

Programovanie mikrokontrolérov v jazyku (Assembler to umožňuje a perfektne sa vyrovná s fungovaním) na najnižšej úrovni sa vo väčšine prípadov končí dobre. Najlepšie je používať procesory s obmedzenými zdrojmi. Pre 32-bitovú technológiu je tento jazyk perfektný. Príkazy často vidíte v kódoch. Čo to je? A na čo sa používa?

Najprv musíte zdôrazniť, že smernice nie sú preložené do strojového jazyka. Určujú, ako kompilátor pracuje. Na rozdiel od príkazov sa tieto parametre, ktoré majú odlišné funkcie, nelíšia vďaka rôznym procesorom, ale vďaka odlišnému prekladaču. Medzi hlavné smernice patrí:


pôvod mena

Prečo dostal tento jazyk názov - Assembler? Hovoríme o prekladači a prekladači, ktorí šifrujú dáta. V angličtine Assembler neznamená nič iné ako assembler. Program nebol zostavený ručne, bola použitá automatická štruktúra. Navyše v súčasnosti medzi užívateľmi a odborníkmi rozdiel medzi výrazmi už zmizol. Montážny jazyk sa často označuje ako programovacie jazyky, aj keď je to iba pomôcka.

Kvôli všeobecne akceptovanému kolektívnemu názvu sa niektorí ľudia mylne rozhodli, že existuje jeden jazyk na nižšej úrovni (alebo pre neho štandardné normy). Aby programátor pochopil, o akej štruktúre hovoríme, je potrebné si ujasniť, pre ktorú platformu sa konkrétny montážny jazyk používa.

Makro nástroje

Montážne jazyky, ktoré sú relatívne čerstvé, majú makro vybavenie. Uľahčujú program pri písaní a spustení. Vďaka svojej prítomnosti prekladateľ vykoná napísaný kód mnohokrát rýchlejšie. Pri vytváraní podmieneného výberu môžete napísať obrovský blok príkazov a jednoduchšie je používať makro nástroje. Umožní vám rýchle prepínanie medzi akciami v prípade splnenia alebo nesplnenia podmienky.

Pri použití smerníc jazyka makra programátor prijíma makra zostáv. Niekedy môže byť široko používaný a niekedy je jeho funkčnosť obmedzená na jeden príkaz. Ich prítomnosť v kóde uľahčuje prácu, je prehľadnejšia a intuitívnejšia. Mali by ste však byť stále opatrní - v niektorých prípadoch naopak makrá situáciu zhoršujú.