Idi na sadržaj

Asembler

Pregledano
S Wikipedije, slobodne enciklopedije
Motorola MC6800 Assembler programski jezik

Assembler je poseban program koji pretvara program zapisan asemblerskim jezikom u binarni oblik. Program zapisan upotrebom memonika i simboličkih adresa naziva se asemblerski program.

Program u assembleru se često označava i kao assembler kod. Taj kod se putem specijalnog prevodilačkog alata (u ovom slučaju konkretno asemblera) prevodi u mašinski kod, koji je direktno izvršiv od strane procesora. Obrnuti proces pretvaranja mašinskog koda u assembler kod naziva se „disasembliranje“.[1]

Historija

[uredi | uredi izvor]

Rani primjeri asemblerskih jezika se pojavljuju s prvim generacijama računara, kada su inženjeri tražili način da pojednostave unos mašinskih instrukcija. Umjesto zapisivanja dugih nizova nula i jedinica, koristili su se memonici (skraćeni simboli) za komande procesora, kao što su MOV, ADD ili JMP.[2] Time je proces pisanja koda za te rane sisteme postao brži i manje sklon greškama. Jedan od historijski značajnih asemblerskih jezika bio je onaj za IBM 650, koji se koristio u pedesetim godinama 20. vijeka.

Kako su se procesorske arhitekture razvijale, postojala je potreba za različitim asemblerskim jezicima, jer svaki procesor ima skup vlastitih instrukcija. Danas, iako se asembleri rjeđe koriste u odnosu na više programske jezike (poput C ili C++) u općim softverskim projektima, i dalje su važni u specifičnim područjima kao što su ugrađeni sistemi, firmware i upravljanje hardverom niskog nivoa.[3]

Osnove rada asemblerskog jezika

[uredi | uredi izvor]

Asemblerski jezik nudi direktnu kontrolu nad resursima i instrukcijskim setom procesora. Naredbe su obično u formi:

MOV AL, [1234h]
ADD AL, 5

te sadrže:

  • Memoničke simbole – npr. MOV, ADD, JMP
  • Oznake registara – npr. AL, AX, EAX, RAX (ovisno o arhitekturi)
  • Simboličke adrese ili konstante – npr. [1234h], MY_VARIABLE

Sistem assemblera često omogućava korištenje makroa, koji pojednostavljuju ponavljajuće radnje. Na taj način se asemblerski jezik može modularnije organizovati i smanjiti dužina koda.[4]

Proces asembliranja

[uredi | uredi izvor]

Uobičajeni asembleri rade u jednom ili dva prolaza (pass-a):

  • Tokom prvog prolaza, asembler analizira sve oznake (simboličke adrese) i pravi tabelu simbola koja sadrži njihovu lokaciju u memoriji.
  • Tokom drugog prolaza, zamjenjuje simboličke adrese stvarnim adresama i generiše konačni mašinski kod.[5]

Kod jednog prolaza, asembler se trudi odjednom riješiti sve o simbolima, što je jednostavnije, ali može zahtijevati određena ograničenja ili naredbe za „simboličku“ buduću upotrebu. Kod dva prolaza, postoji preciznija kontrola nad rasporedom koda i tabela simbola je gotova prije finalnog generisanja mašinskih instrukcija.

Prednosti

[uredi | uredi izvor]

Programi napisani u assembleru omogućavaju slanje direktnih komandi procesoru, iskorištavajući sve mogućnosti računarske arhitekture. Budući da rade na nivou mašinskog koda i nemaju dodatne apstrakcije, oni su često manji po veličini i mogu biti brži od programa napisanih u višim programskim jezicima. Zbog toga se asembler i danas koristi u sljedećim scenarijima:

  • Sistemi realnog vremena i ugrađeni sistemi, gdje su performanse i mala memorijska potrošnja presudni
  • Niske razine firmwarea u matičnim pločama, upravljačkim jedinicama i specifičnim hardverskim komponentama
  • Pisanje ključnih dijelova operativnih sistema, pogotovo kada je potreban pristup registarskim instrukcijama koje nisu dostupne kroz visoke jezike[6]

Nedostaci

[uredi | uredi izvor]

Glavne mane programa napisanih u assembleru uključuju:

  • Niža čitljivost i složenost održavanja, što je posebno izraženo kod većih projekata
  • Teškoća prevođenja na druge procesorske arhitekture, jer je kod direktno vezan za određeni skup instrukcija
  • Skuplje vrijeme razvoja, budući da programeri trebaju temeljno razumjeti detalje arhitekture i voditi računa o mnogim niskonivojskim detaljima

Zbog tih ograničenja, asembler se danas uglavnom koristi samo u specifičnim slučajevima (kao što su sistemi realnog vremena, uređaji sa ograničenim resursima, stabilan i jasan pristup registrima i memoriji, te izrada mikrokontrolerskih programa).

Dodatne primjene

[uredi | uredi izvor]

Assembler je važan i u područjima:

  • Analiza zlonamjernog softvera i reverzno inženjerstvo, gdje sigurnosni stručnjaci proučavaju kako binarni kod funkcioniše na niskom nivou
  • Optimizacija kritičnih dijelova koda (npr. kod videoigara ili multimedijalnih aplikacija), gdje je bitno iskoristiti svaku instrukciju procesora
  • Razvoj i dijagnostika novih arhitektura procesora, gdje se s assembler kodom vrše inicijalni testovi i provjere ispravnosti instrukcijskog sklopa
  • Inline assembler u višim jezicima (npr. C) gdje se dijelovi koda pišu u assembleru radi optimizacije

Reference

[uredi | uredi izvor]
  1. ^ Inc., IOActive (2015). Reverse Engineering Code with IDA Pro. Syngress. str. 4–5. ISBN 978-0128045053.
  2. ^ Patterson, David A. (2013). Computer Organization and Design, Fifth Edition. Morgan Kaufmann. str. 139–145. ISBN 978-0124077263. Nepoznati parametar |coauthors= zanemaren (prijedlog zamjene: |author=) (pomoć)
  3. ^ Jones, G. (2019). "Using Assembly Language for Real-Time Programming". Embedded Systems Journal. 14 (2): 28–35.
  4. ^ Hyde, Randall (2010). The Art of Assembly Language. No Starch Press. str. 47–51. ISBN 978-1593272074.
  5. ^ Duntemann, Jeff (2020). Assembly Language Step-by-Step. Wiley. str. 33–38. ISBN 978-1118080993.
  6. ^ "Assembly Language in Operating Systems" (PDF). University of California, Riverside. Pristupljeno 1. 2. 2025.

Također pogledajte

[uredi | uredi izvor]

Literatura

[uredi | uredi izvor]

Vanjski linkovi

[uredi | uredi izvor]