Машинний код

Маши́нний код, маши́нна мова в інформатиці — набір команд (інструкцій), які виконуються безпосередньо центральним процесором комп'ютера без транслятора. Кожен тип центрального процесора має власний машинний код. Оскільки машинний код складається повністю з двійкових чисел (бітів), більшість програмістів пишуть програми на мовах програмування високого рівня. Програми, написані такими мовами, повинні транслюватися в машинний код, що здійснює компілятор або інтерпретатор програм, до того, як комп'ютер починає їх виконувати. В той час як прості процесори виконують інструкції одна за одною, суперскалярні процесори здатні виконувати декілька інструкцій одночасно.

Інструкції машинного коду

Кожен процесор або сімейство процесорів має свій власний набір команд (інструкцій) машинного коду. Кожна машинна інструкція виконує певну дію, такими є операції з даними (наприклад, додавання чи копіювання машинного слова в регістрі або в пам'яті) або перехід до іншої частини коду (зміна порядку виконання; при цьому перехід може бути безумовним або умовним, залежним від результатів попередніх інструкцій). Будь-яка виконувана програма складається з послідовності таких атомарних машинних операцій.

Мови асемблера та псевдокод

Машинний код можна розглядати як примітивну мову програмування або як найнижчий рівень представлення скомпільованих або ассембльованих комп'ютерних програм. Хоча цілком можливо створювати програми прямо в машинному коді, зараз цього практично ніхто не робить. Якщо потрібно написати оптимізовану програму під певний мікропроцесор то використовують переважно різні види мови асемблера. Також, якщо під рукою немає початкового коду програми на високій мові програмування, а необхідно внести певні зміни в код, зламати код і т.п. використовують дизасемблери, програми, що перетворюють машинний код у асемблерний, який більш зрозумілий кваліфікованим спеціалістам. За допомогою дизасемблери в деяких випадках можна змінювати машинний код таким чином що непотрібна повна перекомпіляція програм. Написання коду на машинному коді і наближених до нього асемблерних мовах доволі трудомістка задача, потребує хорошого знання будови мікропроцесора та апаратних засобів. Тому переважна більшість програм пишеться мовами більш високого рівня і транслюється в машинний код компіляторами. Існують також спеціальні декомпілятори, які дозволяють перетворити машинний код в код на мові високого рівня.

Програми на інтерпретованих мовах (таких як BASIC або Python) не транслюються в машинний код; замість цього вони або виконуються безпосередньо інтерпретатором мови, або транслюються у псевдокод (байт-код), який згодом виконується інтерпретатором. Самі інтерпретатори — це програми, представлені в машинному коді. Загалом виконання псевдокоду не значно повільніше за виконання машинного коду і значно швидше за виконанням інтерпретатором звичайного коду зрозумілого людині. Програми на Java зазвичай передаються на цільову машину у вигляді байт-кода, який перед виконання транслюється в машинний код «на льоту» — за допомогою JIT-компіляції.

Мікрокод

В деяких комп'ютерних архітектурах підтримка машинного коду реалізується ще більш низькорівневими програмами, що називаються мікропрограмами. Це дозволяє забезпечити єдиний інтерфейс машинного коду у всієї лінійки або сімейства комп'ютерів, які можуть мати значні структурні відмінності між собою, і полегшує перенесення програм в машинному коді між різними моделями комп'ютерів. Прикладом такого підходу є сімейство комп'ютерів IBM System/360 та їх наступників: незважаючи на різні шини шириною від 8 до 64 біт і вище, вони мають загальну архітектуру на рівні машинного коду (за винятком IBM System/360 Model 20, що був 16-розрядним).

Див. також

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.