
#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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LinuxでWine使うとどのくらいWi...
-
Linux のシェルスクリプトの強...
-
ubuntu(linux)のシャットダウン...
-
ログにserver reached MaxReque...
-
Core 2 Duo の古いパソコンに最...
-
bashでシングルクォート内の変...
-
ssl_request_logの必要性について
-
tarで纏める際に、複数場外した...
-
ubuntuで デイスク/deb/loopと...
-
Linux(fedora30)が立ち上がらく...
-
Lubuntuのデスクトップのアイコ...
-
windowsxpと同じくらい軽いLinu...
-
VirtualBox ゲストOSにPC内蔵HD...
-
mxlinux 起動時エラーについて
-
linuxサーバーのキャッシュをク...
-
次の要件を満たすにはどのよう...
-
[Linux Mint] インストールした...
-
centos7 で最近起動後数時間経...
-
ubuntuのターミナルで書いたコ...
-
ubuntu 24 へのCanon 複合機ス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
なぜRISCが速い?
-
Linuxカーネルのインラインアセ...
-
バスエラーとは何でしょうか?
-
pthread_detach
-
なんでx86???
-
ps5起動した時めっちゃうるさい...
-
”他のWinVNCサーバーが既に起動...
-
PSPで□+△+SELECT+STARTを押しな...
-
文字化けのフォルダーが削除で...
-
重くなったパソコンの写真を削...
-
ゲームが起動しない
-
紙copiLite(Ver2.96 無償版)で
-
Windows8.1でのCD-RWのデータ削...
-
ハードオフのノートパソコン
-
WIN10 スタートアップとバック...
-
Acrobat Reader DCの拡大鏡機能...
-
COD BO3 PC版の起動か出来ませ...
-
デュアルコアが認識しない
-
スクリーンセーバー後に画面が...
-
RagnarokOnline(別窓同時起動...
おすすめ情報
%0はg(x)の引数xのことらしいです。
つまり、popl %0 ; はスタックに積まれた引数の値を変数xにポップスすると言うことだと思います。
ただ、実引数をpopした後にpushしないといけないと思うので、
popl %0 ; pushfl ; の順番になるような気がするのですが、何故、
pushfl ; popl %0 ; の順番で取り出せるのでしょうか?
分かる方、教えてください。