Vrste instrukcija u asemblerskom jeziku: kompletan vodič

Posljednje ažuriranje: May 7 od 2025
  • Asemblerski jezik organizuje svoje instrukcije po namjeni: prenos, izračunavanje, kontrola protoka i drugo.
  • Svaka instrukcija se sastoji od opkoda i operanada, s različitim formatima ovisno o arhitekturi.
  • Postoji nekoliko načina adresiranja za pristup podacima, kao što su neposredni, direktni i indirektni.

asembler Mašinski jezik i format instrukcija

Asemblerski jezik je bio jedan od osnovnih stubova razvoja softvera od samog početka računarstva. Iako danas na sceni dominiraju programski jezici visokog nivoa, asembler ostaje široko korišten i relevantan u okruženjima gdje su kontrola hardvera, optimizacija ili ograničenja resursa prioritet.

U ovom članku ćemo se pozabaviti vrstama instrukcija asemblerskog jezika, analizirajući njihovu strukturu, svrhu, načine adresiranja i kako su organizirane u različitim arhitekturama. Također ćete pronaći primjere, formate i sveobuhvatan pregled koji će vam omogućiti da u potpunosti razumijete logiku koja stoji iza ovih instrukcija, koje vrlo blisko djeluju s hardverom.

Šta je instrukcija u asemblerskom jeziku?

Asemblerska instrukcija je naredba koju CPU može direktno razumjeti (nakon što je asemblerski program prevede u mašinski kod). Svaka instrukcija ima specifičnu svrhu i obično se sastoji od mnemonika koji predstavlja operaciju i jednog ili više operanada koji pokazuju odakle se podaci uzimaju i/ili gdje se rezultati pohranjuju.

Ove instrukcije uveliko zavise od arhitekture procesora, tako da svaki tip CPU-a (bilo da je to x86, ARM, MIPS, između ostalih) ima svoj vlastiti skup instrukcija sa određenom sintaksom i mogućnostima.

Struktura instrukcije

Upute se obično sastoje od dva dijela:

  • Operacijski kod (opcode): Označava radnju koja treba da se izvrši, kao što su dodavanje, premještanje podataka, poređenje itd.

Operandi pružaju informacije potrebne za izvršavanje operacije i mogu se pohraniti u registre, memoriju ili biti konstante. Nisu svim instrukcijama potrebni operandi, a u nekim slučajevima, oni mogu biti implicitni u instrukciji ili pohranjeni u unaprijed definiranim registrima.

Vrste instrukcija u asemblerskom jeziku

U zavisnosti od funkcionalnosti koju obavljaju unutar programa, instrukcije asemblerskog jezika mogu se klasifikovati u nekoliko grupa. Najrelevantniji su detaljno opisani u nastavku:

1. Upute za prijenos podataka

Ove instrukcije omogućavaju kopiranje podataka s jedne lokacije na drugu bez mijenjanja njihovog sadržaja na izvoru. One su neophodne za premještanje informacija između registara, memorije i perifernih uređaja.

  Sve o asembleru: šta je i kako funkcioniše

Neke od najčešćih instrukcija u ovoj grupi su:

  • MOV: Kopira sadržaj jednog operanda u drugi. Na primjer, MOV AX, BX Kopiraj sadržaj BX u AX.
  • MOVS / MOVSB ​​​​/ MOVSW: Premješta stringove sa izvorne adrese (SI) na odredišnu adresu (DI), automatizirajući proces prijenosa.
  • LODS / LODSB / LODSW: Učitava vrijednost sa adrese koju pokazuje SI registar u akumulator (AL ili AX).
  • PROČITAJTE: Učitava efektivnu adresu umjesto vrijednosti. Korisno za dobijanje adrese varijable ili strukture.

2. Upute za bateriju

Stek je LIFO (zadnji uđe, prvi izađe) struktura koja se koristi za privremeno pohranjivanje podataka, prosljeđivanje parametara ili spremanje konteksta izvršavanja.

  • GURANJE: Pohranjuje vrijednost na stek, smanjujući vrijednost SP pokazivača.
  • POP: Dohvaća najnoviju vrijednost pohranjenu na steku, povećavajući SP.
  • GURNI / POPF: Oni pohranjuju i preuzimaju stanje CPU zastavica na steku.

3. Aritmetičke i logičke instrukcije

Omogućavaju izvođenje proračuna i operacija na bitovima. Ove instrukcije su neophodne za manipulisanje numeričkim podacima i donošenje odluka u toku programa.

Među najčešće korištenim nalazimo:

  • DODAJ / POD: Sabiranje i oduzimanje.
  • MUL / IMUL: Binarno množenje.
  • DIV / IDIV: Dijeljenje (cijeli broj ili sa predznakom).
  • I / ILI / XOR / NE: Bitovne logičke operacije.
  • SHL / SHR / ROL / ROR: Pomjeranja i rotacije bitova.

4. Instrukcije za kontrolu toka

Oni vam omogućavaju da modificirate redoslijed izvršavanja programa , uvodeći skokove ili uvjetne i bezuvjetne pozive drugih instrukcija.

  • JMP: Bezuvjetno skače na drugu adresu u programu.
  • POZOVI / POVRATI: Poziv potprograma i povratak.
  • JE/JNE/JG/JL/JZ/JNZ: Uslovni skokovi, izvršavaju se ako su ispunjeni određeni uslovi (nakon poređenja).

5. Ulazno/izlazne (I/O) instrukcije

One omogućavaju komunikaciju između procesora i eksternih uređaja. Ove instrukcije omogućavaju čitanje i pisanje podataka na/iz portova (hardver).

  • u: Čita podatke sa ulaznog porta.
  • OUT: Šalje podatke na izlazni port.

6. Instrukcije s pomičnim zarezom

Mnogi CPU-i imaju matematičke koprocesore (ili posebne instrukcije) namijenjene radu s decimalnim (brojevima s pomičnim zarezom) brojevima. Ove instrukcije omogućavaju operacije kao što su:

  • Sabiranje, oduzimanje, množenje i dijeljenje realnih brojeva.
  • Trigonometrijske operacije (sinus, kosinus, tangenta).
  • Logaritamske, eksponencijalne i operacije s korijenima.
  RAT se distribuira korištenjem zlonamjernih verzija Axiosa u npm-u

Ove instrukcije su obično u skladu sa standardom IEEE 754 za numeričku preciznost.

Načini adresiranja

Fundamentalni dio dizajna instrukcija je način na koji se identificira lokacija operanada. Načini adresiranja definiraju kako CPU pristupa podacima.

1. Neposredno adresiranje

Podaci su direktno uključeni u instrukciju. Brzo je, ali ne dozvoljava modifikaciju vrijednosti bez promjene instrukcije.

MOV AX, 5

2. Direktno adresiranje

Memorijska adresa koja sadrži podatke je eksplicitno navedena.

MOV AX, 

3. Indirektno adresiranje

Efektivna adresa se dobija iz sadržaja zapisa. Vrlo fleksibilna i koristi se za strukture i povezane liste.

MOV AX, 

4. Indeksirano adresiranje

Adresa se izračunava dodavanjem baze i indeksa (na primjer, za kretanje kroz nizove). Koristi posebne registre kao što su SI, DI ili registri baze + pomaka.

MOV AX, 

Formati instrukcija: različiti tipovi u zavisnosti od arhitekture

Struktura instrukcije može varirati ovisno o arhitekturi. Uobičajeni formati uključuju:

4-smjerni format

Uključuje dva operanda, lokaciju rezultata i adresu sljedeće instrukcije. Sada je zastario zbog svoje složenosti.

3-smjerni format

Specificira dva operanda i odredišnu adresu. Uobičajen je u modernim RISC arhitekturama.

2-smjerni format

Koristite izvorni operand i odredišni operand (odredišni operand također može doprinijeti vrijednosti). Popularno na x86 i drugim CISC arhitekturama.

Jednosmjerni format

Samo jedan operand je specificiran; drugi se pretpostavlja da je akumulator. Uobičajeno kod starijih procesora i jednostavnih sistema.

Format 0-adrese (baziran na steku)

Operacije koriste stek za dohvaćanje i pohranjivanje operanada i rezultata. Vrlo efikasno za mašine zasnovane na steku, kao što su neki programabilni kalkulatori.

Makro instrukcije i pseudo-opkodovi

Da bi se poboljšala produktivnost, mnogi asembleri nude makro instrukcije , koje proširuju jednu liniju u nekoliko stvarnih instrukcija. One su korisne za izbjegavanje ponavljanja složenih obrazaca ili za kreiranje struktura visokog nivoa kao što su petlje ili uslovne naredbe.

u pseudo-opkodovi To su instrukcije koje asembler interno prevodi u stvarni niz instrukcija. Na primjer, NOP (bez operacije) se može prevesti kao XCHG AX, AX na x86 procesoru.

  Kako pokrenuti Python i HTML u pregledniku

Asemblerske direktive

Direktive ( također zvane pseudo-operacije ) nisu instrukcije u strogom smislu. One služe za kontrolu procesa asembliranja, definiranje podataka, dijelova koda, makroa, uvjeta kompajliranja itd.

Uobičajeni primjeri uključuju:

  • .podaci / .kod: Oni označavaju dio podataka ili koda.
  • .org: Postavlja adresu s koje će započeti asembliranje.
  • .equ: Definiše simboličke konstante.

Slučajevi upotrebe asemblerskog jezika

Uprkos porastu programskih jezika visokog nivoa, asemblerski jezik ostaje ključan u nekoliko oblasti:

  • Razvoj ugradbenih sistema i mikrokontrolera.
  • Programiranje drajvera, bootloadera i BIOS-a.
  • Ekstremna optimizacija u aplikacijama kao što su videoigre ili kriptografija.
  • Obrnuti inženjering, debuggiranje i hakovanje niskog nivoa.

Nadalje, obuka iz asemblerskog jezika i dalje zauzima važno mjesto u studijima računarstva i elektronike, jer pruža duboko razumijevanje načina rada procesora, načina pohranjivanja i manipulisanja podacima i načina izvršavanja instrukcija na binarnom nivou.

Razumijevanje svih vrsta asemblerskih instrukcija, njihove strukture, funkcionalnosti i načina adresiranja pruža solidnu osnovu za svakog programera koji želi da se udubi u programiranje niskog nivoa ili da shvati kako se jezici visokog nivoa na kraju prevode u mašinski kod. Iako je njegova upotreba postala specifičnija, on ostaje bitan alat u više kritičnih područja razvoja softvera i sistema.

asemblerski jezik
Povezani članak:
Sve o asembleru: šta je i kako funkcioniše