Mašinski jezik
Ovaj članak ili neki od njegovih odlomaka nije dovoljno potkrijepljen izvorima (literatura, veb-sajtovi ili drugi izvori). |
Mašinski jezik ili mašinski kod (binarni kod, mašinac) jeste sistem instrukcija i podataka koje centralni procesor u računaru neposredno izvršava. Mašinski jezik je u određenu ruku primitivan i nezgrapan programski jezik. On je također i najosnovnija reprezentacija, odnosno računarski programi kompajlirani i/ili asemblirani na najnižem nivou - nivou mašine (od eng. machine, ponekad neformalan izraz za uređaj, aparat, vozilo - u našem slučaju računar). Mašinski jezik se ponekad naziva nativni (eng. native code) kada se odnosi na specifičan hadrver, tj. kada su dijelovi koda ili izrazi ovisni o platformi.
Računari i njihov 'mozak' - procesori - rade na 'struju'. To su elektronički sklopovi čiji je rad zasnovan na stanjima napona; stanje s naponom i stanje (skoro) bez napona. Mašinski jezik, odnosno njegov binarni kod - sistem 1 i 0 - direktno korespondira sa naponskim stanjima u integralnom kolu.
Primjer:
0010 0100 1011 0111
1000 1110 1100 1011
0101 1001 0010 0001
0111 0010 0011 1101
0001 0000 1001 0100
1000 1001 1011 1110
0001 0011 0101 1001
0111 0010 0011 1101
0001 0000 1001 0000
1000 1001 1011 1111
1001 1101 1001 1110
0111 0010 0011 1101
0001 0000 1001 0000
0111 0010 0011 1101
0001 0011 1001 1100
Instrukcije u mašinskom jeziku
urediInstrukcije su šabloni bitova, gdje svaki šablon odgovara određenoj komandi koja se zadaje mašini.
Svaki model centralnog procesora ima sopstveni mašinski jezik ili set instrukcija. Poboljšane verzije jednog procesora ili novi modeli zasnovani na prethodnim mogu koristiti sve instrukcije svog prethodnika kao i njima dodane instrukcije.
Ako procesor P1 u potpunosti razumije jezik procesora P2 kaže se da su P1 i P2 kompatibilni. Naprimjer, takozvani IBM kompatibilni računari su dobili tu odrednicu upravo zbog toga što razumiju mašinski jezik koji je kreirao IBM i zatim primijenio na većinu personalnih računara.
Ali, čak i manje razlike kod skoro potpuno kompatibilnih procesora mogu uzrokovati drugačije efekte kada im se zadaju iste instrukcije. Ponekad će novi model izmijeniti ili prekinuti instrukcije svog prethodnika a to sve čini migraciju mašinskog jezika između dva procesora težom. Pa i kada se radi istom modelu procesora, oni neće jednako raditi ni pod istim mašinskim jezikom ako su memorije u sistemima drugačije postavljene, ako se koristi drugačiji operativni sistem ili su periferne jedinice različite. Ovo je zbog toga što mašinski jezik u sebi ne sadrži informacije o konfiguraciji sistema.
Prostim jezikom rečeno, korisnici na ovaj problem najčešće ukazuju pitanjem: "Pa kako radi na kompjuteru kod komšije a kod mene ne?!"
Svi setovi instrukcija u datom mašinskom kodu mogu ali ne moraju biti jednake dužine. Kako će šabloni biti organizovani zavisi ponajviše od specifikacija mašinskog koda.
Programi
urediRačunarski program je niz instrukcija koje izvršava centralni procesor. Jednostavni procesori mogu izvršavati instrukcije samo jednu za drugom dok su složeni procesori poput onih u super-računarima sposobni izvršavati više instrukcija istovremeno, takozvano paralelno procesuiranje.
Kod izvršavanja programa instrukcije se mogu izvršavati po redoslijedu jedna za drugom ali i u 'skokovima', odnosno pod određenim uslovima izvršavanje po redoslijedu može biti prekinuto i nastavljeno na nekoj drugoj adresi po zadatom kriteriju.
Asemblerski jezik
urediPisanje programa direktno u mašinskom jeziku bilo bi veoma naporan i dugotrajan posao. Programeri bi morali voditi računa o svakom bitu u datoj instrukciji. Također bi bilo i veoma teško snalaziti se u nepreglednim kolonama i redovima jedinica i nula.
Mašinski jezik se često miješa sa asemblerskim jezikom. Tačno, čovjeku mnogo jasniji prikaz mašinskog jezika je dat u asemblerskom jeziku ali asembler je programski jezik niskog nivoa koji mašinski jezik specifične procesorske arhitekture predstavlja u čitljivom obliku.
Programi napisani u asembleru se odlikuju mogućnošću slanja direktnih komandi procesoru kao i iskorištavanju cijelog dijapazona računarske arhitekture. Pošto ti programi rade praktično na nivou mašinskog koda, i sa sobom nemaju pomoćne konstrukcije, generalizacije koda i za mašinu slične "nebitne" stvari, su mnogo manji i brži od programa napisanih u nekom "konvencionalnom" programskom jeziku.
Neke od glavnih mana takvih programa su loša čitljivost, (posebno izraženo pri velikim projektima), te složenost koda i praktična nemogućnost konvertovanja istog koda na drugu procesorsku arhitekturu. Zbog tih mana se assembler danas koristi samo u sistemima realnog vremena i ostalim specifičnim sistemima.