割り込みとエセマルチタスク

実は今までiretを使用していなく、普通にC言語の関数として、割り込みハンドラを定義していました。
割り込みハンドラと同じコードセグメント上でプログラムが動作しているときは、
全く問題がありませんでした。
しかし今後はユーザアプリをOSから独立させる上で、必ず別のセグメントに置く必要性があります。
この場合、現段階のC言語gcc)にはどうもretではなく、iretを使用する方法が無いらしいのです。
retとiretの違いは簡単で、オフセットアドレスのみをレジスタに戻すのか、
あるいはコードセグメントのセレクタ値も戻すかの違いなのです。
割り込みが発生したときは、eipの値と、csの値をスタックに積むらしく、
このような事が出来るのです。


そしてこの機能のお蔭で、ちゃんと割り込みを受け取り、そしてまたユーザアプリに処理を移すことが出来るわけです。


ちなみにこの改造により、エセマルチタスクでアプリが動きながらも、
割り込みを受け取り、文字を入力できるようになりました。
その画像を示しておきます。


後はELF形式のファイルの読み込みと実行、そしてOSによるマルチタスクの実現と
アプリとOSの通信を確立できれば、英字のみのテキストエディタを作成する事が可能ではないかと思います。


そこまで行くのに最低でもLDTの知識は必要だし、OSとの通信方法を考えないといけません。
メッセージ方式がいいと思いますが、その実現方法に関しても勉強しないといけません。