93
  • とはrep; nopどういう意味ですか?
  • pause指導と同じですか?
  • rep nop(セミコロンなし)と同じですか?
  • nop簡単な説明書との違いは何ですか?
  • AMD プロセッサと Intel プロセッサでは動作が異なりますか?
  • (おまけ) これらの手順の公式ドキュメントはどこにありますか?

この質問の動機

別の質問のコメントでいくつか議論した後rep; nop;、x86 (または x86-64) アセンブリの意味がわからないことに気付きました。また、ウェブ上で適切な説明を見つけることができませんでした。

それが「次の命令を繰り返す」repことを意味する接頭辞であることは知っています(または、少なくとも古い16ビットx86アセンブリではそうでした)。Wikipediaのこの要約表によると、、、 、でのみ使用できるようです(ただし、この制限は新しいプロセッサでは削除された可能性があります)。したがって、 (セミコロンなしで)操作を繰り返すと思います。cxrepmovsstoscmpslodsscasrep nopnopcx

しかし、さらに検索した後、私はさらに混乱しました。rep; nopandはpause まったく同じ opcodeにマップされているようで、 . 2005 年からのいくつかの古いメールには、別のことが書かれていました。pausenop

  • 「力を入れすぎないように」
  • 「2バイトエンコーディングだけで「nop」と同等です。」
  • 「それはインテルの魔法です。それは「いいえ、他のHT兄弟を実行させてください」のようなものです」
  • 「インテルでは一時停止、Athlon では高速パディングです」

これらの異なる意見で、正しい意味を理解できませんでした。

これは Linux カーネル ( i386x86_64の両方) で使用されており、次のコメントがあります:同じコメントで BeRTOS/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */でも使用されています。

4

2 に答える 2

81

rep; noppause実際、命令 (opcode )と同じF390です。pauseこの命令をまだサポートしていないアセンブラに使用される可能性があります。以前のプロセッサでは、これは単にnop2 バイトの場合と同様に何もしませんでした。ハイパースレッディングをサポートする新しいプロセッサでは、パフォーマンスを向上させるためにスピンループを実行しているプロセッサへのヒントとして使用されます。Intelの命令リファレンスから:

スピン待機ループのパフォーマンスを向上させます。「スピン待機ループ」を実行する場合、Pentium 4 または Intel Xeon プロセッサは、メモリ順序違反の可能性を検出するため、ループを終了するときにパフォーマンスが大幅に低下します。PAUSE 命令は、コード シーケンスがスピン待機ループであるというヒントをプロセッサに提供します。プロセッサはこのヒントを使用して、ほとんどの状況でメモリ順序違反を回避します。これにより、プロセッサのパフォーマンスが大幅に向上します。このため、すべてのスピン待機ループに PAUSE 命令を配置することをお勧めします。

于 2011-08-16T23:22:37.673 に答える