通常、割り込みが発生すると、プログラムは割り込みが発生した行に戻ります。
ISR ルーチンが完了した後、新しい行からプログラムを実行したい、つまり、割り込みが生成された場所から戻りたくない。
SPに保存されているIPを変更する必要がありますか?
ありがとう
ISR は、中断したものの実行ポイントを認識しておらず、中断したもののスタックに何が格納されているかについての手がかりもありません。スタックのクリーンアップ操作を行わずに、別の「行」に「ジャンプ」するだけで (これは「何があるかわからないので不可能です)」、UB が生成されます (おそらく、AV/segFault 側で UB エラーが発生します)。
私が知っている唯一の方法は、別のスタックにスワップすることです。スレッドが待機しているセマフォ/イベントを通知し、ISR 終了時に OS スケジューラの実行を要求します。新たに準備ができたスレッドは、ISR が完了した直後に実行される可能性があり (ロード/優先度などに応じて)、中断されたスレッドを先取りして、「新しい行からプログラムを実行する」、並べ替え.. :)
Intel x86 では一般に命令ポインター (IP) と呼ばれる PC (プログラム カウンター) は、次の命令アドレスを格納します。割り込みルーチンの最後で PC を改行に変更する必要があります。
また、割り込みルーチンの最後にスタックに格納されている Pc の値をインクリメントし、PC に格納することもできます。