Jezik skupščine. Ukazi in osnove za montažo

8. 4. 2019

Članek bo obravnaval osnove jezika sestavljanja v povezavi z arhitekturo win32. Gre za simbolni zapis strojnih kod. V vsakem elektronskem računalniku je najnižja raven strojna oprema. Tukaj procesi potekajo z navodili ali navodili v strojnem jeziku. Na tem področju naj bi sestavljal deloval.

Programiranje asemblerjev

Pisanje programa v zbirniku je izjemno težaven in drag postopek. Za ustvarjanje učinkovitega algoritma potrebujete poglobljeno razumevanje delovanja računalnika, poznavanje podrobnosti ukazov ter večjo pozornost in natančnost. Učinkovitost je kritičen parameter za programiranje v asemblerju.

Kako se programira na monterju

Glavna prednost jezika sestavljalca je, da vam omogoča ustvarjanje kratkih in hitrih programov. Zato se praviloma uporablja za reševanje specializiranih problemov. Potrebujete kodo, ki učinkovito deluje s komponentami strojne opreme, ali pa potrebujete program, ki zahteva pomnilnik ali čas izvajanja.

Registri

Registri v jeziku sestavljavca se imenujejo pomnilniške celice, ki se nahajajo neposredno na čipu z ALU (procesorjem). Značilnost te vrste pomnilnika je hitrost dostopa do nje, ki je veliko hitrejša od RAM-a računalnika. Imenuje se tudi ultra-fast RAM (PopS ali SRAM).

Obstajajo naslednje vrste registrov:

  1. Registri za splošne namene (RON).
  2. Zastave.
  3. Ukazni kazalec
  4. Segmentni registri.
Zbirni registri

Obstaja 8 splošnih registrov, vsakih 32 bitov.

Registri EAX, ECX, EDX, EBX so dostopni v 32-bitnem, 16-bitnem - AX, BX, CX, DX in 8-bitnem - AH in AL, BH in BL, itd.

Črka "E" v imenih registrov pomeni razširjeno (podaljšano). Imena so povezana z njihovimi imeni v angleščini:

  • Register akumulatorja (AX) - za aritmetične operacije.
  • Counter register (CX) - za premike in cikle.
  • Podatkovni register (DX) - za aritmetične in I / O operacije.
  • Osnovni register (BX) - za kazalec na podatke.
  • Stack Pointer register (SP) - za kazalec na vrh kupa.
  • Stack Base Pointer register (BP) - za indikator baze niza.
  • Vir indeksni register (SI) - za pošiljatelja (izvorni) kazalec.
  • Destinacijski indeksni register (DI) - za prejemnika.

Specializacija RON asemblerski jezik je pogojno. 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 pomeni bajt, ki lahko sprejme vrednosti 0 in 1. Kombinacija vseh zastavic (jih je okoli 30) prikazuje stanje procesorja. Primeri zastav: Carry Flag (CF) - Oznaka nosilca, Zastavica zastave (OF) - preliv, Ugnezdena zastava (NT) - zastavica za gnezdenje nalog in mnoge druge. Zastave so razdeljene v 3 skupine: status, upravljanje in sistem.

Registri krmilnih zastav

Indeks ukazov (EIP - Instruction Pointer). Ta register vsebuje naslov navodila, ki ga je treba izvesti naslednjič, če ni drugače določeno.

Segmentni registri (CS, DS, SS, ES, FS, GS). Njihovo prisotnost v sestavljalniku narekuje poseben nadzor RAM-a, da se poveča njegova uporaba v programih. Zahvaljujoč njim je bilo mogoče upravljati pomnilnik do 4 GB. V arhitekturi Win32 ni potrebe po segmentih, vendar se imena registrov shranjujejo in uporabljajo drugače.

Stack of

To je območje pomnilnika, ki je dodeljeno za tekoče postopke. Posebnost stacka je, da so najnovejši podatki, ki so bili zapisani nanj, najprej na voljo za branje. Z drugimi besedami: prvi vnosi v sklad so nazadnje pridobljeni. Predstavljate si lahko ta proces kot stolp osnutkov. Če želite dobiti kontrolno ploščico (dno stolpa na dnu stolpa ali katerokoli na sredini), morate najprej odstraniti vse, ki ležijo na vrhu. In v skladu s tem, zadnji kos dal na stolpu, se odstrani najprej pri razčlenjevanju stolp. To načelo organiziranja spomina in dela z njim narekuje njegovo gospodarstvo. Stack se nenehno zbriše in ga vsakič uporabi en postopek.

Delo pri montaži

Identifikatorji, cela števila, simboli, komentarji, enakovrednost

Identifikator v sestavljalniku programskega jezika ima enak pomen kot v vseh drugih. Dovoljene so latinske črke, številke in simboli "_", ".", "?", "@", "$". V tem primeru so velike in male črke enakovredne, pika pa je lahko samo prvi znak identifikatorja.

V referenčnih sistemih z bazami 2, 8, 10 in 16 lahko določimo celo število v zbirniku. Vsak drug vnos številk bo sestavljalec upošteval kot identifikator.

Dovoljeno je uporabljati tako apostrofe kot tudi citate v pisnih znakovnih podatkih. Če morate določiti enega od njih v nizu znakov, potem so pravila naslednja:

  • v vrstici, ki je zaprta v apostrofe, so narekovaji označeni enkrat, apostrof - dvakrat: "ne morem", "je rekel" biti ali ne biti ";
  • za niz, zaprt v narekovajih, je pravilo nasprotno: dvojni narekovaji so podvojeni, apostrofi so označeni kot je: "ni bilo mogoče", "Moja najljubša vrstica je" "Črna mačka" "".

Za označevanje komentarjev v jeziku sestavljavca se uporablja znak s podpičjem - ";". Dovoljeno je uporabiti komentarje tako na začetku vrstic kot tudi po ukazu. Komentar se konča z novo vrstico.

Direktiva o enakovrednosti se uporablja na podoben način kot drugi stalni izrazi. Enakovrednost je navedena, kot sledi: t

  EQU  

Tako so v programu vsi dogodki nadomesti z na mestu, kjer je mogoče navesti celo število, naslov, niz ali drugo ime. Direktiva EQU je v svojem delu podobna #define v C ++.

Podatkovne direktive

Vpišejo se jeziki na visoki ravni (C ++, Pascal). To pomeni, da uporabljajo podatke, ki imajo določeno vrsto, obstajajo funkcije za njihovo obdelavo, itd. V asemblerju programskega jezika take stvari ni. Obstaja samo 5 direktiv za opredelitev podatkov:

  1. DB - Byte: dodeli 1 bajt za spremenljivko.
  2. DW - Word: izberite 2 bajta.
  3. DD - Dvojna beseda: izberite 4 bajte.
  4. DQ - Quad word: izberite 8 bajtov.
  5. DT - Deset bytes: dodeli 10 bajtov za spremenljivko.

Črka D pomeni Define.

Vsako direktivo lahko uporabite za razglasitev podatkov in nizov. Vendar pa je za nizove priporočena uporaba DB.

Sintaksa:

  DQ [, ]   DQ [, ]   DQ [, ] 

Kot operand je dovoljeno uporabljati številke, simbole in vprašaj - “?”, Ki označuje spremenljivko brez inicializacije. Na primer:

 real1 DD 12.34char db 'c'ar2 db '123456',0 ; массив из 7 байтnum1 db 11001001b ; двоичное числоnum2 dw 7777o ; восьмеричное числоnum3 dd -890d ; десятичное числоnum4 dd 0beah ; шестнадцатеричное числоvar1 dd ? ; переменная без начального значенияar3 dd 50 dup (0) ; массив из 50 инициализированных эл-товar4 dq 5 dup (0, 1, 1.25) ; массив из 15 эл-тов, инициализированный повторами 0, 1 и 1.25 

Ukazi (navodila)

Sintaksa ukazov za sestavljanje ali navodil za sestavljanje je naslednja:

    

Oznaka (oznaka :) se mora končati z dvopičjem in jo lahko postavite na ločeno vrstico. Oznake se uporabljajo za sklicevanje na ukaze znotraj programa.

Navodila označujejo postopek, ki ga je treba izvesti. V asemblerju so operacije predstavljene v obliki črkovnih okrajšav za lažje razumevanje. Navodila lahko imenujemo tudi mnemotehniko.

V vlogi ukazov operandov je lahko:

  • registri, do katerih dostopajo njihova imena;
  • konstante;
  • naslovov.

Več o naslovih

Naslov lahko prenašate na več načinov:

  1. V obliki imena spremenljivke, ki je v zbirniku sinonim za naslov.
  2. Če je spremenljivka matrika, se dostop do elementa matrike zgodi skozi ime njegove spremenljivke in odmika. Obstajata 2 obrazca za to: [<ime> + <predmet>] in <ime> [<povmeh>]. Upoštevajte, da odmik ni indeks v matriki, ampak velikost v bajtih. Programer mora sam razumeti, koliko odmikov mora biti v bajtih, da dobimo želeni element matrike.
  3. Uporabite lahko registre. Za dostop do pomnilnika, v katerem je shranjen register, morate uporabiti oglati oklepaji: [ebx], [edi].
  4. [] - oklepaji omogočajo uporabo kompleksnih izrazov v sebi za izračun naslova: [esi + 2 * eax].

V sestavljalniku se naslov prenaša preko oglatih oklepajev. Ker je spremenljivka tudi naslov, se lahko uporablja z ali brez oglatih oklepajev.

Naslov v zbirniku

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

 add i8/i16/i32, m8/m16/m32 ;суммирование операнда с ячейкой памяти 

Mov ukaz ali naprej

Ta ukaz je eden izmed ukazov za sestavljanje. Omogoča vam, da v register vpišete vrednost drugega registra, pomnilniške celice ali konstante. Prav tako zapiše vrednost registra ali konstante v pomnilniško celico. Skladnja ukaza:

 MOV ,  MOV ,  

V procesorju obstajajo drugi ukazi za izvedbo prenosa. Na primer, XCHG je ukaz za izmenjavo operandov z vrednostmi. Toda z vidika programerja se vsi izvajajo preko osnovnega MOV ukaza. Na primer:

 MOV i, 0 ; Записать в i значение 0MOV ECX, EBX ; Пересылка значения EBX в ECX 

V obliki operanda lahko deluje kot register in pomnilniška celica. Če pa se vsebina obeh registrov lahko preuredi, potem ni dveh pomnilniških celic. Paziti je treba, da so operandi enake velikosti. Upoštevajte tudi, da ukaz MOV ne spremeni vrednosti zastav.

Ukaz MOV v zbirniku

Toolkit

Nadaljnje teoretično proučevanje asemblerja je lahko težavno, zato bi morali razmisliti o orodjih, ki se uporabljajo za razvoj programov z njim. Tukaj boste videli samo kratek seznam priljubljenih orodij:

  • Borland Turbo Assembler (TASM) je eno izmed najbolj priljubljenih orodij. Dobro za razvoj pod DOS-om in slabo za Windows.
  • Microsoftov makro asembler (MASM) je paket za razvoj asemblerskega jezika v okolju Windows. Obstaja tako ločeno kot vgrajeno funkcijo v okolju Visual Studio. Jeziki na visoki ravni so pogosto združljivi. V smislu, da lahko slednji neposredno uporabljajo asembler. Na primer, C ++.
  • Netwide Assembler (NASM) je priljubljena brezplačna zbirka za arhitekturo Intel.
Programiranje asemblerjev

Obstaja veliko orodij. V tem primeru morate posebej opozoriti, da ni enotnega standarda za skladenjsko skladnjo. Obstajata 2 najbolj uporabna: AT & T sintaksa, osredotočena na proizvodne procesorje, ki niso Intel, in skladno s tem Intelova sintaksa.

Kljub navidezni kompleksnosti je montažer preprost programski jezik, ki ga je lahko razumeti. Zato lahko varno uporabite izobraževalno literaturo o podobnosti "sestavljavca za lutke" in se naučite tega čudovitega jezika.