Mašinski jezik

**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 
Instrukcije 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 
Rač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 
Pisanje 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.

## Također pogledajte 
* Assembler
* Digitalni sistem
* Kompajler
* Programski jezik

Kategorija:Računarstvo
Kategorija:Softver
Kategorija:Programiranje