Машински језик

С Википедије, слободне енциклопедије
(преусмерено са Машински код)

Машински језик или машински код (бинарни код, машинац) је систем инструкција и података које централни процесор у рачунару непосредно извршава.

Машински језик је у одређену руку примитиван програмски језик. Он је такође и најосновнија репрезентација, односно рачунарски програми компајлирани и/или асемблирани на најнижем нивоу — нивоу машине (од енгл. machine, понекад неформалан израз за уређај, апарат, возило — у нашем случају рачунар). Машински језик се понекад назива нативни (енгл. native code) када се односи на специфичан хардвер, тј. када су делови кода или изрази зависни од платформе.

Рачунари и њихов мозакпроцесори — раде на струју. То су електронски склопови чији је рад заснован на стањима напона; стање с напоном и стање (скоро) без напона. Машински језик, односно његов бинарни код — систем 1 и 0 — директно кореспондира са напонским стањима у интегралном колу.

Инструкције у машинском језику[уреди | уреди извор]

Инструкције су шаблони битова, где сваки шаблон одговара одређеној команди која се задаје машини. Сваки модел централног процесора има сопствени машински језик или скуп инструкција. Побољшане верзије једног процесора или нови модели засновани на претходним могу користити све инструкције свог претходника као и њима додане инструкције.

Ако процесор П1 у потпуности разуме језик процесора П2 каже се да су П1 и П2 компатибилни. На пример, такозвани IBM компатибилни рачунари су добили ту одредницу управо због тога што разумеју машински језик који је креирао IBM и затим применио на већину персоналних рачунара.

Али, чак и мање разлике код скоро потпуно компатибилних процесора могу узроковати другачије ефекте када им се задају исте инструкције. Понекад ће нови модел изменити или прекинути инструкције свог претходника а то све чини миграцију машинског језика између два процесора тежом. Па и када се ради истом моделу процесора, они неће једнако радити ни под истим машинским језиком ако су меморије у системима другачије постављене, ако се користи другачији оперативни систем или су периферне јединице различите. Ово је због тога што машински језик у себи не садржи информације о конфигурацији система.

Простим језиком речено, корисници на овај проблем најчешће указују питањем: „Па како ради на компјутеру код комшије а код мене не?!“

Сви сетови инструкција у датом машинском коду могу али не морају бити једнаке дужине. Како ће шаблони бити организовани зависи понајвише од спецификација машинског кода.

Програми[уреди | уреди извор]

Рачунарски програм је низ инструкција које извршава централни процесор. Једноставни процесори могу извршавати инструкције само једну за другом док су сложени процесори попут оних у супер-рачунарима способни извршавати више инструкција истовремено, такозвано паралелно процесуирање.

Код извршавања програма инструкције се могу извршавати по редоследу једна за другом али и у 'скоковима', односно под одређеним условима извршавање по редоследу може бити прекинуто и настављено на некој другој адреси по задатом критеријуму.

Асемблерски језик[уреди | уреди извор]

Писање програма директно у машинском језику било би веома напоран и дуготрајан посао. Програмери би морали водити рачуна о сваком биту у датој инструкцији. Такође би било и веома тешко сналазити се у непрегледним колонама и редовима јединица и нула.

Машински језик се често меша са асемблерским језиком. Тачно, човеку много јаснији приказ машинског језика је дат у асемблерском језику али асемблер је програмски језик ниског нивоа који машински језик специфичне процесорске архитектуре представља у читљивом облику.

Програми написани у асемблеру се одликују могућношћу слања директних команди процесору као и искориштавању целог дијапазона рачунарске архитектуре. Пошто ти програми раде практично на нивоу машинског кода, и са собом немају помоћне конструкције, генерализације кода и за машину сличне „небитне“ ствари, су много мањи и бржи од програма написаних у неком „конвенционалном“ програмском језику.

Неке од главних мана таквих програма су лоша читљивост, (посебно изражено при великим пројектима), те комплексност кода и практична немогућност конвертовања истог кода на другу процесорску архитектуру. Због тих мана се асемблер данас користи само у системима реалног времена и осталим специфичним системима.