Asembler
From Wikipedia, the free encyclopedia
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
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
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
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
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
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
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
Također pogledajte
Literatura
Vanjski linkovi
Wikiwand - on
Seamless Wikipedia browsing. On steroids.