JPH06250874A - Cpuシミュレーション方法およびcpuシミュレータ - Google Patents

Cpuシミュレーション方法およびcpuシミュレータ

Info

Publication number
JPH06250874A
JPH06250874A JP5063446A JP6344693A JPH06250874A JP H06250874 A JPH06250874 A JP H06250874A JP 5063446 A JP5063446 A JP 5063446A JP 6344693 A JP6344693 A JP 6344693A JP H06250874 A JPH06250874 A JP H06250874A
Authority
JP
Japan
Prior art keywords
cpu
simulation function
address
simulation
target
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.)
Granted
Application number
JP5063446A
Other languages
English (en)
Other versions
JP2591418B2 (ja
Inventor
Naoki Sato
直樹 佐藤
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP5063446A priority Critical patent/JP2591418B2/ja
Publication of JPH06250874A publication Critical patent/JPH06250874A/ja
Application granted granted Critical
Publication of JP2591418B2 publication Critical patent/JP2591418B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Landscapes

  • Test And Diagnosis Of Digital Computers (AREA)

Abstract

(57)【要約】 【構成】 ターゲットCPUのマシン語レベルの各命令
コードをシミュレートする、ホストCPU12のアセンブ
ラ言語レベル又はマシン語レベルの命令コードで構成さ
れたシミュレーション関数14-1〜14-mが用意されてい
る。変換手段10は、ターゲットプログラム2を、その命
令コード2-1 〜2-n をシミュレートする為のシミュレー
ション関数14-1〜14-mを呼び出すシミュレーション関数
呼び出し13-1〜13-nで構成されたシミュレーション関数
呼び出し列13に変換する。ホストCPU12はシミュレー
ション関数呼び出し列13を実行することによりターゲッ
トCPUの動作のシミュレーションを行う。 【効果】 ターゲットCPUのマシン語レベルの命令コ
ードの解釈を事前にまとめて行うのでシミュレーション
実行時の処理速度が高速化され、ホストCPUの命令コ
ードに直接変換せずにシミュレーション関数呼び出しに
変換するので、変換後のコード量が少なくなる。

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シミュレータ)において提案
した。
【0008】この既提案CPUシミュレータは、ターゲ
ットCPUの動作をホストCPU上でシミュレートする
CPUシミュレータにおいて、ターゲットプログラムの
マシン語レベルの命令コードを事前にまとめて解釈し、
各命令コードをシミュレートするホストCPUのアセン
ブラ言語レベルまたはマシン語レベルの命令コードの組
み合わせで表現されたシミュレーションプログラムを生
成し、この生成したシミュレーションプログラムをホス
トCPUで実行するものであり、シミュレーション実行
時におけるターゲットCPUの命令コードの解釈が不要
になる為、その分、高速なシミュレーションが可能にな
る。
【0009】
【発明が解決しようとする課題】ところで、ターゲット
CPUの1つの命令コードをシミュレートするためのホ
ストCPUの命令コードの数は、ホストCPUにターゲ
ットCPUと同じ動作をする命令がある場合は基本的に
は1個で済むが、同じ動作をする命令がない場合は複数
個必要になる。このため、ターゲットプログラムをホス
トCPUの命令コード自体の集合であるシミュレーショ
ンプログラムに変換すると、一般に変換後のコード量は
多くなる。
【0010】変換後のコード量が多くなると、種々の問
題を招来する。例えば、ホストCPUの主記憶容量が小
さいとシミュレーションプログラムの実行が行えない場
合がある。またページングによる仮想記憶管理機構を使
用したホストCPUではページアウト回数の増加を招来
する。更に、キャッシュ機構を備えたホストCPUでは
キャッシュヒット率が低下する。これらは何れもシミュ
レーションの実行時間を長大化する要因となる。
【0011】そこで本発明は、既提案CPUシミュレー
タを更に改良し、変換後のコード量を極力少なくし得る
ようにすることを目的としている。
【0012】
【課題を解決するための手段】本発明のCPUシミュレ
ータは上記の目的を達成するために、シミュレーション
対象となるターゲットCPUの動作をホストCPU上で
シミュレートするCPUシミュレータにおいて、前記タ
ーゲットCPUのマシン語レベルの各命令コードをシミ
ュレートする、前記ホストCPUで実行可能なシミュレ
ーション関数を、前記ターゲットCPUのマシン語レベ
ルの命令コードの種類数分格納するシミュレーション関
数記憶手段と、前記ターゲットCPU用に開発されたタ
ーゲットプログラムのマシン語レベルの命令コードを解
釈して、前記ターゲットプログラムを、前記シミュレー
ション関数を呼び出すシミュレーション関数呼び出しの
集合であるシミュレーション関数呼び出し列に変換する
変換手段とを備え、該変換手段により生成されたシミュ
レーション関数呼び出し列を前記ホストCPUが実行す
ることにより、前記ターゲットプログラムにかかる前記
ターゲットCPUの動作のシミュレーションを行う構成
を有している。
【0013】また、本発明は、レジスタ間接分岐,レジ
スタ間接サブルーチン呼び出し等、実行時まで分岐先ア
ドレスのわからない命令コードもシミュレーションし得
るようにするために、以下の(A)または(B)のよう
な構成を採用している。
【0014】構成(A);前記変換手段は、前記ターゲ
ットプログラムのマシン語レベルの各命令コードを、該
命令コードのバイト数の定数倍のバイト数で構成される
シミュレーション関数呼び出しに変換する構成を備え、
実行時まで分岐先アドレスのわからない前記ターゲット
プログラムのマシン語レベルの命令コードに対応して、
レジスタのシミュレーションの結果得られたターゲット
CPU上での分岐先アドレスと前記定数倍の倍率とから
分岐すべきシミュレーション関数呼び出し列中のアドレ
スを計算によって求めてリターン値として返却するシミ
ュレーション関数を呼び出すと共に、該呼び出したシミ
ュレーション関数の終了時に前記リターン値の示すアド
レスに分岐するシミュレーション関数呼び出しを生成す
る構成。
【0015】構成(B);前記変換手段は、前記ターゲ
ットプログラムのマシン語レベルの各命令コードの前記
ターゲットCPU上のアドレスと、該命令コード変換後
の前記シミュレーション関数呼び出しの前記ホストCP
U上のアドレスとの対応を示すアドレス変換テーブルを
生成する構成を備え、前記ターゲットプログラムのマシ
ン語レベルの命令コードに対応して、レジスタのシミュ
レーションの結果得られたターゲットCPU上での次に
実行すべきアドレスと前記アドレス変換テーブルの内容
とから次に実行すべきシミュレーション関数呼び出し列
中のアドレスを求めてリターン値として返却するシミュ
レーション関数を呼び出すと共に、該呼び出したシミュ
レーション関数の終了時に前記リターン値の示すアドレ
スに分岐するシミュレーション関数呼び出しを生成する
構成。
【0016】更に、本発明は、デバッグ等を効率良く行
えるようにするために、上記(B)の構成のCPUシミ
ュレータにおいて、前記アドレス変換テーブル中の、前
記変換手段によって設定されたターゲットCPU上のア
ドレスに対応して、ブレークポイント処理関数といった
別の関数のアドレスを設定する構成や、前記変換手段に
よって設定されたターゲットCPU上のアドレス以外の
命令の存在しないアドレスに不正アドレス実行時処理関
数といった別の関数のアドレスを設定した構成を有して
いる。
【0017】
【作用】本発明のCPUシミュレータにおいては、変換
手段が、シミュレーションの実行に先立ち、ターゲット
プログラムのマシン語レベルの命令コードをまとめて解
釈して、ターゲットプログラムを、その各命令コードを
シミュレートするホストCPUで実行可能なシミュレー
ション関数を呼び出すシミュレーション関数呼び出しの
集合であるシミュレーション関数呼び出し列に変換し、
ホストCPUがこの生成されたシミュレーション関数呼
び出し列を実行することにより、つまりシミュレーショ
ン関数記憶手段に保持された該当するシミュレーション
関数を実行することにより、ターゲットプログラムにか
かるターゲットCPUの動作のシミュレーションを行
う。
【0018】
【実施例】次に本発明の実施例について図面を参照して
詳細に説明する。
【0019】図1を参照すると、本発明を適用したCP
Uシミュレータ1の一実施例は、ターゲットプログラム
2をシミュレーション関数呼び出し列13に変換する変
換手段10と、シミュレーション関数呼び出し列13お
よびシミュレーション関数群14を格納するメモリ11
と、シミュレーション関数呼び出し列13およびシミュ
レーション関数群14を実行するホストCPU12とを
含んでいる。
【0020】ターゲットプログラム2は、ターゲットC
PU(図示せず。以下同じ)用に開発されたプログラム
であり、ターゲットCPUのマシン語レベルの命令コー
ド2−1〜2−nで構成されている。
【0021】シミュレーション関数群14は、シミュレ
ーション関数14−1〜14−mの集合である。各シミ
ュレーション関数14−1〜14−mはターゲットCP
Uのマシン語レベルの各命令コードに1対1に対応して
おり、対応するターゲットCPUの命令コードをシミュ
レートする。各シミュレーション関数14−1〜14−
mは任意の言語で記述できるものであり、本実施例では
C言語を使用している。
【0022】CPUシミュレータ1は、ターゲットプロ
グラム2にかかるターゲットCPUの動作のシミュレー
ションを実行する場合、シミュレーションの実行に先立
って変換手段10を起動する。
【0023】変換手段10は、ターゲットプログラム2
の各命令コード2−1〜2−nを順次読み込んで解釈
し、各命令コード2−1〜2−nを、そのシミュレート
を行うシミュレーション関数14−1〜14−mを呼び
出すシミュレーション関数呼び出し13−1〜13−n
に変換する。シミュレーション関数呼び出し13−1〜
13−nの記述言語としては、アセンブラ言語またはマ
シン語が使用される。
【0024】例えば、命令コード2−1をシミュレート
するシミュレーション関数が14−1の場合、変換手段
10は、命令コード2−1をシミュレーション関数14
−1を呼び出すシミュレーション関数呼び出し13−1
に変換し、また、命令コード2−2をシミュレートする
シミュレーション関数が14−mの場合、命令コード2
−2をシミュレーション関数14−mを呼び出すシミュ
レーション関数呼び出し13−2に変換する。更に、命
令コード2−nが命令コード2−1と同じ命令コードで
あった場合は、命令コード2−nをシミュレーション関
数14−1を呼び出すシミュレーション関数呼び出し1
3−nに変換する。
【0025】そして、変換手段10は変換後のシミュレ
ーション関数呼び出し13−1〜13−nをシミュレー
ション関数呼び出し列13としてメモリ11あるいは図
示しない外部記憶装置に格納する。
【0026】CPUシミュレータ1は、変換手段10に
よってメモリ11上にシミュレーション関数呼び出し列
13が生成されると、シミュレーション関数呼び出し列
13がマシン語レベルで生成されているときは、ホスト
CPU12にメモリ11上のシミュレーション関数呼び
出し列13を実行させる。
【0027】ホストCPU12は、先ずターゲットプロ
グラムの実行開始番地に対応するシミュレーション関数
呼び出しを実行する。従って、シミュレーション関数呼
び出し13−1をターゲットプログラムの実行開始番地
に対応するシミュレーション関数呼び出しとすると、ホ
ストCPU12は、先ずシミュレーション関数呼び出し
13−1を実行する。これにより、上述した例ではシミ
ュレーション関数14−1が呼び出されて実行され、命
令コード2−1がシミュレートされる。
【0028】シミュレーション関数14−1の実行が終
了すると、ホストCPU12は次のシミュレーション関
数呼び出し14−2を実行する。これにより、上述した
例ではシミュレーション関数14−mが呼び出されて実
行され、命令コード2がシミュレートされる。
【0029】以下、上述の動作の繰り返しによりシミュ
レーション関数群14中の該当するシミュレーション関
数14−1〜14−mが呼び出されることにより、ター
ゲットプログラム2にかかるターゲットCPUの動作が
ホストCPU12上でシミュレートされる。
【0030】なお、シミュレーション関数呼び出し列1
3がアセンブラ言語レベルで生成されているときは、C
PUシミュレータ1はこれをアセンブルしてマシン語レ
ベルのシミュレーション関数呼び出し列を生成し、これ
をホストCPU12上で実行することによりシミュレー
ションを実行する。また、変換手段10によって出力さ
れたシミュレーション関数呼び出し列13が外部記憶装
置に格納されている場合、CPUシミュレータ1はその
外部記憶装置からシミュレーション関数呼び出し列をメ
モリ11上に読み込んだ後に実行を開始する。
【0031】図2は変換手段10の構成例を示す機能ブ
ロック図であり、命令コード読み込み部101と命令解
釈部102と命令変換部103と出力部104とで構成
されている。
【0032】命令コード読み込み部101は、図示しな
いメモリやファイル等に格納された図1のターゲットプ
ログラム2をその先頭から順次1命令コードずつ読み込
んで命令解釈部102に伝達する。
【0033】命令解釈部102は、命令コード読み込み
部101から伝達された命令コード即ちターゲットCP
U用のマシン語レベルの命令コードがどのような命令な
のかを解釈し、命令の種類,命令に使用されるレジス
タ,メモリアドレス,定数等を判別し、その判別結果を
命令変換部103に伝達する。
【0034】命令変換部103は、命令解釈部102か
ら伝達された判別結果に基づき、当該ターゲットCPU
のマシン語レベルの命令コードをシミュレートするため
のシミュレーション関数を呼び出すシミュレーション関
数呼び出しを、ホストCPU12のアセンブラ言語レベ
ルまたはマシン語レベルで生成する。
【0035】例えば、ターゲットCPUがインテル社の
16ビットプロセッサ8086であり、ホストCPU1
2がMIPS社の32ビットプロセッサR3000であ
る場合、命令変換部103は、8086の命令コード
を、R3000で実行可能なシミュレーション関数を呼
び出すシミュレーション関数呼び出しを生成することに
なる。
【0036】以下に、8086の命令,R3000で実
行されるシミュレーション関数呼び出し,シミュレーシ
ョン関数の例を示す。なお、8086の命令とR300
0のシミュレーション関数呼び出しとはアセンブラ表記
で、R3000のシミュレーション関数はC言語とアセ
ンブラ言語とで示す。
【0037】 ○8086の命令 MOV AX,0x1000 /*3バイト命令*/ ○シミュレーション関数呼び出し li a0,AX /*引数の準備(AXは定数値)*/ li a1,0x1000 /*引数の準備*/ jal F_MOV /*関数の呼び出し*/ ○シミュレーション関数 C言語の場合 F_MOV(reg,imm) int reg; short imm; { Reg[reg]=imm; /*Reg[]はレジスタ情 報を保持する変数*/ } アセンブラ言語の場合 .globl F_MOV .ent F_MOV F_MOV: sll a0,2 /*a0レジスタにはレジスタ 番号が入っている*/ li t0,Reg /*Regはレジスタ情報を保 持する配列*/ add t0,a0 sw a1,(t0) /*a1には転送する値が格納 されている*/ j ra .end F_MOV
【0038】 ○8086の命令 ADD AX,BX ○シミュレーション関数呼び出し li a0,AX /*引数の準備(AXは定数値)*/ li a1,BX /*引数の準備*/ jal F_ADD /*関数の呼び出し*/ ○シミュレーション関数 C言語の場合 F_ADD(reg1,reg2) int reg1,reg2; { Reg[reg1]+=Reg[reg2]; if(Reg[reg1]==0){ PSW|=PSW_Z; /*PSWはステータスレジ スタ情報を保持する変数 *PSW_ZはZフラグを表 す定数 */ } if(Reg[reg1]&0x8000){ if(Reg[reg1]==0){ PSW|=PSW_S; /*PSW_SはSフラグを 表す定数*/ } ・ ・ ・ } アセンブラ言語の場合 .globl F_ADD .ent F_ADD F_ADD: sll a0,2 sll a1,2 /*a0,a1にはレジスタ番 号*/ li t0,Reg /*Regはレジスタ情報を保 持する配列*/ add t0,a0 li t1,Reg add t1,a1 lw t2,(t0) lw t3,(t1) add t2,t3 sw t2,(t0) li t4,PSW /*PSWの処理*/ lw t5,(t4) beqz t2,L1 ori t5,PSW_Z L1: andi t6,t2,0x8000 bne t6,0,L2 ori t5,PSW_S L2: ・ ・ ・ .end F_ADD
【0039】上述した具体例からわかるように、命令変
換部103は、命令解釈部102の判別結果に基づき、
パラメータ(引数)の準備を行う命令とシミュレーショ
ン関数を実際に呼び出す関数の呼び出しとを含むシミュ
レーション関数呼び出しを生成する。
【0040】さて、命令変換部103は、シミュレーシ
ョン関数呼び出しを生成すると、生成したシミュレーシ
ョン関数呼び出しを出力部104に伝達し、出力部10
4は、これを図1のメモリ11あるいは図示しない外部
記憶装置に順次格納する。
【0041】このとき命令変換部103は、今回のター
ゲットCPUの命令コードのターゲットCPU上でのア
ドレスと今回生成したホストCPU12のシミュレーシ
ョン関数呼び出しのホストCPU12上でのアドレス
(複数の命令コードで構成されるシミュレーション関数
呼び出しの場合は先頭の命令コードのアドレス)との関
係を内部のアドレス対応表103−1に登録する。
【0042】このアドレス対応表103−1は実行前に
分岐先が確定している分岐命令コードの変換時に参照さ
れる。即ち、命令変換部103はターゲットCPUの命
令コードがアドレスXに分岐する分岐命令コードであっ
た場合、アドレスXが変換後のホストCPU12上では
どのアドレスに相当するかをアドレス対応表103−1
を調べることにより取得し、この取得した分岐先アドレ
スを引数としてシミュレーション関数に引き渡すシミュ
レーション関数呼び出しを生成する。なお、シミュレー
ション関数を呼び出さずにホストCPU12の分岐命令
に変換することも可能である。
【0043】但し、今回の分岐命令コードが未だ処理し
ていない後続の命令コードへ分岐する命令であった場
合、アドレス対応表103−1にはその部分のアドレス
対応関係が未だ登録されていない。この場合は、ダミー
の分岐先アドレスを設定したシミュレーション関数呼び
出しを内部の変換結果一時記憶手段103−2に記憶す
ると共にアドレス対応表103−1に今回の分岐命令コ
ードとシミュレーション関数呼び出し間のアドレス関係
を登録し、次いでその分岐先アドレスを確定し得る命令
コードが現れるまで、後続のターゲットCPUの命令コ
ードのシミュレーション関数呼び出しへの変換,その変
換結果の変換結果一時記憶手段103−2への格納およ
びアドレス対応表103−1へのアドレス関係の登録を
行い、分岐先アドレスが確定した時点で、上記ダミーの
分岐先アドレスを正しいアドレスに変更し、その修正後
のシミュレーション関数呼び出しとそれに続いて変換結
果一時記憶手段103−2に蓄えられている後続のシミ
ュレーション関数呼び出しとをまとめて出力部104に
送ってメモリ11あるいは外部記憶装置(図示せず)に
出力する。
【0044】図3は本発明の別の実施例のCPUシミュ
レータの機能ブロック図である。この実施例のCPUシ
ミュレータ3は、ターゲットプログラム4をシミュレー
ション関数呼び出し列33に変換する変換手段30と、
シミュレーション関数呼び出し列33,シミュレーショ
ン関数群34およびレジスタシミュレータ35を格納す
るメモリ31と、シミュレーション関数呼び出し列33
およびシミュレーション関数群34を実行するホストC
PU32とを含んでいる。
【0045】ターゲットプログラム4は、ターゲットC
PU用に開発されたプログラムであり、ターゲットCP
Uのマシン語レベルの命令コード4−1〜4−nで構成
されている。ここで、先頭の命令コード4−1のサイズ
は1バイトであり、ターゲットCPU上ではアドレス0
番地に位置し、次の命令コード4−2のサイズは2バイ
トであり、ターゲットCPU上ではアドレス1番地から
位置し、最後の命令コード4−nは1バイトで、ターゲ
ットCPU上ではn番地に位置している。
【0046】シミュレーション関数呼び出し列33は、
変換手段30がターゲットプログラム4を処理して生成
したもので、ホストCPU32のアセンブラ言語レベル
またはマシン語レベルで表現されたシミュレーション関
数呼び出し33−1〜33−nで構成されている。ここ
で、先頭のシミュレーション関数呼び出し33−1は1
バイトの命令コード4−1を変換したもので、そのサイ
ズはN(Nは正の整数)バイトであり、ホストCPU3
2のアドレス空間上ではアドレスAから始まる位置に置
かれている。次のシミュレーション関数呼び出し33−
2は2バイトの命令コード4−2を変換したもので、そ
のサイズは2Nバイトで、直前のシミュレーション関数
呼び出し33−1に続くメモリ31の領域に格納され、
最後のシミュレーション関数呼び出し33−nは1バイ
トの命令コード4−nを変換したもので、そのサイズは
Nバイトであり、直前のシミュレーション関数呼び出し
(図示せず)に続くメモリ31の領域に格納されてい
る。
【0047】即ち、本実施例においては、変換手段30
は、ターゲットプログラム4のマシン語レベルの各命令
コード4−1〜4−nを、変換元の命令コードのバイト
数の定数倍(N倍)のバイト数で構成されるシミュレー
ション関数呼び出し33−1〜33−nに変換する。
【0048】シミュレーション関数群34は、シミュレ
ーション関数34−1〜34−mの集合であり、例えば
C言語で記述されている。各シミュレーション関数34
−1〜34−mはターゲットCPUのマシン語レベルの
各命令コードに1対1に対応しており、対応するターゲ
ットCPUの命令コードをシミュレートする。
【0049】レジスタシミュレータ35は、ターゲット
CPU上のシミュレーション対象とするレジスタに1対
1に対応付けたレジスタの集まりであり、ホストCPU
32はこのレジスタシミュレータ35を参照,更新する
ことによりターゲットCPU上のレジスタをシミュレー
ションする。
【0050】図3の実施例において、CPUシミュレー
タ3は、ターゲットプログラム4にかかるターゲットC
PUの動作のシミュレーションを実行する場合、シミュ
レーションの実行に先立って変換手段30を起動する。
【0051】変換手段30は、例えば図4に示すよう
に、命令コード読み込み部301と命令解釈部302と
命令変換部303と出力部304とで構成されており、
起動されると、先ず命令コード読み込み部301は図示
しないメモリやファイル等に格納された図3のターゲッ
トプログラム4をその先頭から順次1命令コードずつ読
み込んで命令解釈部302に伝達する。
【0052】命令解釈部302は、命令コード読み込み
部301から伝達された命令コードがどのような命令な
のかを解釈し、命令の種類,命令に使用されるレジス
タ,メモリアドレス,定数等を判別し、判別結果を命令
変換部303に伝達する。
【0053】命令変換部303は、命令解釈部302か
ら伝達された判別結果に基づき、当該ターゲットCPU
のマシン語レベルの命令コードをシミュレートするため
のシミュレーション関数を呼び出すシミュレーション関
数呼び出しを、ホストCPU32のアセンブラ言語また
はマシン語レベルで生成する。
【0054】例えば、ターゲットCPUがインテル社の
16ビットプロセッサ8086であり、ホストCPU3
2がMIPS社の32ビットプロセッサR3000であ
る場合、命令変換部303は、8086の命令コード
を、R3000が実行可能なシミュレーション関数を呼
び出すシミュレーション関数呼び出しを生成することに
なる。
【0055】このとき、命令変換部303は、変換後の
シミュレーション関数呼び出しが変換元の命令コードの
N倍のバイト数になるように調整する。即ち、前述した
ように、1バイトの命令コード4−1,4−nはNバイ
トのシミュレーション関数呼び出し33−1,33−n
に、2バイトの命令コード4−2は2Nバイトのシミュ
レーション関数呼び出し33−2にというように、iバ
イトの命令をiNバイトのシミュレーション関数呼び出
しに変換する。これは、予め最適なNの値を決めてお
き、生成したシミュレーション関数呼び出しのバイト数
が元の命令コードのバイト数のN倍に一致していれば、
その生成したシミュレーション関数呼び出しそのものを
結果とし、N倍に満たなければ、満たない部分にNOP
命令等の如き実質的に何の処理も行わない命令を付け足
すことで実現する。
【0056】以下に、上記Nが16であるときの、80
86の命令,R3000で実行可能なシミュレーション
関数呼び出し,シミュレーション関数の例を示す。な
お、8086の命令とR3000のシミュレーション関
数呼び出しとはアセンブラ表記で、R3000のシミュ
レーション関数はC言語で示す。
【0057】 ○8086の命令 MOV AX,0x1000 /*3バイト命令*/ ○シミュレーション関数呼び出し li a0,AX /*引数の準備(AXはレジスタを表す定数 )*/ li a1,0x1000 /*引数の準備*/ jal F_MOV /*シミュレーション関数の呼び出し*/ nop /*定数倍にするためのnop命令*/ nop nop nop nop nop nop nop nop ○シミュレーション関数 F_MOV(reg,imm) int reg; short imm; { PC+=3; Reg[reg]=imm; /*Reg[reg]はレジ スタ情報を保持する変数*/ }
【0058】また命令変換部303は、変換元の命令コ
ードが、レジスタ間接分岐,レジスタ間接サブルーチン
呼び出し等実行時まで分岐先アドレスのわからない命令
コードの場合、レジスタシミュレータ35中のターゲッ
トCPU上での分岐先アドレスを保持しているレジスタ
の内容(アドレスXとする)と倍率Nとから、分岐すべ
きシミュレーション関数呼び出し列中のアドレスを、 シミュレーション関数呼び出し列33の先頭アドレス+
(N×X) によって求め且つそのアドレスに制御を移すような命令
列を含むシミュレーション関数を呼び出すシミュレーシ
ョン関数呼び出しに変換する。以下に、8086のレジ
スタ間接分岐命令の例と、その変換後のR3000のシ
ミュレーション関数呼び出しの例と、これによって呼び
出されるR3000のシミュレーション関数の例とを示
す。
【0059】 ○8086の命令 JMP [BX] /*2バイト命令*/ ○シミュレーション関数呼び出し li a0,BX /*BXはレジスタを表す定数*/ jal F_JMP_R /*シミュレーション関数の呼び出し*/ nop /*分岐遅延スロットを埋めるためのnop */ j v0 /*v0はF_JMP_R()のリターン値 */ nop nop nop nop ○シミュレーション関数 F_JMP_R(reg) int reg; { unsigned long addr; PC=Reg[reg]; addr=((Reg[CS]<<4)+PC)*16 +START_SDDRESS; /*16は定数倍Nの値,START_SDDRESSは変 換後のコードの先頭アドレス*/ return(addr) }
【0060】即ち、BXレジスタの保持している値をア
ドレスと認識してそのアドレスへ分岐する8086のレ
ジスタ間接分岐の場合、レジスタBXを表す定数を引数
としてシミュレーション関数F_JMP_Rを呼び出す
シミュレーション関数呼び出しを生成する。シミュレー
ション関数F_JMP_Rでは、 PC=Reg[reg]; により、8086上での分岐先のアドレスを保持してい
るレジスタの値(Reg[reg])をレジスタシミュ
レータ35から参照してレジスタシミュレータ35中の
PCの値を更新し、次いで、 addr=((Reg[CS]<<4)+PC)*16 +START_SDDRESS; を実行する。これは、8086で実行すべき命令のアド
レスは、セグメントレジスタ(ここではCS)とPCで
指定されるので、(Reg[CS]<<4)+PCによ
り8086上でのアドレスを算出し、これに定数16を
乗じたものにシミュレーション関数呼び出し列33の先
頭アドレスを加算することにより、分岐すべきホストC
PU32上のアドレスを求める。そして、 return(addr) により、この求めたアドレスをリターン値として返却す
る。このリターン値はR3000の場合、V0レジスタ
に格納されるので、シミュレーション関数呼び出しで
は、 j v0 を実行することにより、次にシミュレートすべき命令に
対応するシミュレーション関数呼び出し列33の部分へ
分岐する。
【0061】なお、命令変換部303は、実行前に分岐
先が確定している分岐命令コードの変換も行うが、本実
施例では、ターゲットCPUの命令コードのターゲット
CPU上でのアドレスに対応するシミュレーション関数
呼び出しのホストCPU32上でのアドレスは計算によ
って求まるので、図2に示したようなアドレス対応表1
03−1や変換結果一時記憶手段103−2は基本的に
は不要である。
【0062】さて、命令変換部303は、シミュレーシ
ョン関数呼び出しを生成すると、生成したシミュレーシ
ョン関数呼び出しを出力部304に伝達し、出力部30
4は、これを図3のメモリ31あるいは図示しない外部
記憶装置に順次格納する。
【0063】CPUシミュレータ3は、変換手段30に
よってメモリ31上にシミュレーション関数呼び出し列
33が生成されると、シミュレーション関数呼び出し列
33がマシン語レベルで生成されているときは、ホスト
CPU32にメモリ31上のシミュレーション関数呼び
出し列33を実行させる。
【0064】ホストCPU32は、先ずターゲットプロ
グラムの実行開始番地に対応するシミュレーション関数
呼び出しを実行する。従って、シミュレーション関数呼
び出し33−1をターゲットプログラムの実行開始番地
に対応するシミュレーション関数呼び出しとすると、ホ
ストCPU32は、先ずシミュレーション関数呼び出し
33−1を実行する。これにより、上述した例ではシミ
ュレーション関数34−1が呼び出されて実行され、レ
ジスタシミュレータ35中のレジスタの値を参照,更新
しながら命令コード4−1がシミュレートされる。
【0065】ホストCPU32は、シミュレーション関
数34−1の実行が終了すると、次のシミュレーション
関数呼び出し33−2を実行する。これにより、上述し
た例ではシミュレーション関数34−mが呼び出されて
実行され、レジスタシミュレータ35中のレジスタの値
を参照,更新しながら命令コード4−2がシミュレート
される。
【0066】以下、上述の動作の繰り返しによりシミュ
レーション関数群34中の該当するシミュレーション関
数34−1〜34−mが呼び出されることにより、ター
ゲットプログラム4にかかるターゲットCPUの動作が
ホストCPU32上でシミュレートされる。
【0067】なお、シミュレーション関数呼び出し列3
3がアセンブラ言語レベルで生成されているときは、C
PUシミュレータ3はこれをアセンブルしてマシン語レ
ベルのシミュレーション関数呼び出し列を生成し、これ
をホストCPU32上で実行することによりシミュレー
ションを実行する。また、変換手段30によって出力さ
れたシミュレーション関数呼び出し列33が外部記憶装
置に格納されている場合、CPUシミュレータ3はその
外部記憶装置からシミュレーション関数呼び出し列をメ
モリ31上に読み込んだ後に実行を開始する。
【0068】図5は本発明の更に別の実施例のCPUシ
ミュレータの機能ブロック図である。この実施例のCP
Uシミュレータ5は、ターゲットプログラム6をシミュ
レーション関数呼び出し列53に変換すると共にアドレ
ス変換テーブル56を生成する変換手段50と、シミュ
レーション関数呼び出し列53,シミュレーション関数
群54,レジスタシミュレータ55,アドレス変換テー
ブル56およびデバッグ手段57を格納するメモリ51
と、シミュレーション関数呼び出し列53等を実行する
ホストCPU52とを含んでいる。
【0069】ターゲットプログラム6は、ターゲットC
PU用に開発されたプログラムであり、ターゲットCP
Uのマシン語レベルの命令コード6−1〜6−nで構成
されている。ここで、先頭の命令コード6−1は、ター
ゲットCPU上ではアドレス0番地に位置し、次の命令
コード6−2はアドレス1番地に位置し、最後の命令コ
ード6−nはn番地に位置している。
【0070】シミュレーション関数呼び出し列53は、
変換手段50がターゲットプログラム6を処理して生成
したもので、ホストCPU52のアセンブラ言語レベル
またはマシン語レベルで表現されたシミュレーション関
数呼び出し53−1〜53−nで構成されている。ここ
で、先頭のシミュレーション関数呼び出し53−1は命
令コード6−1を変換したもの、次のシミュレーション
関数呼び出し53−2は命令コード6−2を変換したも
の、最後のシミュレーション関数呼び出し53−nは命
令コード6−nを変換したものであり、ホストCPU5
2のアドレス空間上ではメモリ51のアドレスA,B,
…,Nから始まる位置にそれぞれ格納されている。な
お、本実施例では図3の実施例と異なり、図1の実施例
と同様に各シミュレーション関数呼び出し53−1〜5
3−nは元の命令コードのバイト数のN倍といった制限
を受けず、可能な限り少ないコード量になるように生成
されている。
【0071】アドレス変換テーブル56は、変換手段5
0がターゲットプログラム6を処理して生成したもの
で、例えば図6に示すように、ターゲットプログラム6
のマシン語レベルの各命令コード6−1,6−2,…,
6−nのターゲットCPU上のアドレス0,1,…,n
をインデックスとして、変換後のシミュレーション関数
呼び出し53−1,53−2,…,53−nのホストC
PU52のアドレス空間上のアドレスA,B,…,Nを
保持している。なお、後述するように、デバッグ時には
アドレス変換テーブル56にはデバッグ手段57を構成
する種々の関数のアドレスが格納される。
【0072】シミュレーション関数群54は、シミュレ
ーション関数54−1〜54−mの集合である。各シミ
ュレーション関数54−1〜54−mはターゲットCP
Uのマシン語レベルの各命令コードに1対1に対応して
おり、対応するターゲットCPUの命令コードをシミュ
レートする。シミュレーション関数54−1〜54−m
は例えばC言語で記述される。
【0073】レジスタシミュレータ55は、ターゲット
CPU上のシミュレーション対象とするレジスタに1対
1に対応付けたレジスタの集まりであり、ホストCPU
52はこのレジスタシミュレータ55を参照,更新する
ことによりターゲットCPU上のレジスタをシミュレー
ションする。
【0074】デバッグ手段57は、ターゲットプログラ
ム6のデバッグを支援する手段であり、ブレークポイン
ト設定関数57−1とブレークポイント処理関数57−
2と不正アドレス実行時処理関数57−3とを含んでい
る。
【0075】ブレークポイント設定関数57−1は、図
示しないキーボード等の入力手段からの指示によりホス
トCPU52で実行される関数であり、アドレス変換テ
ーブル56中の任意のインデックスに対応するアドレス
をブレークポイント処理関数57−2のアドレス Brk_
point に変更する処理を行う。
【0076】ブレークポイント処理関数57−2は、ホ
ストCPU52で実行されることにより、ホストCPU
52を入力待ちにする関数である。利用者はその後に種
々のコマンドを入力することにより、メモリ51やレジ
スタの参照が可能になる。また処理の継続を指定する
と、ブレークポイント処理関数57−2から復帰し、処
理が継続する。
【0077】不正アドレス実行時処理関数57−3は、
ホストCPU52から呼び出されて実行されることによ
り、図示しないCRT等の出力手段から不正なアドレス
が実行された旨およびそのアドレスを出力する等の処理
を行う。この不正アドレス実行時処理関数57−3のア
ドレスはAddr_err である。
【0078】図5の実施例において、CPUシミュレー
タ5は、ターゲットプログラム6にかかるターゲットC
PUの動作のシミュレーションを実行する場合、シミュ
レーションの実行に先立って変換手段50を起動する。
【0079】変換手段50は、例えば図7に示すよう
に、命令コード読み込み部501と命令解釈部502と
命令変換部503と出力部504,505とで構成され
ており、起動されると、先ず命令コード読み込み部50
1は図示しないメモリやファイル等に格納された図5の
ターゲットプログラム6をその先頭から順次1命令コー
ドずつ読み込んで命令解釈部502に伝達する。
【0080】命令解釈部502は、命令コード読み込み
部501から伝達された命令コードがどのような命令な
のかを解釈し、命令の種類,命令に使用されるレジス
タ,メモリアドレス,定数等を判別し、判別結果を命令
変換部503に伝達する。
【0081】命令変換部503は、命令解釈部502か
ら伝達された判別結果に基づき、当該ターゲットCPU
のマシン語レベルの命令コードをシミュレートするため
のシミュレーション関数を呼び出すシミュレーション関
数呼び出しを、ホストCPU52のアセンブラ言語また
はマシン語レベルで生成する。
【0082】例えば、ターゲットCPUがインテル社の
16ビットプロセッサ8086であり、ホストCPU3
2がMIPS社の32ビットプロセッサR3000であ
る場合、命令変換部503は、8086の命令コード
を、R3000で実行可能なシミュレーション関数を呼
び出すシミュレーション関数呼び出しを生成することに
なる。
【0083】以下に、8086の命令,R3000のシ
ミュレーション関数呼び出し,シミュレーション関数の
例を示す。なお、8086の命令とR3000のシミュ
レーション関数呼び出しとはアセンブラ表記で、R30
00のシミュレーション関数はC言語で示す。
【0084】 ○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*/ }
【0085】上記のシミュレーション関数における return(AddrTbl[(Reg[CS]<<
4)+PC]); は、8086で実行すべき命令のアドレス(Reg[C
S]<<4)+PCをインデックスとしてアドレス変換
テーブル56を参照してそのインデックスに対応するホ
ストCPU52上のアドレスを得てリターン値として返
却するもので、シミュレーション関数呼び出し側では、 j v0 を実行することにより、次にシミュレートすべき命令に
対応するシミュレーション関数呼び出し列53の部分へ
分岐する。このようにしたのは、後述するようにアドレ
ス変換テーブル56を利用したデバッグを可能にするた
めであるが、デバッグを考慮しない場合であっても、割
込み処理のシミュレーションを行う場合には必要であ
る。
【0086】また命令変換部503は、変換元の命令コ
ードが、レジスタ間接分岐,レジスタ間接サブルーチン
呼び出し等実行時まで分岐先アドレスのわからない命令
コードの場合、シミュレーションの結果得られたターゲ
ットCPU上での分岐先アドレスとアドレス変換テーブ
ル56の内容とから分岐すべきシミュレーション関数呼
び出し列53中のアドレスを求め且つそのアドレスに制
御を移すような命令列を含むシミュレーション関数を呼
び出すシミュレーション関数呼び出しに変換する。以下
に、8086のレジスタ間接分岐命令の例と、その変換
後のR3000のシミュレーション関数呼び出しの例
と、これによって呼び出されるR3000のシミュレー
ション関数の例とを示す。
【0087】 ○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*/ }
【0088】即ち、JMP [BX]の場合、レジス
タBXを表す定数を引数としてシミュレーション関数F
_JMP_Rを呼び出すシミュレーション関数呼び出し
を生成する。シミュレーション関数F_JMP_Rで
は、 PC=Reg[reg]; により、8086上での分岐先のアドレスを保持してい
るレジスタの値(Reg[reg])をレジスタシミュ
レータ55から参照してレジスタシミュレータ55中の
PCの値を更新し、次いで、 return(AddrTbl[(Reg[CS]<<
4)+PC]); を実行する。これは、8086で実行すべき命令のアド
レスは、セグメントレジスタ(ここではCS)とPCで
指定されるので、(Reg[CS]<<4)+PCによ
り8086上でのアドレスを算出し、これをインデック
スとしてアドレス変換テーブル56を参照し、得たアド
レスをリターン値として返却する。シミュレーション関
数呼び出し側では、 j v0 を実行することにより、次にシミュレートすべき命令に
対応するシミュレーション関数呼び出し列53の部分へ
分岐する。
【0089】なお、命令変換部503は、実行前に分岐
先が確定している分岐命令コードの変換も行うが、本実
施例では、ターゲットCPUの命令コードのターゲット
CPU上でのアドレスに対応するシミュレーション関数
呼び出しのホストCPU上でのアドレスはアドレス変換
テーブル56によって求めることができるので、図2に
示したようなアドレス対応表103−1や変換結果一時
記憶手段103−2は基本的には不要である。以下に、
8086の分岐命令の例と、その変換後のR3000の
シミュレーション関数呼び出しの例と、これによって呼
び出されるR3000のシミュレーション関数の例とを
示す。
【0090】 ○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*/ }
【0091】さて、命令変換部503は、シミュレーシ
ョン関数呼び出しを生成すると、生成したシミュレーシ
ョン関数呼び出しを出力部504に伝達し、出力部50
4は、これを図5のメモリ51あるいは図示しない外部
記憶装置に順次格納する。
【0092】また、命令変換部503は、ターゲットプ
ログラム6中の1命令の変換を行うごとに出力部505
を通じてメモリ51あるいは図示しない外部記憶装置に
アドレス変換テーブルの1エントリを出力する。これに
より、ターゲットプログラム6の全命令の変換が完了し
た時点で、ターゲットプログラム6のマシン語レベルの
各命令コード6−1,6−2,…,6−nのターゲット
CPU上のアドレス0,1,…,nをインデックスとし
て、変換後のシミュレーション関数呼び出し53−1,
53−2,…,53−nのホストCPU52のアドレス
空間上のアドレスA,B,…,Nを保持する図6の如き
アドレス変換テーブル56がメモリ51上あるいは図示
しない外部記憶装置に生成される。なお、外部記憶装置
にアドレス変換テーブル56が生成された場合、シミュ
レーションを開始する以前に外部記憶装置からメモリ5
1上へアドレス変換テーブル56を読み込む必要があ
る。
【0093】なお、デバッグを行うことが指示されてい
る場合、命令変換部503は、ターゲットプログラム6
の命令コード6−1〜6−nの先頭アドレス以外のアド
レスをインデックスとして、不正アドレス実行時処理関
数57−3のアドレスAddr_errをアドレス変換
テーブル56に設定する。例えば、1番地から2バイト
の命令コードが始まる場合、2番地は2バイトの命令コ
ードの途中であり、その番地から命令コードが始まらな
いので、2番地をインデックスとしてアドレスAddr
_errを設定する。
【0094】次に図5の実施例のシミュレーション実行
時の動作を説明する。先ずデバッグ機能を使用しないと
きの動作を説明する。
【0095】CPUシミュレータ5は、図示しない入力
手段からシミュレーションの実行開始の指示を受ける
と、シミュレーション関数呼び出し列53がマシン語レ
ベルで生成されているときは、ホストCPU52にメモ
リ51上のシミュレーション関数呼び出し列53を実行
させる。
【0096】ホストCPU52は、先ずシミュレーショ
ン関数呼び出し列53の先頭のシミュレーション関数呼
び出し53−1を実行する。これにより、上述した例で
はシミュレーション関数54−1が呼び出されて実行さ
れ、命令コード6−1がシミュレートされる。なお、こ
の関数では、概ね以下のような処理が行われる。 (a)レジスタシミュレータ55中のPCの値を更新す
る。 (b)引数で指定されたレジスタ,メモリの内容を参
照,更新し必要な処理を行う。 (c)必要ならば、PSWを変更する。 (d)分岐命令の場合、ホストCPU上での分岐先アド
レスを求める。 (e)リターン値を返却する。
【0097】シミュレーション関数54−1の実行が終
了すると、本実施例では制御が呼び出し元のシミュレー
ション関数呼び出し53−1に一旦戻り、リターン値の
示すアドレスに分岐する。これにより、次にシミュレー
トすべき命令に対応するシミュレーション関数呼び出し
列53中に制御が移される。
【0098】以下、上述の動作の繰り返しによりシミュ
レーション関数群54中の該当するシミュレーション関
数54−1〜54−mが呼び出されることにより、ター
ゲットプログラム6にかかるターゲットCPUの動作が
ホストCPU52上でシミュレートされる。
【0099】次にデバッグ機能を使用したときの動作を
説明する。
【0100】CPUシミュレータ5は、図示しない入力
手段からデバッグを伴うシミュレーションの実行開始の
指示を受けると、入力待ちとなる。
【0101】利用者は、この状態において、図示しない
入力手段からデバッグ手段57のブレークポイント設定
関数57−1を起動することによりアドレス変換テーブ
ル56中の任意のインデックスに対応するアドレスにブ
レークポイント処理関数57−2のアドレスを設定する
ことができる。今、ターゲットプログラム6の1番地の
命令コード6−2にブレークポイントを設定したい場
合、設定したいアドレスを指定して起動すると、ブレー
クポイント設定関数57−1は、アドレス変換テーブル
56に図8に示すようにブレークポイント処理関数57
−2のアドレスBrk_pointを設定する。
【0102】なお、デバッグを行うことが指示されてい
る場合、前述したように命令変換部503は、アドレス
変換テーブル56の生成時に、ターゲットプログラム6
の命令コード6−1〜6−nが存在しないアドレスをイ
ンデックスとして、不正アドレス実行時処理関数57−
3のアドレスAddr_errを、図8に例示するよう
にアドレス変換テーブル56に設定している。
【0103】さて、その後に図示しない入力手段から実
行の開始が指示されると、CPUシミュレータ5は、シ
ミュレーション関数呼び出し列53がマシン語レベルで
生成されているときは、ホストCPU52にメモリ51
上のシミュレーション関数呼び出し列53を実行させ、
ホストCPU52は、シミュレーション関数呼び出し列
53の先頭のシミュレーション関数呼び出し53−1か
ら実行を開始する。
【0104】そして、その後にターゲットプログラム6
の1番地が実行される場合、アドレス変換テーブル56
を参照すると、そこにはブレークポイント処理関数57
−2のアドレスが設定されているので、ホストCPU5
2はブレークポイント処理関数57−2を呼び出す。こ
れによりホストCPU52は利用者からの入力待ちとな
る。
【0105】この状態で利用者が、デバッグに関する種
々のコマンドを入力すると、ホストCPU52はこれを
実行する。これにより、メモリ51やレジスタの内容を
図示しないCRT等に表示することが可能となる。そし
て、その後に処理の継続を指定すると、ホストCPU5
2はブレークポイント処理関数57−2から復帰し、処
理が継続される。
【0106】また、シミュレーションの実行において、
ターゲットプログラム6中で命令コードの先頭アドレス
でないアドレス、例えば2番地が実行される場合には、
アドレス変換テーブル56を参照すると、そこには不正
アドレス実行時処理関数57−3のアドレスが設定され
ている。従って、ホストCPU52は不正アドレス実行
時処理関数57−3を呼び出して実行するので、異常を
検出できる。
【0107】上記のブレークポイントと不正アドレス実
行検出は、アドレス変換テーブル56中の内容を変更す
るだけであるため、シミュレーション実行速度を低下さ
せることはない。
【0108】以上本発明の実施例について説明したが、
本発明は以上の実施例にのみ限定されずその他各種の付
加変更が可能である。例えば、上記の各実施例では変換
手段をホストCPUとは別に備えるようにしたが、ホス
トCPUの機能で変換手段を実現するようにしても良
い。
【0109】
【発明の効果】以上説明したように、本発明によれば、
以下のような効果を得ることができる。
【0110】既提案CPUシミュレータのようにターゲ
ットCPUのマシン語レベルの各命令コードをホストC
PUの命令コードの組み合わせに変換するのではなく、
予め用意されたシミュレーション関数を呼び出すシミュ
レーション関数呼び出しに変換するため、変換後のコー
ド量を極力少なくすることができる。特に、1命令コー
ドがホストCPUの多数の命令コードに変換されるよう
な命令コードを多数含むターゲットプログラムの場合、
コード量の大幅な削減が可能となる。
【0111】また、ターゲットプログラム中に同種の命
令コードが多数含まれており且つその命令コードがホス
トCPUの多数の命令コードに変換されるようなもので
ある場合、既提案CPUシミュレータでは、その各々の
命令コードがホストCPUの多数の命令コードに変換さ
れるため、変換後のコード量は膨大になるが、本発明で
は、上記同種の命令コードの各々に対する変換後のシミ
ュレーション関数呼び出し及びこれによって呼び出され
る共通のシミュレーション関数だけで済むので、シミュ
レーション関数のコード量を加味しても全体的なコード
量を削減することができる。
【0112】このようにコード量の削減が可能となるこ
とにより、例えば、主記憶容量の小さなホストCPUで
もシミュレーションが可能となり、またページングによ
る仮想記憶管理機構を使用したホストCPUではページ
アウト回数の減少が期待でき、更にキャッシュ機構を備
えたホストCPUではキャッシュヒット率の向上が期待
でき、既提案CPUシミュレータに比べてシミュレーシ
ョンの高速化が可能となる。
【0113】更に、本発明は既提案CPUシミュレータ
と同様にターゲットCPUの命令コードの解釈を前段階
でまとめて行っているので、ターゲットCPUの命令コ
ードをホストCPU上で実行時に1命令ずつ解釈する従
来のCPUシミュレータより高速なシミュレーションが
可能である。
【0114】ターゲットプログラムのマシン語レベルの
各命令コードを、該命令コードのバイト数の定数倍のバ
イト数で構成されるシミュレーション関数呼び出しに変
換する構成では、実行前に分岐先のわかっている命令コ
ードの分岐先を計算で求めることができる利点があると
共に、レジスタのシミュレーションの結果得られたター
ゲットCPU上での分岐先アドレスと前記定数倍の倍率
とから分岐すべきシミュレーション関数呼び出し列中の
アドレスを計算によって求めることができるので、求め
たアドレスに制御を移す命令列を含ませた構成を採用す
ることにより、レジスタ間接分岐,レジスタ間接サブル
ーチン呼び出し等、実行時まで分岐先アドレスのわから
ないターゲットプログラムのマシン語レベルの命令コー
ドもシミュレーションすることができる。
【0115】ターゲットプログラムのマシン語レベルの
各命令コードのターゲットCPU上のアドレスと、該命
令コード変換後のシミュレーション関数のホストCPU
上のアドレスとの対応を示すアドレス変換テーブルを生
成する構成では、このアドレス変換テーブルを修正する
ことによりデバッグ等のための別の関数をシミュレーシ
ョン中に呼び出して実行することができる利点があると
共に、レジスタのシミュレーションの結果得られたター
ゲットCPU上での分岐先アドレスと前記アドレス変換
テーブルの内容とから分岐すべきシミュレーション関数
呼び出し列中のアドレスが求まるので、求めたアドレス
に制御を移す命令列を含ませた構成を採用することによ
り、シミュレーション関数呼び出しのバイト数を変換元
の命令コードのバイト数の定数倍に揃えることなく、レ
ジスタ間接分岐,レジスタ間接サブルーチン呼び出し
等、実行時まで分岐先アドレスのわからないターゲット
プログラムのマシン語レベルの命令コードのシミュレー
ションを、コード量の拡大を抑えて実現することができ
る。
【図面の簡単な説明】
【図1】本発明を適用したCPUシミュレータの一実施
例の機能ブロック図である。
【図2】図1の変換手段10の構成例を示す機能ブロッ
ク図である。
【図3】本発明を適用したCPUシミュレータの別の実
施例の機能ブロック図である。
【図4】図3の変換手段30の構成例を示す機能ブロッ
ク図である。
【図5】本発明を適用したCPUシミュレータの更に別
の実施例の機能ブロック図である。
【図6】図5のアドレス変換テーブル56の内容例を示
す図である。
【図7】図5の変換手段50の構成例を示す機能ブロッ
ク図である。
【図8】図5のアドレス変換テーブル56の別の内容例
を示す図である。
【符号の説明】
1,3,5…CPUシミュレータ 10,30,50…変換手段 11,31,51…メモリ 12,32,52…ホストCPU 13,33,53…シミュレーション関数呼び出し列 13−1〜13−n,33−1〜33−n,53−1〜
53−n…シミュレーション関数呼び出し 14,34,54…シミュレーション関数群 14−1〜14−m,34−1〜34−m,54−1〜
54−m …シミュレーション関数 2,4,6…ターゲットプログラム 2−1〜2−n,4−1〜4−n,6−1〜6−n…タ
ーゲットCPUのマシン語レベルの命令コード 35,55…レジスタシミュレータ 56…アドレス変換テーブル 57…デバッグ手段

Claims (7)

    【特許請求の範囲】
  1. 【請求項1】 シミュレーション対象となるターゲット
    CPUの動作をホストCPU上でシミュレートするCP
    Uシミュレーション方法において、 前記ターゲットCPU用に開発されたターゲットプログ
    ラムのマシン語レベルの命令コードを解釈して、前記タ
    ーゲットプログラムを、各命令コードをシミュレートす
    る前記ホストCPUで実行可能なシミュレーション関数
    を呼び出すシミュレーション関数呼び出しの集合である
    シミュレーション関数呼び出し列に変換し、 該変換されて得られたシミュレーション関数呼び出し列
    を前記ホストCPUで実行することにより、前記ターゲ
    ットプログラムにかかる前記ターゲットCPUの動作の
    シミュレーションを行うことを特徴とするCPUシミュ
    レーション方法。
  2. 【請求項2】 シミュレーション対象となるターゲット
    CPUの動作をホストCPU上でシミュレートするCP
    Uシミュレータにおいて、 前記ターゲットCPUのマシン語レベルの各命令コード
    をシミュレートする、前記ホストCPUで実行可能なシ
    ミュレーション関数を、前記ターゲットCPUのマシン
    語レベルの命令コードの種類数分格納するシミュレーシ
    ョン関数記憶手段と、 前記ターゲットCPU用に開発されたターゲットプログ
    ラムのマシン語レベルの命令コードを解釈して、前記タ
    ーゲットプログラムを、前記シミュレーション関数を呼
    び出すシミュレーション関数呼び出しの集合であるシミ
    ュレーション関数呼び出し列に変換する変換手段とを備
    え、 該変換手段により生成されたシミュレーション関数呼び
    出し列を前記ホストCPUが実行することにより、前記
    ターゲットプログラムにかかる前記ターゲットCPUの
    動作のシミュレーションを行う構成を有することを特徴
    とするCPUシミュレータ。
  3. 【請求項3】 請求項2記載のCPUシミュレータにお
    いて、 前記変換手段は、前記ターゲットプログラムのマシン語
    レベルの各命令コードを、該命令コードのバイト数の定
    数倍のバイト数で構成されるシミュレーション関数呼び
    出しに変換することを特徴とするCPUシミュレータ。
  4. 【請求項4】 請求項3記載のCPUシミュレータにお
    いて、 前記変換手段は、実行時まで分岐先アドレスのわからな
    い前記ターゲットプログラムのマシン語レベルの命令コ
    ードに対応して、レジスタのシミュレーションの結果得
    られたターゲットCPU上での分岐先アドレスと前記定
    数倍の倍率とから分岐すべきシミュレーション関数呼び
    出し列中のアドレスを計算によって求めてリターン値と
    して返却するシミュレーション関数を呼び出すと共に、
    該呼び出したシミュレーション関数の終了時に前記リタ
    ーン値の示すアドレスに分岐するシミュレーション関数
    呼び出しを生成することを特徴とするCPUシミュレー
    タ。
  5. 【請求項5】 請求項2記載のCPUシミュレータにお
    いて、 前記変換手段は、前記ターゲットプログラムのマシン語
    レベルの各命令コードの前記ターゲットCPU上のアド
    レスと、該命令コード変換後の前記シミュレーション関
    数呼び出しの前記ホストCPU上のアドレスとの対応を
    示すアドレス変換テーブルを生成することを特徴とする
    CPUシミュレータ。
  6. 【請求項6】 請求項5記載のCPUシミュレータにお
    いて、 前記変換手段は、前記ターゲットプログラムのマシン語
    レベルの命令コードに対応して、レジスタのシミュレー
    ションの結果得られたターゲットCPU上での次に実行
    すべきアドレスと前記アドレス変換テーブルの内容とか
    ら次に実行すべきシミュレーション関数呼び出し列中の
    アドレスを求めてリターン値として返却するシミュレー
    ション関数を呼び出すと共に、該呼び出したシミュレー
    ション関数の終了時に前記リターン値の示すアドレスに
    分岐するシミュレーション関数呼び出しを生成すること
    を特徴とするCPUシミュレータ。
  7. 【請求項7】 請求項6記載のCPUシミュレータにお
    いて、 前記アドレス変換テーブル中の、前記変換手段によって
    設定されたターゲットCPU上のアドレスまたはそれ以
    外のアドレスに対応して、前記シミュレーション関数呼
    び出し以外の別の関数のアドレスを設定したことを特徴
    とするCPUシミュレータ。
JP5063446A 1993-02-26 1993-02-26 Cpuシミュレータ Expired - Lifetime JP2591418B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP5063446A JP2591418B2 (ja) 1993-02-26 1993-02-26 Cpuシミュレータ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5063446A JP2591418B2 (ja) 1993-02-26 1993-02-26 Cpuシミュレータ

Publications (2)

Publication Number Publication Date
JPH06250874A true JPH06250874A (ja) 1994-09-09
JP2591418B2 JP2591418B2 (ja) 1997-03-19

Family

ID=13229488

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5063446A Expired - Lifetime JP2591418B2 (ja) 1993-02-26 1993-02-26 Cpuシミュレータ

Country Status (1)

Country Link
JP (1) JP2591418B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6086624A (en) * 1996-07-15 2000-07-11 Nec Corporation Simulator and simulation method in each of which simulation can be carried out at a high-speed
JP2005157640A (ja) * 2003-11-25 2005-06-16 Mitsubishi Electric Corp 命令模擬装置、命令模擬方法及び命令模擬プログラム
US7457738B2 (en) 2004-05-28 2008-11-25 Samsung Electronics Co., Ltd. Method for decoding instruction in architectural simulator

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02250122A (ja) * 1988-10-25 1990-10-05 Nec Corp Cpuシミュレータ
JPH04310131A (ja) * 1991-04-09 1992-11-02 Shikoku Nippon Denki Software Kk プログラム方式

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02250122A (ja) * 1988-10-25 1990-10-05 Nec Corp Cpuシミュレータ
JPH04310131A (ja) * 1991-04-09 1992-11-02 Shikoku Nippon Denki Software Kk プログラム方式

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6086624A (en) * 1996-07-15 2000-07-11 Nec Corporation Simulator and simulation method in each of which simulation can be carried out at a high-speed
JP2005157640A (ja) * 2003-11-25 2005-06-16 Mitsubishi Electric Corp 命令模擬装置、命令模擬方法及び命令模擬プログラム
JP4563669B2 (ja) * 2003-11-25 2010-10-13 三菱電機株式会社 命令模擬装置
US7457738B2 (en) 2004-05-28 2008-11-25 Samsung Electronics Co., Ltd. Method for decoding instruction in architectural simulator

Also Published As

Publication number Publication date
JP2591418B2 (ja) 1997-03-19

Similar Documents

Publication Publication Date Title
US5394544A (en) Software system debugger with distinct interrupt vector maps for debugging and application programs
US10360327B2 (en) Modifying a virtual processor model for hardware/software simulation
US5784638A (en) Computer system supporting control transfers between two architectures
JPH0628036B2 (ja) シミュレーシヨン方法
EP0464494A2 (en) A high performance pipelined emulator
Mills et al. Compiled instruction set simulation
JPH025139A (ja) シミユレーシヨン方法
JPH0731604B2 (ja) 目標コンピュータ・システム、異なるコンピュータ・システム間でプログラムを実行する方法
JP2006155632A (ja) コンパイルシステム、記録媒体およびコンパイル方法
JP2002527815A (ja) プログラムコード変換方法
US20080201564A1 (en) Data processor
Eckhouse Jr A high-level microprogramming language (MPL)
US20040003209A1 (en) Data processor
JPH0769794B2 (ja) デ−タ・ストア方式
JPH07120338B2 (ja) 共同プロセッサによる命令の実行をデータプロセッサが調整する方法および該データプロセッサ
CA2003004C (en) Apparatus and method for executing a conditional branch instruction
JP2991242B2 (ja) マルチプロセッサコンピュータシステム使用方法
JP2591418B2 (ja) Cpuシミュレータ
EP0731410B1 (en) Method and processing for computer code processing in a code translator
JPH0668724B2 (ja) シミユレーシヨン方法
GB2366426A (en) Multi-processor system with registers having a common address map
JP2788839B2 (ja) Cpuシミュレータ
JPH06202903A (ja) Cpuシミュレーション方法およびcpuシミュレータ
Calderbank et al. A portable language for system development
JPH06168140A (ja) プログラム変換装置