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
Registri
Postoje sljedeće vrste registara:
Stack
Identifikatori, cijeli brojevi, simboli, komentari, ekvivalentnost
EQU
Dakle, u programu će se sva događanja zamijeniti s
& 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:
- DB - Bajt: odaberite 1 bajt za varijablu.
- DW-Word bira 2 bajta.
- DD - Dvostruka riječ odaberite 4 bajta.
- DQ - Četverostruka riječ za odabir 8 bajtova.
- 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");
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:
- U obliku imena varijable, koja je u asembleru sinonim adrese.
- 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.
- Možete koristiti registre. Da biste pristupili memoriji u kojoj je spremljen slučaj, koristite uglate zagrade: [ebx], [edi].
- [] - 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.