Asembler

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]- ^ Inc., IOActive (2015). Reverse Engineering Code with IDA Pro. Syngress. str. 4–5. ISBN 978-0128045053.
- ^ 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ć) - ^ Jones, G. (2019). "Using Assembly Language for Real-Time Programming". Embedded Systems Journal. 14 (2): 28–35.
- ^ Hyde, Randall (2010). The Art of Assembly Language. No Starch Press. str. 47–51. ISBN 978-1593272074.
- ^ Duntemann, Jeff (2020). Assembly Language Step-by-Step. Wiley. str. 33–38. ISBN 978-1118080993.
- ^ "Assembly Language in Operating Systems" (PDF). University of California, Riverside. Pristupljeno 1. 2. 2025.
Također pogledajte
[uredi | uredi izvor]- Kompajler
- Mašinski jezik
- Programski jezik
- Disassembler
- Ugađanje performansi (eng. performance tuning)
Literatura
[uredi | uredi izvor]- Reiner Backer: Assembler - Maschinennahes Programmieren von Anfang an; rororo Taschenbücher Nr.61224; (2003); ISBN 3-499-61224-0
- Hyde, Randall (2010). The Art of Assembly Language. No Starch Press. ISBN 978-1593272074.
- Kusswurm, Daniel (2018). Modern X86 Assembly Language Programming. APress. ISBN 978-1484240625.
- Duntemann, Jeff (2020). Assembly Language Step-by-Step. Wiley. ISBN 978-1118080993.