
#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ランキング
-
Linuxでブートディスクの交換後...
-
LinuxでWine使うとどのくらいWi...
-
Core 2 Duo の古いパソコンに最...
-
ubuntuで デイスク/deb/loopと...
-
ubuntu(linux)のシャットダウン...
-
bashでシングルクォート内の変...
-
Linux のシェルスクリプトの強...
-
CentOSが起動時にフリーズ
-
windows10を使っています。 wsl...
-
Linuxについて質問です。 以下...
-
apacheでリバースプロキシを設...
-
ubuntuのシャットダウンが進ま...
-
Windowsのローカルディレクトリ...
-
Linuxのパーティション番号の変...
-
Linux Mint でも使えないですよ...
-
Live Linux というのを勉強した...
-
Ubuntu でinvalid filenameとな...
-
Postfixでドコモメールに送信す...
-
bash環境でのエラー対応をお願...
-
Linuxのメッセージを出力して処...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
なぜNT系は安定しているの?
-
Linuxカーネルのインラインアセ...
-
なんでx86???
-
G4 POWER BOOKとG3 I.book の...
-
MS office 2001 for Mac イン...
-
新型CPU970
-
ビット数と情報量について
-
OSの32bitと64bitって、何が32bit?
-
ソケット数を増やした場合のメ...
-
動作環境の調べ方って・・・
-
なぜRISCが速い?
-
ビデオカード
-
ps5起動した時めっちゃうるさい...
-
パソコンの動作が起動から30分...
-
ガラケーのメールの添付資料の...
-
”他のWinVNCサーバーが既に起動...
-
PSPで□+△+SELECT+STARTを押しな...
-
デフラグのインストールについて
-
重くなったパソコンの写真を削...
-
文字化けのフォルダーが削除で...
おすすめ情報
%0はg(x)の引数xのことらしいです。
つまり、popl %0 ; はスタックに積まれた引数の値を変数xにポップスすると言うことだと思います。
ただ、実引数をpopした後にpushしないといけないと思うので、
popl %0 ; pushfl ; の順番になるような気がするのですが、何故、
pushfl ; popl %0 ; の順番で取り出せるのでしょうか?
分かる方、教えてください。