Asembler

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

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