#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ランキング
-
ubuntu(linux)のシャットダウン...
-
AWSでSSH接続をしたいのですが...
-
ubuntuのシャットダウンが進ま...
-
自作のウェブサイトを友人に見...
-
[Linux初心者]Ubuntu22.04.3LTS...
-
bashでシングルクォート内の変...
-
Ubuntu on Xorgのログインについて
-
Windowsのローカルディレクトリ...
-
Linuxのパーティション番号の変...
-
lubuntuのインストールが終わり...
-
ubuntuで デイスク/deb/loopと...
-
Postfixでドコモメールに送信す...
-
Linuxのパーティションタイプ(...
-
Ubuntu系とCentOS系の違いはな...
-
LinuxのノートパソコンでDVDコ...
-
ssl_request_logの必要性について
-
windows10を使っています。 wsl...
-
Apach Solr-8.4.1のチューニン...
-
GNU/Linuxでmanページ書くとき...
-
Ubuntu でinvalid filenameとな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
mac OSについて教えてください。
-
pthread_detach
-
なんでx86???
-
Linuxカーネルのインラインアセ...
-
データハザードについて(パイ...
-
ps5起動した時めっちゃうるさい...
-
スマホのフォトに保存期限はあ...
-
新しいパソコンのネット設定な...
-
COD BO3 PC版の起動か出来ませ...
-
PSPで□+△+SELECT+STARTを押しな...
-
ゴミ箱に移動
-
Acrobat Reader DCの拡大鏡機能...
-
重くなったパソコンの写真を削...
-
ゲームが起動しない
-
文字化けのフォルダーが削除で...
-
Core i7にWindows7かwindowsXpか?
-
”他のWinVNCサーバーが既に起動...
-
WIN10 スタートアップとバック...
-
ハードオフのノートパソコン
-
FMラジオを聴く方法
おすすめ情報
%0はg(x)の引数xのことらしいです。
つまり、popl %0 ; はスタックに積まれた引数の値を変数xにポップスすると言うことだと思います。
ただ、実引数をpopした後にpushしないといけないと思うので、
popl %0 ; pushfl ; の順番になるような気がするのですが、何故、
pushfl ; popl %0 ; の順番で取り出せるのでしょうか?
分かる方、教えてください。