質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

x86

x86はIntel 8086 CPU シリーズの命令セットアルキテクチャーです。

Q&A

解決済

1回答

1107閲覧

自作ブートローダー 割り込みが重なって発生しない

kazuyakazuya

総合スコア193

アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

x86

x86はIntel 8086 CPU シリーズの命令セットアルキテクチャーです。

0グッド

1クリップ

投稿2020/10/30 05:06

ブートローダーを作成しているのですが
割り込みが重なって発生してくれません

現在、キーボード割り込みとタイマー割り込みの設定を終わらせたのですが
キーボード割り込み発生中にタイマー割り込み また
タイマー割り込み発生中にキーボード割り込み が発生しません。

なぜでしょうか?

[実験]

タイマー割り込みハンドラ内で JMP $を実行します。
このとき、キーボードを押して反応があれば
タイマー割り込み中にキーボード割り込みが発生してハンドラが実行されたことになります。

イメージ説明

キーを押すと KEYCODE [] に押したキーに対応するキーコードが表示され、
コマンドフレーム上にも文字が表示されます。

"ENABLE PIT"と打つと、タイマー割り込みが有効になります。
打ってみると・・・

イメージ説明

キーを押してもKEYCODE[]が更新されなくなりました。

なぜでしょう?

仮説1 優先度
MOV AL,0x20
OUT 0x20,AL
OUT 0xA0,AL
リンク内容
割り込み処理が終わったらEOIコマンドを打たないと
現在の割り込みより優先度が低い割り込みは入ってこれなくなるようです。
イメージ説明
とあるので、キーボード割り込みのほうが優先度は高いはずです。

が、タイマー割り込み中にキーを打っても反応がないので
やっぱ優先度ではない・・・?

何か設定を見落としている部分があるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

基本的に、割り込みが発生すると、自動的に割り込みディセーブルの状態になります
割り込みハンドラの中で割り込みを発動させたいなら、イネーブルしましょう

投稿2020/10/30 05:12

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/10/30 05:28

違います。 CPUの、割り込みマスクフラグ(x86はこの名前かどうかはしらんけど)のはなしです。
kazuyakazuya

2020/10/30 05:41

一応確認ですが"PIC"の"割り込みマスクレジスタ"ではなくCPUの ですか?
y_waiwai

2020/10/30 05:44

CPUの、です。
kazuyakazuya

2020/10/30 09:16

STI命令をキーボード割り込みハンドラ内で実行したところ 割り込みが起きました。 ありがとうございました。
kazuyakazuya

2020/11/12 06:25

一つお聞きしたいことがあるのですが よろしいでしょうか? (よかったらお願いします) リアルモードからプロテクトモードへ移行した時点で キーボードが無効化されるのでしょうか? というのも、リアルモードでキーボード割り込みの設定を終えた後 プロテクトモードへ移行したのですが また一度 キーボードコントローラーにキーボード有効化制御コマンドを送らないと キーボード割り込みが発生しなかったからです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問