(57)【要約】【課題】  従来はオーバーヘッドが生じるし、内部変数の一貫性が崩れやすい、プログラムの文面上もそれらが分離されてしまうので通読性が低下するといった問題でエミュレーションプログラム作成に際して誤りが入り易い。【解決手段】アクセス例外に起因する割り込みのコンテキストスイッチを抑止してＯＳへの割り込みを禁止する装置で、Ｓビットレジスタ４０ｃ、Ｅビットレジスタ４０ｄ、セット部４０ｅ、テスト部４０ｆ、コンテキストスイッチ制御部４１２を備え、エミュレーションプログラム中でエミュレーション対象命令オペランドにアクセスする箇所、つまりプログラムステップあるいは命令が明確であり特定できるという点に着目しエミュレーション実行ルーチンでエミュレーション対象命令オペランドにアクセスした後アクセス例外があったかどうかを判定し、判定がアクセス例外有りならば出口ルーチンに制御を渡す。【選択図】  図１
2006011886.tif 000002
【特許請求の範囲】
【請求項１】
アクセス例外に起因する割込みのコンテキストスイッチを抑止して、オペレーティングシステムへの割込みを禁止する機能を有する情報処理装置であって、
値が真のとき割込み時のコンテキストスイッチの抑止を許可するＳビットを設定するＳビットレジスタと、
値が真のときアクセス例外が検出されたことを表すＥビットを設定するＥビットレジスタと、
前記ＳビットレジスタのＳビットを真に、前記ＥビットレジスタのＥビットを偽に設定するセット部と、
前記ＥビットレジスタのＥビットの値をテストし、その後、前記Ｅビットを偽に設定するテスト部と、
命令の実行中、アクセス例外が検出されたとき、前記ＳビットレジスタのＳビットが真なら、割込み時のコンテキストスイッチを抑止し、かつ、前記ＥビットレジスタのＥビットを真に設定し、かつ、前記ＳビットレジスタのＳビットを偽に設定し、命令の実行中、アクセス例外が検出されなかったとき、前記ＳビットレジスタのＳビットを偽に設定するコンテキストスイッチ制御部と、
を備えていることを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、各種コンピュータ等の情報処理装置に利用されるものであり、特に、通常情報処理装置のオペレーティングシステム（以下「ＯＳ」と記す）に含まれる命令エミュレーション機能を高速に実現する情報処理装置に関する。
【背景技術】
【０００２】
(1) ：従来例１の説明
以下、特許文献１を従来例１として説明する。
【０００３】
従来例１は、命令エミュレーション方式に関し、通常ＯＳ（オペレーティングシステム）に含まれる命令エミュレーション機能を高速かつ低コストで実現するものである。従来例１には、次のような内容が記載されている。
【０００４】
命令エミュレーションが必要な場合には、（ケース１）ハードウェアが当該命令を全く備えていない場合、と、（ケース２）ハードウェアが当該命令の機能を部分的に実装している場合、の二つがある。
（ケース２）の具体例としては、ワークステーション等に用いられるＩＥＥＥ規格に準拠した浮動小数形式を扱う処理装置が挙げられる。
【０００５】
ＩＥＥＥ規格に準拠した浮動小数形式は、通常の数の範囲である正規化数（０も含む）以外に非数、非正規化数、無限大という特殊な表現を含んでおり、規格はこれらの値を生成する浮動小数点演算の種類と入力オペランドの組み合わせを規定している。しかし、これらの特殊値を生成すべきケースを含めてすべてをハードウェアで実現すると非常にコストが増加するために、正規加数を生成できる範囲のみハードウェアに実装し、特殊値を生成するケースは例外処理としてソフトウェアエミュレーションにまかせることが多い。
【０００６】
前述の（ケース１）では、ハードウェアが当該命令を全くサポートしていないので、当該命令以外の命令（前述の例では整数命令）でエミュレーションプログラムを実現するしかないが、（ケース２）では当該命令の全機能をエミュレーションするために部分的に実装してある機能を活用できることがある。
【０００７】
しかし、従来技術では（ケース２）においても（ケース１）と同様当該命令以外の命令を用いてエミュレーション（すなわちＩＥＥＥ浮動小数点演算）を実現している。
【０００８】
従来例１で使われているエミュレーションプログラムは、エミュレーション対象命令オペランドのアクセス例外に対処する必要がある場合、割込み出口、或いは、フックと呼ばれる機能を使う。
【０００９】
これは、ＯＳが提供する機能であって、エミュレーションの事前処理の一つとしてエミュレーションプログラムがＯＳに対しエミュレーションプログラム内の割込み処理プログラムをエントリポイントを登録しておき、エミュレーション実行中アクセス例外に起因する割込みのような同期型の割込みが起きたとき、そこに制御を渡すためのものである。
【００１０】
ここで、前記「命令エミュレーション」或いは「命令エミュレーション方法」について説明する。
【００１１】
従来、情報処理装置の命令セットとして定義されている命令のうち、コスト、ハードウェア規模等の制限によりハードウェアで実装できない命令を実行する手段の一つとして、命令エミュレーションという方法が一般に用いられている。
【００１２】
つまり、ハードウェアは当該命令を無効な命令として扱い、無効命令トラップ割込みを発生させ、その後、ＯＳが命令コードを判断して命令エミュレーションプログラムを選択し、ソフトウェア的に当該命令を実行するという方法である。これの一般的実施例としては、長精度浮動小数点演算命令や浮動小数点除算命令などが挙げられる。
【００１３】
(2) ：従来例２の説明
以下、非特許文献１を従来例２として説明する。
【００１４】
(a) ：プログラム割込
プログラム割込は、主としてプログラムのエラーをハードウェア的に検出することによって生ずる。除算の除数がゼロであったり、１０進数の演算で取扱おうとしたデータ形式がパック１０進数でないなどの場合、割込を起こすことによってエラーの事態を告げるのである。
【００１５】
プログラム割込の場合、ユーザによる対処の方法には２とおりある。一つは、すべてを制御プログラムに任せてしまい、割込を起こしたユーザプログラムを回復終了管理プログラムによって強制的に異常終了（ＡＢＥＮＤ：Abnormal End）させることによってエラーの発生を知る方法である。プログラムの作成に余分な手間はかからないが、タスクが異常終了してしまうのでオンライン処理などには向かない。
【００１６】
もう一つは、ユーザプログラムの中にあらかじめプログラム割込（Program Interrupt ）の処理をする出口（Exit）ルーチンを指定（Specify ）しておく方法である。この出口ルーチンは、ＳＰＩＥルーチンと呼ばれ、エラーの原因を分析し、必要であればエラーの原因となったデータだけを例外処理して次のデータの処理に進むなどの措置をするのに利用される。
【００１７】
これがＳＰＩＥルーチンの使用宣言をしている場合にプログラムエラーによる割込が発生すると、プログラム割込処理ルーチンはＳＲＢをＳＣＨＥＤＵＬＥすることによってＳＰＩＥルーチンを実行する。プログラム割込は、仮想記憶域上のページに対応する実記憶域のページフレームを実在しない場合、すなわちページ不在のときにも発生する。この場合は、実記憶管理プログラム（ＲＳＭ：Real Storage Management ）によって所要の作業が行われる。
【００１８】
(3) ：従来例３の説明
図９は従来の情報処理装置の一部詳細ブロック図、図１０は従来の割込み出口を使ったエミュレーションの概要説明図である。以下、これらの図を参照しながら従来例３を説明する。
【００１９】
図９において、メモリ３０３にはＯＳ３０８や命令エミュレーションプログラムなどが格納されている。ＣＰＵ３０１は、メモリアクセス部３０２を通じてメモリ３０３から命令やデータを取り出してプログラムを実行する。
【００２０】
メモリアクセス部３０２は、アクセス例外を検出すると、割込み制御部３００に例外検出信号３０５を伝える。例外検出信号を受けて割込み制御部３００の割込み情報格納部３１０は割込み情報格納信号３０６を、コンテキストスイッチ部３１１はコンテキストスイッチ信号３０７をＣＰＵ３０１に伝え、ＣＰＵ３０１は割込みを実行する。ここで、割込みとは一般に、割込み情報の格納と、ＯＳに制御を渡すためのコンテキストスイッチより構成される。
【００２１】
図１０は、従来の割込み出口、あるいは、フックを使ったエミュレーションの概略を示すブロック図である。エミュレーションプログラムは、エミュレーション対象命令オペランドのアクセス例外に対処するため、１０１で出口ルーチン１０５の登録を行っている。
【００２２】
エミュレーション実行ルーチン１０２の動作中、１０Ａでエミュレーション対象命令オペランドのアクセス例外による割込みが起きると、ＯＳの割込み処理ルーチン１０４に制御が渡る。割込み処理ルーチン１０４は、１０Ｂで出口ルーチンがあるかどうかを判定し、あれば出口ルーチン１０５に制御を渡す。もし、１０Ａで割込みが起きなければ、エミュレーション実行終了後、１０３で出口ルーチンの登録の削除を行う。
【特許文献１】特開平８−２８６９２９号公報
【非特許文献１】株式会社  オーム社発行、１９８９年１２月２０日第１版第８刷発行、江村  潤朗監修、鎌田  肇著、「多重仮想記憶オペレーティングシステム」、ｐ５８−６０
【発明の開示】
【発明が解決しようとする課題】
【００２３】
前記従来例３では次のような課題がある。
【００２４】
(1) ：ＯＳに対し、エミュレーションプログラム内の出口ルーチンのエントリポイントを登録することがオーバヘッドである。
【００２５】
(2) ：割込み発生後、ＯＳの割込み処理ルーチンを経由して、登録しておいた出口ルーチンに制御が渡るため、ＯＳ動作部分がオーバヘッドである。
【００２６】
(3) ：エミュレーションの後処理として、出口ルーチンのエントリポイントの登録を削除する必要があり、これがオーバヘッドである。
【００２７】
(4) ：エミュレーションプログラム本体のコンテキストと、エミュレーションプログラム内の割込み処理プログラムのコンテキストが分離されるため内部変数の一貫性が崩れやすいこと、および、プログラムの文面上もそれらが分離されてしまうので通読性が低下する、といった問題によりエミュレーションプログラム作成に際して誤りが入りやすい。
【００２８】
以上の問題点はいずれも、エミュレーション対象命令のオペランドのアクセス例外に対処するため、アクセス例外に起因する割込みを使ってＯＳを経由して出口ルーチンに制御を渡していることにある。
【００２９】
本発明は、これらに鑑みてなされたものであり、アクセス例外に起因する割込みを使わずに、出口ルーチンに制御を渡すことで、前記オーバヘッドを無くし、エミュレーションプログラム作成に際して誤りが入り難くすることを目的とする。
【課題を解決するための手段】
【００３０】
前記の目的を達成するため、本発明は次のように構成した。
【００３１】
すなわち、アクセス例外に起因する割込みのコンテキストスイッチを抑止して、ＯＳへの割込みを禁止する機能を有する情報処理装置であって、値が真のとき割込み時のコンテキストスイッチの抑止を許可するＳビットを設定するＳビットレジスタと、値が真のときアクセス例外が検出されたことを表すＥビットを設定するＥビットレジスタと、前記ＳビットレジスタのＳビットを真に、前記ＥビットレジスタのＥビットを偽に設定するセット部と、前記ＥビットレジスタのＥビットの値をテストし、その後、前記Ｅビットを偽に設定するテスト部と、命令の実行中、アクセス例外が検出されたとき、前記ＳビットレジスタのＳビットが真なら、割込み時のコンテキストスイッチを抑止し、かつ、前記ＥビットレジスタのＥビットを真に設定し、かつ、前記ＳビットレジスタのＳビットを偽に設定し、命令の実行中、アクセス例外が検出されなかったとき、前記ＳビットレジスタのＳビットを偽に設定するコンテキストスイッチ制御部とを備えていることを特徴とする。
【００３２】
（作用）
図１は本発明の原理説明図である。以下、図１を参照しながら本発明の作用を説明する。なお、図１では、前記Ｓビットレジスタを単に「Ｓレジスタ」、Ｅビットレジスタを単に「Ｅレジスタ」と記す。
【００３３】
図１には、情報処理装置本体が図示されており、該情報処理装置本体には、システムバス４０４と、該システムバス４０４に接続されたメモリ４０３、メモリアクセス部４０２と、該メモリアクセス部４０２に接続されたＣＰＵ４０１、割込み制御部４００と、ＯＳ（オペレーティングシステム）４０８と、Ｓビットレジスタ（Ｓレジスタ４０ｃ）と、Ｅビットレジスタ（Ｅレジスタ４０ｄ）と、セット部４０ｅと、テスト部４０ｆ等を備えている。また、前記割込み制御部４００には、コンテキストスイッチ制御部４１２と、コンテキストスイッチ部４１１と、割込み情報格納部４１０を備えている。
【００３４】
本発明はこのような情報処理装置において、エミュレーションプログラム中で、エミュレーション対象命令オペランドにアクセスする箇所、つまり、プログラムステップあるいは命令が明確であり、特定できるという点に着目している。
【００３５】
本発明の前記構成により、エミュレーション実行ルーチンでエミュレーション対象命令オペランドにアクセスしたあと、アクセス例外があったかどうかを判定する。この判定がアクセス例外有りならば出口ルーチンに制御を渡す。
【００３６】
このようにすれば、もはや、前記従来例で説明した出口ルーチンの登録と出口ルーチンの登録の削除に相当するものは必要ない。また、ＯＳの割込み処理ルーチンに制御が渡ることもない。
【発明の効果】
【００３７】
(1) ：本発明では、エミュレーション対象命令オペランドのアクセス例外の有無を知る手段として、アクセス例外に起因する割込みを使わないで出口ルーチンに制御を渡すことが可能である。それ故、前述の出口ルーチンの登録処理や登録削除処理が不要であり、出口ルーチンへはＯＳを経由することなく制御を渡すことができるため、それらのオーバヘッドがなくなる。
【００３８】
(2) ：さらに、エミュレーションプログラム内の出口ルーチンは、エミュレーションプログラム本体と同一のコンテキストで実行されるため内部変数の一貫性を保ちやすく、出口ルーチンへは分岐で制御が渡るプログラム構造にできるので、プログラムの通読性が向上する。それ故、エミュレーションプログラム作成に際して誤りが入り難くなる。
【発明を実施するための最良の形態】
【００３９】
§１：情報処理装置の概要
図２は命令エミュレーションの概略説明図である。以下、図２を参照しながら、情報処理装置における命令エミュレーションの概略を説明する。なお、以下の説明で使用する「命令エミュレーション」、「プログラム割込み」、「出口ルーチン」（従来例では、割込み出口、あるいはフックと呼んでいる）等の用語は、前記従来例で説明した用語と同じである。また、以下の説明では、Ｓビットレジスタを単に「Ｓレジスタ」、Ｅビットレジスタを単に「Ｅレジスタ」とも記す。
【００４０】
図２に示したように、エミュレーションプログラム２００中でエミュレーション対象命令オペランドにアクセスする箇所２０Ａ、つまり、プログラムステップあるいは命令が明確であり、特定できるという点に着目している。
【００４１】
本発明により、エミュレーション実行ルーチン２０２の２０Ａでエミュレーション対象命令オペランドにアクセスしたあと、２０Ｂにおいてアクセス例外があったかどうかを判定する。前記判定がアクセス例外ありならば出口ルーチン２０５に制御を渡す。
【００４２】
このようにすれば、もはや、前記従来例で説明した図１０の出口ルーチンの登録１０１と出口ルーチンの登録の削除１０３に相当するものは必要ない。また、ＯＳの割込み処理ルーチン２０４に制御が渡ることもない。
【００４３】
以上述べた解決手段により、エミュレーション対象命令オペランドのアクセス例外の有無を知る手段として、アクセス例外に起因する割込みを使わないで出口ルーチンに制御を渡すことが可能である。それ故、前述の出口ルーチンの登録処理や登録削除処理が不要であり、出口ルーチンへはＯＳを経由することなく制御を渡すことができるため、それらのオーバヘッドがなくなる。
【００４４】
さらに、エミュレーションプログラム内の出口ルーチンは、エミュレーションプログラム本体と同一のコンテキストで実行されるため内部変数の一貫性を保ちやすく、出口ルーチンへは分岐で制御が渡るプログラム構造にできるので、プログラムの通読性が向上する。それ故、エミュレーションプログラム作成に際して誤りが入り難くなる。
【００４５】
§２：情報処理装置の構成と処理の説明
図３は情報処理装置の一部詳細ブロック図、図４は割込み制御部及びレジスタの説明図であり、Ａ図は割込み制御部、Ｂ図はＳレジスタ（Ｓビットレジスタ）、Ｃ図はＥレジスタ（Ｅビットレジスタ）を示す。図５はセット部の動作フローチャート、図６はテスト部の動作フローチャート、図７はコンテキストスイッチ制御部の動作フローチャート、図８は一部詳細動作フローチャートである。
【００４６】
なお、図８は図２の２０Ａ、２０Ｂ付近を拡大した処理フローチャートであり、図３、図４のＡ図、図４のＢ図、図４のＣ図、図５、図６、図７は本発明の実施形態（具体的実施例）を示す。また、図４のＢ図は図３のＳレジスタ４０ｃを、図４のＣ図は図３のＥレジスタ４０ｄを、それぞれフリップフロップで実施していることを表している。
【００４７】
図５は図３のセット部４０ｅの詳細な動作を表し、図６は図３のテスト部４０ｆの詳細な動作を表し、図７は図４のＡ図のコンテキストスイッチ制御部４１２の詳細な動作を表す。以下、これらの図に基づき、情報処理装置の具体的な構成と処理を説明する。
【００４８】
(1) ：図８の６０１でセット命令を実行すると、セット部４０ｅは図５のようにＳレジスタ４０ｃとＥレジスタ４０ｄを設定する。つまり、Ｓレジスタ４０ｃのセット信号４２１を１にしてＳレジスタ４０ｃをセットし、Ｅレジスタ４０ｄのリセット信号４３２を１にしてＥレジスタ４０ｄをセットする。
【００４９】
(2) ：図８の６０２でエミュレーション対象命令のオペランドにアクセスする。このときのコンテキストスイッチ制御部４１２の動作を図７に示す。以下に、この動作を説明する。
【００５０】
先ず、メモリアクセス部４０２がアクセス例外を検出しなかった場合、つまり、アクセス例外信号４０５が０なら、Ｓレジスタ４０ｃのリセット信号４２２を１にして、Ｓレジスタ４０ｃをリセットする。
【００５１】
アクセス例外信号４０５が１（メモリアクセス部４０２がアクセス例外を検出した）で、かつ、Ｓレジスタが０なら、コンテキストスイッチ許可信号４０９を１にしてコンテキストスイッチを許可し、続いて、Ｓレジスタ４０ｃのリセット信号４２２を１にしてＳレジスタ４０ｃをリセットする。
【００５２】
アクセス例外信号４０５が１（メモリアクセス部４０２がアクセス例外を検出した）で、かつ、Ｓレジスタが１なら、コンテキストスイッチ許可信号４０９を０にしてコンテキストスイッチを抑止し、続いて、Ｅレジスタ４０ｄのセット信号４３１を１にしてＥレジスタ４０ｄをセットし、続いて、Ｓレジスタ４０ｃのリセット信号４２２を１にしてＳレジスタ４０ｃをリセットする。
【００５３】
(3) ：図８の６０３でテスト命令を実行した場合、テスト部４０ｆの動作を図６に示す。命令がテスト命令でないならＥレジスタ４０ｄのリセット信号４３３を１にしてＥレジスタ４０ｄをリセットする。
【００５４】
命令がテスト命令で、かつ、Ｅレジスタ４０ｄが０なら、条件コードをリセットし、続いて、Ｅレジスタ４０ｄのリセット信号４３３を１にしてＥレジスタ４０ｄをリセットする。
【００５５】
命令がテスト命令で、かつ、Ｅレジスタが１なら、条件コードをセットし、続いて、Ｅレジスタ４０ｄのリセット信号４３３を１にしてＥレジスタ４０ｄをリセットする。ここで、条件コードとは、ＣＰＵ４０１に装備する一般的な命令実行結果表示手段である。
【００５６】
図８の６０４は条件コードに応じて分岐先を決める一般的条件分岐命令である。本実施の形態では、図２に示すように、エミュレーション対象命令のオペランドのアクセス例外の有無に応じて、出口ルーチン２０５に分岐したり、しなかったりする。
【００５７】
§３：図１乃至図８の具体的な説明
以下、前記図１乃至図８の構成及び処理を更に具体的に説明する。
【００５８】
(1) ：情報処理装置の構成の説明
図１に示した情報処理装置には、情報処理装置本体と該情報処理装置本体に接続された表示装置、入出力装置、ハードディスク装置（ＨＤＤ）等を備えている。そして、前記情報処理装置本体には、図３に示した各部を備えている。すなわち、システムバス４０４と、該システムバス４０４に接続されたメモリ４０３、メモリアクセス部４０２と、該メモリアクセス部４０２に接続されたＣＰＵ４０１、割込み制御部４００と、ＯＳ（オペレーティングシステム）４０８と、Ｓレジスタ４０ｃ（Ｓビットレジスタ）と、Ｅレジスタ４０ｄ（Ｅビットレジスタ）と、セット部４０ｅと、テスト部４０ｆ等を備えている。
【００５９】
更に、図４に示したように、前記割込み制御部４００には、命令の実行中、アクセス例外が検出されたとき、Ｓビットが真なら、割込み時のコンテキストスイッチを抑止し、かつ、Ｅビットを真に設定し、かつ、Ｓビットを偽に設定し、命令の実行中、アクセス例外が検出されなかったとき、Ｓビットを偽に設定するコンテキストスイッチ制御部４１２と、コンテキストスイッチ部４１１と、割込み情報格納部４１０を備えている。また、図４には、前記Ｓレジスタ（Ｓビットレジスタ）４０ｃ及びＥレジスタ（Ｅビットレジスタ）４０ｄの具体的な構成例が図示されている。
【００６０】
(2) ：セット部の具体的な処理の説明
以下、図５に基づいて、セット部４０ｅの処理を説明する。なお、Ｓ１〜Ｓ３は各処理ステップを示す。
【００６１】
セット部４０ｅが処理を開始すると、セット部４０ｅはセット命令か否かを判断し（Ｓ１）、セット命令と判断したら、図４のＢ図に示したＳレジスタ４０ｃのセット端子４２１を１にしてＳレジスタ４０ｃをセットする（Ｓ２）。次に、図４のＣ図に示したＥレジスタ４０ｄのＯＲ回路の入力端子４３２を１にしてＥレジスタ４０ｄをリセットし（Ｓ３）、この処理を終了する。また、前記Ｓ１の処理でセット命令でないと判断したら、そのままこの処理を終了する。
【００６２】
(3) ：テスト部の具体的な処理の説明
以下、図６に基づいて、テスト部４０ｆの処理を説明する。なお、Ｓ１１〜Ｓ１５は各処理ステップを示す。
【００６３】
テスト部４０ｆは、処理が開始されるとテスト命令か否かを判断し（Ｓ１１）、テスト命令と判断したら、Ｅレジスタ４０ｄの値が１か否かを判断する（Ｓ１２）。その結果、Ｅレジスタ４０ｄの値が１と判断したら、条件コードをセットする（Ｓ１３）。そして、図４のＣ図に示したＥレジスタ４０ｄのＯＲ回路の端子４３３を１にしてＥレジスタ４０ｄをリセットし（Ｓ１４）、この処理を終了する。
【００６４】
また、前記Ｓ１２の処理でＥレジスタ４０ｄの値が１でないと判断したら、条件コードをリセットし（Ｓ１５）、Ｓ１４の処理へ移行する。また、前記Ｓ１１の処理でテスト命令でないと判断したら、前記Ｓ１４の処理へ移行する。
【００６５】
(4) ：コンテキストスイッチ制御部４１２の具体的な処理の説明
以下、図７に基づいて、コンテキストスイッチ制御部４１２の処理を説明する。なお、Ｓ２１〜Ｓ２６は各処理ステップを示す。
【００６６】
コンテキストスイッチ制御部４１２は、処理が開始すると、図３又は図４のＡ図に示した割込み制御部４００の入力４０５の値が１か（アクセス例外があるか）否かを判断し（Ｓ２１）、入力４０５の値が１であると判断したら、図３及び図４のＢに示したＳレジスタ４０ｃの値が１か否かを判断する（Ｓ２２）。
【００６７】
その結果、Ｓレジスタ４０ｃの値が１であると判断したら、割込み制御部４００では図４のＡ図に示したコンテキストスイッチ制御部４１２が出力４０９を０にしてコンテキストスイッチ部４１１のコンテキストスイッチを抑止（オフ）（Ｓ２３）する。そして、図４のＣ図に示したＥレジスタ４０ｄのセットリセットＦＦのセット端子４３１を１にしてＥレジスタ４０ｄをセットし（Ｓ２４）、更に、図４のＢに示したＳレジスタ４０ｃのセットリセットＦＦのリセット端子４２２を１にしてＳレジスタ４０ｃをリセットし（Ｓ２５）、この処理を終了する。
【００６８】
また、Ｓ２２の処理で、Ｓレジスタ４０ｃの値が１でないと判断したら、コンテキストスイッチ制御部４１２が出力４０９を１にしてコンテキストスイッチ部４１１のコンテキストスイッチをオンにし（Ｓ２６）、Ｓ２５の処理へ移行する。また、Ｓ２１の処理で、割込み制御部４００の入力４０５の値が１でないと判断したら、そのままＳ２５の処理へ移行する。
【００６９】
(5) ：一部詳細な処理（図２の２０Ａ、２０Ｂ付近の更に詳細な処理）の説明
以下、図８に基づいて、一部詳細な処理（図２の２０Ａ、２０Ｂ付近の更に詳細な処理）を説明する。なお、図８中、６０１〜６０４は各処理ステップを示す。
【００７０】
図２の２０Ａ、２０Ｂ付近の処理を更に詳細に説明すると次の通りである。
【００７１】
(a) ：エミュレーションプログラム２００は、エミュレーション実行ルーチン２０２において、図８のステップ６０１でセット命令を実行すると、セット部４０ｅは図５のようにＳレジスタ４０ｃとＥレジスタ４０ｄを設定する。つまり、Ｓレジスタ４０ｃのセット信号４２１を１にしてＳレジスタ４０ｃをセットし、Ｅレジスタ４０ｄのリセット信号４３２を１にしてＥレジスタ４０ｄをセットする。
【００７２】
(b) ：図８のステップ６０２でエミュレーション対象命令のオペランドにアクセスする。このときのコンテキストスイッチ制御部４１２の動作は図７に示した通りである。すなわち、メモリアクセス部４０２がアクセス例外を検出しなかった場合、つまり、アクセス例外信号４０５が０なら、Ｓレジスタ４０ｃのリセット信号４２２を１にして、Ｓレジスタ４０ｃをリセットする。
【００７３】
アクセス例外信号４０５が１（メモリアクセス部４０２がアクセス例外を検出した）で、かつ、Ｓレジスタが０なら、コンテキストスイッチ許可信号４０９を１にしてコンテキストスイッチを許可し、続いて、Ｓレジスタ４０ｃのリセット信号４２２を１にしてＳレジスタ４０ｃをリセットする。
【００７４】
アクセス例外信号４０５が１（メモリアクセス部４０２がアクセス例外を検出した）で、かつ、Ｓレジスタが１なら、コンテキストスイッチ許可信号４０９を０にしてコンテキストスイッチを抑止し、続いて、Ｅレジスタ４０ｄのセット信号４３１を１にしてＥレジスタ４０ｄをセットし、続いて、Ｓレジスタ４０ｃのリセット信号４２２を１にしてＳレジスタ４０ｃをリセットする。
【００７５】
(c) ：図８のステップ６０３でテスト命令を実行した場合、テスト部４０ｆの動作は図６に示した通りである。すなわち、命令がテスト命令でないならＥレジスタ４０ｄのリセット信号４３３を１にしてＥレジスタ４０ｄをリセットする。
【００７６】
命令がテスト命令で、かつ、Ｅレジスタ４０ｄが０なら、条件コードをリセットし、続いて、Ｅレジスタ４０ｄのリセット信号４３３を１にしてＥレジスタ４０ｄをリセットする。
【００７７】
命令がテスト命令で、かつ、Ｅレジスタが１なら、条件コードをセットし、続いて、Ｅレジスタ４０ｄのリセット信号４３３を１にしてＥレジスタ４０ｄをリセットする。ここで、条件コードとは、ＣＰＵ４０１に装備する一般的な命令実行結果表示手段である。
【００７８】
(d) ：図８のステップ６０４は条件コードに応じて分岐先を決める一般的条件分岐命令である。本実施の形態では、図２に示すように、エミュレーション対象命令のオペランドのアクセス例外の有無に応じて、出口ルーチン２０５に分岐したりしなかったりする。
【図面の簡単な説明】
【００７９】
【図１】本発明の原理説明図である。
【図２】実施の形態における命令エミュレーションの概略説明図である。
【図３】実施の形態における情報処理装置の一部詳細ブロック図である。
【図４】実施の形態における割込み制御部及びレジスタの説明図であり、Ａ図は割込み制御部、Ｂ図はＳレジスタ（Ｓビットレジスタ）、Ｃ図はＥレジスタ（Ｅビットレジスタ）を示す。
【図５】実施の形態におけるセット部の動作フローチャートである。
【図６】実施の形態におけるテスト部の動作フローチャートである。
【図７】実施の形態におけるコンテキストスイッチ制御部の動作フローチャートである。
【図８】実施の形態における一部詳細動作フローチャートである。
【図９】従来の情報処理装置の一部詳細ブロック図である。
【図１０】従来の割込み出口を使ったエミュレーション概要説明図である。
【符号の説明】
【００８０】
３００  割込み制御部
３０１  ＣＰＵ（中央演算処理装置）
３０２  メモリアクセス部
３０３  メモリ
３０４  システムバス
３０５  アクセス例外信号
３０６  割込み情報格納信号
３０７  コンテキストスイッチ
３０８  オペレーティングシステム（ＯＳ）
３１０  割込み情報格納部
３１１  コンテキストスイッチ部
４００  割込み制御部
４０１  ＣＰＵ
４０２  メモリアクセス部
４０３  メモリ
４０４  システムバス
４０５  アクセス例外信号
４０６  割込み情報格納信号
４０７  コンテキストスイッチ信号
４０８  オペレーティングシステム（ＯＳ）
４０ｃ  Ｓレジスタ（Ｓビットレジスタ）
４０ｄ  Ｅレジスタ（Ｅビットレジスタ）
４０ｅ  セット部
４０ｆ  テスト部
４０９  コンテキストスイッチ許可信号
４１０  割込み情報格納部
４１１  コンテキストスイッチ部
４１２  コンテキストスイッチ制御部
【図１】
2006011886.tif 000003
【図２】
2006011886.tif 000004
【図３】
2006011886.tif 000005
【図４】
2006011886.tif 000006
【図５】
2006011886.tif 000007
【図６】
2006011886.tif 000008
【図７】
2006011886.tif 000009
【図８】
2006011886.tif 000010
【図９】
2006011886.tif 000011
【図１０】
2006011886.tif 000012