To što ste koristili na faksu je asembler. Tacnije, prevodilac koji
asemblerski kod (poput mov, add, mul, cmp, jle i mnogih drugih instrukcija)
prevodi u niz nula i jedinica koji određeni procesor bez problema izvršava, a
za tačno određeni procesor.
Postoji više generacija procesora. 80806, 286, 386, 486, 486SX, 486DX, 586,
P2, P3, P4 i ko zna koji će se još pojaviti. Svaki od njih donosio je
određena poboljšanja u smislu povećanja radnog takta (od 33MHz pa do
današnjih 3GHz), maksimalne memorije koju može podržati, magistrale podataka
preko koje komunicira sa ostalim hardverom, ali najznačajnija promena je u
broju instrukcija.
Prvobitni "kompjuteri" imali su svega stotinak instrukcija sa relativno
ograničenim modovima adresiranja. Svaka nova generacija donosila je sve veći
i veći broj instrukcija koje određeni procesor podržava. To znači da
asemblerski programi za P3 neće raditi na 386 procesoru, ukoliko je korišćena
neka od instrukcija koju 386 ne podržava (što je verovatno).
Bilo koji procesor izvršava samo asemblerske instrukcije. Jedino njih
"razume". Ništa drugo. Ukoliko se napravi program u asembleru baš za taj
procesor, logično je da će biti veoma kratak i veoma brz. Postoji čak i čitav
operativni sistem (Menuet) pisan u čistom asembleru. Staje na jednu 1,44Mb
disketu!
Ostali programski jezici (C++, Java, Python, Basic, Pascal, Ada, Delphi...)
primenjuju u osnovi dva principa:
1. Kompajliraju se (C, C#, C++, Ada) - odnosno svaka njihova komanda se
prilikom kompajliranja (i linkovanja ukoliko ima više delova programa ili
biblioteka) prevodi u niz asemblerskih instrukcija za određeni procesor.
2. Interpretiraju se (Python, Java) - odnosno svaka njihova komanda se preko
posebnog programa (nazvanog interpreter - u slučaju Jave on se naziva Java
Virtual Machine) prevodi za vreme izvršavanja. Zbog toga se komande ovakvih
programskih jezika mnogo sporije izvršavaju.
Za neke programske jezike (Basic, a mislim da je tu i Pascal) koji su
zamišljeni da se izvršavaju interpreterski, vremenom su razvijeni kompajleri,
pa se stoga i oni mogu mnogo brže izvršavati.
U principu, svaki od viših programskih jezika vrši prevođenje svojih komandi u
asemblerske instrukcije. Ukoliko se kompajliraju, izvršavaće se brže jer su
već unapred prevedene u oblik koji procesor razume, a ukoliko se
interpretiraju izvršavaće se sporije jer se prevode za vreme izvršavanja
programa. Razliku između kompajliranja i interpretiranja možete najlakše
shvatiti ukoliko trebate razgovarati sa japancem (P4 procesorom, naravno, ne
znate japanski). On može:
1. unapred unajmiti prevodioca (kompajler) i odštampati Vam ono što bi Vam
trebao preneti na srpskom.
2. unajmiti prevodioca (interpreter) koji bi Vam, dok on priča, prevodio
rečenicu po rečenicu.
E, onda tek vidite da nije baš sve u redu. Prevodioc je možda dobar, a možda i
nije. Možda ima naglasak koji Vi ne razumete najbolje, možda japanac takođe
priča svojim dijalektom, možda koristi termine koje ni Vi ni prevodioc ne
razumete najbolje. Zbog toga je prevod (program) duži nego što bi trebao
biti, pa Vam je potrebno više vremena za njegovo čitanje (izvršavanje).
Preostaje Vam treće rešenje:
3. naučite japanski (asembler).
Sporazumevaćete se idealno, bez ikakve mogućnosti za dvosmislice ili
nejasnoće, prevodioc Vam neće biti potreban, sam razgovor (program) će biti
kratak, a razumećete se (brzina izvršavanja programa) ekstremno brzo.
Možda mislite da je u ovom slučaju asembler idealan! Pa i bio bi, da se stalno
ne pojavljuju novi procesori! Zamislite samo šta bi se dogodilo da sada
trebate pričati sa francuzom (AMD 64bit dual core)!
> Secam se da je profesor na jednom od predavanja iz c-a rekao da "ukoliko
> zelimo da se neki fragment koda brze izvrsava mozemo ga napisati na
> asembleru".
> Konkretno na sta je mislio i kako bi se to odradilo na nekom primeru iz C-a
> ili nekom drugom programskom jeziku?
U pojedinim C kompajlerima postoji mogućnost "umetanja" asemblerskog koda.
Znači, možete pisati:
Code:
I++
<asm>
mov 001
add 010
mul 011
cmp 100
jle 101
</asm>
J++
Većina ostalih programskih jezika (u koje spadaju svi interpreterski) ne
podržava ovakvo umetanje koda.
> Koliko se koristi assembler u praksi i u kojim oblastima sem sto ga koriste
> proizvodjaci procesora i ostalih uredjaja za koje je potrebno koristiti
> asemble?
Nažalost, sve slabije i slabije. Najviše prilikom programiranja
mikrokontrolera, mada i tu gubi vođstvo zbog velike kompatibilnosti programa
pisanih u C programskom jeziku sa novijim generacijama mikrokontrolera, i sve
veće i veće procesorske snage i memorije novijih mikrokontrolera koje
anuliraju najveće prednosti asemblera - veličinu i brzinu programa.
Za PC kompjutere se skoro i ne koristi, osim za drajvere, upravo zbog svoje
velike brzine.