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

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

 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.

 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.

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

 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 
 Kompajler
 Mašinski jezik
 Programski jezik
 Disassembler
 Ugađanje performansi (eng. performance tuning)

 Literatura 
 Reiner Backer: Assembler - Maschinennahes Programmieren von Anfang an; rororo Taschenbücher Nr.61224; (2003); 




 Vanjski linkovi 
 Brzi kurs assemblera
 Assembler programiranje na Linux-u 
 MenuetOS - Hobi projekat operativnog sistema napisanog u assembleru

Kategorija:Računarstvo
Kategorija:Programski jezici
Kategorija:Programski jezici niskog nivoa