#define local_irq_save(x) __asm__ __volatile__("pushfl ; popl %0 ; cli ":"=g" (x): /* no input */ :"memory")
の記述で、「EFLAGSレジスタを値をスタックに退避し(pushfl)、当該レジスタのIFフラグをクリアし割り込みを禁止する」ことは分かったのですが、
(1)popl %0 ; は何をやっているのでしょうか?
(2)"=g" (x) の制御指定子のgはGeneralと言うことらしいですが、gの内容をxに出力すると言うことになると思うのですが、ここは何をやっているのでしょうか?
No.1ベストアンサー
- 回答日時:
pushfl EFLAGSレジスタをスタックへ複写
popl %0 スタックトップ(上で保存したEFLAGSレジスタ値)を%0へ移動
cli 割り込み禁止
全体としてスタックの状態は変化しないのでは? EFLAGSレジスタ値はスタックを介して変数xに保存される。スタックは通過点に過ぎない。
割り込み禁止はcli命令ね。
"=g" (x): /* no input */ はxが書き出し用変数だということを示しているのでしょう。no inputだから元々のxの値は参照しない。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- システム CPUの問題について 2 2022/07/09 12:04
- その他(コンピューター・テクノロジー) PIC16F1シリーズマイコンのNCO機能について 1 2023/04/18 08:41
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- その他(コンピューター・テクノロジー) 量子コンピュータの動作原理がわかりません。同じビットが、1でも0でも有って良いだろうか? 3 2023/02/04 03:20
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- その他(プログラミング・Web制作) Arduino UNO のC言語 2 2023/04/18 19:42
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- UNIX・Linux Linuxについて2つ質問したいです。 ① シェルスクリプト名をawk1.shとして、指定されたデー 1 2023/02/03 03:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LinuxMintが突然フリーズする
-
AWSでSSH接続をしたいのですが...
-
ubuntuで デイスク/deb/loopと...
-
LinuxのノートパソコンでDVDコ...
-
yumやaptで依存関係で自動的に...
-
ubuntuサーバーを久々に再起動...
-
e4defragコマンドでデフラグ
-
ノートPCでUSBから起動しない
-
lubuntuでフォントをインストー...
-
VirtualBox ゲストOSにPC内蔵HD...
-
Ubuntuで数字だけのユーザーア...
-
ubuntu(linux)のシャットダウン...
-
Chrome OS フレックスはインス...
-
redmineにメールを飛ばす方法
-
Ubuntuサーバーでメールを受信...
-
ChromebookでPythonを使いたい...
-
ログにserver reached MaxReque...
-
サーバー間のデータコピー(デ...
-
Linuxについて質問です。 acces...
-
shellscript内のコマンドを、su...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
なんでx86???
-
Linuxカーネルのインラインアセ...
-
バスエラーとは何でしょうか?
-
データハザードについて(パイ...
-
新型CPU970
-
pthread_detach
-
ps5起動した時めっちゃうるさい...
-
Acrobat Reader DCの拡大鏡機能...
-
COD BO3 PC版の起動か出来ませ...
-
ゴミ箱に移動
-
新しいパソコンのネット設定な...
-
スマホのフォトに保存期限はあ...
-
PSPで□+△+SELECT+STARTを押しな...
-
ps4、ps3で自作のDVD-Rを見る時...
-
デスクトップに貼り付いた猥褻...
-
重くなったパソコンの写真を削...
-
ハードオフのノートパソコン
-
”他のWinVNCサーバーが既に起動...
-
ゲームが起動しない
-
紙copiLite(Ver2.96 無償版)で
おすすめ情報
%0はg(x)の引数xのことらしいです。
つまり、popl %0 ; はスタックに積まれた引数の値を変数xにポップスすると言うことだと思います。
ただ、実引数をpopした後にpushしないといけないと思うので、
popl %0 ; pushfl ; の順番になるような気がするのですが、何故、
pushfl ; popl %0 ; の順番で取り出せるのでしょうか?
分かる方、教えてください。