(57)【要約】【課題】  ターゲットプログラムに対応するシミュレーション命令の有無に応じて効率的にシミュレーションを行う。【解決手段】  模擬対象（ターゲット）の命令をシミュレーション計算機の命令で模擬する命令模擬装置において、模擬対象の命令を実行履歴によらず解析して必要情報を抽出・割付ける変換情報解析部３００と、上記解析・抽出された命令に対して、シミュレーション計算機の命令列で記述されるシミュレーション命令の有無を表す状態情報を含む情報を記憶するポインタ参照情報保持部４００と、上記模擬対象の命令のシミュレーション実行に際して、上記ポインタ参照情報保持部で記憶している状態情報を参照して、既シミュレーション命令に該当する場合には該当シミュレーション命令を実行し、該当しない場合には模擬対象の命令を順次取出し解釈して逐次実行する、実行部６００とを備えた。【選択図】        図１
2005157640.tif 000002
【特許請求の範囲】
【請求項１】
模擬対象（ターゲット）の命令をシミュレーション計算機の命令で模擬する命令模擬装置において、
模擬対象の命令を実行履歴によらず解析して必要情報を抽出・割付ける変換情報解析部と、
上記解析・抽出された命令に対して、シミュレーション計算機の命令列で記述されるシミュレーション命令の有無を表す状態情報を含む情報を記憶するポインタ参照情報保持部と、
上記模擬対象の命令のシミュレーション実行に際して、上記ポインタ参照情報保持部で記憶している状態情報を参照して、既シミュレーション命令に該当する場合には該当シミュレーション命令を実行し、該当しない場合には模擬対象の命令を順次取出し解釈して逐次実行する、実行部とを備えたことを特徴とする命令模擬装置。
【請求項２】
ポインタ参照情報保持部は、模擬対象の命令に対してシミュレーション命令が未定義であれば逐次実行を指定する無フラグを記憶し、実行部は、該無フラグがあると逐次実行をするようにしたことを特徴とする請求項１記載の命令模擬装置。
【請求項３】
実行部は、模擬対象命令のアドレスを記憶する変換エリア情報保持部を備えて、シミュレーション命令の実行に際して、該変換エリア情報保持部に記憶する範囲の模擬対象命令であれば上記シミュレーション命令を実行し、範囲外の命令であれば逐次実行するようにしたことを特徴とする請求項１記載の命令模擬装置。
【請求項４】
模擬対象命令を読込む際に、模擬対象命令をまとめて変換範囲指定する変換エリア情報指示部を備えて、模擬対象命令の必要部分をまとめてシミュレーション実行するようにしたことを特徴とする請求項１記載の命令模擬装置。
【請求項５】
ポインタ参照情報保持部は、模擬対象命令のアドレスとポインタとの対応テーブルと、該ポインタと既シミュレーション命令との対応を記憶するポインタ情報保持部とを設けて、上記テーブルと保持部が記憶する情報に基づいてシミュレーション実行するようにしたことを特徴とする請求項１記載の命令模擬装置。
【請求項６】
模擬対象の命令解読実行を監視し、該模擬対象のシステムメモリ更新を検出するメモリ更新検出部を備えて、該メモリが更新さてたことを検出すると、ポインタ参照情報保持部の保持情報を更新するようにしたことを特徴とする請求項１記載の命令模擬装置。
【請求項７】
模擬対象（ターゲット）の命令をシミュレーション計算機の命令で模擬する命令模擬方法において、
模擬対象の命令を実行履歴によらず解析して必要情報を抽出・割付ける変換情報解析ステップと、
上記解析・抽出された命令に対して、シミュレーション計算機の命令列で記述されるシミュレーション命令の有無を表す状態情報を含む情報を記憶するポインタ参照情報保持ステップと、
上記模擬対象の命令のシミュレーション実行に際して、上記ポインタ参照情報保持ステップで記憶している状態情報を参照して、既シミュレーション命令に該当する場合には該当シミュレーション命令を実行し、該当しない場合には模擬対象の命令を順次取出し解釈して逐次実行する、実行ステップとを備えたことを特徴とする命令模擬方法。
【請求項８】
コンピュータに、模擬対象（ターゲット）の命令をシミュレーション計算機の命令で模擬する命令模擬手順を実行させるプログラムにおいて、
模擬対象の命令を実行履歴によらず解析して必要情報を抽出・割付ける変換情報解析手順と、
上記解析・抽出された命令に対して、シミュレーション計算機の命令列で記述されるシミュレーション命令の有無を表す状態情報を含む情報を記憶するポインタ参照情報保持手順と、
上記模擬対象の命令のシミュレーション実行に際して、上記ポインタ参照情報保持手順で記憶している状態情報を参照して、既シミュレーション命令に該当する場合には該当シミュレーション命令を実行し、該当しない場合には模擬対象の命令を順次取出し解釈して逐次実行する、実行手順とを備えたことを特徴とする命令模擬プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーション対象となるターゲットＣＰＵ（中央処理装置）の動作をホストＣＰＵ上でシミュレーションする命令模擬装置及び方法に関するものである。
【背景技術】
【０００２】
ターゲットＣＰＵのマシン語レベルの各命令コードをシミュレートするホストＣＰＵのアセンブラ言語レベル又はマシン語レベルの命令コードで構成されたシミュレーション関数が用意されている。従来技術としての特許文献１では、ターゲットＣＰＵの命令コードをホストＣＰＵで実行するための命令コード変換を行う変換手段は、ターゲットプログラムをシミュレーションする前に、その命令コードをホストＣＰＵの命令でシミュレートするためのシミュレーション関数を呼び出すシミュレーション関数呼び出しで構成されたシミュレーション関数呼び出し列あるいはテーブルを生成する。ホストＣＰＵはシミュレーション関数呼び出し列を実行する、あるいはテーブルを検索し該当するシミュレーション関数を実行することによりターゲットＣＰＵの動作のシミュレーションを行う。
【特許文献１】特開平６−２５０８７４号公報（第３項、第１図）
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来のＣＰＵシミュレーション装置は上記のように構成されており、ターゲットＣＰＵプログラムの実行前にシミュレーション関数呼び出し列あるいはテーブルを生成しているので、ターゲットＣＰＵプログラムがオペレーティングシステムのように、ターゲットＣＰＵのプログラムが周辺機器からプログラムをロードして実行するような場合には、ロードされたプログラムに対応するターゲットＣＰＵシミュレーション関数呼び出し列あるいはテーブルが準備できていないため、ロードされたプログラムを実行できないという課題がある。
また、ターゲットＣＰＵプログラム自身がプログラムを生成、または更新するような場合には、ターゲットＣＰＵシミュレーション関数呼び出し列あるいはテーブルが更新されたメモリの内容に対応しておらず、更新前のメモリ情報に基づいて、誤ったターゲットＣＰＵ命令のシミュレーションを行うという課題もある。
【０００４】
この発明は、上記のような課題を解決するためになされたもので、ターゲットＣＰＵのプログラムがプログラムをロード、生成、または更新するような場合でも、または未シュミレートの命令に対しても、ターゲットＣＰＵの動作をホストＣＰＵ上で支障なく、シミュレーションできるようにし、且つ、シミュレーションシステムを小型化、高速化できるようにする。
また、この発明は、ターゲットＣＰＵプログラムを変換した際に設定するポインタ参照テーブル保持手段に巨大なテーブルが必要となりがちであるが、ターゲットＣＰＵプログラムが複数の領域に分割されている場合でも、テーブルの大型化あるいはテーブル検索の速度低下が生じないようにする。
【課題を解決するための手段】
【０００５】
この発明に係る命令模擬装置は、模擬対象（ターゲット）の命令をシミュレーション計算機の命令で模擬する命令模擬装置において、
模擬対象の命令を実行履歴によらず解析して必要情報を抽出・割付ける変換情報解析部と、
上記解析・抽出された命令に対して、シミュレーション計算機の命令列で記述されるシミュレーション命令の有無を表す状態情報を含む情報を記憶するポインタ参照情報保持部と、
上記模擬対象の命令のシミュレーション実行に際して、上記ポインタ参照情報保持部で記憶している状態情報を参照して、既シミュレーション命令に該当する場合には該当シミュレーション命令を実行し、該当しない場合には模擬対象の命令を順次取出し解釈して逐次実行する、実行部とを備えた。
【発明の効果】
【０００６】
シミュレーション命令の有無を表す状態情報に基づいてシミュレーション命令を実行し、または切換えて模擬対象の命令を逐次実行するので、模擬対象のプログラムが自身を更新する場合でも、高速でシミュレーションができる効果がある。
【発明を実施するための最良の形態】
【０００７】
実施の形態１．
図１は、この発明の実施の形態１における命令シミュレーション装置の構成を示す図であり、図２はホストＣＰＵ上で動作するこのＣＰＵシミュレーン装置の動作を示すフローチャートである。
【０００８】
図１において、ＣＰＵシミュレーション装置は、シミュレーションすべきターゲットＣＰＵの命令コードを含むターゲットＣＰＵバイナリデータを読み込む。また構成として、ホストＣＰＵ上でターゲットＣＰＵバイナリデータ１００をＣＰＵシミュレーション装置にロードする読込み部２００、ターゲットＣＰＵのアドレス情報を保持するターゲットＣＰＵアドレス情報保持部４１０、ターゲットＣＰＵ命令の命令シミュレーション関数のポインタ情報を保持する関数ポインタ情報保持部４１１、関数ポインタ情報保持部４１１の保持する情報が有効か無効かを示すフラグを保持するフラグ情報保持部４１２、命令シミュレーション関数に引き渡すターゲットＣＰＵ命令コードのデコード情報を保持するデコード情報保持部４１３から構成されるポインタ参照テーブル保持部４００、ターゲットＣＰＵ命令のシミュレーションを行う予め準備された命令シミュレーション関数（７０１−１や７０１−２）群を持ち、ターゲットＣＰＵ命令に対応した命令シミュレーション関数を実行する変換コード実行部７００、命令の取り出しと命令の解釈と命令の実行を逐次的に行う逐次実行部８００、所定の条件により変換コード実行部７００と逐次実行部８００を切り替える切替部９１０、切替部９１０を持ち、ポインタ参照テーブル保持部４００からの情報を解析し切替部９１０に制御情報を伝える判定部９００、判定部９００と変換コード実行部７００と逐次実行部８００を持つ実行部６００、読込み部２００によって読み込まれたターゲットＣＰＵバイナリデータをターゲットＣＰＵ命令と解釈し、ターゲットＣＰＵアドレス、該当する命令シミュレーション関数のポインタ、有効か無効かを示すフラグ、命令シミュレーション関数に引き渡すターゲットＣＰＵ命令コードのデコード情報をポインタ参照テーブル保持部４００に設定する命令変換情報解析部３００を備えている。
【０００９】
次に図１と図２を基に動作を説明する。
ターゲットＣＰＵの命令コードを含むバイナリデータ１００をホストＣＰＵ上でシミュレーションする前に、読込み部２００により読み込まれたバイナリデータ１００を命令変換情報解析部３００がターゲットＣＰＵのアドレス情報が示すバイナリデータをターゲットＣＰＵ命令とみなし、以下を解析する（図２のＳ１ａ）。そして解析した情報に基いてターゲットＣＰＵアドレス情報、該当する命令シミュレーション関数のポインタ情報、ポインタ情報が有効か無効かを示すフラグ情報、命令シミュレーション関数に引き渡すターゲットＣＰＵ命令コードのデコード情報の対をポインタ参照テーブル保持部４００に設定する（図２のＳ１ｂ）。例えば、デコード情報とはターゲットＣＰＵ命令がレジスタ−レジスタ演算を行う命令の場合、使用するレジスタ番号（ソースおよびディスティネーション）の情報である。
読み込まれたバイナリデータの変換解析が完了していない場合（図２のＳ２でＮの場合）には、完了するまでポインタ参照テーブルの設定（図２のＳ１）を繰り返し行う。その際、ターゲットＣＰＵシステムで定義された命令長の最小単位で変換を行う。たとえば、ターゲットＣＰＵシステムで定義されている命令長が４バイトのみであれば、４バイト単位で変換を行い、ターゲットＣＰＵシステムで定義されている命令長が２バイト、４バイト、６バイトの３種類であれば、２バイト単位で変換を行う。また、読み込まれたバイナリデータの命令コードのエリアであっても、データエリア（オペランドエリア）であっても、同様に変換を行う。データエリアから読み出したデータや命令の途中から読み出した命令コードであっても、命令の先頭から読み出したものとして、変換を行う。読み出したデータあるいは命令コードが未定義命令に相当する場合には、ターゲットＣＰＵでの未定義命令実行の命令シミュレーション関数あるいは逐次実行処理を呼び出す（フラグ情報を無効とする）ようにポインタ参照テーブル保持部４００に設定する。
【００１０】
読み込まれたバイナリデータの変換解析が完了した場合（図２のＳ２でＹの場合）には、開始すべきターゲットＣＰＵのプログラムカウンタを設定（図２のＳ３）し、設定されたＰＣに従い、ポインタ参照テーブル保持部４００を検索する（図２のＳ４）。判定部９００はポインタ参照テーブル保持部４００から取り出したポインタ情報が有効な場合（図２のＳ５でＹの場合）には、予め準備された命令シミュレーション関数群７０１を実行するために変換コード実行部７００を起動して実行する（図２のＳ６）。判定部９００はポインタ参照テーブル保持部４００から取り出したポインタ情報が無効な場合や該当するポインタ情報がなかった場合（図２のＳ５でＮの場合）には、命令の取り出し、命令の解釈、命令の実行を逐次的に行うために逐次実行部８００を起動して実行する（図２のＳ８）。変換コード実行（図２のＳ６）および逐次処理実行（図２の８）の完了後は、プログラムカウンタの更新を行い（図２のＳ７および図２のＳ９）、次に実行するターゲットＣＰＵの変換済コードを検索する（図２のＳ４）。
これらのポインタ参照テーブル検索（図２のＳ４）からプログラムカウンタの更新（図２のＳ７および図２のＳ９）までを繰り返し実行することで、ターゲットＣＰＵ命令のシミュレーションを行う。ターゲットＣＰＵプログラムがオペレーティングシステムのようにターゲットＣＰＵのプログラムが周辺機器からプログラムをロードして実行するような場合には、ロードされたプログラムはポインタ参照テーブル保持部４００に登録されていないため、逐次実行部８００で命令実行される。
【００１１】
以上のように、ポインタ参照テーブルに登録されているかどうか、または登録された情報が有効であるか無効であるかを判断し、ターゲットＣＰＵ命令のシミュレーション部分を切り替えることで、ターゲットＣＰＵのプログラムがプログラムをロード、生成、または更新するような場合でも、ターゲットＣＰＵの動作をホストＣＰＵ上で支障なくシミュレーションすることができる。
【００１２】
なお、上記では、上記記載の要素で構成される装置として説明したが、ホストＣＰＵとして汎用の計算機を用い、図２のフローに示されるステップを構成してシミュレーションを行うようにしてもよい。即ち図２のＳ１ａとしてホストＣＰＵ系への命令変換情報解析ステップ、Ｓ１ｂとしてポインタ参照テーブルでの情報保持ステップ、Ｓ６として変換コード実行ステップ、Ｓ８として逐次処理実行ステップ、Ｓ５として判定・切替ステップを持ち、図２に示される処理を行わせる。
このステップを計算機プログラムとして用意することも有効である。
【００１３】
実施の形態２．
これらのシミュレーションを行うターゲットＣＰＵの命令が、すでにシミュレーション実行されているかを判定し、シミュレーション実行速度を上げる形態を説明する。
図３は、本実施の形態におけるターゲットＣＰＵのプログラムカウンタがポインタ参照テーブル保持部に格納されているかを判定する判定部９００ｂの構成を示す詳細ブロック図である。
図３において、ポインタ参照テーブル保持部４００は、図１に示す詳細構成要素を持っている。そして判定部９００ｂは、内部に命令変換情報解析部３００によって解析された変換エリアの開始アドレスと終了アドレスの対を少なくとも１つ保持するする変換エリア情報保持部９０２、ポインタ参照テーブル保持部４００の内容を読み出し、変換された領域の開始アドレスと終了アドレスの検索を行い、開始アドレスと終了アドレスの対を変換エリア情報保持部９０２に設定する変換エリア情報設定部９０１、ターゲットＣＰＵのプログラムカウンタが変換エリア情報保持部９０２が保持する開始アドレスと終了アドレスの間に含まれているかを比較する比較部９０３を持っている。
【００１４】
次に図３を用いて動作を説明する。
基本的な動作は、実施の形態１で説明した動作を行う。実施の形態２では、ターゲットＣＰＵ命令を予め準備した命令シミュレーション関数に割り付けが完了した後（図２のＳ３のループを抜ける）、変換エリア情報設定部９０１がポインタ参照テーブル保持部４００の検索を行う。変換エリア情報設定部９０１はポインタ参照テーブル保持部４００からターゲットＣＰＵの命令アドレスを読み出し、連続するエリアの抽出を行う。たとえば、ターゲットＣＰＵシステムで定義されている命令長が４バイトのみであり、ポインタ参照テーブル保持部４００に格納されているターゲットＣＰＵの命令アドレスが、０ｘ１０００、０ｘ１００４、０ｘ１００８、０ｘ１００Ｃ、０ｘ１０１０、０ｘ１０１４の値が格納されている場合には、開始アドレスが０ｘ１０００であり、終了アドレスが０ｘ１０１４となる。
また、ターゲットＣＰＵシステムで定義されている命令長が２バイト、４バイト、６バイトの３種類であり、ポインタ参照テーブル保持部４００に格納されているターゲットＣＰＵの命令アドレスが、０ｘ１０００、０ｘ１００２、０ｘ１００４、０ｘ１００６、０ｘ１００８、０ｘ１００Ａ、０ｘ１００Ｃ、０ｘ１０１０、０ｘ１０１２、０ｘ１０１４の値が格納されている場合には、最初の開始アドレスが０ｘ１０００であり、最初の終了アドレスが０ｘ１００Ｃ、次の開始アドレスが０ｘ１０１０であり、次の終了アドレスが０ｘ１０１４となる。
【００１５】
変換エリア情報設定部９０１は、ポインタ参照テーブル保持部４００の最初から最後までターゲットＣＰＵの命令アドレスの読み出しを行い、変換した全エリアの開始アドレスと終了アドレスの対を抽出する。変換エリア情報設定部９０１で抽出された開始アドレスと終了アドレスの対が変換エリア情報保持部９０２に通知され、保持される。
ターゲットＣＰＵ命令のシミュレーション時には、設定されたターゲットＣＰＵのプログラムカウンタが変換エリア情報保持部９０２が保持する開始アドレスと終了アドレスの対に挟まれたエリアに含まれていれば、ポインタ参照テーブル保持部４００にターゲットＣＰＵの命令アドレスと対に保持されているポインタ情報を読み出す。読み出したポインタ情報が有効であれば、変換コード実行部７００を起動し、読み出したポインタ情報が無効であれば、逐次実行部８００を起動する。また、設定されたターゲットＣＰＵのプログラムカウンタが変換エリア情報保持部９０２が保持する開始アドレスと終了アドレスの対に挟まれたエリアに含まれていなければ、逐次実行部８００を起動する。
【００１６】
以上のように、変換エリア情報設定部及び設定エリア情報保持部を持ち、変換エリアの範囲（開始アドレスと終了アドレス）とターゲットＣＰＵのプログラムカウンタを比較できるようにするので、ポインタ参照テーブル保持部の高速な検索が可能となり、従って高速にターゲットＣＰＵ命令のシミュレーションを行うことができる。
【００１７】
同様主旨の他の構成を説明する。
図４は、本実施の形態における他の、ターゲットＣＰＵのプログラムカウンタがポインタ参照テーブル保持部に格納されているかを判定する判定部９００Ｃの構成を示す詳細ブロック図である。
図４において、判定部９００Ｃは、内部に命令変換情報解析部３００によって変換された変換エリアの開始アドレスと開始アドレスからの変換長さの対を少なくとも１つ保持するする変換エリア情報保持部９０５、ポインタ参照テーブル保持部４００の内容を読み出し、変換された領域の開始アドレスと開始アドレスからの変換長さの検索を行い、開始アドレスと変換長さの対を変換エリア情報保持部９０２に設定する変換エリア情報設定部９０４、ターゲットＣＰＵのプログラムカウンタが変換エリア情報保持部９０５が保持する開始アドレスと（開始アドレス＋変換長さ）の間に含まれているかを比較する比較部９０６を持っている。
【００１８】
次に図４を用いて動作を説明する。
基本的な動作は、実施の形態１で説明した動作を行う。先の説明と同様に、ターゲットＣＰＵ命令をホストＣＰＵの命令列に変換が完了した後、変換エリア情報設定部９０４がポインタ参照テーブル保持部４００の検索を行う。変換エリア情報設定部９０４はポインタ参照テーブル保持部４００からターゲットＣＰＵの命令アドレスを読み出し、連続するエリアの抽出を行う。たとえば、ターゲットＣＰＵシステムで定義されている命令長が４バイトのみであり、ポインタ参照テーブル保持部４００に格納されているターゲットＣＰＵの命令アドレスが、０ｘ１０００、０ｘ１００４、０ｘ１００８、０ｘ１００Ｃ、０ｘ１０１０、０ｘ１０１４の値が格納されている場合には、開始アドレスが０ｘ１０００であり、変換長さが０ｘ１４となる。また、ターゲットＣＰＵシステムで定義されている命令長が２バイト、４バイト、６バイトの３種類であり、ポインタ参照テーブル保持部４００に格納されているターゲットＣＰＵの命令アドレスが、０ｘ１０００、０ｘ１００２、０ｘ１００４、０ｘ１００６、０ｘ１００８、０ｘ１００Ａ、０ｘ１００Ｃ、０ｘ１０１０、０ｘ１０１２、０ｘ１０１４の値が格納されている場合には、最初の開始アドレスが０ｘ１０００であり、最初の変換長さが０ｘ０Ｃ、次の開始アドレスが０ｘ１０１０であり、次の変換長さが０ｘ１４となる。
【００１９】
変換エリア情報設定部９０４は、ポインタ参照テーブル保持部４００の最初から最後までターゲットＣＰＵの命令アドレスの読み出しを行い、変換した全エリアの開始アドレスと変換長さの対を抽出する。変換エリア情報設定部９０４で抽出された開始アドレスと変換長さの対が変換エリア情報保持部９０５に通知され、保持される。
ターゲットＣＰＵ命令のシミュレーション時には、設定されたターゲットＣＰＵのプログラムカウンタが変換エリア情報保持部９０５が保持する開始アドレスと（開始アドレス＋変換長さ）の対に挟まれたエリアに含まれていれば、ポインタ参照テーブル保持部４００にターゲットＣＰＵの命令アドレスと対に保持されているポインタ情報を読み出す。読み出したポインタ情報が有効であれば、変換コード実行部７００を起動し、読み出したポインタ情報が無効であれば、逐次実行部８００を起動する。また、設定されたターゲットＣＰＵのプログラムカウンタが変換エリア情報保持部９０２が保持する開始アドレスと（開始アドレス＋変換長さ）の対に挟まれたエリアに含まれていなければ、逐次実行部８００を起動する。
【００２０】
以上のように構成しても、ポインタ参照テーブル保持部の高速な検索が可能で、ターゲットＣＰＵ命令の高速シミュレーションを行うことができる。
【００２１】
実施の形態３．
ターゲット命令が連続アドレスで表現されていない場合でも、効率的にシミュレーションを行い、命令実行の実行速度も上げる形態を説明する。
図５は、この発明の実施の形態３における、ターゲットＣＰＵの命令コードを含むバイナリデータの読込部２００ｃの構成を示す詳細ブロック図である。
図５において、命令変換情報解析部３００は、実施の形態１で説明した動作を行い、図１のポインタ参照テーブル保持部４００に必要な情報を設定する。そして読込み部２００ｃは、内部にターゲットＣＰＵバイナリデータ１００に書かれた命令コードのエリア情報（変換開始アドレス及び変換終了アドレスの対）を少なくとも１つを保持し、命令変換情報解析部３００に変換範囲の指示を行う変換エリア情報指示部２０２、ターゲットＣＰＵバイナリデータ１００のヘッダー情報から命令コードのエリア（開始アドレス及び終了アドレスの対）を抽出し、変換エリア情報指示部２０２を設定する変換エリア情報設定部２０１を持っている。
【００２２】
次に図５を用いて動作を説明する。
基本的な動作は、実施の形態１で示した動作を行う。実施の形態３では、ターゲットＣＰＵバイナリデータ１００を読込み部２００ｃが読み込む時に、変換エリア情報設定部２０１がヘッダー情報から命令コードの配置情報（命令コードの開始アドレスと終了アドレスの対）を読み込む。変換エリア情報設定部２０１により抽出された命令コードの開始アドレスと終了アドレスの対は、変換エリア情報指示部２０２に保持される。ターゲットＣＰＵ命令の変換時には、変換エリア情報指示部２０２により指示されるエリアを命令コードのエリアとして、命令変換情報解析部３００がターゲットＣＰＵの命令を予め準備した命令シミュレーション関数への割り付けを行う。その際、読込み部２００ｃによって読み込まれたターゲットＣＰＵバイナリデータが飛び飛びのエリアで構成されている場合であっても、変換エリア情報指示部２０２により、エリアとエリアの間は変換対象とせず、効率的に命令の変換を行う。
【００２３】
以上のように、変換エリア情報設定部及び設定エリア情報指示部を持ち、変換エリアの範囲（開始アドレスと終了アドレス）を命令変換情報解析部に通知するので、効果的な命令変換が可能で、ターゲットＣＰＵ命令のシミュレーションに必要な利用資源を少なくできる。
【００２４】
同様主旨の他の構成を説明する。
図６は、本実施の形態における他の、ターゲットＣＰＵの命令コードを含むバイナリデータがオペレーティングシステムなどのようにメモリ管理機能を有するプログラムである場合の、読込み部の構成を示す詳細ブロック図である。
図６において、ターゲットＣＰＵバイナリデータ１００は、内部にオペレーティングシステムなどのようにメモリ管理機能を有する場合にメモリ管理に用いるメモリ管理テーブルを持っている。また命令変換情報解析部３００は実施の形態１で説明した機能を持つ。そして読込み部２００ｄは内部に図５に示したと同じ機能の変換エリア情報誌時部２０２と、ＣＰＵバイナリデータ１００のメモリ管理テーブル１０１の情報から命令コードのエリア（開始アドレス及び終了アドレスの対）を抽出し、変換エリア情報指示部２０２を設定する変換エリア情報設定部、２００は変換エリア情報設定部２０３を持っている。
【００２５】
次に図６を用いて動作を説明する。
基本的な動作は、実施の形態１で示した動作を行う。先の動作説明と同様に、ターゲットＣＰＵバイナリデータを読込み部２００ｄを用いて読み込む時に、変換エリア情報設定部２０１がターゲットＣＰＵバイナリデータ１００が保持するメモリ管理テーブル１０１から命令コードの配置情報（命令コードの開始アドレスと終了アドレスの対）を読み込む。変換エリア情報設定部２０３により抽出された命令コードの開始アドレスと終了アドレスの対は、変換エリア情報指示部２０２に保持される。ターゲットＣＰＵ命令の変換時には、変換エリア情報指示部２０２により指示されるエリアを命令コードのエリアとして、命令変換情報解析部３００は、ターゲットＣＰＵ命令を予め準備した命令シミュレーション関数への割り付けを行う。その際、読込み部２００ｄによって読み込まれたターゲットＣＰＵバイナリデータのメモリ常駐情報を抽出し、ターゲットＣＰＵシステムのメモリに常駐する領域のみを変換エリア情報指示部２０２による変換対象とし、効率的に命令の変換を行う。
【００２６】
以上のように、構成しても、効果的な命令変換が可能で、シミュレーションに必要な利用資源を少なくできる。
【００２７】
同様主旨の他の構成を説明する。
図７は、本実施の形態における他のターゲットＣＰＵの命令コードを含むバイナリデータの読込み部２００ｅの構成を示す詳細ブロック図である。
図７において、読込み部２００ｅは、内部にターゲットＣＰＵバイナリデータ１００の命令コードのエリア情報を少なくとも１つを保持し、命令変換情報解析部３００に変換範囲の指示を行う変換エリア情報指示部２０５、ターゲットＣＰＵバイナリデータ１００のヘッダー情報から命令コードのエリアを抽出し、変換エリア情報指示部２０５を設定する変換エリア情報設定部２０４を持っている。
【００２８】
図７を用いて動作を説明するが、図４と図５で既に詳細を説明したので、簡単に述べる。
ターゲットＣＰＵバイナリデータを読込み部２００ｅを用いて読み込む時に、変換エリア情報設定部２０４がヘッダー情報から命令コードの配置情報を読み込む。そして抽出された命令コードの開始アドレスと変換長さの対は、変換エリア情報指示部２０５に保持される。ターゲットＣＰＵ命令の変換時には、この指示されるエリアを命令コードのエリアとして、命令変換情報解析部３００はターゲットＣＰＵ命令を予め準備した命令シミュレーション関数への割り付けを行う。その際、読み込まれたターゲットＣＰＵバイナリデータが飛び飛びのエリアで構成されていても、エリアとエリアの間は変換対象とならず、効率的に命令の変換を行う。
以上のように構成しても、同様の効果が得られる。
【００２９】
図８は、本実施の形態における他の、読込み部２００ｆの構成を示す詳細ブロック図である。
図８において、読込み部２００ｆは、内部にターゲットＣＰＵバイナリデータ１００の命令コードのエリア情報を少なくとも１つを保持し、命令変換情報解析部３００に変換範囲の指示を行う変換エリア情報指示部２０５と、ターゲットＣＰＵバイナリデータ１００のメモリ管理テーブル情報から命令コードのエリアを抽出し、変換エリア情報指示部２０５を設定する変換エリア情報設定部２０６を持っている。
【００３０】
図８の構成による動作は、既に説明した構成要素の動作から明らかであるので、記述を省略する。
以上のように構成しても、同様の効果が得られる。
【００３１】
命令実行シミュレーションの実行速度を更に向上する形態を説明する。
図９は、この発明の実施の形態３における、読込み部と判定部の構成を示す詳細ブロック図である。
図９において、読込み部２００ｃは、内部に図５で示したと同様な変換エリア情報設定部２０１と、変換エリア情報指示部２０２を持つ。また、判定部９００ｄは、内部に図で示したと同様な比較部９０３を持つ。
【００３２】
次に図９を用いて動作を説明する。
基本的な動作は、実施の形態１で示した動作を行う。更に図３、図５の動作は既に説明しているので、簡単に説明する。
変換エリア情報設定部２０１はターゲットＣＰＵバイナリデータ１００のヘッダー情報から命令コードの配置情報を読み込む。そして抽出された命令コードの開始アドレスと終了アドレスの対は、変換エリア情報指示部２０２に保持される。命令変換情報解析部３００はターゲットＣＰＵ命令を、予め準備した命令シミュレーション関数に割り付けを行う。その際、バイナリデータが飛び飛びのエリアで構成されている場合であっても、エリアとエリアの間は変換対象とせず、効率的に命令の変換を行う。
シミュレーション時には、設定されたターゲットＣＰＵのプログラムカウンタが変換エリア情報指示部２０２が保持する開始アドレスと終了アドレスの対に挟まれたエリアに含まれていれば、保持されているポインタ情報を読み出す。以後、読み出したポインタ情報の有効／無効により、変換コード実行部７００または逐次実行部８００が動作する。また、設定されたターゲットＣＰＵのプログラムカウンタが変換エリア情報保持部９０２が保持する開始アドレスと終了アドレスの対に挟まれたエリアに含まれていなければ、逐次実行部８００が動作する。
本構成において、ターゲットＣＰＵバイナリデータ１００のヘッダー情報から変換エリア情報を抽出したが、ターゲットＣＰＵプログラムがオペレーティングシステムなどの場合には、変換エリア情報設定部２０１を用いて、ターゲットＣＰＵバイナリプログラム１００内のメモリ管理テーブル１０１の情報を読み出し、変換エリア情報指示部２０２に設定することも可能である。
【００３３】
以上のように構成しても、効果的な命令変換と、省資源による高速シミュレーションの効果がある。
【００３４】
これの変形として、図４と図７の回路を組み合わせることもできる。
図１０は、本実施の形態における、他の読込み部と判定部の構成を示す詳細ブロック図である。
図１０において、読込み部２００ｅは、内部に変換エリア情報設定部２０４と、変換エリア情報指示部２０５を持つ。また判定部９００ｅは、内部に比較部９０６を持つ。
本構成による動作は、既に図４と図７で説明しており、図９の動作と同等なので、詳細記述を省略する。
【００３５】
実施の形態４．
本実施の形態においては、ポインタ参照テーブル保持部の詳細具体構成を説明する。
図１１は、この発明の実施の形態４におけるポインタ参照テーブル保持部、及び、逐次実行部と変換コード実行部を切り替えてターゲットＣＰＵ命令を実行する実行部の構成を示すブロック図である。
図１１において、ポインタ参照テーブル保持部４００ｄは、ターゲットＣＰＵのページ単位で管理され、ターゲットＣＰＵのページ先頭から順に命令シミュレーション関数へのポインタと有効／無効を示すフラグ情報とシミュレーション関数に引き渡すターゲットＣＰＵ命令コードのデコード情報を保持するポインタ情報保持部４０２と、ターゲットＣＰＵのページアドレスとポインタ情報保持部４０２の該当ポインタの対を保持するページポインタ参照テーブル保持部４０１とを内部に持っている。その他の命令変換情報解析部３００と、実行部６００については、実施の形態１、図１に示す要素と同等のものである。
【００３６】
図１１を用いて動作を説明する。
基本的な動作は、実施の形態１で示した動作を行う。本実施の形態において、命令変換情報解析部３００は、ターゲットＣＰＵの命令を予め準備した命令シミュレーション関数への割り付けを行う際に、ターゲットＣＰＵシステムのメモリにある内容をページ単位で命令変換をする。
命令変換情報解析部３００は、ターゲットＣＰＵのページの先頭を変換するときに、まずターゲットＣＰＵのページアドレスと変換した情報を格納するポインタ情報保持部４０２のページポインタを対にしてページポインタ参照テーブル保持部４０１に格納する。その後、ターゲットＣＰＵのページ内のバイナリデータを変換し、該当する命令シミュレーション関数のポインタ、有効か無効かを示すフラグ、命令シミュレーション関数に引き渡すターゲットＣＰＵ命令コードのデコード情報をポインタ情報保持部４０２に格納する。
ターゲットＣＰＵ命令のシミュレーション時には、設定されたターゲットＣＰＵのプログラムカウンタのページアドレスを元にページポインタ参照テーブル保持部４０１の検索を行う。ページポインタ参照テーブル保持部４０１の検索の結果得られたポインタにターゲットＣＰＵのプログラムカウンタのページオフセットを加算することで、ターゲットＣＰＵのプログラムカウンタに対応する命令シミュレーション関数の該当ポインタ情報を抽出する。判定部９００はポインタ情報保持部４０２から得られた有効／無効情報をみて、有効であれば同時に得られたポインタ情報に従い、変換コード実行部７００を動作させる。ポインタ情報保持部から得られた有効／無効情報が無効であれば、逐次実行部８００を動作させる。
【００３７】
以上のように構成すると、ポインタ参照テーブル保持部の全検索を行うことなく、ターゲットＣＰＵ命令のシミュレーションを高速に行うことができる。
【００３８】
本実施の形態の変形を説明する。
図１２は、本実施の形態における他のポインタ参照テーブル保持部の構成を示すブロック図である。
図１２において、ページポインタ参照テーブル保持部４０１と、ポインタ情報保持部４０２は、図１１に示したものと同等である。また、ポインタ参照テーブル保持部４００ｅは、他にターゲットＣＰＵの論理ページアドレスと論理ページアドレスに対応する物理ページアドレスと物理ページアドレスに対応するポインタ情報保持部４０２の該当ポインタの対を保持するページアドレス変換バッファ保持部４０３を持つ。更にＣＰＵシミュレーション装置は、ターゲットＣＰＵシステムのアドレス変換機構を備えている。
【００３９】
図１２を用いて動作を説明する。
命令変換情報解析部３００は、図１１と同様の動作を行う。
ターゲットＣＰＵ命令のシミュレーション時には、設定されたターゲットＣＰＵのプログラムカウンタの論理ページアドレスを基にページアドレス変換バッファ４０３の検索を行う。ページアドレス変換バッファ保持部４０３は、ターゲットＣＰＵ命令の変換時には設定されないため、ターゲットＣＰＵのプログラムカウンタの論理ページアドレスは該当アドレスが登録されておらず、ミスとなる。ミスとなった場合には、ターゲットＣＰＵシステムのアドレス変換機構１０００による論理アドレス・物理アドレスの変換を行い、得られた物理アドレスでページポインタ参照テーブル保持部４０１の検索を行う。ターゲットＣＰＵのプログラムカウンタの論理ページアドレス、ターゲットＣＰＵシステムのアドレス変換機構１０００で得られた物理ページアドレス、ページポインタ参照テーブル保持部４０１で得られたページポインタをページアドレス変換バッファ保持部４０３に登録する。ターゲットＣＰＵのプログラムカウンタの論理ページアドレスに対応するページポインタがページポインタ参照テーブル保持部４０１にない場合には、ポインタ情報保持部４０２が有するフラグ情報を無効としている専用エリアのポインタをページアドレス変換バッファ保持部４０３に登録する。その後、再度ターゲットＣＰＵのプログラムカウンタの論理ページアドレスでページアドレス変換バッファ保持部４０３を検索すると、登録されたページポインタを抽出できる。抽出されたページポインタにターゲットＣＰＵのプログラムカウンタのページ内オフセットを加算することで、ターゲットＣＰＵのプログラムカウンタに対応する命令シミュレーション関数７０１の該当ポインタ情報を抽出する。
判定部９００はポインタ情報保持部４０２から得られた有効／無効情報をみて、変換コード実行部７００または、逐次実行部８００を動作させる。
【００４０】
以上の構成により、ターゲットＣＰＵ命令のシミュレーションを高速に行うことができる。
【００４１】
本実施の形態の変形を説明する。
図１３は、本実施の形態における他のポインタ参照テーブル保持部の構成を示すブロック図である。
図１３において、ポインタ参照テーブル保持部４００ｆには、図１２のポインタ情報保持部４０２に代るポインタ情報保持部４０４がある。これはターゲットＣＰＵのページ単位で管理され、ターゲットＣＰＵのページ先頭から順に命令シミュレーション関数ポインタとシミュレーション関数に引き渡すターゲットＣＰＵ命令コードのデコード情報を保持し、逐次実行部を起動するために命令シミュレーション関数ポインタが逐次実行部をさしている専用エリアを持っている。
【００４２】
図１３を用いて簡単に動作を説明する。
命令変換情報解析部３００は、図１１と同様の動作を行う。そして、ターゲットＣＰＵのページ先頭から順に該当する命令シミュレーション関数のポインタ、命令シミュレーション関数に引き渡すターゲットＣＰＵ命令コードのデコード情報をポインタ情報保持部４０４に格納する。また、ターゲットＣＰＵバイナリデータ１００の命令エリア、データエリアの区別なく変換するため、ターゲットＣＰＵ無効な命令コードと判断した場合には、逐次実行部８００のポインタを設定する。
ターゲットＣＰＵのプログラムカウンタの論理ページアドレスに対応するページポインタがページポインタ参照テーブル保持部４０１にない場合には、ポインタ情報保持部４０４が有する逐次実行部８００のポインタを示す専用エリアのポインタをページアドレス変換バッファ保持部４０３に登録する。その後、ページアドレス変換バッファ保持部４０３を検索すると、登録されたページポインタを抽出できる。更に、抽出されたページポインタにターゲットＣＰＵのプログラムカウンタのページ内オフセットを加算することで、ターゲットＣＰＵのプログラムカウンタに対応する変換コード保持部の該当ポインタ情報を抽出する。ポインタ情報保持部４０２から得られたポインタ情報に従い、変換コード実行部７００又は、逐次実行部８００を動作させる。
【００４３】
以上の構成によっても、シミュレーションに必要な利用資源を削減し、シミュレーションを高速化できる。
【００４４】
実施の形態５．
本実施の形態においては、これまでの実施の形態において述べてこなかった各種の他の変形構成を説明する。
図１４は、この発明の実施の形態５における命令変換部の構成を示すブロック図である。
図１４において、命令変換情報解析部３００ｅは、内部にポインタ参照テーブル保持部４００の容量をチェックし、容量オーバーフローを検出する容量オーバーフロー検出部３０１と、容量オーバーフロー検出部３０１によって検出された容量オーバーフローの情報に従い、ポインタ参照テーブル保持部４００の容量を拡張する容量拡張部３０２を持つ。また図１の同番号のそれと同等の機能を持つポインタ参照テーブル保持部４００は、拡張部４０５を持つ。
【００４５】
図１４を用いて動作を説明する。
本実施の形態５において、命令変換情報解析部３００が情報を解析し、割付を行っていって、ポインタ参照テーブル保持部４００の残容量を観測する。容量オーバーフロー検出部３０１が、残容量が規定値以下を検出すると、容量拡張部３０２に通報する。この容量オーバーフロー検出部３０１からの通報に従い、容量拡張部３０２はポインタ参照テーブル保持部４００の拡張を行う。命令変換情報解析部３００は変換すべきターゲットＣＰＵ命令がなくなるまで、上記動作を繰り返し、全てのエリアの変換を行う。
【００４６】
以上のように、容量オーバーフロー検出部及び容量拡張部を備え、ターゲットＣＰＵ命令のホストＣＰＵ命令列への変換時に容量を拡張することにより、ターゲットＣＰＵバイナリデータのサイズによらず、ターゲットＣＰＵ命令のシミュレーションを行うことができる。
【００４７】
図１５は、本実施の形態における実行部の構成を示すブロック図である。
図１５において、実行部６００ｅは、新たに変換コード実行部７００あるいは逐次実行部８００がターゲットＣＰＵ命令のシミュレーションを行った際にターゲットＣＰＵシステムのメモリ１１００へのメモリ更新要求を検出するメモリ更新検出部６０１と、メモリ更新検出部６０１が通報するメモリ更新要求及びメモリ更新アドレスを元にポインタ参照テーブル保持部４００のメモリ更新アドレスに対応する情報を無効化あるいは再変換するポインタ参照テーブル更新部６０２を持つ。その他の要素は、既に説明した同番号の構成要素と同等のものである。
【００４８】
図１５を用いて動作を説明する。
本実施の形態において、ターゲットＣＰＵ命令のストア命令等ターゲットＣＰＵシステムのメモリ１１００を更新する命令を実行した場合に、メモリ更新検出部６０１はターゲットＣＰＵシステムのメモリ１１００へのメモリ参照要求を観測し、メモリ更新要求を検出すると、ポインタ参照テーブル保持部４００に格納されているターゲットＣＰＵの全命令アドレスとメモリ更新アドレスの比較を行う。これは、ターゲットＣＰＵ命令の実行により、命令変換情報解析部３００で変換した命令が書きかえられることの検出を行う。このメモリ更新検出部６０１がない場合には、書きかえられた命令を実行せずに、書きかえられる前の命令を実行する可能性がある。メモリ更新検出部６０１は、命令変換情報解析部３００によって変換されたエリアのデータが更新されたことを検出すると、ポインタ参照テーブル更新部６０２にメモリ更新アドレスとポインタ参照テーブル保持部４００の更新要求を通報する。通報を受けたポインタ参照テーブル更新部６０２は、メモリ更新アドレスに対応するポインタ参照テーブル保持部４００が保持している有効か無効かを示すフラグ情報を無効にする。あるいは、ポインタ参照テーブル更新部６０２は、更新されたメモリ情報に基づきポインタ参照テーブル保持部４００の再設定（再変換）を行う。ターゲットＣＰＵ命令の実行で、無効化されたポインタに対するターゲットＣＰＵ命令のアドレスの実行が起きた場合には、フラグ情報が無効となっているため、逐次実行部８００が起動される、あるいは更新されたメモリ情報に従い再変換されている命令シミュレーション関数のポインタに従い変換コード実行部７００が起動される。逐次実行部８００は、命令の取り出しから行うため、更新されたメモリ情報に従い、命令の解釈、命令の実行が行われる。
ターゲットＣＰＵシステムのメモリ１１００の更新によるポインタ参照テーブル保持部の無効化あるいは再変換は、更新されたメモリ領域に限定して行ってもかまわないし、更新されたメモリ領域を含むページ単位で行ってもかまわない。
【００４９】
以上のように、メモリ更新検出部とポインタ参照テーブル更新部を備え、命令変換部により変換されたエリアに対するメモリ更新を検出し、ポインタ参照テーブル保持部の該当情報を無効化あるいは再変換することにより、ターゲットＣＰＵの命令が命令を書きかえる場合においても、ターゲットＣＰＵの動作をホストＣＰＵ上で支障なくシミュレーションすることができる。
【図面の簡単な説明】
【００５０】
【図１】この発明の実施の形態１における命令模擬装置の構成を示す図である。
【図２】シミュレーション装置が行う動作を示すフロー図である。
【図３】この発明の実施の形態２における判定部の構成を示す図である。
【図４】実施の形態２における他の判定部の構成を示す図である。
【図５】この発明の実施の形態３における読込み部の構成を示す図である。
【図６】実施の形態３における他の読込み部の構成を示す図である。
【図７】実施の形態３における他の読込み部の構成を示す図である。
【図８】実施の形態３における他の読込み部の構成を示す図である。
【図９】実施の形態３における他の読込み部と判定部の構成を示す図である。
【図１０】実施の形態３における他の読込み部と判定部の構成を示す図である。
【図１１】この発明の実施の形態４におけるポインタ参照テーブル保持部と実行部の構成を示す図である。
【図１２】実施の形態４における他のポインタ参照テーブル保持部と実行部の構成を示す図である。
【図１３】実施の形態４における他のポインタ参照テーブル保持部と実行部の構成を示す図である。
【図１４】この発明の実施の形態５におけるポインタ参照テーブル保持部と命令変換部の構成を示す図である。
【図１５】実施の形態５における他のポインタ参照テーブル保持部と実行部の構成を示す図である。
【符号の説明】
【００５１】
２００，２００ｃ，２００ｄ，２００ｅ，２００ｆ  読込み部、２０１，２０４，２０６  変換エリア情報設定部、２０２，２０５  変換エリア情報指示部、３００，３００ｅ  命令変換情報解析部、３０１  容量オーバーフロー検出部、３０２  容量拡張部、４００，４００ｄ，４００ｅ，４００ｆ  ポインタ参照テーブル保持部、４０１  ページポインタ参照テーブル保持部、４０２，４０４  ポインタ情報保持部、４０３  ページアドレス変換バッファ保持部、４０５  拡張部、４１０  ターゲットＣＰＵアドレス情報保持部、４１１  関数ポインタ情報保持部、４１２  フラグ情報保持部、４１３  デコード情報保持部、６００，６００ｅ  実行部、６０１  メモリ更新検出部、６０２  ポインタ参照テーブル更新部、７００  変換コード実行部、７０１  命令シミュレーション関数、８００  逐次実行部、９００，９００ｂ，９００ｃ  判定部、９０１，９０４  変換エリア情報設定部、９０２，９０５  変換エリア情報保持部、９０３，９０６  比較部、９１０  切替部、１０００  ターゲットＣＰＵシステムのアドレス変換機構、Ｓ１ａ  命令変換情報解析ステップ、Ｓ１ｂ  ポインタ参照テーブル設定ステップ、Ｓ５  判定ステップ、Ｓ６  変換コード実行ステップ、Ｓ８  逐次処理実行ステップ。
【図１】
2005157640.tif 000003
【図２】
2005157640.tif 000004
【図３】
2005157640.tif 000005
【図４】
2005157640.tif 000006
【図５】
2005157640.tif 000007
【図６】
2005157640.tif 000008
【図７】
2005157640.tif 000009
【図８】
2005157640.tif 000010
【図９】
2005157640.tif 000011
【図１０】
2005157640.tif 000012
【図１１】
2005157640.tif 000013
【図１２】
2005157640.tif 000014
【図１３】
2005157640.tif 000015
【図１４】
2005157640.tif 000016
【図１５】
2005157640.tif 000017