Машинний код: відмінності між версіями

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
[перевірена версія][перевірена версія]
Вилучено вміст Додано вміст
шаблон
Немає опису редагування
 
(Не показано 3 проміжні версії 3 користувачів)
Рядок 1: Рядок 1:
{{без джерел|дата=лютий 2020}}
{{Виконання програми}}
{{Виконання програми}}
'''Маши́нний код''', '''маши́нна мова''' в [[інформатика|інформатиці]] — набір [[Команда (програмування)|команд]] (інструкцій), які виконуються безпосередньо [[Центральний процесор|центральним процесором]] комп'ютера без [[транслятор]]а. Кожен тип центрального процесора має власний машинний код. Оскільки машинний код складається повністю з [[Двійкова система числення|двійкових чисел]] ([[біт]]ів), більшість [[програміст]]ів пишуть програми на мовах програмування [[Мови програмування високого рівня|високого рівня]]. Програми, написані такими мовами, повинні транслюватися в машинний код, що здійснює [[компілятор]] або [[інтерпретатор]] програм, до того, як комп'ютер починає їх виконувати. В той час як прості процесори виконують інструкції одна за одною, [[Суперскалярність|суперскалярні]] процесори здатні виконувати декілька інструкцій одночасно.
'''Маши́нний код''', '''маши́нна мова''' в [[інформатика|інформатиці]] — набір [[Команда (програмування)|команд]] (інструкцій), які виконуються безпосередньо [[Центральний процесор|центральним процесором]] комп'ютера без [[транслятор]]а.
Кожен тип центрального процесора має власний машинний код. Оскільки машинний код складається повністю з [[Двійкова система числення|двійкових чисел]] ([[біт]]ів), більшість [[програміст]]ів пишуть програми на мовах програмування [[Мови програмування високого рівня|високого рівня]]. Програми, написані такими мовами, мають транслюватися в машинний код, що здійснює [[компілятор]] або [[інтерпретатор]] програм, ще до того, як комп'ютер починає їх виконувати. В той час як прості процесори виконують інструкції одна за одною ([[SISD]] за [[Таксономія Флінна|таксономією Флінна]]), [[Суперскалярність|суперскалярні]] процесори здатні виконувати декілька інструкцій одночасно.


== Інструкції машинного коду ==
== Інструкції машинного коду ==
{{main|Архітектура системи команд}}
{{main|Архітектура системи команд}}
Кожен процесор або сімейство процесорів має свій власний набір команд (інструкцій) машинного коду. Кожна машинна інструкція виконує певну дію, такими є операції з даними (наприклад, додавання чи копіювання [[Машинне слово|машинного слова]] в [[Регістр процесора|регістрі]] або в [[Комп'ютерна пам'ять|пам'яті]]) або [[Команди переходу|перехід до іншої частини коду]] (зміна порядку виконання; при цьому перехід може бути безумовним або умовним, залежним від результатів попередніх інструкцій). Будь-яка [[Виконуваний файл|виконувана]] програма складається з послідовності таких атомарних машинних операцій.
Кожен процесор або сімейство процесорів має свій власний набір команд (інструкцій) машинного коду. Кожна машинна інструкція виконує певну дію; такими є операції з даними (наприклад, додавання чи копіювання [[Машинне слово|машинного слова]] в [[Регістр процесора|регістрі]] або в [[Комп'ютерна пам'ять|пам'яті]]) або [[Команди переходу|перехід до іншої частини коду]] (зміна порядку виконання; при цьому перехід може бути безумовним або умовним, залежним від результатів попередніх інструкцій). Будь-яка [[Виконуваний файл|виконувана]] програма складається з послідовності таких атомарних машинних операцій.


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


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


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


== Див. також ==
== Див. також ==
Рядок 21: Рядок 22:
* [[Мова асемблера]]
* [[Мова асемблера]]
* [[Мікрокод]]
* [[Мікрокод]]

== Література ==
* {{cite book |last1=Nisan |first1=Noam |last2=Schocken |first2=Shimon |last3=Schocken |first3=Simon |title=The elements of computing systems: building a modern computer from first principles |publisher=MIT |location=Cambridge, Mass. London |isbn=026214087X |edition=1st MIT Press paperback |chapter=4 Machine Language}}


{{compu-stub}}
{{compu-stub}}
Рядок 29: Рядок 33:
[[Категорія:Машинний код|*]]
[[Категорія:Машинний код|*]]
[[Категорія:Програмне забезпечення]]
[[Категорія:Програмне забезпечення]]
[[Категорія:Асемблер]]

Поточна версія на 08:46, 11 січня 2024

Маши́нний код, маши́нна мова в інформатиці — набір команд (інструкцій), які виконуються безпосередньо центральним процесором комп'ютера без транслятора.

Кожен тип центрального процесора має власний машинний код. Оскільки машинний код складається повністю з двійкових чисел (бітів), більшість програмістів пишуть програми на мовах програмування високого рівня. Програми, написані такими мовами, мають транслюватися в машинний код, що здійснює компілятор або інтерпретатор програм, ще до того, як комп'ютер починає їх виконувати. В той час як прості процесори виконують інструкції одна за одною (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.