Vrste instrukcija u asemblerskom jeziku: potpuni vodič

Zadnje ažuriranje: Svibanj 7 2025
  • Asemblerski jezik organizira svoje instrukcije prema namjeni: prijenos, izračun, kontrola protoka i drugo.
  • Svaka instrukcija se sastoji od opcode-a i operanada, s različitim formatima ovisno o arhitekturi.
  • Postoji nekoliko načina adresiranja za pristup podacima, kao što su neposredni, izravni i neizravni.

asembler Strojni jezik i format instrukcija

Asemblerski jezik je jedan od temeljnih stupova razvoja softvera od samih početaka računarstva. Iako danas dominiraju programski jezici visoke razine, asembler ostaje široko korišten i relevantan u okruženjima gdje su prioritet kontrola hardvera, optimizacija ili ograničenja resursa.

U ovom ćemo članku istražiti vrste 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 iza ovih instrukcija, koje vrlo blisko djeluju s hardverom.

Što je instrukcija u asemblerskom jeziku?

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

Ove instrukcije uvelike ovise o arhitekturi procesora, tako da svaka vrsta CPU-a (bilo da se radi o x86, ARM-u, MIPS-u, između ostalih) ima svoj vlastiti skup instrukcija s određenom sintaksom i mogućnostima.

Struktura instrukcije

Upute se obično sastoje od dva dijela:

  • Operacijski kod (opcode): Označava radnju koja se treba izvršiti, kao što su dodavanje, premještanje podataka, uspoređivanje itd.

Operandi pružaju informacije potrebne za izvođenje 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

Ovisno o funkcionalnosti koju obavljaju unutar programa, instrukcije asemblerskog jezika mogu se podijeliti u nekoliko skupina. Najrelevantniji su detaljno opisani u nastavku:

1. Upute za prijenos podataka

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

  Bash skripte i uslužni programi: cjeloviti vodič za automatizaciju Linuxa

Neke od najčešćih uputa u ovoj skupini 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 nizove znakova s ​​izvorne adrese (SI) na odredišnu adresu (DI), automatizirajući proces prijenosa.
  • LODS / LODSB / LODSW: Učitava vrijednost s adrese koju pokazuje SI registar u akumulator (AL ili AX).
  • PROČITAJTE: Učitava efektivnu adresu umjesto vrijednosti. Korisno za dobivanje adrese varijable ili strukture.

2. Upute za bateriju

Stog je LIFO (zadnji ulazi, prvi izlazi) struktura koja se koristi za privremeno pohranjivanje podataka, prosljeđivanje parametara ili spremanje konteksta izvršavanja.

  • GURNUTI: Pohranjuje vrijednost na stog, smanjujući vrijednost SP pokazivača.
  • POP: Dohvaća najnoviju vrijednost pohranjenu na stogu, povećavajući SP.
  • GURNI HF / POPF: Oni pohranjuju i dohvaćaju stanje CPU zastavica na stogu.

3. Aritmetičke i logičke instrukcije

Omogućuju izvođenje izračuna i operacija na bitovima. Ove instrukcije su bitne za manipuliranje numeričkim podacima i donošenje odluka u tijeku programa.

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

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

4. Upute za kontrolu protoka

Omogućuju vam izmjenu redoslijeda izvršavanja programa , uvođenje skokova ili uvjetnih i bezuvjetnih poziva drugih instrukcija.

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

5. Ulazno/izlazne (I/O) instrukcije

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

  • IN: Čita podatke s ulaznog porta.
  • VAN: Š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 (brojevima s pomičnim zarezom). Ove instrukcije omogućuju operacije kao što su:

  • Zbrajanje, oduzimanje, množenje i dijeljenje realnih brojeva.
  • Trigonometrijske operacije (sinus, kosinus, tangens).
  • Logaritamske, eksponencijalne i korijenske operacije.
  TurboGears Python: Sve što trebate znati o najfleksibilnijem web frameworku

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

Načini adresiranja

Temeljni 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 uključeni izravno u instrukciju. Brzo je, ali ne dopušta mijenjanje vrijednosti bez promjene instrukcije.

MOV AX, 5

2. Izravno adresiranje

Memorijska adresa koja sadrži podatke je eksplicitno navedena.

MOV AX, 

3. Neizravno adresiranje

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

MOV AX, 

4. Indeksirano adresiranje

Adresa se izračunava zbrajanjem 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čite vrste ovisno o arhitekturi

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šte također može doprinijeti vrijednosti). Popularno na x86 i drugim CISC arhitekturama.

Jednosmjerni format

Samo je jedan operand određen; drugi se pretpostavlja da je akumulator. Uobičajeno u starijim procesorima i jednostavnim sustavima.

Format 0-adrese (baziran na stogu)

Operacije koriste stog za dohvaćanje i pohranjivanje operanada i rezultata. Vrlo učinkovito za strojeve temeljene na stogu, kao što su neki programabilni kalkulatori.

Makro instrukcije i pseudo-opkodovi

Kako bi se poboljšala produktivnost, mnogi assembleri nude makro instrukcije koje proširuju jedan redak u nekoliko stvarnih instrukcija. One su korisne za izbjegavanje ponavljanja složenih uzoraka ili za stvaranje struktura visoke razine poput petlji ili uvjetnih naredbi.

The 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.

  Što je JetBrains IDE i zašto je referentna vrijednost za programere?

asemblerske direktive

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

Uobičajeni primjeri uključuju:

  • .podaci / .kod: Oni označavaju odjeljak podataka ili koda.
  • .org: Postavlja adresu s koje će započeti asembliranje.
  • .jednakost: Definira simboličke konstante.

Slučajevi upotrebe asemblerskog jezika

Unatoč porastu programskih jezika visoke razine, asemblerski jezik ostaje ključan u nekoliko područja:

  • Razvoj ugradbenih sustava i mikrokontrolera.
  • Programiranje upravljačkih programa, bootloadera i BIOS-a.
  • Ekstremna optimizacija u aplikacijama kao što su videoigre ili kriptografija.
  • Obrnuti inženjering, otklanjanje pogrešaka i hakiranje niske razine.

Nadalje, obuka u asemblerskom jeziku 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 manipuliranja podacima te načina izvršavanja instrukcija na binarni razini.

Razumijevanje svih vrsta asemblerskih instrukcija, njihove strukture, funkcionalnosti i načina adresiranja pruža solidnu osnovu za svakog programera koji želi istražiti programske jezike niske razine ili razumjeti kako se programski jezici visoke razine u konačnici prevode u strojni kod. Iako je njegova upotreba postala specifičnija, ostaje bitan alat u više kritičnih područja razvoja softvera i sustava.

asemblerski jezik
Povezani članak:
Sve o asemblerskom jeziku: što je to i kako funkcionira