07/12/16 02:16:17 eEobSst5
単純で乱暴なやり方をするなら、割り込みベクタテーブルに
既存ルーチンの代わりに自分のアドレスを上書きして
先に自分の処理を呼び出させ、自分の処理が終わったら
既存ルーチンへジャンプさせる。つまり割り込み処理に割り込む。
もう少し紳士的なやり方なら(同じ割り込み信号にフックする)
割り込み処理ルーチン同士で協定を作り
割り込み処理ルーチンのリストを管理するルーチンを用意する。
こうした仕組みは>>58の言う
1.呼び出し側と呼び出され側が1対多である
2.呼び出し側は機能を持たない
3.呼び出され側がさらに呼び出され側を登録することができる
を全て満たしている。
呼び出し側=ハードウェア
呼び出され側=割り込み処理ルーチン
ハードウェアは割り込み信号に応じて割り込みベクタテーブルの
当該アドレスに登録されてる割り込み処理ルーチンを呼び出す。
そしてリストに登録された順に次々呼び出される。
割り込み処理ルーチンは処理完了時のリターン命令を
他のルーチンへのジャンプ命令に書き換えることで
子ルーチンの追加が可能