Pozdrav
Evo nesto uopsteno iz mog iskustva kao i iz iskustva drugih i razne literature.
Uopsteni rad mikroprocesora:
Centralna procesorska jedinica (CPU) radi u koracima (intervalima) izvrsavajuci jednu po jednu masinsku instrukciju.
Postoji odredjeni set masinskih instrukcija koje procesor poznaje. One se prepoznaju od strane procesora u binarnom obliku kao stanja bitova plus i minus.
Danasnji PC procesori su uglavnom 32 bitni, sto znaci da je podatak (instrukcija) koja dolazi na procesor sastavljena od 32 bita ili 4 bayta.
Neke masinske instrukcije zahtevaju iza sebe i dodatni argument podatak (jos 4 , 8 baytova) a neke ne.
Procesor cita instukciju po instrukciju iz Radne memorije (RAM) sa lokacije koja je upisana u jedan procesorski registar (counter) , uzima dodatan argument sa sledece pozicije u memoriji ako je potrebno i uvecava vednost countera na sledecu poziciju koja treba da se izvrsi.
Kada se instrukcija izvrsi sledeci puls procesorskog sata inicira sledeci krug itd..
Ovo je fizicki deo rada. Inace fizicke vrednosti masinskih instrukcija nisu iste kod svih procesora iako se instrukcije isto zovu i zato postoje razne vrste asemblera za razne tipove mikroprocesora.
Isto tako nisu ni svi procesori 32 bitni.
Sta assembleru daje prednost ?
Nema mnogo razloga za koriscenje assemblera ali oni koji postoje su kljucni u nekim situacijama (kad je bitna brzina izvrsavanja koda , pristup precesorskim i memoiskim reursima i sl).
Da napomenem , da vecina C i C++ kompajlera daju ogranicenu mogucnost koriscenja inline assemblerskog koda u C/C++ kodu.
Znaci asemblerski kod je najbrzi kod koji postoji.
Zasto?
Svi programi i ostali izvrsivi failovi (PE - portable executables) su po svom sastavu masinski / binarni failovi.
Koji se izvode na procesoru na gore opisan nacin.
Ovde moram da napomenem da se na OS u zasticenom modu kao sto je Window programi ne izvrsavaju bukvalno na hardveru nego na virtuelnim masinama koje predstavljaju sloj izmedju softvera i hardvera. Ove virtuelne masine su sustina OS-a i zaduzene su za ucitavanje, izvrsavenje i raspodelu procesorskog vremena medju raznim procesima / programima koji se isvrsavaju. Jedino se njihov rad stvarno izvrsava na hardveru.
Mozemo da zakljucimo da je nas program na Windowsu ustvari interpretiran , sto ga donekle usporava ali osigurava da procesor ne upadne u gresku ako postoji greska u programu.Ovo interpretiranje vazi za sve programe u OS-u ukljucujuci i one napisane u assembleru.
Kada C/C++ kompajleri preve izvrsivi fail od naseg koda oni imaju odredjene sablone.
Naprimer za c++ for petlju postoji odredjeni masinski ekvivalent u koji se ona pretvara. Postoje i odredjene optimalizacije kompajlera ali u sustini na to kako ce on da resi kod mi ne mozemo da uticemo. To je osnovni razlog usporavanja takvog programa u odnosu na asm. Cesto se u masinskom kodu izbacenom iz komailera nalaze i mnoge nepotrebne rutine za razliku od asm koda koji sami ukucamo, gde je uneseno samo ono sto je potrebno.
Ovo je ujedno i odgovor na pitanje Sta asembler razlikuje od ostalih programskih jezika.
Inace sve ozbiljne firme danas preve svoje multiplatformske biblioteke koda u C/C++ jeziku.
U vezi sigurnosti si u pravu. Asm programeri mogu da citaju sve procese otvorene u Debugeru kao bukvar jer je kod prikazan u njima poznatom jeziku. Samo treba da se napomene da je Asm kod u debugeru (programu za simuliranje izvodjenja procesa) prilicno nepregledan. Postoje dobri nacini zastite izvrsivih failova koji se koriste i koji bi po mom misljenju trebali da se dodaju kao opcija u kompajlerima.
U vezi programiranja hardverskih komponenti.
To se uglavnom radi u Asm i redje u C jeziku. To je ova prica o virtuelnim masinama i drajverima. To je prilicno strucan i nezahvalan posao zato sto taj kod radi na realnom nivou hardvera i u slucaju greske moze da obori OS. Necu da ulazim u detalje o ovome, samo da napomenem da je to programiranje potpuno drugacije od programiranja u OS-u.
U vezi ostalog. Asm ne moze da uradi mnogo vise od npr C++ u OS-u i mnogo je tezi / sporiji za rad.
Na osnovu ovog teksta moze da izgleda da nisam ljubitelj Assemblera, sto uopste nije tacno jer je Asm prvi prog. jezik koji sam naucio, ali ovo su opste cinjenice.
Isto tako, moje misljenje, assembler se danas malo koristi ali ne zato sto je zastareo nego zato sto su se programeri olenjili u odnosu na starije majstore.
Nekad su ljudi busili katice da bi napravili program.
I ja se izvinavam strucnijim kolegama ali sam morao da pisem ovako uopsteno da bi i pocetnici mogli nesto da shvate.
O svakoj od ovih tema postoje hiljade napisanih strana.
A mozda ce jos neko posle mene da doda nesto detaljnije.
Na kraju evo ti odnos brzine i popularnosti programskih jezika koji se danas koriste.
Najbrzi su sa leve a najvise korisceni desno.
Asm -> C -> C++ -> VB
Pozdrav