Mašinski jezik

**Mašinski jezik**, **strojni jezik** ili **mašinski kod** (**binarni kod, mašinac**) je sistem instrukcija i podataka koje centralni procesor u računaru neposredno izvršava.

Mašinski jezik je u određenu ruku primitivan programski jezik. On je takođe i najosnovnija reprezentacija, odnosno računarski programi kompajlirani i/ili asemblirani na najnižem nivou — nivou mašine (od , ponekad neformalan izraz za uređaj, aparat, vozilo — u našem slučaju računar). Mašinski jezik se ponekad naziva nativni () kada se odnosi na specifičan hardver, tj. kada su delovi koda ili izrazi ovisni o platformi.

Računari i njihov mozak — procesori — rade na struju. To su elektronski 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.

## Instrukcije u mašinskom jeziku

Instrukcije su šabloni bitova, gde 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 razume jezik procesora P2 kaže se da su P1 i P2 kompatibilni. Na primer, takozvani IBM kompatibilni računari su dobili tu odrednicu upravo zbog toga što razumeju mašinski jezik koji je kreirao IBM i zatim primenio 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 izmeniti 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 redosledu jedna za drugom ali i u 'skokovima', odnosno pod određenim uslovima izvršavanje po redosledu može biti prekinuto i nastavljeno na nekoj drugoj adresi po zadatom kriterijumu.

## 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đe bi bilo i veoma teško snalaziti se u nepreglednim kolonama i redovima jedinica i nula.

Mašinski jezik se često meša sa asemblerskim jezikom. Tačno, čoveku 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 celog 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 kompleksnost koda i praktična nemogućnost konvertovanja istog koda na drugu procesorsku arhitekturu. Zbog tih mana se asembler danas koristi samo u sistemima realnog vremena i ostalim specifičnim sistemima.