Jezik zbiratelja. Ukazi in sestavi sklopov

Članek bo obravnaval osnove jezika sestavljavca v povezavi z arhitekturo win32. Predstavlja simbolni zapis strojnih kod. V vsakem računalniku je najnižja raven strojna oprema. Pri tem se procesni nadzor izvaja s pomočjo ukazov ali navodil v strojnem jeziku. Na tem področju je montažer namenjen za delo.

Programiranje asemblerja

Pisanje asemblerskega programa je izjemno težaven in drag postopek. Če želite ustvariti učinkovit algoritem, potrebujete globoko razumevanje dela računalnika, poznavanje podrobnosti ekipe, pa tudi večjo pozornost in natančnost. Učinkovitost je kritičen parameter za programiranje sestavljalcev.
Glavna prednost jezika sestavljalca je, da vam omogoča ustvarjanje kratkih in hitrih programov. Zato se praviloma uporablja za reševanje visoko specializiranih nalog. Potrebna je koda, ki učinkovito deluje s komponentami strojne opreme ali zahteva program, ki zahteva pomnilnik ali čas izvajanja.

Registri

Registri v jeziku sestavljalcu imenujejo pomnilniške celice, ki se nahajajo neposredno na kristalu z ALU (procesorjem). Posebnost te vrste pomnilnika je hitrost kroženja do nje, ki je veliko hitrejša od RAM-a računalnika. Imenuje se tudi super hitro RAM (SRAM ali SRAM).


Obstajajo naslednje vrste registrov:
  • splošni registri (RON).
  • Zastave.
  • Kazenski ukaz.
  • Registri po segmentih.
  • Obstaja 8 registrov splošnega namenavelikost 32 bitov. Dostop do registrov EAX, ECX, EDX, EBX se lahko izvede v 32-bitnem, 16-bitnem AX, BX, CX, DX in 8-bitnem AH in AL, BH in BL itd. E "v imenih registrov pomeni razširjeno (podaljšano). Imena so povezana z njihovimi imeni v angleščini:
  • Register akumulatorjev (AX) - za aritmetične operacije.
  • Kontrolni register (CX) - za premike in cikle.
  • Podatkovni register (DX) - za aritmetične operacije in I /O operacije.
  • Osnovni register (BX) - za kazalec na podatke.
  • Register kazalcev skladov (SP) - za kazalec zgornjega sklada.
  • Register baznih kazalcev (BP) - za osnovni indikator skladovnice.
  • Register indeksov virov (SI) - za indeks pošiljatelja (vir).
  • Register indeksov destinacije (DI) - za prejemnika.
  • Specializacija asemblerja jezika RON je pogojna. Uporabljajo se lahko v vseh operacijah. Vendar pa lahko nekateri ukazi uporabljajo samo določene registre. Na primer, ukazi z zanko uporabljajo ESX za shranjevanje vrednosti števca. Register zastav. To se nanaša na bajt, ki lahko sprejme vrednosti 0 in 1. Niz vseh zastavic (približno 30) označuje stanje procesorja. Primeri zastav: Carry Flag (CF) - zastavica za prenos, zastavica za prelivanje (OF) - preliv, ugnezdena zastava (NT) - zastava gnezdenja in še veliko več. Zastave so razdeljene v tri skupine: stanje, upravljanje in sistem.

    Kazenski ukaz (EIP - Instruction Pointer). Ta register vsebuje naslov ukaza, ki ga je treba izvesti naslednjič, če ni drugih pogojev. Segmentni registri (CS, DS, SS, ES, FS, GS). Njihova prisotnost v asemblerju je narejena s posebnim nadzorom operativnega pomnilnika, da ga povečaaplikacije. Zaradi njih, lahko nadzorujete pomnilnika do 4 GB. Arhitektura potrebe po Win32 segmentih padel, a imena registrov so ohranjeni in se uporablja na drugačen način.

    sklad

    Ta shranjevalno področje dodeljen za postopek. Funkcija sklad je, da so najnovejši podatki, shranjeni v njej čitljivi prvi. Ali z drugimi besedami: prvi zapisovalni sklad pridobiti lani. Predstavljajte si, da ta proces kot stolpa dama. Da bi dobili kos (spodnji kos temelji stolp ali katerega koli sredini), je treba najprej odstraniti vse, ki leži na vrhu. In zato je ta dodeljena stolpa meča, demontažo stolp najprej odstranimo. To načelo pomnilnika organizacijo in delo z njim narekuje njenega gospodarstva. Stack redno čistiti in vsakič, ko se uporablja drug postopek.

    identifikatorji, cela števila, simboli, komentarji enakovrednosti

    ID v programskem jeziku Assembler ima enak pomen kot v kateri koli drugi. Uporabite lahko črke, številke in simbole, "_", ".", "?", "@", "$". Ta velike in male črke so enakovredne, a bistvo je lahko le prvi identifikator znak. Število v zbirnem jeziku, se lahko določi v referenčni okvir 2810 podlag in 16. Morebitne druge številke računa bo videti kot identifikator prevajalnik zbirniku. Pri pisanju podatkov znakov se lahko uporablja kot opuščaj in narekovajih. Če je niz znakov ki ga določite eno od njih, nato pa naslednja pravila:
  • v vrsti,V zaprtih apostrofih so narekovaji označeni enkrat, apostrof je dvakrat: 'lahko' t ',' je rekel 'biti ali ne biti';
  • za vrstico, ki jo je navedlo, nasprotno pravilo: podvojene navedbe , apostrofi so označeni kot: "ne morem", "Moja najljubša vrstica je" "Črna mačka" "".
  • Za označevanje komentarja v jeziku sestavljavca se s znakom ";" uporablja podpičje. nizi in po ukazu se vrstica komentarjev konča s premikom linije, direktiva o enakovrednosti se uporablja na podoben način, kot v drugih jezikih, obstajajo stalni izrazi. Nezavisljivost je označena z naslednjo metodo:

    EQU

    Tako bodo v programu vsi dogodki nadomeščeni z na mestu, kjer je dovoljeno navesti celo število, naslov, vrstica ali drugo ime Direktiva EQU je v svojem delu podobna #define v C ++.

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

    & lt; skript & gt; (adsbygoogle = window.adsbygoogle || []). push ({});

    Podatkovne direktive

    Tipizirani so jeziki na visoki ravni (C ++, Pascal). To pomeni, da uporabljajo podatke določene vrste, obstajajo funkcije njihove obdelave itd. V programskem jeziku ni nobenega sestavljalnika. Obstaja samo 5 direktiv za opredelitev podatkov:

    1. DB - Byte: izberite 1 bajt za spremenljivko.
    2. DW-Word izbere 2 bajta.
    3. ​​
    4. DD - dvojna beseda izbere 4 bajte.
    5. DQ - Quad beseda za izbiro 8 bajtov.
    6. DT - Deset bytes: Izberite 10 bajtov za spremenljivko.

    Črka D pomeni Define.

    Vsaka direktiva se lahko uporabi za razglasitev kakršnih koli podatkov in nizov. Vendar pa za strune priporočamo uporabo DB.

    Sintaksa:

    DQ [,]

    Kot operandi je dovoljeno uporabljati številke, simbole in vprašaj "?" označuje spremenljivko brez inicializacije. Poglejmo primere:

    real1 DD 1234
    char db 'c'
    ar2 db '123456', 0; matrika 7 bajtov
    num1 db 11001001b; binarno število
    num2 dw 7777o; oktalno število
    num3 dd -890d; decimalno število
    num4dd 0beah; šestnajstiško število
    var1 dd? ; spremenljivka brez začetne vrednosti
    ar3 dd 50 dup

    ; niz 50 inicializiranih e-poštnih sporočil
    ar4 dq 5 dup (011.25); Niz 15 jegulj, ki jih sprožijo ponovitve 0 1 in 125

    Ukazi [navodila]

    Sintaksa ali navodila za sestavljanje sklopa za sestavljanje so naslednja:

    )
    & lt; script type = "text /javascript" & gt;
    lahko blockSettings13 = {blockId: "R-A-116722-13", renderTo: "yandex_rtb_R-A-116722-13", horizontalAlign:! 1async:! 0};

    if (document.cookie.indexOf ("abmatch =") & gt; = 0) {
    blockSettings13 = {blockId: "RA-116722-13", renderTo: "yandex_rtb_R-A-116722- 13 ", horizontalAlign :! 1statId: 7async:! 0};
    }

    Funkcija (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (funkcija () {Ya .Context.AdvManager.render (blockSettings13)}), e = b.getElementsByTagName ("script") , d = b.createElement ("script"), d.type = "text /javascript", d.src = "//an.yandex.ru/system/context.js", d.async =! 0e.parentNode.insertBefore (d, e)} (to, ta.dokument, "yandexContextAsyncCallbacks");
    : [; Komentar]

    Oznaka: nujno se konča z debelo črevo in v ločeni vrstici. Oznake se uporabljajo za sklicevanje na ukaze znotraj programa.

    Navodila določajo postopek, ki ga je treba izvesti. V asemblerju so operacije predstavljene v obliki abecednih kratic za lažje razumevanje. Navodila lahko imenujemo tudi mnemonične kode.

    Kot operandi lahko delujejo naslednji operandi:

    • registri, ki jih obravnavajo njihova imena;
    • konstante;
    • naslovov.

    Več o naslovih

    Naslovi se lahko prenašajo na več načinov:

    1. V obliki imena spremenljivke, ki je v zbirniku sinonim za naslov.
    2. Če je spremenljivka matrika, se pritožba na element matrike pojavi prek imena spremenljivke in odmika. Za to obstajajo dve obliki: [+] in []. Upoštevati je treba, da odmik ni indeks v matriki, ampak velikost v bajtih. Programer mora sam razumeti, kako narediti premik v bajtih, da dobi želeni element matrike.
    3. Uporabite lahko registre. Za dostop do pomnilnika, v katerem je shranjen primer, uporabite oglati oklepaji: [ebx], [edi].
    4. [] - oglati oklepaji omogočajo uporabo kompleksnih izrazov v sebi za izračun naslova: [esi + 2 * eax].

    V asemblerju se naslov prenaša preko oglatih oklepajev. Glede na to, da je spremenljivka tudi naslov, se lahko uporablja tako z oglatimi oklepaji kot brez nje.

    Poleg tega v zbirniku obstajajo okrajšave: r za registre, m za pomnilnik in i za operand. Te kratice se uporabljajo s številkami 816 in 32 za označevanje velikosti operanda: r8 m16 i32, itd.

    dodajo i8 /i16 /i32 m8 /m16 /m32; 108] 

    Mov ukaz ali naprej

    To navodilo je osnovni ukaz montažnega sestavljanja. Omogoča vam, da v registru zapišete vrednost drugega primera ali pomnilniške celice ali konstante. Piše tudi v pomnilniško celicovrednost registra ali konstanta. Skladnja ukaza:

    MOV,

    V procesorju obstajajo drugi ukazi za izvajanje posredovanja. Na primer, XCHG je ukaz za izmenjavo vrednosti operandov. Toda z vidika programerja se vsi izvajajo z ukazom osnovnega MOV. Oglejmo si primere:

    MOV i, 0; Vnesite vrednost i 


    MOV ECX, EBX; Pošiljanje vrednosti EBX v ECX


    Operand lahko deluje kot register in pomnilniška celica. Vendar, če je mogoče vsebino dveh registrov preurediti, potem dve pomnilniški celici - ne. Paziti je treba, da so operandi enake velikosti. Upoštevajte tudi, da ukaz MOV ne spremeni vrednosti zastav.

    Priročnik za uporabo

    Nadaljnji teoretični študij sestavljavca je lahko težaven, zato je treba razmisliti o orodjih, ki se uporabljajo za razvoj programov z njegovo pomočjo. Tukaj je le kratek seznam priljubljenih orodij:
  • Borland Turbo Assembler (TASM) je eno izmed najbolj priljubljenih orodij. Dobro za razvoj pod DOS-om in slabo - v sistemu Windows.
  • Microsoftov makro asembler (MASM) je paket za razvoj na asemblerju v okolju Windows. Obstaja tako v izolaciji kot v obliki vgrajene funkcije v okolju Visual Studio. Jeziki na visoki ravni so pogosto združljivi. V smislu, da lahko slednji uporabljajo neposredno montažo. Na primer, z ++.
  • Netwide Assembler (NASM) je priljubljena brezplačna zbirka za arhitekturo Intel.
  • Na voljo je veliko orodij. Omeniti je treba, da ni nobenestandardni skladatelj skladnje. Obstajata 2 najbolj uporabna: AT & T-sintaksa, osredotočena na procesorje Intel, in s tem skladnja Intel. Kljub navidezni kompleksnosti je sestavljalec preprost programski jezik za razumevanje, kaj ne dela. Zato je varno uporabiti izobraževalno literaturo v obliki "asemblerja za lutke" in študirati ta čudovit jezik.

    Sorodne publikacije