JP2788839B2 - Cpuシミュレータ - Google Patents

Cpuシミュレータ

Info

Publication number
JP2788839B2
JP2788839B2 JP5136597A JP13659793A JP2788839B2 JP 2788839 B2 JP2788839 B2 JP 2788839B2 JP 5136597 A JP5136597 A JP 5136597A JP 13659793 A JP13659793 A JP 13659793A JP 2788839 B2 JP2788839 B2 JP 2788839B2
Authority
JP
Japan
Prior art keywords
instruction
address
cpu
instruction code
simulation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP5136597A
Other languages
English (en)
Other versions
JPH06324883A (ja
Inventor
直樹 佐藤
壮一 大塚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NIPPON DENKI GIJUTSU JOHO SHISUTEMU KAIHATSU KK
NEC Corp
Original Assignee
NIPPON DENKI GIJUTSU JOHO SHISUTEMU KAIHATSU KK
Nippon Electric Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NIPPON DENKI GIJUTSU JOHO SHISUTEMU KAIHATSU KK, Nippon Electric Co Ltd filed Critical NIPPON DENKI GIJUTSU JOHO SHISUTEMU KAIHATSU KK
Priority to JP5136597A priority Critical patent/JP2788839B2/ja
Publication of JPH06324883A publication Critical patent/JPH06324883A/ja
Application granted granted Critical
Publication of JP2788839B2 publication Critical patent/JP2788839B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Test And Diagnosis Of Digital Computers (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、ターゲットCPUの動
作をホストCPU上でシミュレートする技術に関する。
【0002】
【従来の技術】ターゲットCPUを含むターゲットマシ
ンの完成前に、或いはターゲットマシン上でのデバッ
グ,性能評価前に、ターゲットCPU用に開発されたプ
ログラム(ターゲットプログラムと称す)をデバッグし
たり、性能評価を行う方法として、ターゲットCPUと
は別のCPUであるホストCPUを含むCPUシミュレ
ータ上でターゲットプログラムにかかるターゲットCP
Uの動作をシミュレートする方法があり、その方法は、
ターゲットCPU用のソースプログラムを逐次解釈実行
するインタプリタ方式と、ターゲットCPU用のマシン
語コードを逐次解釈実行するオブジェクトシミュレーシ
ョン方式とに大別される(例えば、社団法人電子情報通
信学会ハンドブック委員会編集,株式会社オーム社昭和
63年3月30日発行,第1版「電子情報通信ハンドブ
ック第2分冊」1857頁,5・3「シミュレータ」参
照)。
【0003】ここで、インタプリタ方式は、ターゲット
CPU用の原始プログラム(ソースプログラム)を直接
にインタプリートしつつシミュレートするものであり、
オブジェクトシミュレーション方式は、シミュレートに
先立ってターゲットプログラムの原始プログラム(ソー
スプログラム)をコンパイルまたはアセンブルしてター
ゲットCPUのマシン語レベルの命令コードに変換し、
この命令コードをシミュレートするものである。
【0004】オブジェクトシミュレーション方式は、タ
ーゲットCPUのマシン語レベルの命令生成のための時
間がかかるが、シミュレートの実行時間はインタプリタ
方式に比べて速くなるため、短いシミュレート時間を要
求される場合にはオブジェクトシミュレーション方式が
用いられる。なお、ターゲットプログラムがマシン語レ
ベルで既に存在する場合には、コンパイルまたはアセン
ブルが不要であることは勿論のことである。
【0005】そして、オブジェクトシミュレーション方
式のCPUシミュレータにおいては、例えば特開平2−
250122号公報に見られるように、ターゲットCP
Uの命令コードをホストCPU上で実行時に1命令ずつ
解釈しながらシミュレートを進めていた。
【0006】このようにオブジェクトシミュレーション
方式のCPUシミュレータはインタプリタ方式のものに
比べてシミュレーション速度の点で優れているが、従来
のようにターゲットCPUの命令コードをホストCPU
上で実行時に1命令ずつ解釈する構成では、その解釈の
ために要する時間がシミュレーション時のオーバヘッド
となる。
【0007】そこで本発明者の一人は、シミュレーショ
ン実行時におけるターゲットCPUの命令コードの解釈
を不要にすることにより高速なシミュレーションを可能
とした新規なCPUシミュレータ(以下、既提案CPU
シミュレータと称す)を、平成4年12月29日提出の
特許願(整理番号N0002S,発明の名称;CPUシ
ミュレーション方法およびCPUシミュレータ)、およ
び平成5年2月26日提出の特許願(整理番号N000
4S,発明の名称;CPUシミュレーション方法および
CPUシミュレータ)において提案した。
【0008】この既提案CPUシミュレータは、ターゲ
ットCPUの動作をホストCPU上でシミュレートする
CPUシミュレータにおいて、ターゲットプログラムの
マシン語レベルの命令コードを事前にまとめて解釈し、
各命令コードをシミュレートするホストCPUのアセン
ブラ言語レベル或いはマシン語レベルの命令コードの組
み合わせ、または各命令コードをシミュレートするホス
トCPUで実行可能なシミュレーション関数を呼び出す
シミュレーション関数呼び出しの集合で表現されたシミ
ュレーションプログラムを生成し、この生成したシミュ
レーションプログラムをホストCPUで実行するもので
あり、シミュレーション実行時におけるターゲットCP
Uの命令コードの解釈が不要になる為、その分、高速な
シミュレーションが可能になる。
【0009】
【発明が解決しようとする課題】ところで、ターゲット
CPUが命令コードとして参照するターゲットプログラ
ム上のアドレス領域を図5(a)の符号Mに示すように
例えば番地0から始まる領域(1つの番地の記憶サイズ
は1バイトとする)であるとすると、ターゲットCPU
の命令コードのシミュレーションのためのホストCPU
の命令列への変換は次のように行うのが一般的である。
【0010】先ず、番地0を基点とし、番地0に格納さ
れているバイナリデータのみでターゲットCPUの1バ
イトの命令コードを構成するか否かを調べ、構成してい
ればその命令コードをホストCPUの命令列に変換し、
番地1を次の基点とする。番地0に格納されているバイ
ナリデータのみでは1つの命令コードを構成しない場
合、次の番地1に格納されているバイナリデータを含め
た2バイトで同様の判別を行い、この2バイトのバイナ
リデータでターゲットCPUの2バイトの命令コードを
構成していれば、その命令コードをホストCPUの命令
列に変換し、番地3を次の基点とする。以下、同様に、
アドレス領域MのバイナリデータをターゲットCPUの
命令コードが出現する順番に順次解釈して変換してい
く。
【0011】以上のような方法によると、図5(a)に
示すように、アドレス領域MにターゲットCPUの命令
コードのみが格納されている場合には、同図のターゲッ
トCPUの命令コード(1),命令コード(2),命令
コード(3)を正しくホストCPUの命令列に変換する
ことはできるが、図5(b)に示すように、アドレス領
域M中の例えば番地2にターゲットCPUが命令コード
として使用しないバイナリデータXが混在している場
合、番地2を基点とする処理において番地2と例えば次
の番地3とに格納されたバイナリデータで若しターゲッ
トCPUの2バイトの或る命令コードが構成されたとす
ると、次の基点が番地4になるため、これ以降に解釈す
る命令コードの位置がずれてシミュレーション対象とな
る命令コードが変換されず、ホストCPU上でシミュレ
ーションできないことになる。
【0012】本発明はこのような問題点を解決するもの
であり、その目的は、ターゲットCPUが命令コードと
して参照するアドレス領域中にターゲットCPUが命令
コードとして使わないバイナリデータが混在している場
合であっても、それに影響されずに、アドレス領域中に
存在するターゲットCPUの各命令コードをホストCP
Uの命令列に正しく変換できるようにして、ターゲット
CPUの動作をホストCPU上で支障なくシミュレーシ
ョンできるようにすることにある。
【0013】
【課題を解決するための手段】本発明は上記の目的を達
成するために、シミュレーション対象となるターゲット
CPUの動作をホストCPU上でシミュレーションする
CPUシミュレータであって、ホストCPU上でターゲ
ットCPUの動作をシミュレーションする前の段階で、
ターゲットCPUの機械語レベルの命令コードをまとめ
て解釈して、ターゲットCPUの動作をシミュレーショ
ンするためにホストCPU上で実行する命令の列を生成
するようにしたCPUシミュレータにおいて、ターゲッ
トCPUが命令コードとして参照するアドレス領域の
アドレスごとに、そのアドレスを命令コードの先頭アド
レスとみなして命令コードの解釈を行い、各アドレスご
とに解釈されたターゲットCPUの命令コードを、それ
をシミュレーションするホストCPUの命令列と、解釈
された命令コードの次にターゲットCPUが実行する命
令コードのシミュレーションを行うホストCPUの命令
列に制御を移す命令列とから構成されたシミュレーショ
ン命令列に変換する変換手段を備えるようにしている。
【0014】また、前記変換手段は、その一構成例とし
て、前記アドレス領域の各アドレスを指標としてシミュ
レーション命令列の各アドレスを値に持つアドレス変換
テーブルを生成すると共に、シミュレーション命令列中
の、解釈された命令コードの次にターゲットCPUが実
行する命令コードのシミュレーションを行うホストCP
Uの命令列に制御を移す命令列として、解釈された命令
コードの次にターゲットCPUが実行する命令コードの
アドレスに対応して前記アドレス変換テーブルに格納さ
れたアドレス先のホストCPUの命令列に分岐する命令
列を生成する構成を有している。
【0015】
【作用】本発明のCPUシミュレータにおいては、ホス
トCPU上でターゲットCPUの動作をシミュレーショ
ンする前の段階で、変換手段が、ターゲットCPUが命
令コードとして参照するアドレス領域の各アドレスごと
に、そのアドレスを命令コードの先頭アドレスとみなし
て命令コードの解釈を行い、各アドレスごとに解釈され
たターゲットCPUの命令コードを、それをシミュレー
ションするホストCPUの命令列と、解釈された命令コ
ードの次にターゲットCPUが実行する命令コードのシ
ミュレーションを行うホストCPUの命令列に制御を移
す命令列とから構成されたシミュレーション命令列に変
換する。
【0016】
【実施例】次に本発明の実施例について図面を参照して
詳細に説明する。
【0017】図1は本発明の一実施例の概略構成図であ
り、ターゲットCPUが命令コードとして参照するター
ゲットプログラム中のアドレス領域のバイナリデータ1
から、CPUシミュレータの変換手段2が、ホストCP
Uのシミュレーション命令列で構成されるシミュレーシ
ョンコード3と、ターゲットCPU上の命令コードのア
ドレスとホストCPU上のシミュレーション命令列のア
ドレスとの対応関係を示すアドレス変換テーブル4とを
生成出力する様子を示している。
【0018】同図において、バイナリデータ1に示した
各番地0,1,2,…,n(各番地の記憶サイズは例え
ば1バイトとする)は、ターゲットCPUの命令コード
の配置が可能なアドレスを示している。図示の例では、
2バイトの命令コード1−1が0番地を先頭に配置さ
れ、同じく2バイトの命令コード1−2が2番地を先頭
に配置され、1バイトの命令コード1−3がn番地に配
置されているが、例えば1バイトの命令コードを0番地
を先頭に配置し、2バイトの命令コードを1番地を先頭
に配置することも可能であり、この意味で、各番地0,
1,2,…,nの何れもがターゲットCPUの命令コー
ドを配置できるアドレスとなる。
【0019】変換手段2は、バイナリデータ1を、命令
コードの配置が可能な全てのアドレスを基点として命令
コードに解釈し、解釈されたターゲットCPUの命令コ
ード毎にホストCPUのシミュレーション命令列を生成
する。即ち、変換手段2は、バイナリデータ1の0番地
から始まる命令コードを解釈してシミュレーション命令
列3−1を生成し、1番地から始まる命令コードを解釈
してシミュレーション命令列3−2を生成し、2番地か
ら始まる命令コードを解釈してシミュレーション命令列
3−3を生成し、以下同様の処理を行って、最後にn番
地から始まる命令コードを解釈してシミュレーション命
令列3−4を生成する。
【0020】ここで、図示の例のようにバイナリデータ
1の0番地を先頭に2バイトの命令コード1−1が存在
する場合には、0番地から始まる命令コードとして命令
コード1−1そのものが解釈され、命令コード1−1を
シミュレーションするホストCPUの命令列と、解釈さ
れた命令コード1−1の次にターゲットCPUが実行す
る命令コード(例えば命令コード1−2とする)のシミ
ュレーションを行うホストCPUの命令列に制御を移す
命令列とから構成されたシミュレーション命令列3−1
が生成される。同様に、バイナリデータ1に実際に存在
する他の命令コード1−2,1−3の先頭アドレスを基
点とする変換処理においては、実際に存在する命令コー
ド1−2,1−3そのものが解釈され、命令コード1−
2,1−3をシミュレーションするホストCPUの命令
列と、解釈された命令コード1−2,1−3の次にター
ゲットCPUが実行する命令コードのシミュレーション
を行うホストCPUの命令列に制御を移す命令列とから
構成されたシミュレーション命令列3−3,3−4が生
成される。なお、シミュレーションコード3に付記した
Address0等は各シミュレーション命令列3−1等が置か
れるホストCPU上でのアドレスを示す。
【0021】ここで、シミュレーション命令列3−1等
に含まれる、解釈された命令コードの次にターゲットC
PUが実行する命令コードのシミュレーションを行うホ
ストCPUの命令列に制御を移す命令列は、本実施例で
は、解釈された命令コードの次にターゲットCPUが実
行する命令コードのアドレスを指標としてアドレス変換
テーブル4を検索したときに得られるアドレスが指し示
すシミュレーションコード3のシミュレーション命令列
に分岐する命令列としている。
【0022】他方、バイナリデータ1の1番地,3番地
などの如く、実際に存在する命令コードの先頭アドレス
でないアドレスを基点とする変換処理では、次の2通り
の命令コードに解釈される。
【0023】その1つは、その基点アドレス以降のバイ
ナリデータで、ターゲットCPUで定義された或る命令
コードが偶然に構成されることにより、そのような命令
コードに解釈される場合である。このような場合でも、
変換手段2は、その命令コードをシミュレーションする
ホストCPUの命令列と、その命令コードの次にターゲ
ットCPUが実行する命令コードのシミュレーションを
行うホストCPUの命令列に制御を移す命令列とから構
成されたシミュレーション命令列を生成する。これは、
そのような不正なアドレスに制御が移ったときのターゲ
ットCPUの動作をシミュレートできるようにするため
である。
【0024】他の1つは、その基点アドレス以降のバイ
ナリデータでは、ターゲットCPUで定義された命令コ
ードを構成せず、従って未定義命令コードと解釈される
場合である。このような場合、変換手段2においては、
この解釈した未定義命令コードに対応して、例えば未定
義命令コードが実行された旨のエラーメッセージを出力
するホストCPUの命令列を含むシミュレーション命令
列を生成する。また、未定義命令コードが実行されよう
とした場合、ターゲットCPUにおいて或る種の例外処
理が実行されるようになっている場合には、解釈した未
定義命令コードに対応して、その例外処理をシミュレー
ションするホストCPUの命令列を含むシミュレーショ
ン命令列を生成する。
【0025】また、変換手段2は、上述のようなシミュ
レーション命令列3−1等で構成されるシミュレーショ
ンコード3を生成すると同時に、アドレス変換テーブル
4を生成する。このアドレス変換テーブル4は、ターゲ
ットCPUのバイナリデータ1の各番地を指標としシミ
ュレーション命令列3−1等の各アドレスを値に持つエ
ントリ4−1等の集合である。従って、図示の場合、タ
ーゲットCPUのバイナリデータ1の0番地に対してシ
ミュレーション命令列3−1のアドレスAddress0を持つ
エントリ4−1,1番地に対してシミュレーション命令
列3−2のアドレスAddress1を持つエントリ4−2,2
番地に対してシミュレーション命令列3−3のアドレス
Address2を持つエントリ4−3,…,n番地に対してシ
ミュレーション命令列3−4のアドレスAddress nを持
つエントリ4−4が生成される。
【0026】以上のようなシミュレーションコード3お
よびアドレス変換テーブル4の生成を終えると、実際の
シミュレーションが可能になる。本実施例におけるホス
トCPU上でのシミュレーション命令列の実行は、平成
5年2月26日提出の特許願(整理番号N0004S,
発明の名称;CPUシミュレーション方法およびCPU
シミュレータ)において提案された、アドレス変換テー
ブルを採用するCPUシミュレータと同様に進められ
る。
【0027】即ち、例えばホストCPUがシミュレーシ
ョンコード3の例えばシミュレーション命令列3−1か
ら実行を開始したとすると、この命令列3−1中の、命
令コード1−1をシミュレーションするホストCPUの
命令列を実行することにより、命令コード1−1の動作
をシミュレーションし、次いでその命令列3−1中の、
命令コード1−1の次にターゲットCPUが実行する命
令コード1−2のシミュレーションを行うホストCPU
の命令列に制御を移す命令列を実行することにより、命
令コード1−2のターゲットCPU上でのアドレスであ
る2番地を指標にしてアドレス変換テーブル4からエン
トリ4−3を取得し、そのエントリ中のアドレスAddres
s2が指し示すシミュレーション命令列3−3に制御を移
す。以下、同様に、各シミュレーション命令列の実行に
より、バイナリデータ1中の各命令コードの動作をシミ
ュレーションし、シミュレーションした命令コードの次
の命令コードに対応したシミュレーション命令列に制御
を移すといった動作を繰り返し、ターゲットCPUの動
作をホストCPU上でシミュレーションする。
【0028】図2は上述した原理に基づくCPUシミュ
レータのより具体的な構成例を示すブロック図である。
この実施例のCPUシミュレータ5は、ターゲットプロ
グラム6をシミュレーション関数呼び出し列53に変換
すると共にアドレス変換テーブル56を生成する変換手
段50と、シミュレーション関数呼び出し列53,シミ
ュレーション関数群54,レジスタシミュレータ55お
よびアドレス変換テーブル56を格納するメモリ51
と、シミュレーション関数呼び出し列53等を実行する
ホストCPU52とを含んでいる。
【0029】ターゲットプログラム6は、ターゲットC
PU用に開発されたプログラムであり、ターゲットCP
Uが命令コードとして参照するアドレス領域のバイナリ
データ60中には、ターゲットCPUのマシン語レベル
の命令コード6−1〜6−nが含まれている。ここで、
先頭の命令コード6−1は2バイト命令で、ターゲット
CPU上では0番地を先頭に配置され、次の命令コード
6−2は2番地を先頭に配置され、最後の命令コード6
−nはn番地に配置されている。
【0030】シミュレーション関数呼び出し列53は、
変換手段50がターゲットプログラム6を処理して生成
したもので、図1のシミュレーションコード3に相当す
る。このシミュレーション関数呼び出し列53は、ホス
トCPU52のアセンブラ言語レベルまたはマシン語レ
ベルで表現されたシミュレーション関数呼び出し53−
1〜53−nで構成されている。ここで、先頭のシミュ
レーション関数呼び出し53−1はバイナリデータ60
の0番地から始まる命令コード6−1を変換したもの、
次のシミュレーション関数呼び出し53−2はバイナリ
データ60の1番地から始まる命令コード(ターゲット
CPUの或る種の命令コード或いは未定義命令コード)
を変換したもの、次のシミュレーション関数呼び出し5
3−3はバイナリデータ60の2番地から始まる命令コ
ード6−2を変換したもの、最後のシミュレーション関
数呼び出し53−nは命令コード6−nを変換したもの
であり、ホストCPU52のアドレス空間上ではメモリ
51のアドレスA,B,C,…,Nから始まる位置にそ
れぞれ格納されている。
【0031】アドレス変換テーブル56は、変換手段5
0がターゲットプログラム6を処理して生成したもの
で、例えば図3に示すように、ターゲットプログラム6
のバイナリデータ60の各番地0,1,2,…,nをイ
ンデックスとして、各番地から始まる命令コードに対応
するシミュレーション関数呼び出し53−1,53−
2,53−3,…,53−nのメモリ51上のアドレス
A,B,…,Nを保持している。
【0032】シミュレーション関数群54は、シミュレ
ーション関数54−0〜54−mの集合である。このう
ち、シミュレーション関数54−1〜54−mはターゲ
ットCPUのマシン語レベルの各命令コードに1対1に
対応しており、対応するターゲットCPUの命令コード
をシミュレートする。シミュレーション関数54−0は
未定義命令コードと解釈された命令コードをシミュレー
トするための関数である。これらのシミュレーション関
数54−0〜54−mは例えばC言語で記述される。
【0033】レジスタシミュレータ55は、ターゲット
CPU上のシミュレーション対象とするレジスタに1対
1に対応付けたレジスタの集まりであり、ホストCPU
52はこのレジスタシミュレータ55を参照,更新する
ことによりターゲットCPU上のレジスタをシミュレー
ションする。
【0034】図2の実施例において、CPUシミュレー
タ5は、ターゲットプログラム6にかかるターゲットC
PUの動作のシミュレーションを実行する場合、シミュ
レーションの実行に先立って変換手段50を起動する。
【0035】変換手段50は、例えば図4に示すよう
に、命令コード読み込み部501と命令解釈部502と
命令変換部503と出力部504,505とで構成され
ている。
【0036】命令コード読み込み部501は図示しない
メモリやファイル等に格納された図2のターゲットプロ
グラム6中のバイナリデータ60を順次読み込み、命令
コードの配置が可能な全ての番地を基点として命令コー
ドに解釈し、解釈されたターゲットCPUの命令コード
を命令解釈部502に伝達する。
【0037】命令解釈部502は、命令コード読み込み
部501から伝達された命令コードがどのような命令な
のかを解釈し、命令の種類,命令に使用されるレジス
タ,メモリアドレス,定数等を判別し、判別結果を命令
変換部503に伝達する。
【0038】命令変換部503は、命令解釈部502か
ら伝達された判別結果に基づき、当該ターゲットCPU
のマシン語レベルの命令コードをシミュレートするため
のシミュレーション関数を呼び出すシミュレーション関
数呼び出しを、ホストCPU52のアセンブラ言語また
はマシン語レベルで生成する。
【0039】例えば、ターゲットCPUがインテル社の
16ビットプロセッサ8086であり、ホストCPU5
2がMIPS社の32ビットプロセッサR3000であ
る場合、命令変換部503は、8086の命令コード
を、R3000で実行可能なシミュレーション関数を呼
び出すシミュレーション関数呼び出しを生成することに
なる。
【0040】以下に、8086の命令,R3000のシ
ミュレーション関数呼び出し,シミュレーション関数の
例を示す。なお、8086の命令とR3000のシミュ
レーション関数呼び出しとはアセンブラ表記で、R30
00のシミュレーション関数はC言語で示す。
【0041】 ○8086の命令 MOV AX,0x1000 /*3バイト命令*/ ○シミュレーション関数呼び出し li a0,AX /*AXはレジスタを表す定数*/ li a1,0x1000 jal F_MOV /*シミュレーション関数の呼び出し*/ nop /*分岐遅延スロットを埋めるためのnop */ j v0 nop /*分岐遅延スロットを埋めるためのnop */ ○シミュレーション関数 F_MOV(reg,imm) int reg; short imm; { PC+=3; Reg[reg]=imm; /*Reg[]はレジスタ情 報を保持する変数*/ return(AddrTbl[(Reg[CS]<<4)+ PC]); /*AddrTbl[]はア ドレス変換テーブル56*/ }
【0042】上記のシミュレーション関数における return(AddrTbl[(Reg[CS]<<4)+PC]); は、8086で実行すべき命令のアドレス(Reg[C
S]<<4)+PCをインデックスとしてアドレス変換
テーブル56を参照してそのインデックスに対応するホ
ストCPU52上のアドレスを得てリターン値として返
却するもので、シミュレーション関数呼び出し側では、 j v0 を実行することにより、次にシミュレートすべき命令に
対応するシミュレーション関数呼び出し列53の部分へ
分岐する。
【0043】また命令変換部503は、変換元の命令コ
ードが、レジスタ間接分岐,レジスタ間接サブルーチン
呼び出し等実行時まで分岐先アドレスのわからない命令
コードの場合、シミュレーションの結果得られたターゲ
ットCPU上での分岐先アドレスとアドレス変換テーブ
ル56の内容とから分岐すべきシミュレーション関数呼
び出し列53中のアドレスを求め且つそのアドレスに制
御を移すような命令列を含むシミュレーション関数を呼
び出すシミュレーション関数呼び出しに変換する。以下
に、8086のレジスタ間接分岐命令の例と、その変換
後のR3000のシミュレーション関数呼び出しの例
と、これによって呼び出されるR3000のシミュレー
ション関数の例とを示す。
【0044】 ○8086の命令 JMP [BX] /*2バイト命令*/ ○シミュレーション関数呼び出し li a0,BX /*BXはレジスタを表す定数*/ jal F_JMP_R /*シミュレーション関数の呼び出し*/ nop /*分岐遅延スロットを埋めるためのnop */ j v0 /*v0はF_JMP_R()のリターン値 */ nop /*分岐遅延スロットを埋めるためのnop */ ○シミュレーション関数 F_JMP_R(reg) int reg; { PC=Reg[reg]; return(AddrTbl[(Reg[CS]<<4)+ PC]); /*AddrTbl[]はアドレス変換テーブル56*/ }
【0045】即ち、JMP [BX]の場合、レジス
タBXを表す定数を引数としてシミュレーション関数F
_JMP_Rを呼び出すシミュレーション関数呼び出し
を生成する。シミュレーション関数F_JMP_Rで
は、 PC=Reg[reg]; により、8086上での分岐先のアドレスを保持してい
るレジスタの値(Reg[reg])をレジスタシミュ
レータ55から参照してレジスタシミュレータ55中の
PCの値を更新し、次いで、return(AddrT
bl[(Reg[CS]<<4)+PC]);を実行す
る。これは、8086で実行すべき命令のアドレスは、
セグメントレジスタ(ここではCS)とPCで指定され
るので、(Reg[CS]<<4)+PCにより808
6上でのアドレスを算出し、これをインデックスとして
アドレス変換テーブル56を参照し、得たアドレスをリ
ターン値として返却する。シミュレーション関数呼び出
し側では、 j v0 を実行することにより、次にシミュレートすべき命令に
対応するシミュレーション関数呼び出し列53の部分へ
分岐する。
【0046】なお、命令変換部503は、実行前に分岐
先が確定している分岐命令コードの変換も行うが、本実
施例では、ターゲットCPUの命令コードのターゲット
CPU上でのアドレスに対応するシミュレーション関数
呼び出しのホストCPU上でのアドレスはアドレス変換
テーブル56によって求めることができるので、以下に
例示するような方法でシミュレーションしている。
【0047】 ○8086の命令 JMP 0x2000 /*2バイト命令*/ ○シミュレーション関数呼び出し li a0,0x2000 jal F_JMP /*シミュレーション関数の呼び出し*/ nop /*分岐遅延スロットを埋めるためのnop */ j v0 /*v0はF_JMP()のリターン値*/ nop /*分岐遅延スロットを埋めるためのnop */ ○シミュレーション関数 F_JMP(addr) unsigned short reg; { PC=addr; return(AddrTbl[(Reg[CS]<<4)+ PC]); /*AddrTbl[]はアドレス変換テーブル56*/ }
【0048】さて、命令変換部503は、シミュレーシ
ョン関数呼び出しを生成すると、生成したシミュレーシ
ョン関数呼び出しを出力部504に伝達し、出力部50
4は、これを図2のメモリ51あるいは図示しない外部
記憶装置に順次格納する。
【0049】また、命令変換部503は、ターゲットプ
ログラム6のバイナリデータ60の各番地を基点とする
命令コードの変換を行うごとに出力部505を通じてメ
モリ51あるいは図示しない外部記憶装置にアドレス変
換テーブル56の1エントリを出力する。これにより、
ターゲットプログラム6のバイナリデータ60の全番地
を基点とする変換が完了した時点で、ターゲットプログ
ラム6のバイナリデータ60の各番地0,1,2,…,
nをインデックスとして、各番地から始まる命令コード
に対応するシミュレーション関数呼び出し53−1,5
3−2,53−3,…,53−nのメモリ51上のアド
レスA,B,C,…,Nを記録した図3の如きアドレス
変換テーブル56がメモリ51上あるいは図示しない外
部記憶装置に生成される。なお、外部記憶装置にアドレ
ス変換テーブル56が生成された場合、シミュレーショ
ンを開始する以前に外部記憶装置からメモリ51上へア
ドレス変換テーブル56を読み込む必要がある。
【0050】次に図2の実施例のシミュレーション実行
時の動作を説明する。
【0051】CPUシミュレータ5は、図示しない入力
手段からシミュレーションの実行開始の指示を受ける
と、シミュレーション関数呼び出し列53がマシン語レ
ベルで生成されているときは、ホストCPU52にメモ
リ51上のシミュレーション関数呼び出し列53を実行
させる。
【0052】ホストCPU52は、先ずターゲットプロ
グラム6の実行開始番地に対応するシミュレーション関
数呼び出しを実行する。従って、シミュレーション関数
呼び出し53−1をターゲットプログラム6の実行開始
番地に対応するシミュレーション関数呼び出しとする
と、ホストCPU52は、先ずシミュレーション関数呼
び出し53−1を実行する。これにより、例えばシミュ
レーション関数54−1が呼び出されて実行され、命令
コード6−1がシミュレートされる。なお、この関数で
は、概ね以下のような処理が行われる。 (a)レジスタシミュレータ55中のPCの値を更新す
る。 (b)引数で指定されたレジスタ,メモリの内容を参
照,更新し必要な処理を行う。 (c)必要ならば、PSWを変更する。 (d)分岐命令の場合、ホストCPU上での分岐先アド
レスを求める。 (e)リターン値を返却する。
【0053】シミュレーション関数54−1の実行が終
了すると、本実施例では制御が呼び出し元のシミュレー
ション関数呼び出し53−1に一旦戻り、リターン値の
示すアドレスに分岐する。これにより、次にシミュレー
トすべき命令に対応するシミュレーション関数呼び出し
列53中のシミュレーション関数呼び出し53−3に制
御が移される。
【0054】以下、上述の動作の繰り返しによりシミュ
レーション関数群54中の該当するシミュレーション関
数54−1〜54−mが呼び出されることにより、ター
ゲットプログラム6にかかるターゲットCPUの動作が
ホストCPU52上でシミュレートされる。
【0055】なお、シミュレーションの実行において、
ターゲットプログラム6のバイナリデータ60における
本来の命令コードの先頭アドレスでないアドレス、例え
ば1番地に制御が移行した場合でも、アドレス変換テー
ブル56を参照すると、そこにはシミュレーション関数
呼び出し53−2が設定されているので、このシミュレ
ーション関数呼び出し53−2が実行される。従って、
1番地を基点として解釈された命令コードがターゲット
CPUで定義された或る種の命令コードであった場合
は、シミュレーション関数呼び出し53−2はその命令
コードをシミュレートするシミュレーション関数を呼び
出すように生成されているため、その命令コードの動作
がシミュレーションされることになる。また、未定義命
令コードであった場合は、シミュレーション関数呼び出
し53−2は未定義命令実行時のシミュレーション処理
を行うシミュレーション関数54−0を呼び出すように
生成されているため、未定義命令実行時の動作がシミュ
レートされることになる。このように、本実施例によれ
ば、ターゲットプログラム6が不正なアドレスに制御を
移したときのターゲットCPUの動作もシミュレーショ
ンすることができる。
【0056】以上、本発明の実施例について説明した
が、本発明は以上の実施例にのみ限定されずその他各種
の付加変更が可能である。例えば、上記の実施例では変
換手段をホストCPUとは別に備えるようにしたが、ホ
ストCPUの機能で変換手段を実現するようにしても良
い。更に、以下のようにすることも可能である。
【0057】ターゲットCPUの命令コードをシミュレ
ーション関数呼び出しに変換するのではなく、平成4年
12月29日提出の特許願(整理番号N0002S,発
明の名称;CPUシミュレーション方法およびCPUシ
ミュレータ)と同様に、各命令コードをシミュレートす
るホストCPUのアセンブラ言語レベルまたはマシン語
レベルの命令コードの組み合わせで表現されたコードに
変換する。
【0058】ターゲットCPUの命令コードを、平成5
年2月26日提出の特許願(整理番号N0004S,発
明の名称;CPUシミュレーション方法およびCPUシ
ミュレータ)と同様に、命令コードのバイト数の定数倍
のバイト数で構成されるシミュレーション関数呼び出し
に変換する。なお、このような構成では、或る命令コー
ドの次にターゲットCPUが実行する命令コードのシミ
ュレーションを行うホストCPUの命令列のアドレスは
計算によって求めることができるので、アドレス変換テ
ーブルは不要となる。
【0059】
【発明の効果】以上説明したように本発明のCPUシミ
ュレータによれば、以下のような効果を得ることができ
る。
【0060】ターゲットCPUが命令コードとして参照
するアドレス領域の各アドレスごとに、そのアドレスを
命令コードの先頭アドレスとみなして命令コードの解釈
を行ってシミュレーション命令列に変換するため、アド
レス領域中にターゲットCPUが命令コードとして使用
しないバイナリデータが混在している場合であっても、
そのようなバイナリデータとは無関係に、シミュレーシ
ョンの対象となる命令コードを確実にシミュレーション
命令列に変換することができる。そして、シミュレーシ
ョン命令列として、解釈されたターゲットCPUの命令
コードをシミュレーションするホストCPUの命令列
と、解釈された命令コードの次にターゲットCPUが実
行する命令コードのシミュレーションを行うホストCP
Uの命令列に制御を移す命令列とから構成されたシミュ
レーション命令列を生成するようにしたので、通常の場
合、ターゲットCPUが命令コードとして使用しないバ
イナリデータを基点として解釈された命令コードに対応
して生成されたシミュレーション命令列に制御が移るこ
とはなく、ターゲットCPUの動作をホストCPU上で
支障なくシミュレーションすることができる。
【0061】シミュレーション対象となるターゲットプ
ログラムが、命令として使用しないバイナリデータのア
ドレスや数バイト命令コードの途中のバイトのアドレス
といった不正なアドレスに制御を移した場合、本発明で
は、そのような不正なアドレスに対してもそれを基点と
して命令コードを解釈してシミュレーション命令列を生
成してあるので、ターゲットCPUが不正なアドレスに
制御を移したときの動作もシミュレーションすることが
できるという効果もある。
【図面の簡単な説明】
【図1】本発明の一実施例の概略構成図である
【図2】本発明のCPUシミュレータの一実施例のブロ
ック図である。
【図3】アドレス変換テーブルの内容例を示す図であ
る。
【図4】変換手段の構成例を示すブロック図である。
【図5】ターゲットCPUが命令コードとして参照する
アドレス領域のバイナリデータ中にターゲットCPUが
命令コードとして使わないバイナリデータが混在してい
るときに生じる問題点の説明図である。
【符号の説明】
1…ターゲットCPUが命令コードとして参照するアド
レス領域中のバイナリデータ 1−1〜1−3…命令コード 2…変換手段 3…ホストCPUが実行するシミュレーションコード 3−1〜3−4…シミュレーション命令列 4…アドレス変換テーブル 4−1〜4−4…エントリ
───────────────────────────────────────────────────── フロントページの続き (56)参考文献 特表 平1−503181(JP,A) (58)調査した分野(Int.Cl.6,DB名) G06F 9/455 G06F 11/26

Claims (2)

    (57)【特許請求の範囲】
  1. 【請求項1】 シミュレーション対象となるターゲット
    CPUの動作をホストCPU上でシミュレーションする
    CPUシミュレータであって、ホストCPU上でターゲ
    ットCPUの動作をシミュレーションする前の段階で、
    ターゲットCPUの機械語レベルの命令コードをまとめ
    て解釈して、ターゲットCPUの動作をシミュレーショ
    ンするためにホストCPU上で実行する命令の列を生成
    するようにしたCPUシミュレータにおいて、 ターゲットCPUが命令コードとして参照するアドレス
    領域の各アドレスごとに、そのアドレスを命令コードの
    先頭アドレスとみなして命令コードの解釈を行い、各ア
    ドレスごとに解釈されたターゲットCPUの命令コード
    を、それをシミュレーションするホストCPUの命令列
    と、解釈された命令コードの次にターゲットCPUが実
    行する命令コードのシミュレーションを行うホストCP
    Uの命令列に制御を移す命令列とから構成されたシミュ
    レーション命令列に変換する変換手段を備えたことを特
    徴とするCPUシミュレータ。
  2. 【請求項2】 前記変換手段は、前記アドレス領域の各
    アドレスを指標としてシミュレーション命令列の各アド
    レスを値に持つアドレス変換テーブルを生成すると共
    に、シミュレーション命令列中の、解釈された命令コー
    ドの次にターゲットCPUが実行する命令コードのシミ
    ュレーションを行うホストCPUの命令列に制御を移す
    命令列として、解釈された命令コードの次にターゲット
    CPUが実行する命令コードのアドレスに対応して前記
    アドレス変換テーブルに格納されたアドレス先のホスト
    CPUの命令列に分岐する命令列を生成する構成を有す
    る請求項1記載のCPUシミュレータ。
JP5136597A 1993-05-15 1993-05-15 Cpuシミュレータ Expired - Fee Related JP2788839B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP5136597A JP2788839B2 (ja) 1993-05-15 1993-05-15 Cpuシミュレータ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5136597A JP2788839B2 (ja) 1993-05-15 1993-05-15 Cpuシミュレータ

Publications (2)

Publication Number Publication Date
JPH06324883A JPH06324883A (ja) 1994-11-25
JP2788839B2 true JP2788839B2 (ja) 1998-08-20

Family

ID=15179023

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5136597A Expired - Fee Related JP2788839B2 (ja) 1993-05-15 1993-05-15 Cpuシミュレータ

Country Status (1)

Country Link
JP (1) JP2788839B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4563669B2 (ja) * 2003-11-25 2010-10-13 三菱電機株式会社 命令模擬装置
JP5045934B2 (ja) * 2008-02-15 2012-10-10 エヌイーシーコンピュータテクノ株式会社 情報処理装置、情報処理装置におけるエミュレーション方法及びエミュレーションプログラム
CN100555225C (zh) * 2008-03-17 2009-10-28 中国科学院计算技术研究所 一种支持x86虚拟机的risc处理器装置及方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1988007718A1 (en) * 1987-03-24 1988-10-06 Insignia Solutions Limited Arrangement for software emulation

Also Published As

Publication number Publication date
JPH06324883A (ja) 1994-11-25

Similar Documents

Publication Publication Date Title
US5394544A (en) Software system debugger with distinct interrupt vector maps for debugging and application programs
EP0327195B1 (en) Processor simulation
JP4050764B2 (ja) コンパイルシステム
EP0327196B1 (en) Processor simulation
JP4573189B2 (ja) プログラムコード変換方法
US7647583B2 (en) Method and apparatus for emulating a hardware/software system using a computer
KR100537258B1 (ko) 디버그지원장치,프로그램번역장치,컴퓨터판독가능한디버그지원프로그램을기록한기록매체,프로그램번역프로그램을기록한기록매체
JP2788839B2 (ja) Cpuシミュレータ
JP2817786B2 (ja) シミュレーション装置及びシミュレーション方法
EP0731410B1 (en) Method and processing for computer code processing in a code translator
EP0327198B1 (en) Processor simulation
Larus Assemblers, linkers, and the SPIM simulator
JP2591418B2 (ja) Cpuシミュレータ
JPH096646A (ja) プログラムシミュレーション装置
JP3324542B2 (ja) 仮想マシン
JPH06202903A (ja) Cpuシミュレーション方法およびcpuシミュレータ
KARAPATEAS RETARGETING AN ASSEMBLY OPTIMIZER FOR THE MIPS/SCALE ASSEMBLY
Feriozi AC programming model for OS/2 device drivers
JP5100604B2 (ja) システムシミュレーション装置
JP2000242529A (ja) プログラム開発支援装置および開発支援システムおよび記録媒体
Gaurav Implementation of Breakpoints in GDB for Sim-nML based Architectures
Thompson Microprogrammed Simulation System for General Purpose Register and Fixed Purpose Register Minicomputers
JPH02110636A (ja) タグ・アーキテクチャマシンのデバッグ装置とそのコンパイラ
JPH09171467A (ja) エミュレーション装置及びその方法
JPH1083311A (ja) シミュレータ

Legal Events

Date Code Title Description
S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees