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