- どういう
rep; nop
意味ですか? pause
指導と同じですか?rep nop
(セミコロンなし)と同じですか?- 簡単な
nop
指示との違いは何ですか? - AMDプロセッサとIntelプロセッサでは動作が異なりますか?
- (ボーナス)これらの指示の公式文書はどこにありますか?
この質問の動機
別の質問のコメントでいくつか議論した後rep; nop;
、x86(またはx86-64)アセンブリで何を意味するのかわからないことに気付きました。また、ウェブ上で適切な説明を見つけることができませんでした。
これrep
は、「次の命令cx
回数を繰り返す」ことを意味するプレフィックスであることを私は知っています(または、少なくとも、古い16ビットx86アセンブリではそうでした)。これによると、ウィキペディアでの集計表、それが思わrep
だけで使用することができmovs
、stos
、cmps
、lods
、scas
(多分、この制限は、新しいプロセッサ上で削除されました)。したがって、rep nop
(セミコロンなしで)nop
操作cx
時間を繰り返すと思います。
しかし、さらに調べてみると、さらに混乱しました。これは、と思われるrep; nop
とpause
まったく同じオペコードにマップし、pause
ちょうどより少し異なる振る舞いを持ってnop
。2005年からのいくつかの古いメールは異なることを言っていました:
- 「力を入れすぎないように」
- 「2バイトのエンコーディングだけで「nop」と同等です。」
- 「それはIntelの魔法です。それは「いや、でも他のHT兄弟を走らせて」のようなものです。」
- 「Intelでは一時停止し、Athlonでは高速パディングです」
これらの異なる意見で、私は正しい意味を理解することができませんでした。
これは、Linuxカーネル(i386とx86_64の両方)でこのコメントとともに使用されています。同じコメントで、BeRTOS/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
でも使用されています。