Č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
Registri
Obstajajo naslednje vrste registrov:
sklad
identifikatorji, cela števila, simboli, komentarji enakovrednosti
EQU
Tako bodo v programu vsi dogodki nadomeščeni z
& 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:
- DB - Byte: izberite 1 bajt za spremenljivko.
- DW-Word izbere 2 bajta.
- DD - dvojna beseda izbere 4 bajte.
- DQ - Quad beseda za izbiro 8 bajtov.
- 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");
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:
- V obliki imena spremenljivke, ki je v zbirniku sinonim za naslov.
- Č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.
- Uporabite lahko registre. Za dostop do pomnilnika, v katerem je shranjen primer, uporabite oglati oklepaji: [ebx], [edi].
- [] - 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.