Направо към съдържанието

Машинен език

от Уикипедия, свободната енциклопедия

Машинен код или машинен език е език за програмиране от ниско ниво – система от инструкции и информация, която може да бъде разбрана и изпълнена от процесора на компютъра.

Инструкции в машинния код

[редактиране | редактиране на кода]

Инструкциите са последователности от битове с различни модели на ползване на паметта, които съответстват на различните команди.

Всеки модел процесор или клас/семейство процесори има свой собствен набор от инструкции на машинен език, въпреки че има доста голямо застъпване между тях[1]. Често последващите или производни модели процесори включват основния набор на предшестващите модели, допълнен с други инструкции. Ако процесорът „А“ разбира пълния език на процесора „Б“, то казваме, че „А“ е съвместим с „Б“. „Б“ може и да не е съвместим с „А“, тъй като „А“ може да използва някои команди, които „Б“ не може. Случва се следващ модел да премахне или да промени коренно кода на някои инструкции (например необходими за други задачи), което се отразява на съвместимостта; но дори и напълно съвместими процесори могат да имат различия в работата на някои от инструкциите. Компютърните системи се различават и по други елементи, например организация на паметта, операционна система и периферни устройства. Тъй като изпълняваната програма зависи от тези фактори, различните системи като правило не изпълняват един и същ машинен код, макар че използват един и същ процесор.

Някои машинни езици отделят за всички свои команди един и същ брой битове, т.е. инструкциите имат еднаква дължина, но при други това не е така. Това силно зависи от конкретната архитектура и типа на инструкциите. Повечето от тях имат едно или повече полета opcode, в които е дефиниран основният тип на инструкцията (аритметична, логическа, за предаване на управлението и др.) и конкретната операция (например събиране или сравнение) и други полета, определящи вида на операндите, метода на адресиране или самата действителна стойност.[2]

Не всички машини или инструкции имат изрично посочени операнди, а те варират според различните модели на паметта в инструкциите. При първите процесори е използван моделът с „един акумулатор“ (или регистър) (Accumulator architecture) и операнд и резултат се комбинират в един регистър за повечето аритметични инструкции (т.е. инструкцията е еднооперандна, като вторият операнд е премълчан). Други процесорни архитектури (например 8086 и семейството x86) използват модел с „разширен акумулатор“ (Register – Memory architecture) с малък брой регистри с къси имена на единия вход. Моделът с „вътрешен стек“ (Stack architecture) използва стек вместо регистър, с който процесорът работи непрекъснато. Инструкциите отново са еднооперандни, подобно на акумулаторния модел, но тук могат да бъдат запаметени повече променливи. Всяка променлива, както и междинните резултати, се запомнят във върха на стека. Специалните инструкции също често нямат изрично посочени операнди. При генерирането на машинен код е съществено да се различават експлицитните и имплицитните операнди.

Програмата е последователност от команди, които се изпълняват от процесора. Докато по-простите процесори изпълняват командите една след друга, процесорите с паралелни архитектури са способни да изпълнят няколко команди наведнъж.

На програмният поток може да се въздейства със специалните jump инструкции, които прехвърлят хода на програмата към инструкция, различна от следващата. В зависимост от някакво условие може да се предприеме някакво действие (изпълнението продължава на друг адрес) или да не се предприеме (изпълнението продължава със следващата команда).

Една по-четлива интерпретация на машинния език се нарича асемблерен език и се състои от числа и прости думи, докато машинният код е съставен само от числа, обикновено представени в двоична или шестнадесетична бройна система.

Например на процесора Zilog Z80 машинният код 00000101 казва на процесора да намали с единица процесорния регистър B. На асемблерен език това би изглеждало така DEC B.

Специални ли са машинните езици?

[редактиране | редактиране на кода]

Машинният език е следствие от необходимостта от използване на прости елементи в електрическата схема на компютрите. Всъщност програмите, написани на машинен език, са сред най-трудните за четене и модифициране и, въпреки че познаването на машинните езици би позволило на способните програмисти да компенсират недостатъците на автоматичното генериране на код от компилаторите и интерпретаторите, то не би опростило работата им.