(57)【要約】  【課題】  組込みシステムなどにおいて、割込みマスクレジスタの値を変更する際に、他の呼び出し、割込み、例外などの影響を受けないようにすること。  【解決手段】  ＣＰＵの命令デコーダのデコード結果により直接、割込みマスクレジスタの内容を変更できるように、ＣＰＵのアーキテクチャに変更が加えられる。このような変更は通常、ＣＰＵの設計変更に、多大の手間はかからない。そして、拡張したCALL命令や、拡張したソフトウェア割込み命令がＣＰＵに追加され、拡張したCALL命令や、拡張したソフトウェア割込み命令は、割込みマスクレジスタの値を変更する機能を併せもつ。このような単一命令が、処理の呼び出しと、割込みマスクレジスタの値変更を同時に達成し、さらにその単一命令の実行の間、割込みが禁止されることによって、アトミシティが達成される。【選択図】  図１
2010267064.tif 000002
【特許請求の範囲】
【請求項１】
割込みマスクレジスタを有し、割込み処理にレベルがセットされているコンピュータ・システムにおいて、
前記割込みマスクレジスタに設定すべきレベルと、呼び出し先の処理のアドレスを指定する指定手段と、
前記指定手段によって指定された情報に基づき、前記割込みマスクレジスタにレベルを指定しつつ、前記アドレスに制御を移動させる実行手段と、
前記実行手段の動作の間割込みを禁止する手段とを有する、
コンピュータ・システム。
【請求項２】
前記割込みマスクレジスタに設定すべきレベルが、所定の命令に続くオペランドにより設定される、請求項１のコンピュータ・システム。
【請求項３】
割込みマスクレジスタと、
個々の割込み毎のレベルを記憶するレベル記憶手段と、
割込みがあったことに応答して、移動先の割込みのレベルを前記レベル記憶手段から取得して、該レベルを前記割込みマスクレジスタに設定しつつ、該割込みに処理を移動させる実行手段と、
前記実行手段の動作の間割込みを禁止する手段とを有する、
コンピュータ・システム。
【請求項４】
割込みマスクレジスタを有し、割込み処理にレベルがセットされているコンピュータ・システムの制御方法において、
前記割込みマスクレジスタに設定すべきレベルと、呼び出し先の処理のアドレスを指定する指定ステップと、
前記指定手段によって指定された情報に基づき、前記割込みマスクレジスタにレベルを指定しつつ、前記アドレスに制御を移動させる実行ステップと、
前記実行ステップの間割込みを禁止する禁止ステップとを有する、
コンピュータ・システムの制御方法。
【請求項５】
前記割込みマスクレジスタに設定すべきレベルが、所定の命令に続くオペランドにより設定される、請求項４のコンピュータ・システムの制御方法。
【請求項６】
割込みマスクレジスタを有し、割込み処理にレベルがセットされているコンピュータ・システムの制御方法において、
割込みがあったことに応答して、移動先の割込みのレベルを前記レベル記憶手段から取得して、該レベルを前記割込みマスクレジスタに設定しつつ、該割込みに処理を移動させる実行ステップと、
前記実行ステップの間割込みを禁止する禁止ステップとを有する、
コンピュータ・システムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、コンピュータ・システムに関し、特に、組込みシステムに使用される命令制御装置及び割込み制御方法に関するものである。
【背景技術】
【０００２】
近年、組込みシステムが社会の至るところで使われて、重要な役割を担っている。すなわち、デジカメ、携帯電話、ＤＶＤプレーヤ、ロボット、フライト制御システム、自動車の燃料噴射システムやオートブレーキシステム、と多岐に亘る。
【０００３】
従来知られている組込みシステムの一般的な定義は、専用の機能を実行するために、ハードウェアとソフトウェアが緊密に結合されたコンピュータ・システムである、というものである。
【０００４】
さらに、組込みシステムに要求される性質の１つにリアルタイム性がある。すなわち、結合された入出力機器の状態の変化に速やかに応答するために通常、組込みシステムは、入出力機器からの割込みという形で、通知を受け取る。割込みの信号は、割込みコントローラに入力され、その時点で割込みマスクレジスタにセットされている値に応じて、許可または保留される。許可された割込みは、割込みテーブルに対してルックアップされ、対応するベクタアドレスにある割込みハンドラへの制御の移動をもたらす。
【０００５】
このとき、割込み処理の緊急性などの観点から、個々の割込み処理には、優先順位が割当てられている。そして、低優先順位の割込み処理の実行中に、高優先順位の割込みが来ると、高優先順位の割込みの処理に制御が渡され、低優先順位の割込み処理は一旦停止して、高優先順位の割込みの処理が終わるのを待つ。そうして、高優先順位の割込みの処理の終了後、低優先順位の割込み処理は処理を再開する。
【０００６】
一方、高優先順位の割込み処理の実行中に、低優先順位の割込みが来ると、低優先順位の割込み処理は直ちには処理を始めることができず、保留状態で、高優先順位の割込みの処理が終わるのを待つ。このような割込みの優先順位に基づく処理は、一般的には上記の割込みマスクレジスタにセットされている値に応じて行なわれる。
【０００７】
ところで、例えば、自動車のエンジンＥＣＵで、次のような問題があった。すなわち、自動車のエンジンＥＣＵでは、エンジンのロータが回転するにつれて、上死点を計算するための割込みが順次入ってくる。この上死点の計算の処理の後、燃料の噴射・点火を行なうための割込みが入ってくる。この燃料の噴射・点火を行なうための割込みの前に上死点の計算処理は完了していなくてはならず、そうでないと信頼性を確保するため、一旦処理をキャンセルする必要がある。これは実行時間制約と呼ばれる。
【０００８】
処理を正しくキャンセルするためには、実行時間制約に従って、個々の割込み処理に、適切に優先順位をつける必要がある。優先順位が正しくないと、実行時間制約のある処理の途中に別の割込みが入ってきて、実行時間制約を満たすことが一層難しくなる。
【０００９】
上記の例では、上死点の計算の割込み処理により高い優先順位を与え、燃料の噴射・点火の割込みに、より低い優先順位を与えて実行すればいい。そのように設定すると、上死点を計算するための割込みが完了しないと、燃料の噴射・点火という割込みが開始されないので、処理順序は確定される。しかし、割込みマスクレジスタに設定されている値を下げないと、より低い優先順位の割込み処理を実行することができない。
【００１０】
これを達成するための従来の１つの方法は、普通のcall命令で低い優先順位とすべき処理を呼び出しつつ、割込みマスクの内容を変更する命令を実行することによって、次の低い優先順位の割込み処理を可能とすることである。しかし、call命令と割込みマスクの内容を変更する命令の間の他の割込みをマスクできず、その間に別の割り込みが入ってくることがある、という問題があった。
【００１１】
別の従来の方法は、低い優先順位とすべき処理を呼び出す際に、ソフトウェア割込みを起こし、そこで割込みマスクの内容を変更する命令を実行することである。この場合も、次の割込み処理の先頭で全ての割込みを受理する状態になり、そこで他の割込みの影響を防げなかった。
【００１２】
そこで更に別の方法は、周辺機器からの割込みを利用することである。すなわち、周辺機器からの割込みとともに割込みマスクの内容を変更する命令を実行することにより、その間の他の割込みを相当程度防げるので、処理の信頼性は高まる。しかし、周辺機器を利用するので、実行に時間がかかるという問題がある。
【００１３】
特開平１０−０７４１４８号公報は、発生した単数又は複数の割り込み要求の中から優先度判定回路によって選択された割り込み処理の優先度を表すレベル信号と、命令中断レジスタから出力される命令の中断を許可する優先度とを比較器で比較し、要求のあった割り込み処理の優先度が、命令の中断を許可された優先度よりも高ければ、中央処理装置に対して、割り込み処理要求と共に中断信号を出力することを開示する。
【００１４】
特開２００４−１９９５５８号公報は、優先順位制御部で優先順位の高い割込ハンドラの実行中にその割込ハンドラがイベント待ちの状態になったことを受けてその割込ハンドラの割込優先順位を最下位に下げるとともに、実行調停部でその割込ハンドラの処理の続行を確保するために必要なレジスタの内容をその割込ハンドラについてあらかじめ固定されたスタック領域のレジスタ確保領域に待避させるとともに、優先順位の低い割込ハンドラ用のレジスタ保存領域の内容を読み出して実行することを開示する。
【００１５】
特開２００７−１２８３９６号公報は、割込イベントの受信によって呼び出される割込ハンドラの実行中に、割込イベントの発生を無効にし、通常のアプリケーションよりも実行優先度の低い開始処理タスクを起動し、開始処理タスクに実行権が移ったときに、データ処理タスクを起動し、さらにデータ処理タスクに実行権が移ったときに、割込イベントを発生させた割込要因に関するデータ処理を行った後、割込イベントの発生を有効にすることを開示する。
【００１６】
しかし、これらの先行技術文献にも、割込みベクタの値を変更する際に、他の割込みの影響を受けないようにする技術は示唆も開示もされない。すると、プログラムの設計段階において、高優先順位の割込み処理から低優先度の割込み処理へ制御が渡されるときに、起こり得る割込みのパターン数が膨大であり、これらの先行技術文献のような従来手法では、すべてのパターンについて正しく動作すると保証されたプログラムを設計することが困難である。
【００１７】
さらに、プログラムのテスト段階において、高優先順位の割込み処理から低優先度の割込み処理へ制御が渡されるときに、起こり得る割込みのパターンのすべてを実現させるために必要なテストケースの作成はさらに困難である。
【先行技術文献】
【特許文献】
【００１８】
【特許文献１】特開平１０−０７４１４８号公報
【特許文献２】特開２００４−１９９５５８号公報
【特許文献３】特開２００７−１２８３９６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１９】
従って、この発明の目的は、組込みシステムなどにおいて、割込みベクタの値を変更する際に、他の呼び出し、割込み、例外などの影響を受けないようにすること、すなわち、アトミシティ(atomicity)を達成することにある。
【課題を解決するための手段】
【００２０】
上記目的は、ＣＰＵにおけるCALL命令や、ソフトウェア割込み命令に拡張機能を付与するようにＣＰＵの構成を変更することによって達成される。
【００２１】
すなわち、本発明によれば、ＣＰＵの命令デコーダのデコード結果により直接、割込みマスクレジスタの内容を変更できるように、ＣＰＵのアーキテクチャに変更が加えられる。このような変更は通常、大幅な変更ではないので、ＣＰＵの設計変更に、多大の手間はかからない。そして、拡張したCALL命令や、拡張したソフトウェア割込み命令がＣＰＵに追加され、拡張したCALL命令や、拡張したソフトウェア割込み命令は、割込みマスクレジスタの値を変更する機能をもつ。割込みマスクレジスタの値は、オペランドにより指定するか、または、移動先の割込み処理ルーチンの優先度を割込みマスクレジスタにセットする、などの技法を用いる。
【００２２】
このような単一命令が、処理の呼び出しと、割込みマスクレジスタの値変更を同時に達成し、さらにその単一命令の実行の間、割込みが禁止されることによって、アトミシティが達成される。
【発明の効果】
【００２３】
この発明によれば、ＣＰＵに、処理の呼び出しと、割込みマスクレジスタの値変更を同時に達成するアトミシティをもつ命令が提供されるので、特に組込みシステムにおいて、処理の安全性が高まり、結果の製品の信頼性を高めることができる。
【００２４】
また、組込みシステムのプログラマは、従来複雑なプログラミング手法を駆使していたような処理に、その拡張された命令を利用することによって、プログラムの効率を向上させ、且つ、コードの保守性を改善することができる。さらに、本発明を用いることで、プログラムの設計段階においても、プログラムのテスト段階においても、高優先順位の割込み処理から低優先度の割込み処理へ制御が渡されるときに、割込みが禁止されていることをハードウェアが保証しているため、上記のような設計やテストは不要になり、よりプログラムの信頼性を高められる。
【図面の簡単な説明】
【００２５】
【図１】本発明を実施するためのハードウェア構成のブロック図である。
【図２】call_cl呼び出しによる状態の変化を示す図である。
【図３】int_ch呼び出しによる状態の変化を示す図である。
【図４】高優先度割込み処理から、低優先度割込み処理に移動する処理を説明する図である。
【発明を実施するための形態】
【００２６】
以下、図面を参照して、本発明の一実施例の構成及び処理を説明する。以下の記述では、特に断わらない限り、図面に亘って、同一の要素は同一の符号で参照されるものとする。なお、ここで説明する構成と処理は、一実施例として説明するものであり、本発明の技術的範囲をこの実施例に限定して解釈する意図はないことを理解されたい。
【００２７】
図１は、本発明を実施するためのハードウェアのブロック図である。図１の構成は、典型的なＣＰＵのアーチテクチャを示すものであり、システムレジスタ１０２、命令をメモリからフェッチしてくる命令フェッチャ１０４、フェッチされた命令を解釈する命令デコーダ１０６、命令デコーダ１０６によって解釈された命令を実行する実行器１０８を有する。
【００２８】
システムレジスタ１０２は、割込みマスクレジスタ１０２ａ、プログラムカウンタ１０２ｂなどといった、特定の用途のみに使用可能な専用レジスタからなるが、ここでは代表的に割込みマスクレジスタ１０２ａ及びプログラムカウンタ１０２ｂだけが示されている。
【００２９】
図１の構成はさらに、メモリユニット１１０と、メモリ１１２を有する。メモリユニット１１０は、実行器１０８の実行結果を、メモリ１１２の指定されたアドレスに書込む。メモリ１１２は、好適にはランダム・アクセス・メモリ（ＲＡＭ）であり、プログラムとデータが格納されている。メモリ１１２には、システムの立ち上げ時に、所定のローダ（図示しない）の働きで、ＲＯＭ（図示しない）からシステムプログラムがロードされる。
【００３０】
命令フェッチャ１０４は、プログラムカウンタ１０２ｂが指し示すアドレスで、メモリ１１２から命令を読み取る。
【００３１】
割込みコントローラ１１４は、ピンや周辺機器からの割込み信号を受け付ける端子をもち、その割込み信号の優先度（優先順位ともいう）に従い、比較器１１６に割込み信号を送出する。割込みコントローラ１１４には、個々の割込み番号に対する優先度を設定可能である。
【００３２】
比較器１１６は、割込みコントローラ１１４からの割込み信号の優先度と、割込みマスクレジスタ１０２ａの内容とを比較して、割込みコントローラ１１４からの割込み信号の優先度が、割込みマスクレジスタ１０２ａに格納されている値の方が大きい場合に、論理高レベル信号を出力し、割込みコントローラ１１４からの割込み信号の優先度が、割込みマスクレジスタ１０２ａに格納されている値と等しいかそれより小さい場合に、論理低レベル信号を出力する。
【００３３】
比較器１１６の出力は、ＡＮＤゲート１１８の一方の入力として提供される。ＡＮＤゲート１１８の他方の入力は、実行器１０８から提供される。実行器１０８は、特定の命令に対して、命令実行の開始から、命令実行の完了まで、ＡＮＤゲート１１８の他方の入力を、論理高レベルに保つ。すると、ＡＮＤゲート１１８の他方の入力は、反転されてＡＮＤゲート１１８に入力されるので、実行器１０８の命令実行の開始から命令実行の完了まで、ＡＮＤゲート１１８の出力信号は、論理低レベルに保たれる。この実施例では、実行器１０８からＡＮＤゲート１１８に入力される信号を、割込み禁止ビットと呼ぶことにする。
【００３４】
ＡＮＤゲート１１８の出力信号は、実行器１０８に提供され、実行器１０８は、ＡＮＤゲート１１８の出力信号が論理高レベルである状態では、割込み命令を実行しないように動作する。実行されない割込み命令は、保留状態に置かれ、後で割込み可能になったときに実行されるかまたは、単に破棄される。
【００３５】
次に、本発明に従い拡張される命令について説明する。本発明では、サブルーチンを呼ぶcall、割込みのintなどの、制御を移動される命令が拡張される。
【００３６】
先ず、callが、既存のサブルーチンを呼ぶ命令であるとし、そのオペランド付きの命令フォーマットは、次のとおりであるとする。
call <移動先の開始アドレスをもつレジスタ番号>
【００３７】
すると、本発明に従い拡張されるcall命令を、call_clと記すことにすると、そのオペランド付きの命令フォーマットは、次のようになる。
call_cl <移動先の開始アドレスをもつレジスタ番号>,<割込みマスクに設定する値>
【００３８】
ＣＰＵの命令長を３２ビットとすると、call_clは、他の命令と重ならないように、３２ビットの範囲で、例えば次のようにエンコードされることになる。すなわち、call_cl自体が２０ビット、移動先の開始アドレスをもつレジスタ番号が４ビット、割込みマスクに設定する値が４ビット、残りの４ビットが０、というのが、命令デコーダ１０６によって解釈される命令表現である。
【００３９】
図１に従い、call_clが解釈されて実行される様子について説明する。先ず、メモリ１１２からcall_clとそのオペランドが命令フェッチャ１０４によって読み込まれ、その命令は、命令デコーダ１０６によってデコードされる。命令デコーダ１０６は、そのデコードによって、移動先の開始アドレスと、割り込みマスクに設定する値を取得する。
【００４０】
このデコード結果に基づき、実行器１０８は命令を実行し、割込み禁止ビットを１にセットし、システムレジスタの値を全てスタックに保存し、割込みマスクの値として与えられた値を、割込みマスク・レジスタ１０２ａに設定し、プログラムカウンタの値を移動先の開始アドレスに設定する。その後、実行器１０８は、割込み禁止ビットを０にリセットする。
【００４１】
図２に、call_clの実行前後の状態の変化を示す。図２から見て取れるように、call_cl実行により、プログラムカウンタが移動先の開始アドレスになることと、戻り後の処理のため、スタックに、システムレジスタの状態とcall_clの次の命令の番地が積まれるだけではなく、割込みマスクの値がMからNに書き換わっていることが見て取れる。
【００４２】
次に、intが、既存の割込み命令であるとし、そのオペランド付きの命令フォーマットは、次のとおりであるとする。
int <割込み番号>
【００４３】
すると、本発明に従い拡張されるint命令を、int_chと記すことにすると、そのオペランド付きの命令フォーマットは、次のようになる。
int_ch <割込み番号>
【００４４】
これだけ見ると、int_chは、intと同じであるが、int_chは、指定可能な割込み番号の範囲が，ユーザ定義領域の番号のみでなく、システムが持つすべての割込み番号である点で異なる。そのことの意味は、以下の説明により、一層よく理解される。
【００４５】
図１に従い、int_chが解釈されて実行される様子について説明する。先ず、メモリ１１２からint_chとそのオペランドが命令フェッチャ１０４によって読み込まれ、その命令は、命令デコーダ１０６によってデコードされる。命令デコーダ１０６は、そのデコードによって、割り込み番号を取得する。
【００４６】
このデコード結果に基づき、実行器１０８は命令を実行し、割込み禁止ビットを１にセットし、システムレジスタの値を全てスタックに保存し、割込み番号の情報を基に、割込みコントローラ１１４から移動先の割込みハンドラの優先度を取得する。そして、取得した移動先の優先度の値を、割込みマスク・レジスタ１０２ａに設定し、プログラムカウンタの値を移動先の開始アドレスに設定する。その後、実行器１０８は、割込み禁止ビットを０にリセットする。
【００４７】
図３に、int_chの実行前後の状態の変化を示す。図３から見て取れるように、int_ch実行により、プログラムカウンタが移動先の開始アドレスになることと、戻り後の処理のため、スタックに、システムレジスタの状態とint_chの次の命令の番地が積まれるだけではなく、割込みマスクの値がMからに書き換わっていることが見て取れる。
【００４８】
図４は、高優先度の上死点計算割込み処理４０２から、低優先度の燃料の噴射・点火割込み処理４０４に移動する処理を示す図である。図４において、高優先度の上死点計算割込みは、可変な連続した割り込みとして実行される。本発明によれば、高優先度の上死点計算割込み処理４０２中に、int_chにより、低優先度の燃料の噴射・点火割込み処理４０４への移動が実行される。これによって、割込みマスクレジスタ１０２ａに燃料の噴射・点火割込み処理４０４の優先度がセットされ、これにより、上死点計算割込み処理４０２の完了後、確実に低優先度の燃料の噴射・点火割込み処理４０４が実行される。
【００４９】
これにより、上死点計算割込み処理４０２の開始時４０２ａに、低優先度の割込み処理の情報がスタックにあるかどうかチェックして、もし低優先度の割込み処理の情報がスタックにある場合、エラーが生じていると判断して、処理をキャンセルすることが可能となる。
【００５０】
次に、SystemCによる、本発明に係るＣＰＵハードウェアの実装例の一部を示す。特に、CALL_CL及びINT_CHというラベルの箇所に注目されたい。下記のコードからは、既存のＣＰＵハードウェアの設計に大幅な変更を加えることなく、本発明に係る構成が実現できることが理解されるであろう。なお、SystemCの内容については、David C. Black and Jack Donovan, "SystemC: From The Ground UP", 2006, Springer Science&Business Media, Inc.  などを参照されたい。
【００５１】
// decoder.hの開始
#ifndef __DECODER_H
#define __DECODER_H
#include <systemc.h>
SC_MODULE(DECODER)
{
public:
//ポート定義
sc_in<unsigned int> code; //32ビットコード
sc_out<sc_uint<20>> inst; //命令
sc_out<sc_uint<4>>  dest; //デスティネーションオペランド
sc_out<sc_uint<4>>  src1; //ソースオペランド１
sc_out<sc_uint<4>>  src2; //ソースオペランド２
sc_out<sc_uint<4>>  mask; //割込みマスクの値
sc_out<sc_uint<4>>  int_no; //割込み番号
sc_out<sc_uint<1>>  atomicity; //アトミック命令なら１
//プロセスの宣言
void decoder(void);
//コンストラクター
SC_CTOR(DECODER)
{
//プロセスのタイプ
SC_METHOD(decoder);
//センシティビティ・リスト
sensitive << code;
}
};
#endif /* __DECODER_H */
// decoder.hの終わり
【００５２】
// decoder.cppの開始
#include "decoder.h"
・・・
void MODULE::decoder(void)
{
inst = code.range( 31, 22 ); //命令の抽出
switch( inst )
{
・・・ //他の命令についての動作定義
case CALL:
src1 = code.range( 21, 18);
mask = atom = dest = src2 = int_no = 0;
case CALL_CL:
src1 = code.range( 21, 18 );
mask = code.range( 17, 14 );
atom = 1;
dest = src2 = int_no = 0;
break;
case INT:
int_no = code.range( 21, 18 );
check_user_vector_range( int_no ); //ユーザ定義の範囲内かチェック
atom = 1;
dest = src1 = src2 = mask = 0;
break;
case INT_CH:
int_no = code.range( 21, 18 );
atom = 1;
dest = src1 = src2 = mask = 0;
break;
・・・ //他の命令についての動作定義
}
return;
}
// decoder.cppの終わり
【００５３】
// executor.hの開始
#ifndef __EXECUTOR_H
#define __EXECUTOR_H
#include <systemc.h>
SC_MODULE(DECODER)
{
public:
//ポート定義
sc_in<sc_uint<20>> inst; //命令
sc_in<sc_uint<4>>  dest; //デスティネーションオペランド
sc_in<sc_uint<4>>  src1; //ソースオペランド１
sc_in<sc_uint<4>>  src2; //ソースオペランド２
sc_in<sc_uint<4>>  mask; //割込みマスクの値
sc_in<sc_uint<4>>  int_no; //割込み番号
sc_in<sc_uint<1>>  atomicity; //アトミック命令なら１
・・・ //メモリユニットへのポート，レジスタへのポートなど
//プロセスの宣言
void executor(void);
//コンストラクター
SC_CTOR(EXECUTOR)
{
//プロセスのタイプ
SC_METHOD(executor);
//センシティビティ・リスト
sensitive << inst;
}
};
#endif /* __EXECUTOR_H */ 
// executor.hの終わり
【００５４】
// executor.cppの開始
#include "executor.h"
・・・
void MODULE::executor(void)
{
if( atomicity == 0) {
process_external_interrupt(); //割り込みのチェック
}
switch( inst )
{
・・・ //他の命令についての動作定義
case CALL:
//プログラムカウンタの更新
PC = read_register( src1 );
break;
case CALL_CL:
//システムレジスタをスタックへ保存
store_system_registers (*SP, MR, PC);
SP = SP - 8;
//割り込みマスクの更新
MR = mask;
//プログラムカウンタの更新
PC = read_register( src1 );
break;
case INT:
case INT_CH: //ソフトウェア割り込みを起こす命令と同じ処理
//システムレジスタをスタックへ保存
store_system_registers (*SP, MR, PC);
SP = SP - 8;
//割り込みマスクレジスタの更新
MR = read_intc_ipr( int_no ); //割り込みコントローラから割り込みの優先順位を取得
//プログラムカウンタの更新
PC = read_int_vec( int_no ); //割り込みベクタテーブルから飛び先を取得
break;
・・・ //他の命令についての動作定義
}
return;
}
// executor.cppの終わり
【００５５】
以上、本発明を実施の形態を用いて説明したが、上記実施の形態に、多様な変更または改良を加えることが可能であり、その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、この分野の当業者に明らかであろう。
【００５６】
例えば、上記の実施例では、callとintの命令を本発明に従い拡張したが、jumpなどその他の移動命令にも本発明は適宜適用することが可能である。
【００５７】
また、本発明は、特定のＣＰＵアーキテクチャに限定されず、優先順位付けされた割込みの処理を含む、任意のＣＰＵアーキテクチャに適用可能である。
【符号の説明】
【００５８】
１０２ａ・・・割込みマスクレジスタ
１０６  ・・・命令デコーダ
１０８  ・・・実行器
１１４  ・・・割込みコントローラ
【図１】
2010267064.tif 000003
【図２】
2010267064.tif 000004
【図３】
2010267064.tif 000005
【図４】
2010267064.tif 000006