Jazyk assembleru. Příkazy a montážní sestavy

Článek se bude zabývat základy jazyka assembleru ve vztahu k architektuře win32. Představuje symbolický záznam strojních kódů. V každém počítači je nejnižší úroveň hardware. Kontrola procesu se provádí příkazy nebo pokyny v jazyce stroje. Právě v této oblasti má assembler fungovat.

Programování assembleru

Psaní assemblerového programu je velmi náročný a nákladný proces. Chcete-li vytvořit efektivní algoritmus, potřebujete hluboké porozumění práci počítače, znalosti o detailech týmu a zvýšenou pozornost a přesnost. Efektivita je kritickým parametrem pro programování assembleru.
Hlavní výhodou jazyka assembleru je to, že umožňuje vytvářet krátké a rychlé programy. Používá se proto zpravidla pro řešení vysoce specializovaných úkolů. Je vyžadován kód, který funguje efektivně s hardwarovými součástmi, nebo vyžaduje program vyžadující paměť nebo běh.

Registry

Registry v jazykovém assembleru nazvané paměťové buňky umístěné přímo na krystalu s ALU (procesorem). Zvláštností tohoto typu paměti je rychlost cirkulace, která je mnohem rychlejší než RAM počítače. Také se nazývá super-rychlá paměť RAM (SRAM nebo SRAM).


Existují tyto typy registrů:
  • Obecné registry (RON).
  • Vlajky.
  • Ukazatel příkazu.
  • Registry segmentů.
  • Existuje 8 registrů pro všeobecné použití, každý z nichvelikost 32 bitů. Přístup do registrů EAX, ECX, EDX, EBX mohou být prováděny v 32-bitovém režimu, 16-bit - AX, BX, CX, DX, a 8-bit - AH a AL, BH a BL, a tak dále D. Písmeno ". E "v názvech registrů znamená Rozšířený. Samotná jména jsou spojena s jejich jmény v angličtině:
  • Registr akumulátorů (AX) - pro aritmetické operace.
  • Čítač (CX) - pro směny a cykly.
  • Datový registr (DX) - pro aritmetické operace a operace I /O.
  • Základní registr (BX) - pro ukazatel dat.
  • Registr ukazatelů zásobníků (SP) - pro ukazatel vrcholu zásobníku.
  • Registr ukazatelů základních zásobníků (BP) - pro indikátor základny zásobníku.
  • Registr zdrojového indexu (SI) - pro index odesílatele (zdroj).
  • Registr cílových indexů (DI) - pro příjemce.
  • Specializace jazyka assembler RON je podmíněna. Mohou být použity v jakékoli operaci. Některé příkazy však mohou používat pouze určité registry. Například příkazy smyček používají ESX k uložení hodnoty čítače. Registrovat vlajky. Jedná se o bajt, který může přijímat hodnoty 0 a 1. Sada všech příznaků (asi 30) označuje stav procesoru. Příznaky vlajky: Přenášení vlajky (CF) - Přenosová vlajka, Překročení vlajky (OF) - Přetečení, Vlákno vázané (NT) - Vlajka hnízdění úkolů a mnoho dalších. Vlajky jsou rozděleny do tří skupin: stav, řízení a systém.

    Ukazatel příkazů (EIP - Instruction Pointer). Tento registr obsahuje adresu instrukce, která musí být provedena dále, pokud neexistují jiné podmínky. Segmentové registry (CS, DS, SS, ES, FS, GS). Jejich přítomnost v assembleru je diktována speciální kontrolou operační paměti, která ji zvyšujepoužití v programech. Díky nim můžete spravovat paměť až 4 GB. Architektura potřebě Win32 segmentech klesly, ale jména registrů jsou zachovány a použity jiným způsobem.

    Stack

    Jedná se o paměťovou oblast určenou pro práci s postupy. Funkce stack je, že nejnovější data uložená v něm čitelné jako první. Jinými slovy: první záznamy zásobníku jsou vyčerpány posledním. Představte si tento proces jako věž s dámami. Chcete-li získat kontrolu (spodní kontrola na spodní části věže nebo některou uprostřed), musíte nejprve odstranit vše, co leží shora. A v důsledku toho je umístěn na věži šachovnice, zatímco parse věže je odstraněna jako první. Takový princip uspořádání paměti a práce s ní je diktován svou ekonomikou. Stoh je neustále vyčištěn av každém okamžiku je používán jeden postup.
    Identifikátory, celá čísla, symboly, komentáře, ekvivalence
    Identifikátor v assembleru programovacích jazyků má stejný význam jako v jakémkoli jiném. Je povoleno používat latinská písmena, čísla a znaky "_", ".", "?", "@", "$". Velké a malé písmena jsou ekvivalentní a bodka může být pouze první znak identifikátoru. Celá čísla v assembleru mohou být specifikována v referenčních systémech se základnami 2810 a 16. Jakýkoliv jiný číselný záznam bude považován za identifikátor sestavením assembleru. Při záznamu symbolických dat je dovoleno používat apostrofy i citáty. Pokud potřebujete zadat jednu z nich v řetězci znaků, pak následující pravidla:
  • na řádku,uzavřený v apostrofy, uvozovky označují jednou apostrofem - dvakrát: ‚může„t‘,‚řekl ‚být či nebýt‘‘
  • k vedení přijatého v nohou, zpět pravidlo, duplicitní citace , apostrofy jsou označovány jako „nemohl“, „Můj oblíbený bar je“ „Black Cat“ „-“ Využijme připomínek na začátku „
  • v komentování instrukcí v assembleru používá středník.“. linka, a poté, co týmu. komentovat přívodní potrubí Ends. směrnice rovnocennost používané podobným způsobem jako v jiných jazycích indikovat konstantnыe výraz. equi alentnist označeny takto:

    EQU

    , čímž se program všechny výskyty bude nahrazeno v místě, kde přípustné bodu celé číslo . adresa řádek nebo jméno směrnice EQU je podobný práci na #define v jazyce C ++

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

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

    Směrnice údajů

    jazyky na vysoké úrovni (C ++, Pascal) je zadán. To znamená, že používají data určitého typu, existují funkce jejich zpracování atd. V programovacím jazyce neexistuje assembler. Existuje pouze 5 směrnic pro definici dat:

    1. DB - Byte: vyberte proměnnou 1 bajt.
    2. DW-Word vybere 2 bajty.
    3. ​​
    4. DD - Dvojité slovo vybere 4 bajty.
    5. DQ - Quad slovo pro výběr 8 bajtů.
    6. DT - Deset bajtů: Vyberte proměnnou 10 bajtů.

    Písmeno D znamená Definovat.

    Jakákoli směrnice může být použita pro vyhlášení všech dat a polí. Pro řetězce však doporučujeme použít DB.

    Syntaxe:

    DQ, [ ]

    , jako operandy přípustné použít čísla, a otazník "?" označuje proměnnou bez inicializace. Vezměme si tento příklad:

    real1 DD 1234
    char db 'C'
    , Ar2 db '123456', 0; pole 7 bajtů
    num1 db 11001001b; binární číslo
    num2 dw 7777o; osmičkové číslo
    num3 dd -890d; desetinné číslo
    num4dd 0beah; hexadecimální číslo
    var1 dd? ; proměnná bez počáteční hodnoty
    ar3 dd 50 dup

    ; pole 50 inicializovaných e-mailů
    ar4 dq 5 dup (011.25); Pole 15 e-ing zahájeno opakování 0 1 a 125

    týmů (návod)

    syntaxe příkazů assembler nebo assembler instrukce takto:

    (74 )

    Adresy lze přenášet několika způsoby:

    1. Ve ​​formě názvu proměnné, která je v assembleru synonymem adresy.
    2. Pokud je proměnná pole, objeví se výzva k prvku pole prostřednictvím názvu proměnné a posunutí. K dispozici jsou 2 formuláře: [+] a []. Je třeba mít na paměti, že offset není index v poli, ale velikost v bajtech. Programátor sám potřebuje pochopit, kolik má posun v bajtech získat požadovaný prvek pole.
    3. Můžete použít registry. Pro přístup do paměti, ve které je uložen případ, použijte hranaté závorky: [ebx], [edi].
    4. [] - hranaté závorky umožňují použití složitých výrazů v sobě pro výpočet adresy: [esi + 2 * eax].

    Adresa assembleru je přenášena pomocí hranatých závorek. Vzhledem k tomu, že proměnná je také adresa, může být použita jak s hranatými závorkami, tak bez.

    Kromě toho jsou v assembleru zkratky: r pro registru, m pro paměť a i pro operand. Tyto zkratky jsou použity s čísly 816 a 32 pro indikaci velikosti operandu:. R 8 M16 I32 a tak dále D.

    přidat I8 /I16 /I32 M8 /M16 /m32; sčítání operandu z paměťových buněk

    Příkaz Mov nebo dopředu

    Tato instrukce je příkazem základní sestavy sestavy. Umožňuje zaznamenat v registru hodnotu jiného případu nebo paměťové buňky nebo konstanty. Také píše do pamětihodnotu registru nebo konstantu. Syntaxe je:

    MOV

    , v procesoru, existují i ​​další týmy pro provádění postupu. Například XCHG je příkaz pro výměnu operandových hodnot. Ale z pohledu programátora jsou všechny realizovány prostřednictvím příkazu základního MOV. Podívejme se na příklady:

    MOV i, 0; Napište hodnotu i
    MOV ECX, EBX; Odeslání hodnoty EBX na ECX


    Operand může působit jako registr a paměťová buňka. Pokud však obsah dvou registrů lze přeskupit, pak dva paměťové buňky - ne. Je třeba dbát na to, aby operandy měly stejnou velikost. Nezapomeňte také, že příkaz MOV nezmění hodnotu příznaků.

    Nástrojová sada

    Teoretická studie dalšího assembleru může být obtížná, takže bychom se měli zamyslet nad nástroji používanými k vývoji programů s jeho pomocí. Zde je jen krátký seznam populárních nástrojů:
  • Borland Turbo Assembler (TASM) je jedním z nejoblíbenějších nástrojů. Dobré pro vývoj v DOS a špatné - pod Windows.
  • Microsoft Macro Assembler (MASM) je balíček pro vývoj v assembleru v prostředí Windows. Existuje jak v izolaci, tak v podobě vestavěné funkce v prostředí Visual Studio. Assembler a jazyky vysoké úrovně jsou často kompatibilní. V tom smyslu, že tento může přímo použít assembler. Například s ++.
  • Netwide Assembler (NASM) je populární bezplatný assembler pro architekturu Intel.
  • Je k dispozici mnoho nástrojů. Je třeba poznamenat, že neexistuje jedinýstandardní syntaktický assembler. K dispozici jsou 2 nejpoužívanější: AT & T-syntaxe zaměřená na procesory Intel a odpovídající syntaxi Intel. Přes zjevnou složitost, assembler je jednoduchý programovací jazyk, který pochopí, co dělá žádnou práci. Proto je bezpečné používat vzdělávací literaturu ve formě "assembleru pro figuríny" a studovat tento úžasný jazyk.

    Související publikace