Assembler jazyk. Príkazy a montážne zostavy

Článok sa zaoberá základmi jazyka assembleru vo vzťahu k architektúre win32. Predstavuje symbolický záznam kódov strojov. V každom počítači je najnižšia úroveň hardvér. Tu sa proces riadenia vykonáva pomocou príkazov alebo inštrukcií v strojovom jazyku. Práve v tejto oblasti je montážne zariadenie určené na prácu.

Programovanie assemblerov

Napísanie programu pre assembler je mimoriadne náročný a nákladný proces. Ak chcete vytvoriť efektívny algoritmus, potrebujete hlbšie pochopenie práce počítača, znalosť podrobností o tíme, ako aj zvýšenú pozornosť a presnosť. Účinnosť je kritickým parametrom pre programovanie montéra.
Hlavnou výhodou jazyka assembler je, že vám umožňuje vytvárať krátke a rýchle programy. Používa sa preto spravidla na riešenie vysoko špecializovaných úloh. Je potrebný kód, ktorý funguje efektívne s hardvérovými komponentmi, alebo vyžaduje program náročný na pamäť alebo runtime.

Registre

Registre v jazykovom assembleri, ktoré sa nazývajú pamäťové bunky umiestnené priamo na kryštáli s ALU (procesorom). Zvláštnosťou tohto typu pamäte je rýchlosť cirkulácie, ktorá je oveľa rýchlejšia ako RAM počítača. Tiež sa nazýva super rýchla pamäť RAM (SRAM alebo SRAM).


Existujú tieto typy registrov:
  • Všeobecné registre (RON).
  • Vlajky.
  • Ukazovateľ velenia.
  • Registre segmentov.
  • Existuje 8 registrov všeobecných účelov, každý z nichveľkosť 32 bitov. Prístup k registrom EAX, ECX, EDX, EBX je možné vykonať v 32-bitovom režime, 16-bitový AX, BX, CX, DX a 8-bit AH a AL, BH a BL atď. E "v názvoch registrov znamená Rozšírené. Samotné mená sú spojené s ich menami v angličtine:
  • Register akumulátorov (AX) - pre aritmetické operácie.
  • Čítač (CX) - pre zmeny a cykly.
  • Dátový register (DX) - pre aritmetické operácie a I /O operácie.
  • Základný register (BX) - pre ukazovateľ na dáta.
  • Register ukazovateľov zásobníkov (SP) - pre horný ukazovateľ zásobníka.
  • Register ukazovateľov základnej dosky (BP) - pre indikátor zásobníka.
  • Register indexu zdroja (SI) - pre index odosielateľa (zdroj).
  • Register cieľových indexov (DI) - pre príjemcu.
  • Špecializácia jazykového assemblera RON je podmienená. Môžu byť použité v akejkoľvek operácii. Niektoré príkazy však dokážu použiť iba určité registre. Napríklad príkazy slučky používajú ESX na uloženie hodnoty počítadla. Register vlajok. Toto sa vzťahuje na bajt, ktorý môže akceptovať hodnoty 0 a 1. Súbor všetkých príznakov (približne 30) označuje stav procesora. Príklady vlajok: Prenájom vlajky (CF) - vlajka prenosu, vlajka pretečenia (OF) - pretečenie, vnorená vlajka (NT) - vlajka hniezdenia úloh a mnoho ďalších. Vlajky sú rozdelené do troch skupín: štát, správa a systém.

    Ukazovateľ príkazov (EIP - Instruction Pointer). Tento register obsahuje adresu inštrukcie, ktorá musí byť vykonaná ďalej, ak neexistujú žiadne iné podmienky. Segmentové registre (CS, DS, SS, ES, FS, GS). Ich prítomnosť v assembleri je diktovaná špeciálnou kontrolou operačnej pamäte, ktorá ju zvyšujepoužitie v programoch. Vďaka nim je možné spravovať pamäť až do 4 GB. V architektúre Win32 zmizla potreba segmentov, ale názvy registrov sa zachovali a používali inak.

    Stack

    Toto je pamäťová oblasť určená na prácu postupov. Funkciou balíka je, že posledné dáta zaznamenané v nej sú čitateľné ako prvé. Alebo inými slovami: prvé záznamy zásobníka sú extrahované poslednou. Predstavte si tento proces ako vežu dám. Ak chcete získať kontrolu (spodná kontrola na spodnej časti veže alebo v strede), musíte najskôr odstrániť všetko, čo leží vyššie. A následne je umiestnená na veži kontrolóra, zatiaľ čo parsovanie veže je najprv odstránená. Takýto princíp organizácie pamäte a práce s ňou je diktovaný jej ekonomikou. Stoh je neustále čistený av každom okamihu používa jeden postup.
    Identifikátory, celé čísla, symboly, poznámky, rovnocennosť
    Identifikátor v assembleri programovacieho jazyka má rovnaký význam ako v akomkoľvek inom. Je povolené používať latinské písmená, čísla a znaky "_", ".", "?", "@", "$". Veľké a malé písmená sú ekvivalentné a bodka môže byť iba prvým znakom identifikátora. Celé čísla v assembleri môžu byť špecifikované v referenčných systémoch so základňami 2810 a 16. Akýkoľvek iný číselný záznam bude považovaný za identifikátor pomocou kompilátora zostavovacej jednotky. Pri zaznamenávaní symbolických údajov je možné používať apostrofy aj úvodzovky. Ak potrebujete zadať jeden z nich v reťazci znakov, potom nasledovné pravidlá:
  • na riadku,uzavretý v apostrofy, úvodzovky označujú raz apostrofom - dvakrát:, môže "t ',, povedal, byť či nebyť' '
  • k vedeniu prijatého v nohách, späť pravidlo, duplicitné citácie , apostrofy sú označované ako "nemohol", "Môj obľúbený bar je" "Black Cat" "-" Využime pripomienok na začiatku "
  • v komentovanie inštrukcií v assembleri používa bodkočiarka.". linka, a potom, čo tímu. komentovať prívodné potrubie Ends. smernice rovnocennosť používané podobným spôsobom ako v iných jazykoch indikovať konstantnыe výraz. equi alentnist označené takto:

    EQU

    , čím sa program všetky výskyty bude nahradené v mieste, kde prípustné bodu celé číslo . adresa riadok alebo meno smernice EQU je podobný prácu na #define v jazyku C ++

    . & lt; skript async = "//pagead2.googlesyndication.com/pagead/js /adsbygoogle.js">

    & lt; script & gt; (adsbygoogle = window.adsbygoogle || []) stlačte ({});

    Smernica údajov

    jazyky na vysokej úrovni (C ++, Pascal) je zadaný. To znamená, že používajú údaje určitého typu, existujú funkcie ich spracovania atď. V programovacom jazyku neexistuje žiaden assembler. Existuje iba 5 smerníc na definovanie údajov:

    1. DB - Byte: pre premennú vyberte 1 bajt.
    2. DW-Word vybrať 2 bajty.
    3. ​​
    4. DD - Dvojité slovo vybrať 4 bajty.
    5. DQ - Quad slovo na výber 8 bajtov.
    6. DT - Desať bajtov: Vyberte 10 bajtov pre premennú.

    Písmeno D znamená Definovať.

    Každá smernica sa môže použiť na deklarovanie akýchkoľvek údajov a polí. Avšak pre reťazce odporúčame použiť DB.

    Syntax:

    DQ, [ ]

    , ako operandy prípustné použiť čísla, a otáznik "?" označuje premennú bez inicializácie. Zoberme si tento príklad:

    real1 DD 1234
    char db 'C'
    , AR2 db '123456', 0; poľa 7 bajtov
    num1 db 11001001b; binárne číslo
    num2 dw 7777o; oslovové číslo
    num3 dd -890d; desatinné číslo
    num4dd 0beah; hexadecimálne číslo
    var1 dd? ; premenná bez počiatočnej hodnoty
    ar3 dd 50 dup

    ; inicializáciu poľa 50 e-ing
    AR4 dq 5 DUP (011,25); Pole 15 e-ing začaté opakovanie 0 1 a 125

    tímov (návod)

    syntax príkazov assembler alebo assembler inštrukcie takto:

    (74 )

    Adresy sa môžu odosielať viacerými spôsobmi:

    1. Vo forme názvu premennej, ktorá je v assembleri synonymom adresy.
    2. Ak premenná je pole, odvolanie na prvok poľa sa vyskytuje prostredníctvom názvu premennej a posunu. Existujú dve formy: [+] a []. Je potrebné mať na pamäti, že offset nie je index v poli, ale veľkosť v bajtoch. Programátor sám potrebuje pochopiť, koľko vykonať posun v bajtoch, aby získal požadovaný prvok poľa.
    3. Môžete použiť registre. Ak chcete získať prístup do pamäte, v ktorej je uložený prípad, použite hranaté zátvorky: [ebx], [edi].
    4. [] - hranaté zátvorky umožňujú použitie složitých výrazov v sebe na výpočet adresy: [esi + 2 * eax].

    Adresa assemblera sa prenáša cez hranaté zátvorky. Vzhľadom na to, že premenná je aj adresa, môže byť použitá aj s hranatými zátvorkami a bez nich.

    Okrem toho sú v assembleri skratky: r pre registre, m pre pamäť a i pre operand. Tieto skratky sú použité s číslami 816 a 32 pre indikáciu veľkosti operandu :. R 8 M16 I32 a tak ďalej D.

    pridať I8 /I16 /I32 M8 /M16 /m32; sčítanie operandu z pamäťových buniek

    Príkaz Mov alebo dopredu

    Tento pokyn je základný príkaz zostavy zostavy. Umožňuje vám zapísať do registra hodnotu iného prípadu alebo pamäťovej bunky alebo konštantu. Píše tiež do pamäťovej bunkyhodnota registrácie alebo konštanta. Syntax príkazu:

    MOV,

    V procesore existujú ďalšie príkazy na implementáciu presmerovania. Napríklad XCHG je príkaz na výmenu hodnôt operandov. Ale z pohľadu programátora sú všetky implementované prostredníctvom ovládania základného MOV. Pozrime sa na príklady:

    MOV i, 0; Zapísať do hodnoty 0
    MOV ECX, EBX; Odošle hodnotu EBX na ECX


    Operand môže slúžiť ako register a pamäťová bunka. Ak však obsah dvoch registrov môže byť presmerovaný, potom dve pamäťové bunky - nie. Treba dbať na to, aby boli operandy rovnakej veľkosti. Upozorňujeme tiež, že príkaz MOV nemení hodnotu príznakov.

    Nástrojová sada

    Teoretická štúdia ďalšieho assemblera môže byť ťažká, preto by sme mali pomôcť s nástrojmi používanými na vývoj programov s jeho pomocou. Tu je len krátky zoznam populárnych nástrojov:
  • Borland Turbo Assembler (TASM) je jeden z najpopulárnejších nástrojov. Dobré pre vývoj v DOS a zlé - pod Windows.
  • Microsoft Macro Assembler (MASM) je balík na vývoj v assembleri v prostredí Windows. Existuje ako v izolácii, tak vo forme vstavanej funkcie v prostredí Visual Studio. Assembler a jazyky na vysokej úrovni sú často kompatibilné. V tom zmysle, že tento môže použiť priamo assembler. Napríklad s ++.
  • Netwide Assembler (NASM) je populárny bezplatný assembler pre architektúru Intel.
  • Existuje mnoho nástrojov. Treba poznamenať, že neexistuje žiadna jednaštandardný syntaktický assembler. Existujú dva najpoužívanejšie: AT & T-syntax zameraný na procesory Intel a teda na syntax Intel. Napriek zjavnej zložitosti, assembler je jednoduchý programovací jazyk na pochopenie toho, čo nerobí žiadnu prácu. Preto je bezpečné používať vzdelávaciu literatúru vo forme "assemblera pre figuríny" a študovať tento úžasný jazyk.

    Súvisiace publikácie