EFLAGS レジスタがスイッチのように機能するからですか? アクティブな場合、割り込みは有効になりますが、それ以外の場合はそうではありませんか?
たとえば、Java プログラムでは、次のようになります。
while (switch != 0){
keepRunning;
}
Stop;
EFLAGS レジスタがスイッチのように機能するからですか? アクティブな場合、割り込みは有効になりますが、それ以外の場合はそうではありませんか?
たとえば、Java プログラムでは、次のようになります。
while (switch != 0){
keepRunning;
}
Stop;
コアは、中断されたタスクを後で再開できるように、割り込みスタック フレームに EFLAGS を保存します。EFLAGS は、コアによってスタック フレームに保存される最低限のマシン状態の一部であり、命令ポインター (EIP)、コード セグメント (CS)、および通常はユーザー モード スタック ポインター (ESP) も含まれます。割り込みサービス ルーチンが (IRET 命令で) 完了すると、コアはスタック フレーム内の EFLAGS と残りのレジスタを復元します。
ここでの基本的な考え方は、任意のランダムな割り込みが突然レジスタを踏みつけることを心配せずにタスクを実行できるということです。それが唯一の健全なアプローチです。
この理由は、単純に、割り込みによってレジスタが変更されるためだと思います。つまり、IE (割り込み有効化) フラグがクリアされます。CPU がフラグをプッシュしなかった場合、フラグを変更することができず、この非表示の状態を取得するために追加の状態と追加の命令が必要になります。