NOP

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

В інформатиці NOP або NOOP (скорочення від англійського: «No OPeration») — інструкція процесора на мові асемблера, або команда протоколу, яка наказує нічого не робити.

NOP як машинна інструкція[ред. | ред. код]

Набір команд багатьох процесорів містить інструкцію, мета якої полягає не в тому, щоб змінити стан будь-якого регістра або комірки пам'яті, а в тому щоб затратити певну кількість тактів процесора. Для тих процесорів, в яких спеціальна інструкція відсутня, NOP імітується якоюсь іншою інструкцією з такими параметрами, що регістри і прапори не змінюються (наприклад в SPARC — процесорах як NOP рекомендується інструкція "sethi 0, %g0").

NOP'и зазвичай використовуються:

  • для створення затримки на певний час, наприклад, в цілях синхронізації з іншими пристроями в комп'ютері. Зокрема: в мікроконтролерах AVR цифрові порти мають дуже високу швидкодію, і між комутацією вихідних портів і зчитуванням вхідних рекомендується встановити NOP, щоб схема встигла стабілізуватися;
  • для заповнення пам'яті програм при вирівнюванні;
  • для запобігання помилок в апаратній частині процесора;
  • для передачі управління при конвеєрній організації обчислювального процесу;
  • як заповнювач під час розробки програми;
  • як заповнювач на місці видалених інструкцій, наприклад, при зломі програм (крякінг). Тобто код перевірки реєстраційного номера тощо замінюється на код, який нічого не робить.

Інструкція для Intel x86 сумісних процесорів[ред. | ред. код]

  • Назва: NOP
  • Кількість використовуваних тактів : 3
  • Розмір: 1 Байт
  • Код машинної команди: 0x90

Насправді, інструкція NOP для x86 — процесорів є XCHG EAX, EAX або XCHG AX, AX, яка має той же опкод 0x90, і не робить ніякого ефекту, за винятком таких спеціальних випадків :

  • Поєднання "REP NOP" (0xF3 0x90) в процесорах, починаючи з Xeon і Pentium 4, інтерпретується як команда PAUSE, повідомляючи процесору, що програма виконує цикл очікування зміни іншими процесорами стану комірки пам'яті, що дозволяє процесору оптимізувати роботу з пам'яттю і енергоспоживання.

Див. також[ред. | ред. код]

Джерела[ред. | ред. код]