通信用語の基礎知識 IPv4
戻る
参加者募集中

NOP

辞書:科学用語の基礎知識 半導体用語編 (IYIC)
読み:ノップ
外語:NOP: No OPeration 英語
品詞:名詞
2004/12/23 作成
2012/04/17 更新

マイクロプロセッサーの命令の一つ。何も行なわない命令。

どのようなマイクロプロセッサーにも、必ず実装されている命令である。

Z80H8の00hのように専用に用意される場合のほか、x86の90hのようにXCHG AX, AXという実質なんの変化もない命令で代用する場合などがある。

RISCでは、ゼロレジスターへの書き込みをNOPとする実装が多い。

用途

アラインメントのためのパディングや、タイミング調整など、幾つかの目的のために使われる。

CISCの場合、数クロックのCPU時間を消費するものが多く、タイミング調整に使われる。

RISCの場合、プロセッサーによっては実行ステージに到達する前にパイプラインから削除され、CPU時間を消費しないこともあり、主としてパディング用として使われる。

主要MPUでの実装

主な実装方法は次の通り。詳細があるものは後述。

  • Z80 ‐ 00h
  • H8 ‐ 00h
  • x86 ‐ 90 (XCHG AX, AX) または 0F 1F (NOP r/m32)
  • 6809 ‐ 12h
  • 6502 ‐ $ea
  • MIPS ‐ 0x00000000 (sll r0, r0, r0)
  • PowerPC ‐ 0x60000000 (ori r0, r0, 0)
  • PIC ‐ 0x00 (命令12ビット長 0b000000000000)
  • SPARC ‐ 0x01000000 (sethi 0, %g0)
  • ARM
    • (疑似命令) 0x00000000 (andeq r0, r0, r0) や 0x*1A00000 (mov r0, r0) など
    • (ARMv6K以降) 0x*320F000
  • ARM Thumb命令
    • (疑似命令) 0x46C0 (mov r8, r8)
    • (ARMv6T2以降) 0xBF00
    • (ARMv6T2以降) 0xF3AF 0x8000 (2ハーフワード)

x86(IA-32)

Pentium以降では、メモリーアクセス付きのマルチバイトNOP命令が追加されている。

レジスター間接の場合は、不正メモリーアクセスにならないようレジスターの種類または内容に配慮する必要があることは言うまでもない。

長さアセンブリバイト列
1NOP90H
266 NOP66 90H
3NOP DWORD ptr [EAX]0F 1F 00H
4NOP DWORD ptr [EAX + 00H]0F 1F 40 00H
5NOP DWORD ptr [EAX + EAX*1 + 00H]0F 1F 44 00 00H
666 NOP DWORD ptr [EAX + EAX*1 + 00H]66 0F 1F 44 00 00H
7NOP DWORD ptr [EAX + 00000000H]0F 1F 80 00 00 00 00H
8NOP DWORD ptr [EAX + EAX*1 + 00000000H]0F 1F 84 00 00 00 00 00H
966 NOP DWORD ptr [EAX + EAX*1 + 00000000H]66 0F 1F 84 00 00 00 00 00H

AMD64/Intel64以降は、REXプリフィックスを使うと更に長くできる気がする。

未確認だが、次のような符号が可能なのではないか?

1066 REX.W NOP DWORD ptr [RAX + RAX*1 + 00000000H]66 48 0F 1F 84 00 00 00 00 00H

ARM

ARMの命令セットでは、従来はNOPを専用に用意していなかった。そのため、従来のアセンブラーではNOPを疑似命令として扱い、通常は「MOV r0, r0」、Thumb命令なら「MOV r8, r8」という、何もしない命令に置き換える。これは、XCHG AX, AXという何もしない命令をNOPに使うx86(IA-32)と同様。

NOP命令が専用に用意されたのは、ARM命令はARMv6K以降、Thumb命令はARMv6T2以降である。

  • ARM命令 0x*320F000
  • Thumb命令 0xBF00
  • Thumb命令 0xF3AF 0x8000 (2ハーフワード)

ARM命令は、データ処理グループの一つとして用意された。

16ビットThumb命令は、IT命令と同じオペコードだが、mask=='0000'かつfirstcond=='0000'の時にNOPであるとして定義された。

32ビットThumb命令は、分岐命令と同じオペコードだが、その隙間に様々な命令が詰め込まれ、その一つがNOPであった。

関連する技術
HALT
マイクロプロセッサー

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.03 (16-May-2019)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club