Jezik asemblera. Naredbe i sklopovi montaže

U članku će se raspravljati o osnovama asemblerskog jezika u odnosu na arhitekturu win32. Predstavlja simboličan zapis strojnih kodova. U svakom računalu najniža razina je hardver. Ovdje se procesna kontrola vrši pomoću naredbi ili uputa na strojnom jeziku. Upravo na tom području asembler je namijenjen za rad.

Programiranje asemblera

Pisanje asemblerskog programa je iznimno težak i skup postupak. Da biste stvorili učinkovit algoritam, potrebno vam je duboko razumijevanje rada računala, poznavanje pojedinosti tima, kao i povećana pažnja i točnost. Učinkovitost je kritični parametar za programiranje asemblera.
Glavna prednost jezika asemblera je u tome što omogućuje stvaranje kratkih i brzih programa. Stoga se u pravilu koristi za rješavanje visoko specijaliziranih zadataka. Potreban je kôd koji učinkovito radi s hardverskim komponentama ili zahtijeva program koji zahtijeva memoriju ili vrijeme izvođenja.

Registri

Registri u matičnom jeziku nazivaju memorijske ćelije koje se nalaze izravno na kristalu s ALU (procesorom). Osobitost ove vrste memorije je brzina cirkulacije do nje, koja je mnogo brža od RAM-a računala. Također se naziva superbrzi RAM (SRAM ili SRAM).


Postoje sljedeće vrste registara:
  • Opći registri (RON).
  • Zastavice.
  • Pokazivač na naredbi.
  • Registri segmenata.
  • Postoji po 8 registara opće namjeneveličina 32 bita. Pristup registrima EAX, ECX, EDX, EBX može se obaviti u 32-bitnom, 16-bitnom AX, BX, CX, DX i 8-bitnom AH i AL, BH i BL, itd. E "u nazivima registara znači Proširena (proširena). Sami nazivi povezani su s njihovim imenima na engleskom jeziku:
  • Registar akumulatora (AX) - za aritmetičke operacije.
  • Kontrolni registar (CX) - za promjene i cikluse.
  • Registar podataka (DX) - za aritmetičke operacije i I /O operacije.
  • Osnovni registar (BX) - za pokazivač na podatke.
  • Registar pokazivača stog (SP) - za pokazivač gornjeg sloja.
  • Registar s baznim pokazivačem (BP) - za indikator baze stog.
  • Registar izvornih indeksa (SI) - za indeks pošiljatelja (izvor).
  • Registar odredišnih indeksa (DI) - za primatelja.
  • Specijalizacija RON asemblerskog jezika uvjetna je. Mogu se koristiti u bilo kojoj operaciji. Međutim, neke naredbe mogu primijeniti samo određene registre. Na primjer, naredbe petlje koriste ESX za pohranu vrijednosti brojača. Registar zastava. To se odnosi na bajt koji može prihvatiti vrijednosti 0 i 1. Skup svih zastavica (oko 30) označava stanje procesora. Primjeri zastavica: Carry Flag (CF) - zastavica prijenosa, zastavica za prelijevanje (OF) - preljev, ugniježđena zastava (NT) - zastava gniježđenja i još mnogo toga. Zastave su podijeljene u 3 skupine: stanje, upravljanje i sustav.

    Pokazivač naredbe (EIP - Upute Pointer). Ovaj registar sadrži adresu naredbe, koja se mora izvršiti sljedeća, ako nema drugih uvjeta. Segmentni registri (CS, DS, SS, ES, FS, GS). Njihova prisutnost u asembleru diktirana je posebnom kontrolom radne memorije, kako bi se povećalakoristiti u programima. Zahvaljujući njima, možete upravljati memorijom do 4 GB. U arhitekturi Win32, potreba za segmentima je nestala, ali imena registara su sačuvana i korištena različito.

    Stack

    Ovo je memorijsko područje posvećeno radu procedura. Značajka stog je da su posljednji podaci zabilježeni u njemu prvi čitljivi. Drugim riječima: prvi zapisi stogova su izvađeni do posljednjeg. Zamislite ovaj proces kao toranj dama. Da biste dobili ispitivač (donji kontroler na dnu kule ili bilo koji u sredini), prvo morate ukloniti sve što leže odozgo. I, shodno tome, potonji se postavlja na toranj za provjeru, dok se parsiranje tornja najprije uklanja. Takav princip organiziranja memorije i rada s njom diktira njezino gospodarstvo. Stog se stalno čisti i u svakom trenutku ga koristi jedan postupak.

    Identifikatori, cijeli brojevi, simboli, komentari, ekvivalentnost

    Identifikator u asembleru programskog jezika ima isto značenje kao u bilo kojem drugom. Dopušteno je koristiti latinična slova, brojeve i znakove "_", ".", "?", "@", "$". Velika i mala slova su ekvivalentna, a točka može biti samo prvi znak identifikatora. Cijeli brojevi u asembleru mogu se specificirati u referentnim sustavima s bazama od 2810 i 16. Bilo koji drugi unos brojeva smatrat će se kao identifikator od strane kompajlera za sastavljanje. U snimanju simboličkih podataka dopušteno je koristiti i apostrofe i citate. Ako trebate odrediti jednu od njih u nizu znakova, slijedite sljedeća pravila:
  • na liniji,sadržane u apostrofu, navodnici su označeni jednom, apostrof je dvaput: 'može' t ',' rekao je 'biti ili ne biti';
  • za crtu koju uzimaju navodnici, pravilo obrnuto: duplikati citata , apostrofi su označeni kao: "ne mogu", "Moja omiljena traka je" "crna mačka" "". nizovi, a nakon naredbe, crta komentara završava pomakom linije, direktiva ekvivalencije se koristi na sličan način, kao u drugim jezicima, postoje stalni izrazi. Aliencija je označena sljedećom metodom:

    EQU

    Dakle, u programu će se sva događanja zamijeniti s u mjestu gdje je dopušteno naznačiti cijeli broj, EQU direktiva je slična u svom radu na #define u C ++.

    & lt; /adsbygoogle.js">

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

    Direktive o podacima

    Jezici na visokoj razini (C ++, Pascal) su tipizirani. To jest, koriste podatke određenog tipa, postoje funkcije njihove obrade, itd. U programskom jeziku nema asemblera. Postoji samo 5 direktiva za definiranje podataka:

    1. DB - Bajt: odaberite 1 bajt za varijablu.
    2. DW-Word bira 2 bajta.
    3. ​​
    4. DD - Dvostruka riječ odaberite 4 bajta.
    5. DQ - Četverostruka riječ za odabir 8 bajtova.
    6. DT - Deset bajtova: Odaberite 10 bajtova za varijablu.

    Slovo D znači Define.

    Bilo koja direktiva može se koristiti za deklariranje podataka i polja. Međutim, za nizove preporučujemo korištenje DB-a.

    Sintaksa:

    DQ [,]

    Kao operandi dopušteno je koristiti brojeve, simbole i upitnik "?" označava varijablu bez inicijalizacije. Razmotrimo primjere:

    real1 DD 1234
    char db 'c'
    ar2 db '123456', 0; niz od 7 bajta
    num1 db 11001001b; binarni broj
    num2 dw 7777o; oktalni broj
    num3 dd -890d; decimalni broj
    num4dd 0beah; heksadecimalni broj
    var1 dd? ; varijabla bez početne vrijednosti
    ar3 dd 50 dup

    ; niz od 50 inicijaliziranih poruka e-pošte
    ar4 dq 5 dup (011.25); Niz od 15 jegulja koje pokreću ponavljanja 0 1 i 125

    Naredbe [upute]

    Sintaksa sklopa za montažu ili upute za sastavljanje su sljedeće:

    )
    & lt; script type = "text /javascript" & gt;
    može 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)} (ovaj, ovaj.dokument, "yandexContextAsyncCallbacks");
    : [; Komentar]

    Oznaka: nužno završava dvotočkom i može u zasebnom retku. Oznake se koriste za upućivanje na naredbe unutar programa.

    Upute određuju operaciju koju treba izvršiti. U asembleru su operacije predstavljene u obliku abecednih skraćenica kako bi se olakšalo razumijevanje. Upute se također mogu nazvati mnemoničke kodove.

    Sljedeći operandi mogu djelovati kao operandi:

    • registre, koji su adresirani njihovim imenima; Konstanti;
    • adrese.

    Više o adresama

    Adrese se mogu prenijeti na nekoliko načina:

    1. U obliku imena varijable, koja je u asembleru sinonim adrese.
    2. Ako je varijabla niz, tada se žalba na element polja pojavljuje kroz ime varijable i pomak. Za to postoje dva oblika: [+] i []. Treba imati na umu da offset nije indeks u nizu, već veličina u bajtovima. Programer sam mora razumjeti koliko treba napraviti pomak u bajtovima kako bi dobio željeni element niza.
    3. Možete koristiti registre. Da biste pristupili memoriji u kojoj je spremljen slučaj, koristite uglate zagrade: [ebx], [edi].
    4. [] - uglaste zagrade omogućuju korištenje složenih izraza u sebi za izračun adrese: [esi + 2 * eax].

    U asembleru se adresa prenosi kroz uglate zagrade. S obzirom da je varijabla i adresa, može se koristiti i sa uglatim zagradama i bez nje.

    Osim toga, u asembleru postoje skraćenice: r za registre, m za memoriju i i za operand. Ove kratice se koriste s brojevima 816 i 32 za označavanje veličine operanda: r8 m16 i32, itd.

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

    Mov naredba ili naprijed

    Ova naredba je osnovna naredba montažnog sklopa. Omogućuje vam snimanje u registru vrijednosti drugog slučaja ili memorijske ćelije ili konstante. Ona također piše u memorijuRegistrirajte se vrijednost ili stalna. Sintaksa je:

    , , MOV

    u procesoru, postoje i drugi timovi za primjenu naprijed. Na primjer, XCHG - ekipa dijele operand. No, u smislu programer, oni se prodaju kroz osnovne komandne MOV. Obzir ovaj primjer:

    , 
    i MOV, 0; Napisati I 0
    , MOV ECX EBX; Pošiljka vrijednost EBX ECX


    kao operand može djelovati kao knjiga i memorije stanice. Međutim, ako se sadržaj dva registra može biti preuređen, dvije memorijske stanice - ne. To bi trebao pomno pratiti kako bi operanda imaju iste veličine. Također imajte na umu da je naredba MOV, ne mijenja vrijednost zastava.

    Alati

    Nadalje teorijsko proučavanje sklopa može biti teško, tako da bi trebao razmišljati o alatima koji se koriste za razvoj aplikacija s njom. Bit će vam dati kratak popis popularnih alata:
  • Borland Turbo asembler (TASM) - jedan od najpopularnijih alata. Pa pogodna za razvoj pod DOS-om i loše - za Windows.
  • Microsoft makroasembler (MASM) - je paket za razvoj u asemblerskom jeziku u sustavu Windows. Tu je i pojedinačno i kao ugrađeni u okruženju Visual Studio. Monter i visoke razine jezici su često nespojivi. U smislu da je potonji mogu koristiti monter izravno. Na primjer, C ++.
  • Netwide asembler (NASM) - popularna besplatno monter arhitektura Intel.
  • Postoji mnogo alata. To bi trebao napraviti posebnu oznaku da niti jedanstandardni sintaksni asembler. Postoje 2 najprimjenjivija: AT & T-sintaksa usmjerena na Intel procesore i, sukladno tome, Intel sintaksa. Unatoč prividnoj složenosti, asembler je jednostavan programski jezik za razumijevanje onoga što ne radi. Stoga je sigurno koristiti obrazovnu literaturu u obliku "asembler za lutke" i proučavati ovaj divni jezik.

    Povezane publikacije