| ア | イ | ウ | エ | オ |
| カ | キ | ク | ケ | コ |
| サ | シ | ス | セ | ソ |
| タ | チ | ツ | テ | ト |
| ナ | ニ | ヌ | ネ | ノ |
| ハ | ヒ | フ | ヘ | ホ |
| マ | ミ | ム | メ | モ |
| ヤ | ユ | ヨ | ||
| ラ | リ | ル | レ | ロ |
| ワ | ヰ | ヴ | ヱ | ヲ |
| ン |
| A | B | C | D | E |
| F | G | H | I | J |
| K | L | M | N | O |
| P | Q | R | S | T |
| U | V | W | X | Y |
| Z | 数字 | 記号 | ||
マイクロプロセッサーの命令の一つ。何も行なわない命令。
アラインメントのためのパディングや、タイミング調整など、幾つかの目的のために使われる。
CISCの場合、数クロックのCPU時間を消費するものが多く、タイミング調整に使われる。
RISCの場合、プロセッサーによっては実行ステージに到達する前にパイプラインから削除され、CPU時間を消費しないこともあり、主としてパディング用として使われる。
主な実装方法は次の通り。詳細があるものは後述。
Pentium以降では、メモリーアクセス付きのマルチバイトNOP命令が追加されている。
レジスター間接の場合は、不正メモリーアクセスにならないようレジスターの種類または内容に配慮する必要があることは言うまでもない。
| 長さ | アセンブリ | バイト列 |
| 1 | NOP | 90H |
| 2 | 66 NOP | 66 90H |
| 3 | NOP DWORD ptr [EAX] | 0F 1F 00H |
| 4 | NOP DWORD ptr [EAX + 00H] | 0F 1F 40 00H |
| 5 | NOP DWORD ptr [EAX + EAX*1 + 00H] | 0F 1F 44 00 00H |
| 6 | 66 NOP DWORD ptr [EAX + EAX*1 + 00H] | 66 0F 1F 44 00 00H |
| 7 | NOP DWORD ptr [EAX + 00000000H] | 0F 1F 80 00 00 00 00H |
| 8 | NOP DWORD ptr [EAX + EAX*1 + 00000000H] | 0F 1F 84 00 00 00 00 00H |
| 9 | 66 NOP DWORD ptr [EAX + EAX*1 + 00000000H] | 66 0F 1F 84 00 00 00 00 00H |
AMD64/Intel64以降は、REXプリフィックスを使うと更に長くできる気がする。
未確認だが、次のような符号が可能なのではないか?
| 10 | 66 REX.W NOP DWORD ptr [RAX + RAX*1 + 00000000H] | 66 48 0F 1F 84 00 00 00 00 00H |
ARMの命令セットでは、従来はNOPを専用に用意していなかった。そのため、従来のアセンブラーではNOPを疑似命令として扱い、通常は「MOV r0, r0」、Thumb命令なら「MOV r8, r8」という、何もしない命令に置き換える。これは、XCHG AX, AXという何もしない命令をNOPに使うx86(IA-32)と同様。
NOP命令が専用に用意されたのは、ARM命令はARMv6K以降、Thumb命令はARMv6T2以降である。
ARM命令は、データ処理グループの一つとして用意された。
16ビットThumb命令は、IT命令と同じオペコードだが、mask=='0000'かつfirstcond=='0000'の時にNOPであるとして定義された。
32ビットThumb命令は、分岐命令と同じオペコードだが、その隙間に様々な命令が詰め込まれ、その一つがNOPであった。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます