MicroSoftCで割込みを記述してみます。
![イメージ 1](https://cdn-ak.f.st-hatena.com/images/fotolife/O/O3I/20190804/20190804185928.jpg)
これをコンパイルしてアセンブラファイルを出力してみると関数の入り口で全レジスタをPUSH、出口で全レジスタをPOP、最後のリタンにIRET命令を使用していて割込みルーチンに必要な御膳立てをやってくれています。
サブルーチンなのでインストラクションポインタIPとコードセグメントCSは暗黙でPUSH/POPされるのは当然ですが、割込みではフラグレジスタもPUSHされさらにフラグレジスタに含まれる割込み許可フラグIFもクリアされ多重割込みを禁止します。
ルーチンを抜けるIRETで自動的にフラグレジスタもPOPされ割込みも再び許可状態になります。
![イメージ 2](https://cdn-ak.f.st-hatena.com/images/fotolife/O/O3I/20190804/20190804185932.jpg)
割込みベクタの設定も以下のような組込み関数がライブラリにあって最初これを使ってみたのですが動きません。
![イメージ 3](https://cdn-ak.f.st-hatena.com/images/fotolife/O/O3I/20190804/20190804185937.jpg)
なので今まで通りテーブルに直接関数へのポインタを埋め込みする自前の関数を用意
![イメージ 4](https://cdn-ak.f.st-hatena.com/images/fotolife/O/O3I/20190804/20190804185948.jpg)