Будь-який ЦП з самого початку розроблено для підтримки певного набору інструкцій. Набір інструкцій — це набір жорстко закодованих операцій, які ЦП може виконувати. Такими операціями можуть бути, наприклад, додавання двох чисел, перехід до іншої частини програми або порівняння двох значень. Кожна операція, яку може виконати комп’ютер, унікально представлена кодом операції.
Коди операцій
Під час виконання програми ЦП використовує програмний лічильник, щоб відстежувати, яку інструкцію потрібно виконати наступною. Коли інструкція витягується, програмний лічильник збільшується на довжину інструкції, щоб він вказував на початок наступної інструкції. Кожна інструкція складається з коду операції. Залежно від інструкції, вона може містити або не містити операнди. Операнд може бути постійним значенням або покажчиком на розташування значення в регістрі процесора або в системній оперативній пам'яті.
Після отримання повної інструкції її потрібно декодувати. Це процес, у якому ЦП розділяє код операції та будь-які операнди. Розкодований код операції використовується для ввімкнення або вимкнення певних електричних шляхів у ЦП, що призведе до правильної роботи.
Після того, як інструкція була декодована, вона буде виконана. Точна поведінка ЦП залежатиме від операції. Операція додавання підсумовує два значення. Операція переходу обчислить, куди в програмі потрібно перейти. Операція порівняння порівнює два значення. Операція NOP буде простоювати, оскільки NOP означає відсутність операції.
Тоді більшість інструкцій виведе результат операції. Цей вихід може надходити в регістри процесора і, якщо необхідно, в оперативну пам'ять системи. Для виконання кожної з цих операцій потрібен один такт.
Незаконні коди операцій
Кожна архітектура ЦП має свій окремий список кодів операцій, опублікований виробником. Значення цих кодів операцій не обов’язково є однаковими для різних платформ, тому програмне забезпечення потрібно скомпілювати для різних архітектур. У деяких випадках виробник також включає незадокументовані коди операцій. Вони називаються «незаконними кодами операцій». Незаконні коди операцій, незважаючи на те, що вони не задокументовані, виконуватимуть ту саму функцію кожного разу, коли їх викликають. Проте як недокументовані та нестандартні функції, оновлення архітектури ЦП можуть просто видалити їх.
Деякі перші комп’ютерні ігри на Apple II покладалися на певні незаконні коди операцій. Потім у них виникли проблеми з продуктивністю та стабільністю пізнішої версії процесора Apple IIc, оскільки IIc видалив незаконні коди операцій, які вимагали ігри. Незаконні коди операцій також використовувалися в колах із захисту авторського права як метод безпеки через невідомість у боротьбі з піратами, які зламували їхній вміст. Деякі незаконні коди операцій призначені просто як засоби налагодження та обробки помилок.
Набір інструкцій x86 містить велику кількість недокументованих незаконних кодів операцій. Цікаво, що деякі з них є спільними між процесорами Intel і AMD, що вказує на те, що обидві компанії публічно знають про їхню мету, хоча вони недокументовані.
Компілятори та збірка
Більшість програм написані на мовах високого рівня. Їх відносно легко читати, часто використовують англійські слова або скорочення, щоб мінімізувати криві навчання. Щоб комп’ютер міг виконувати ці програми, їх потрібно скомпілювати. Компілятор, по суті, є транслятором. Він бере код високого рівня та перетворює його на комп’ютерний код, інструкції, які ЦП може зрозуміти.
У деяких мовах також можливо запустити нескомпільований код через попередньо скомпільовану програму, яка генерує машинний код на льоту. Ассамблея — це мова програмування низького рівня, яка використовує скорочення, щоб дозволити розробникам безпосередньо бачити та контролювати виконувані операції. NOP є прикладом скорочення складання.
Висновок
Набір інструкцій — це список офіційних функцій, які може виконувати архітектура ЦП. Це список операцій, які можна виконати. Ці операції жорстко закодовані в ЦП і викликаються за допомогою відповідних кодів операцій.
Програмне забезпечення зазвичай використовує компілятор для перекладу з коду високого рівня, який читає людина, у машинний код, який може читати ЦП. Іноді архітектура процесора може мати незадокументовані коди операцій, які називаються незаконними кодами операцій. Технічно неприпустимі коди операцій є частиною набору інструкцій. Однак вони можуть бути недоступні в майбутніх ітераціях платформи. Не забудьте залишити свої думки в коментарях нижче.