[解決済み] x86アセンブリの「rep; nop;」とはどういう意味ですか?pause "命令と同じですか?
質問
-
どのような
rep; nop
は何を意味するのでしょうか? -
と同じなのでしょうか?
pause
命令と同じですか? -
と同じなのでしょうか?
rep nop
(セミコロンなし) と同じですか? -
単純な
nop
命令と何が違うのでしょうか? - AMD と Intel のプロセッサで動作が異なるのですか?
- (ボーナス) これらの命令の公式ドキュメントはどこにありますか。
この質問の動機
のコメントでいくつかの議論をした後
別の質問
のコメントで議論した結果、私は
rep; nop;
はx86(またはx86-64)アセンブリで何を意味するのか分からないことに気づきました。そしてまた、私は Web 上で良い説明を見つけることができませんでした。
私が知っているのは
rep
を意味する接頭辞です。
次の命令を繰り返す
cx
回"
(という命令(少なくとも、昔の16ビットx86アセンブリではそうでした)があります。これによると
によると、ウィキペディアの要約表
によると、どうやら
rep
は
movs
,
stos
,
cmps
,
lods
,
scas
(といった具合です(ただし、新しいプロセッサーではこの制限はなくなったのかもしれません)。従って、私なら
rep nop
(セミコロンなし) を繰り返すことになります。
nop
操作
cx
回です。
しかし、さらに検索してみると、さらに混乱しました。それは、どうやら
rep; nop
と
pause
は全く同じオペコードにマッピングされます
であり、かつ
pause
とは少し違う動作をします。
nop
. いくつかの
2005年からの古いメール
は異なることを述べています。
- 電力をあまり消費しないようにする。
- "2バイトのエンコードだけで'nop'と同等です。
- intel ではマジックです。そのため、'nop but let the other HT sibling run' " のようになります。
- intel では pause、Athlon では fast padding です。
このように様々な意見があり、正しい意味を理解することができませんでした。
Linuxカーネルで使われている(両方の
i386
と
x86_64
) と共に、このコメント
/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
また
が使われているのは、BeRTOSの
にも同じコメントがついています。
どのように解決するのですか?
rep; nop
は確かに
pause
命令 (オペコード
F390
). をサポートしないアセンブラに使用されるかもしれません。
pause
命令をまだサポートしていないアセンブラに使用されるかもしれません。以前のプロセッサでは、これは単に何もせず、ちょうど
nop
と同じように何もしませんが、2 バイトになります。ハイパースレッディングをサポートする新しいプロセッサでは、これはプロセッサにスピンループを実行していることを示すヒントとして使用され、パフォーマンスを向上させます。以下から
インテルの命令リファレンス
:
スピン待ちループのパフォーマンスを向上させます。Pentium 4 または Intel Xeon プロセッサは、「スピン ウェイト ループ」を実行すると、メモリ順序違反の可能性を検出するため、ループを終了するときに深刻なパフォーマンス低下に見舞われます。PAUSE 命令は、コードシーケンスがスピンウェイトループであることをプロセッサに伝えるヒントを提供します。プロセッサはこのヒントを使用して、ほとんどの状況でメモリ順序違反を回避し、プロセッサのパフォーマンスを大幅に向上させます。このため、すべてのスピンウェイトループに PAUSE 命令を配置することが推奨されます。
関連
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み] 1サイクルあたり4FLOPの理論上の最大値を達成するにはどうすればよいですか?
-
[解決済み] なぜGCCは、速度の代わりにサイズに最適化すると、15-20%速いコードを生成するのですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】マルチコアアセンブラとはどのようなものですか?
-
[解決済み】x86_64アセンブリで無駄なMOV命令を導入すると、なぜタイトループが速くなるのでしょうか?
-
[解決済み] 32ビットレジスタに対するx86-64命令は、なぜフル64ビットレジスタの上部をゼロにするのですか?
-
[解決済み] Gnuアセンブラ(GAS)のCFIディレクティブは何のためにあるのですか?
-
[解決済み] FS"/"GS "レジスタは何のためにあるのですか?
-
[解決済み] なぜインテルはプロセッサーに内蔵RISCコアを隠すのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Gnuアセンブラ(GAS)のCFIディレクティブは何のためにあるのですか?
-
[解決済み] FS"/"GS "レジスタは何のためにあるのですか?
-
[解決済み] コールスタックはどのように機能するのか?
-
[解決済み] なぜx86は醜いのか?なぜ他と比較して劣っていると言われるのか?[クローズド]
-
[解決済み] 最近のシステムでは、スタックの成長方向はどうなっているのでしょうか?
-
[解決済み] アセンブリコードで "int 0x80 "とはどういう意味ですか?
-
[解決済み] gdbで指定されたアドレスのアセンブリ命令をブレークするには?
-
[解決済み] 学習会【終了
-
[解決済み] なぜインテルはプロセッサーに内蔵RISCコアを隠すのか?