Jezik skupštine. Naredbe i osnove asemblera

8. 4. 2019.

U članku će se raspravljati o osnovama asemblerskog jezika u odnosu na arhitekturu win32. To je simboličan zapis strojnih kodova. U bilo kojem elektroničkom računalu najniža razina je hardver. Ovdje se upravljanje procesima odvija s uputama ili uputama na strojnom jeziku. Upravo na tom području asembler je namijenjen za rad.

Programiranje asemblera

Pisanje programa u asembleru je izuzetno težak i skup proces. Da biste stvorili učinkovit algoritam, potrebno vam je duboko razumijevanje rada računala, poznavanje detalja naredbi, kao i povećana pažnja i točnost. Učinkovitost je kritični parametar za programiranje u asembleru.

Kako se programira na asembleru

Glavna prednost jezika asemblera je u tome što vam omogućuje stvaranje kratkih i brzih programa. Stoga se u pravilu koristi za rješavanje specifičnih problema. Potreban vam je kod koji učinkovito radi s hardverskim komponentama, ili vam je potreban program koji zahtijeva memoriju ili vrijeme izvođenja.

registri

Registri u jeziku asemblera nazivaju se memorijske ćelije koje se nalaze izravno na čipu s ALU (procesorom). Značajka ove vrste memorije je brzina pristupa njemu, koja je mnogo brža od RAM-a računala. Također se naziva ultrabrzi RAM (PopS ili SRAM).

Postoje sljedeće vrste registara:

  1. Registri opće namjene (RON).
  2. Zastave.
  3. Pokazivač naredbe
  4. Segmentni registri.
Montažni registri

Postoji 8 registara opće namjene, svaki po 32 bita.

EAX, ECX, EDX, EBX registri su dostupni u 32-bitnom, 16-bitnom, AX, BX, CX, DX i 8-bitnom AH i AL, BH i BL, itd.

Slovo "E" u nazivima registara znači Prošireno (prošireno). Sami nazivi odnose se na njihova imena na engleskom jeziku:

  • Registar akumulatora (AX) - za aritmetičke operacije.
  • Brojač registara (CX) - za promjene i cikluse.
  • Podatkovni registar (DX) - za aritmetičke i I / O operacije.
  • Osnovni registar (BX) - za pokazivač na podatke.
  • Registar pokazivača stog (SP) - za pokazivač na vrh stog.
  • Stack Base Pointer register (BP) - za indikator baze stog.
  • Registar izvornog indeksa (SI) - za pokazivača pošiljatelja (izvor).
  • Registarski indeks odredišta (DI) - za primatelja.

Specijalizacija RON asemblerski jezik je uvjetan. Mogu se koristiti u bilo kojoj operaciji. Međutim, neke naredbe mogu koristiti samo određene registre. Na primjer, naredbe petlje koriste ESX za pohranu vrijednosti brojača.

Registar zastava. To podrazumijeva bajt, koji može uzeti vrijednosti 0 i 1. Kombinacija svih zastava (njih oko 30) pokazuje stanje procesora. Primjeri zastavica: Carry Flag (CF) - Oznaka nošenja, zastava preljeva (OF) - preljev, ugniježđena zastava (NT) - zastavica gniježđenja zadataka i mnogi drugi. Zastave su podijeljene u 3 skupine: status, upravljanje i sustav.

Registrira zastavice procesora

Indeks naredbi (EIP - pokazivač uputa). Ovaj registar sadrži adresu instrukcije, koja se mora izvršiti sljedeća, osim ako nije drugačije navedeno.

Segmentni registri (CS, DS, SS, ES, FS, GS). Njihova prisutnost u asembleru diktirana je posebnom kontrolom RAM-a kako bi se povećala njegova upotreba u programima. Zahvaljujući njima, bilo je moguće upravljati memorijom do 4 GB. U arhitekturi Win32 nema potrebe za segmentima, ali imena registara su sačuvana i korištena različito.

Stack of

Ovo je memorijsko područje dodijeljeno za pokrenute procedure. Osobitost stack-a je da su najnoviji podaci koji su mu napisani dostupni za čitanje. Drugim riječima: prvi unosi u stog se vraćaju posljednji. Taj proces možete zamisliti kao toranj skica. Da biste dobili ispitivač (dno kule u podnožju tornja ili bilo koje u sredini), prvo morate ukloniti sve što leže na vrhu. I, u skladu s tim, posljednji komad stavljen na toranj, prvi se uklanja prilikom raščlanjivanja tornja. Ovo načelo organiziranja memorije i rada s njom diktira njezino gospodarstvo. Stog se konstantno briše i svaki put kad ga koristi jedna procedura.

Stog raditi u asembleru

Identifikatori, cijeli brojevi, simboli, komentari, ekvivalentnost

Identifikator u asembleru programskog jezika ima isto značenje kao u bilo kojem drugom. Dopuštena su latinična slova, brojevi i simboli "_", ".", "?", "@", "$". U tom slučaju, velika i mala slova su ekvivalentna, a točka može biti samo prvi znak identifikatora.

Cjelokupni brojevi u asembleru mogu se specificirati u referentnim sustavima s bazama 2, 8, 10 i 16. Svaki drugi unos brojeva asembler će smatrati kao identifikator.

Dopušteno je koristiti i apostrofe i citate u pisanom obliku znakovnih podataka. Ako trebate odrediti jednu od njih u nizu znakova, pravila su sljedeća:

  • u retku zatvorenom u apostrofima, navodnici su označeni jednom, apostrof - dvaput: 'ne može', 'rekao je "biti ili ne biti";
  • za niz zatvoren u navodnike, pravilo je suprotno: dvostruki navodnici su duplicirani, apostrofi su označeni kao: "nije mogao", "Moja omiljena traka je" "Crna mačka" "".

Za označavanje komentara u jeziku asemblera, koristi se simbol sa zarezom - ";". Dopušteno je koristiti komentare i na početku redaka i nakon naredbe. Komentar završava s novim retkom.

Direktiva ekvivalencije se koristi na sličan način kao i drugi konstantni izrazi. Ekvivalencija je naznačena kako slijedi:

  EQU  

Tako je u programu sve pojave će se zamijeniti s u mjestu na kojem je moguće navesti cijeli broj, adresu, niz ili drugo ime. EQU direktiva je slična u svom radu na #define u C ++.

Direktive o podacima

Jezici na visokoj razini (C ++, Pascal) su upisani. To jest, koriste podatke koji imaju određeni tip, postoje funkcije za njihovu obradu, itd. U asembleru programskog jezika ne postoji takva stvar. Postoji samo 5 direktiva za definiranje podataka:

  1. DB - Byte: dodjeljuje 1 bajt za varijablu.
  2. DW - Word: odaberite 2 bajta.
  3. DD - Dvostruka riječ: odaberite 4 bajta.
  4. DQ - Quad riječ: odaberite 8 bajtova.
  5. DT - Deset bajtova: dodijeliti 10 bajta za varijablu.

Slovo D znači Define.

Bilo koja direktiva se može koristiti za deklariranje bilo kojih podataka i polja. Međutim, za nizove se preporučuje DB.

sintaksa:

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

Kao operand dopušteno je koristiti brojeve, simbole i upitnik - “?”, Označavajući varijablu bez inicijalizacije. Razmotrite primjere:

 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 

Naredbe (upute)

Sintaksa naredbi za sklapanje ili upute za sastavljanje je kako slijedi:

    

Oznaka (oznaka :) mora završiti dvotočkom i može se postaviti na zasebnu liniju. Oznake se koriste za upućivanje na naredbe unutar programa.

Upute upućuju na radnje koje treba izvršiti. U asembleru su operacije predstavljene u obliku slovnih kratica kako bi se olakšalo razumijevanje. Upute se također mogu nazvati mnemotehnikom.

U ulozi operandova naredbe mogu biti:

  • registrima kojima se pristupa prema njihovim imenima;
  • konstante;
  • adrese.

Više o adresama

Adresa se može prenijeti na nekoliko načina:

  1. U obliku naziva varijable, koji je u asembleru sinonim za adresu.
  2. Ako je varijabla niz, tada se pristup elementu polja pojavljuje kroz ime njegove varijable i pomaka. Postoje dva oblika za ovo: [<ime> + <pogon>] i <ime> [<poboljšanje]]. Imajte na umu da pomak nije indeks u nizu, već veličina u bajtovima. Programer sam mora razumjeti koliko se mora napraviti pomak u bajtovima da bi se dobio željeni element niza.
  3. Možete koristiti registre. Da biste pristupili memoriji u kojoj je pohranjen registar, trebate koristiti uglate zagrade: [ebx], [edi].
  4. [] - zagrade omogućuju korištenje složenih izraza u sebi za izračun adrese: [esi + 2 * eax].

U asembleru, adresa se prenosi kroz uglate zagrade. Budući da je varijabla i adresa, može se koristiti s ili bez uglatih zagrada.

Adresa u asembleru

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

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

Mov naredba ili naprijed

Ova naredba je glavna među naredbama asemblera. Omogućuje vam upisivanje u registar vrijednosti drugog registra, memorijske ćelije ili konstante. Također zapisuje vrijednost registra ili konstante u memorijsku ćeliju. Sintaksa naredbe:

 MOV ,  MOV ,  

Postoje druge naredbe u procesoru za provedbu prijenosa. Na primjer, XCHG je naredba za razmjenu operanada vrijednostima. Ali sa stajališta programera, svi se provode kroz osnovnu MOV naredbu. Razmotrite primjere:

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

U obliku operanda može djelovati kao registar i memorijska stanica. Međutim, ako se sadržaj dvaju registara može preurediti, tada ne postoje dvije memorijske ćelije. Treba paziti da su operandi iste veličine. Također imajte na umu da MOV naredba ne mijenja vrijednost zastavica.

MOV naredba u asembleru

alat

Daljnje teorijsko proučavanje asemblera može biti teško, pa biste trebali razmisliti o alatima koji se koriste za razvoj programa s njim. Ovdje ćete vidjeti samo kratki popis popularnih alata:

  • Borland Turbo Assembler (TASM) je jedan od najpopularnijih alata. Dobro za razvoj pod DOS-om i loše za Windows.
  • Microsoft Macro Assembler (MASM) je paket za razvoj asemblerskog jezika u Windows okruženju. Ona postoji i zasebno i kao ugrađena funkcija u okruženju Visual Studio. Asembler i jezici na visokoj razini često su kompatibilni. U smislu da potonji mogu izravno koristiti asembler. Na primjer, C ++.
  • Netwide Assembler (NASM) je popularni besplatni asembler za Intelovu arhitekturu.
Programiranje asemblera

Postoji mnogo alata. U ovom slučaju, trebate posebnu napomenu da ne postoji jedinstvena norma za sintaksu asemblera. Postoje 2 najprimjenjivija: AT & T sintaksa, usmjerena na ne-Intel proizvodne procesore, i, sukladno tome, Intelovu sintaksu.

Unatoč prividnoj složenosti, asembler je jednostavan programski jezik, koji je lako razumljiv. Dakle, možete sigurno koristiti obrazovne literature o sličnosti "asembler za lutke" i naučiti ovaj prekrasan jezik.