NOP

NOP（ノップ）あるいは NOOP（ノープ）とは no operation （何もしない）を意味する。プログラミングやネットワーク通信と言ったコンピュータ関連の技術用語として使用される。
機械語.
機械語において NOP は多くの命令セットで用意されている命令である。プロセッサはこの命令を読みとると文字通り「何もせず」にプログラムカウンタのインクリメントのみを行う 。それ自身では何の意味も持たない命令ではあるが、
などの用途で使用される。
規則的に命令を決めた結果、何の意味も持たない命令（同一レジスタでの移動、次の番地へのジャンプ）が出来たのでそれをNOPとすることもあれば、専用の命令として用意されることもある。
歴史.
1950年代のEDSACにおいて既に、NOP に相当する命令は設計者らには認識されていた（コード 'X' であるが、何もしないという命令は命令でないと考えたためか命令一覧では省かれていることがあり、文字コード一覧に命令も添えてある表のほうで確認できる（EDSACでは文字コードとオペコードを一致させていた））。
TMS9900は規則的なパターンのためにできた無意味となる場合をNOPとした例である。
x86では、命令の並びからは codice_1 に当たる部分がNOPであり、8086に始まる16ビット時代には内部的にはそのまま動作していたものもあったと思われる。しかし80386以降の後にIA-32と呼ばれるような高性能プロセッサになってくると、「AXレジスタを操作する」という意味には並列化の邪魔になるなど弊害が現れるため、AXの参照を伴わない真にNOPであるという解釈が明確化された。さらにAMD64では、32ビットと64ビットの調整のために作られた「暗黙のゼロ拡張」という仕様により、64ビットレジスタRAXに対し、32ビット操作で codice_2 に相当する動作をした場合は、64ビットのうち上位32ビットがリセットされなければならないため、特別扱いであるNOPだと再定義された。
幾つかの例.
幾つかのCPUについて機械語コードを示す。には更に多くの例がある。
高水準言語.
NOPという表現はしばしば、何も起こさないような関数やコードを指して使われることがある (この場合冗長コードと呼ばれることもある)。コンパイラ最適化では、このようなコードを検出し、削除する（オブジェクトサイズの削減といった直接的な効果があり、コードキャッシュが無駄に使われるのを回避するという副次的効果もある）。
プログラミング言語の構文によっては、何もないことが許されないため、NOPのようなものが必要な場合がある。次に例を示す。
Python.
Pythonにおける、何の効果も持たない pass文 (pass statement) は、NOPに似ている。pass statementは、Pythonの特徴的なインデントを使用する構文の都合上、記述したいことが何もなくても、何か記述が必要な場合に使われる。たとえばクラスの定義には何かブロック本体が必要であるので、とにかくクラスを存在させたいだけ、といった場合にその本体として codice_3 と書く。
たとえば、次のようになる。
class Foo(Bar): # クラスを継承する
 pass # (再)定義すべき内容は何もない
通信プロトコル.
いくつかの通信プロトコルでは、NOP や NOOP というコマンドを備えている。このコマンドを送信した場合、具体的に何かが起こるわけではないがサーバからの応答は返ってくる。プロトコルによっては特別なメッセージや情報を返すものもある。このコマンドは主にサーバとの接続が切断されていないか、あるいはトラフィックの増大等の理由でサーバからの応答が遅れていないかを調べる目的で使用される。
NOP もしくは NOOP コマンドを備えている主な通信プロトコルとして以下のものがある。