[解決済み] x86アセンブリの「ロック」命令の意味を教えてください。
2022-02-03 12:35:13
質問内容
Qtのソースにx86のアセンブリがあったのですが、これは何ですか?
q_atomic_increment:
movl 4(%esp), %ecx
lock
incl (%ecx)
mov $0,%eax
setne %al
ret
.align 4,0x90
.type q_atomic_increment,@function
.size q_atomic_increment,.-q_atomic_increment
-
ググってみてわかったのは
lock
命令はCPUにバスをロックさせますが、CPUがバスを解放するタイミングがわかりません? -
上記のコード全体についてですが、このコードがどのように
Add
?
解決方法は?
-
LOCK
は命令そのものではなく、次の命令に適用される命令接頭辞です。その命令は、メモリに対して読み込み・変更・書き込みを行うものでなければなりません (INC
,XCHG
,CMPXCHG
など) --- この場合、それはincl (%ecx)
という命令があります。inc
はl
に保持されているアドレスにあるオングワードです。ecx
レジスタに登録します。は、その
LOCK
プレフィックスは、CPU が操作の間、該当するキャッシュラインの排他的な所有権を持つことを保証し、さらに特定の順序付け保証を提供します。これは、バスロックをアサートすることで実現できるかもしれませんが、CPU は可能な限りこれを回避します。バスがロックされた場合、それはロックされた命令の間だけです。 -
このコードでは、スタックからインクリメントされる変数のアドレスを
ecx
レジスタに登録し、次にlock incl (%ecx)
で、その変数をアトミックに 1 つインクリメントします。eax
レジスタ(関数の戻り値を格納)に、変数の新しい値が0なら0、そうでないなら1を格納します。この演算は インクリメント であり、加算ではありません(だからこの名前なのです)。
関連
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み】マルチコアアセンブラとはどのようなものですか?
-
[解決済み】std::atomicとは一体何ですか?
-
[解決済み] num++は'int num'のアトミックになり得るか?