Машинний код
Виконання програми |
---|
Загальні поняття |
Типи програмного коду |
Стратегії компіляції |
Середовища виконання |
|
Важливі компілятори і інструменти |
|
Маши́нний код, маши́нна мова в інформатиці — набір команд (інструкцій), які виконуються безпосередньо центральним процесором комп'ютера без транслятора.
Кожен тип центрального процесора має власний машинний код. Оскільки машинний код складається повністю з двійкових чисел (бітів), більшість програмістів пишуть програми на мовах програмування високого рівня. Програми, написані такими мовами, мають транслюватися в машинний код, що здійснює компілятор або інтерпретатор програм, ще до того, як комп'ютер починає їх виконувати. В той час як прості процесори виконують інструкції одна за одною (SISD за таксономією Флінна), суперскалярні процесори здатні виконувати декілька інструкцій одночасно.
Кожен процесор або сімейство процесорів має свій власний набір команд (інструкцій) машинного коду. Кожна машинна інструкція виконує певну дію; такими є операції з даними (наприклад, додавання чи копіювання машинного слова в регістрі або в пам'яті) або перехід до іншої частини коду (зміна порядку виконання; при цьому перехід може бути безумовним або умовним, залежним від результатів попередніх інструкцій). Будь-яка виконувана програма складається з послідовності таких атомарних машинних операцій.
Машинний код можна розглядати як примітивну мову програмування або як найнижчий рівень представлення скомпільованих або асембльованих комп'ютерних програм. Хоча цілком можливо створювати програми прямо в машинному коді, зараз цього практично ніхто не робить. Якщо ж потрібно написати оптимізовану програму під певний мікропроцесор, то використовують переважно різні види мови асемблера. Також, якщо під рукою немає початкового коду програми високою мовою програмування, а необхідно внести певні зміни в код, зламати код і т.п. використовують дизасемблери, програми, що перетворюють машинний код в асемблерний, який більш зрозумілий кваліфікованим спеціалістам. За допомогою дизасемблери в деяких випадках можна змінювати машинний код таким чином що непотрібна повна перекомпіляція програм. Написання коду на машинному коді й наближених до нього асемблерних мовах доволі трудомістка задача, потребує хорошого знання будови мікропроцесора та апаратних засобів. Тому переважна більшість програм пишеться мовами вищого рівня і транслюється в машинний код компіляторами. Існують також спеціальні декомпілятори, які дозволяють перетворити машинний код в код мовою високого рівня.
Програми на інтерпретованих мовах (таких як BASIC або Python) не транслюються в машинний код; замість цього вони або виконуються безпосередньо інтерпретатором мови, або транслюються у псевдокод (байт-код), який згодом виконується інтерпретатором. Самі інтерпретатори — це програми, представлені в машинному коді. Загалом виконання псевдокоду не значно повільніше за виконання машинного коду і значно швидше за виконанням інтерпретатором звичайного коду зрозумілого людині. Програми на Java зазвичай передаються на цільову машину у вигляді байт-коду, який перед виконання транслюється в машинний код «на льоту» — за допомогою JIT-компіляції.
В деяких комп'ютерних архітектурах підтримка машинного коду реалізується ще більш низькорівневими програмами, що називаються мікропрограмами. Це дозволяє забезпечити єдиний інтерфейс машинного коду у всієї лінійки або сімейства комп'ютерів, які можуть мати значні структурні відмінності між собою, і полегшує перенесення програм в машинному коді між різними моделями комп'ютерів. Прикладом такого підходу є сімейство комп'ютерів IBM System/360 та їх наступників: попри різні шини шириною від 8 до 64 біт і вище, вони мають загальну архітектуру на рівні машинного коду (за винятком IBM System/360 Model 20[en], що був 16-розрядним).
- Nisan, Noam; Schocken, Shimon; Schocken, Simon. 4 Machine Language. The elements of computing systems: building a modern computer from first principles (вид. 1st MIT Press paperback). Cambridge, Mass. London: MIT. ISBN 026214087X.
Це незавершена стаття про інформаційні технології. Ви можете допомогти проєкту, виправивши або дописавши її. |