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, повідомляючи процесору, що програма виконує цикл очікування зміни іншими процесорами стану комірки пам'яті, що дозволяє процесору оптимізувати роботу з пам'яттю і енергоспоживання.

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