(57)【特許請求の範囲】
【請求項１】
シミュレーション対象プログラムを従来の命令逐次実行シミュレーションに比べて高速にシミュレーションでき、制御系のプロセッサに対してもシミュレーションを１命令毎に実行できるシミュレーションシステムであって、
シミュレーション対象プログラムから命令を取り出してシミュレーションを実行するシミュレーション実行手段と、
前記命令が実行済であるか否かの判定用の情報を格納する実行済命令情報格納領域と、
前記シミュレーション対象プログラムから取り出した命令が実行済であるか否かを前記実行済命令情報格納領域に格納されている前記判定用の情報を基に判断する手段と、
前記命令のシミュレーションを１回目に実行した際に変換した実行済命令にかかる変換結果を格納するネイティブ命令格納領域と、
前記命令をネイティブ命令に変換できない場合に当該命令のデコード情報を保存するためのデコード情報格納領域とを有し、
前記シミュレーション実行手段は、前記シミュレーション対象プログラムに同一命令が複数含まれ当該同一命令のシミュレーションを２回目以降に実行する際に、前記実行済命令情報格納領域および前記ネイティブ命令格納領域を参照して２回目以降のシミュレーションを実行するとともに、２回目以降のシミュレーションの実行の場合には同一命令のデコード処理を行わずに前記デコード情報格納領域を参照して得た１回目のデコード情報を利用してシミュレーションの処理時間の短縮を図るように構成されている
ことを特徴とするシミュレーションシステム。
【請求項２】
前記命令のシミュレーションを１回目に実行した際に、シミュレータが動作するコンピュータの機械語命令に変換可能であれば当該変換結果を前記ネイティブ命令格納領域に格納するように構成されていることを特徴とする請求項１に記載のシミュレーションシステム。
【請求項３】
同一命令のシミュレーションを２回目以降に実行する場合に前記実行済命令情報格納領域から情報を取り出すとともに、前記ネイティブ命令格納領域に既に格納されている機械語で実行可能であれば当該機械語を実行することにより、高速に同一命令の２回目以降のシミュレーションを実行するように構成されていることを特徴とする請求項１に記載のシミュレーションシステム。
【請求項４】
シミュレータ全体を制御し実際にシミュレーションを実行する制御部と、
シミュレーション対象プログラムと、
シミュレーションを実行するために擬似的にシミュレーション対象のプロセッサのハードウェアを持たせた擬似レジスタ・メモリ格納領域と、
命令が実行済であるか否かの判定用の情報を格納する前記実行済命令情報格納領域と、
前記シミュレーション対象プログラムの命令をコンピュータシステムの機械語の命令に変換して実行することによって命令のシミュレーションを行うことを可能とするための前記ネイティブ命令格納領域と、
を有することを特徴とする請求項１乃至３のいずれか一項に記載のシミュレーションシステム。
【請求項５】
シミュレーション対象プログラムを従来の命令逐次実行シミュレーションに比べて高速にシミュレーションでき、制御系のプロセッサに対してもシミュレーションを１命令毎に実行できるシミュレーションシステムであって、
シミュレーション対象プログラムから命令を取り出してシミュレーションを実行するシミュレーション実行手段と、
前記命令が実行済であるか否かの判定用の情報を格納する実行済命令情報格納領域と、
前記シミュレーション対象プログラムから取り出した命令が実行済であるか否かを前記実行済命令情報格納領域に格納されている前記判定用の情報を基に判断する手段と、
前記命令のシミュレーションを１回目に実行した際に、当該命令をネイティブ命令に変換できない場合に当該命令のデコード情報を保存するためのデコード情報格納領域とを有し、
前記シミュレーション実行手段は、前記シミュレーション対象プログラムに同一命令が複数含まれ当該同一命令のシミュレーションを２回目以降に実行する際に、前記実行済命令情報格納領域と前記デコード情報格納領域とを参照して得たデコード情報を利用してシミュレーションの処理時間の短縮を図るように構成されていることを特徴とするシミュレーションシステム。
【請求項６】
シミュレーション対象プログラムから命令を取り出してシミュレーションを実行するシミュレーション実行手段を有するシミュレーションシステムであって、
前記命令のシミュレーションを実行した際に、当該命令が機械語命令に変換できない場合に当該命令のデコード情報を格納するためのデコード情報格納領域を備え、
前記シミュレーション実行手段は、前記シミュレーション対象プログラムから取り出した命令が前記デコード情報格納領域に格納された前記デコード情報に関する命令と同一であるか否かを判定し、当該命令のデコード情報が存在する場合には、前記デコード情報格納領域を参照して当該命令のシミュレーションを実行することを特徴とするシミュレーションシステム。
【請求項７】
前記命令のシミュレーションを実行した際に変換した機械語命令変換結果を格納するネイティブ命令格納領域を備え、
前記シミュレーション実行手段は、前記シミュレーション対象プログラムから取り出した命令が前記ネイティブ命令格納領域に格納された前記機械語命令変換結果に関する命令と同一であるか否かを判定し、当該命令の機械語命令変換結果が存在する場合には、前記ネイティブ命令格納領域を参照して当該命令のシミュレーションを実行することを特徴とする請求項６に記載のシミュレーションシステム。
【請求項８】
前記シミュレーション実行手段は、命令のシミュレーションを実行した際に、シミュレータが動作するコンピュータの前記機械語命令に変換可能であれば、前記デコード情報を前記デコード情報格納領域に格納せずに前記機械語命令変換結果を前記ネイティブ命令格納領域に格納するように構成されていることを特徴とする請求項７に記載のシミュレーションシステム。
【請求項９】
前記シミュレーション実行手段において、未実行の命令のシミュレーションを行なうときに、前記デコード情報を前記デコード情報格納領域に格納することを特徴とする請求項６に記載のシミュレーションシステム。
【請求項１０】
前記デコード情報は、シミュレーション対象の命令の種類、レジスタ番号、もしくはメモリアドレスであることを特徴とする請求項１及至９のいずれかに記載のシミュレーションシステム。
【請求項１１】
シミュレーション対象プログラムを従来の命令逐次実行シミュレーションに比べて高速にシミュレーションでき、制御系のプロセッサに対してもシミュレーションを１命令毎に実行できる命令シミュレーション方法であって、
シミュレーション対象プログラムから命令を取り出してシミュレーションを実行するシミュレーション実行工程と、
前記命令が実行済であるか否かの判定用の情報を実行済命令情報格納領域に格納する工程と、
前記シミュレーション対象プログラムから取り出した命令が実行済であるか否かを前記実行済命令情報格納領域に格納されている前記判定用の情報を基に判断する工程と、
前記命令のシミュレーションを１回目に実行した際に変換した実行済命令にかかる変換結果をネイティブ命令格納領域に格納する工程と、
前記命令をネイティブ命令に変換できない場合に当該命令のデコード情報をデコード情報格納領に保存する工程とを有し、
前記シミュレーション実行工程は、前記シミュレーション対象プログラムに同一命令が複数含まれ当該同一命令のシミュレーションを２回目以降に実行する際に、前記実行済命令情報格納領域および前記ネイティブ命令格納領域を参照して２回目以降のシミュレーションを実行するとともに、２回目以降のシミュレーションの実行の場合には同一命令のデコード処理を行わずに前記デコード情報格納領域を参照して得た１回目のデコード情報を利用してシミュレーションの処理時間の短縮を図る工程を含むことを特徴とする命令シミュレーション方法。
【請求項１２】
前記命令のシミュレーションを１回目に実行した際に、シミュレータが動作するコンピュータの機械語命令に変換可能であれば当該変換結果を前記ネイティブ命令格納領域に格納する工程を有することを特徴とする請求項１１に記載の命令シミュレーション方法。
【請求項１３】
同一命令のシミュレーションを２回目以降に実行する場合に前記実行済命令情報格納領域から情報を取り出すとともに、前記ネイティブ命令格納領域に既に格納されている機械語で実行可能であれば当該機械語を実行することにより、高速に同一命令の２回目以降のシミュレーションを実行する工程を有することを特徴とする請求項１１に記載の命令シミュレーション方法。
【請求項１４】
シミュレーション対象プログラムを従来の命令逐次実行シミュレーションに比べて高速にシミュレーションでき、制御系のプロセッサに対してもシミュレーションを１命令毎に実行できる命令シミュレーション方法であって、
シミュレーション対象プログラムから命令を取り出してシミュレーションを実行するシミュレーション実行工程と、
前記命令が実行済であるか否かの判定用の情報を実行済命令情報格納領域に格納する工程と、
前記シミュレーション対象プログラムから取り出した命令が実行済であるか否かを前記実行済命令情報格納領域に格納されている前記判定用の情報を基に判断する工程と、
前記命令のシミュレーションを１回目に実行する際に、当該命令をネイティブ命令に変換できない場合に当該命令のデコード情報をデコード情報格納領域に保存する工程とを有し、
前記シミュレーション実行工程は、前記シミュレーション対象プログラムに同一命令が複数含まれ当該同一命令のシミュレーションを２回目以降に実行する際に、前記実行済命令情報格納領域と前記デコード情報格納領域とを参照して得たデコード情報を利用してシミュレーションの処理時間の短縮を図る工程を含むことを特徴とする命令シミュレーション方法。
【請求項１５】
シミュレーション対象プログラムから命令を取り出してシミュレーションを実行する命令シミュレーション方法であって、
前記命令のシミュレーションを実行した際に、当該命令が機械語命令に変換できない場合に当該命令のデコード情報をデコード情報格納領域に格納する工程と、
前記シミュレーション対象プログラムから取り出した命令が前記デコード情報格納領域に格納された前記デコード情報に関する命令と同一であるか否かを判定し、当該命令のデコード情報が存在する場合には、前記デコード情報格納領域を参照して当該命令のシミュレーションを実行する工程とを含むことを特徴とする命令シミュレーション方法。
【請求項１６】
前記デコード情報は、シミュレーション対象の命令の種類、レジスタ番号、もしくはメモリアドレスであることを特徴とする請求項１１及至１５のいずれかに記載の命令シミュレーション方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プロセッサの命令シミュレーション技術に係り、特にシミュレーション対象プログラムを従来の命令逐次実行シミュレーションに比べて高速にシミュレーションでき、マイクロコントローラのような制御系のプロセッサに対してもシミュレーションを１命令毎に実行できるシミュレーションシステムおよび命令シミュレーション方法に関する。
【０００２】
【従来の技術】
図５は従来技術のプロセッサ命令シミュレーションの流れを説明するフロー図である。従来のプロセッサの命令シミュレーション方法としては、たとえば特開平１０−１７７４８７号公報に記載のものがある。図５を参照すると、従来のプロセッサ命令シミュレーション方法は、シミュレーション対象プログラム１、プログラム分割手段３と、シミュレーションを実際に実行するコンピュータ（以下、ホストコンピュータと呼ぶ）の機械語に変換する手段４と、変換された機械語プログラムを実行する手段５と、機械語に変換できなかった部分を命令逐次実行するシミュレータ６とから構成されている。
【０００３】
図８は従来技術を実現するための実際の計算機システム全体の構成図である。図８において、１はシミュレーション対象プログラム、２３は擬似レジスタ・メモリ格納領域、２５はネイティブ命令格納領域、９０はシミュレータ、９１は制御部、１００はコンピュータシステム、１０１は補助記憶装置、１０２は入出力装置を示している。
【０００４】
図８を参照すると、従来技術を実現するための実際の計算機システムでは、シミュレータ９０の制御部９１は、命令逐次実行シミュレーション機能と変換された機械語プログラムを直接実行する機能の２つを切り替えながら実行することができる機能を有している。
【０００５】
図６は従来技術におけるシミュレーション対象プログラム１の実行のシミュレーションの流れを説明するフロー図である。図６を参照すると、上記構成を有する従来のプロセッサ命令シミュレーション方法では、次のように動作する。すなわち、シミュレーション対象プログラム１を高速にシミュレーションするために、プログラム分割手段３によってホストコンピュータの機械語に変換し、変換された機械語プログラムを実行することにより、シミュレーション対象プログラム１の実行のシミュレーションを実行する場合（図６中のａ，ｂ，ｃ，ｅ）とホストコンピュータによる命令逐次実行型シミュレータによってシミュレーションを実行する場合（図６中のｄ）とに分け、これに基づいて、シミュレーション対象プログラム１のシミュレーション結果を得る。
【０００６】
また、ホストコンピュータによる命令逐次実行シミュレーションの動作は上記従来技術には具体的には説明されていないが、図７の処理の流れによって実行することができる。図７は従来の逐次命令シミュレーション方法の処理の流れを示すフローチャートである。図７の処理の流れは、実際のプロセッサのハードウェアで実行されることをソフトウェアの処理に置き換えたもので、特に目新しいものではない。ここで、周辺機能シミュレーションとは、シングルチップマイコンのＩ／Ｏポートやタイマ、Ａ／Ｄ変換器をシミュレーションすることを示している。なお、上記従来技術では、周辺機能シミュレーションについては、触れられていないため、これらの機能を有しているか否かは、不明である。
【０００７】
【発明が解決しようとする課題】
しかしながら、従来技術には以下に掲げる問題点があった。まず第１の問題点は、割り込みコントローラ、Ｉ／Ｏポート、タイマなど、周辺機器を内蔵したマイクロコントローラと呼ばれるプロセッサには適用できないことである。その理由は、マイクロコントローラの場合には、命令毎あるいは、１クロック毎に、周辺機器のシミュレーションを行わなければ、正確なシミュレーション結果を得ることができないからである。たとえば、外部割り込み処理が必要な場合、図６のｃの部分を変換された機械語プログラムで実行している場合には、連続的にシミュレーション対象プログラム１のシミュレーションが実行されるため、ｃの部分では命令と命令の間の外部割り込み処理が受け付けられないためである。
【０００８】
そして第２の問題点は、シミュレーション対象プログラム１をデバッグする場合には、１命令ずつステップ実行させたり、任意の場所で、シミュレーションの実行を停止させる必要があるため、変換された機械語プログラムに対して、実行停止をさせるための処理が必要になり、構造が複雑になることである。その理由は、変換されたプログラムの実行停止方法と命令逐次実行でのプログラム停止手段が異なるからである。
【０００９】
本発明は斯かる問題点を鑑みてなされたものであり、その目的とするところは、シミュレーション対象プログラムを従来の命令逐次実行シミュレーションに比べて高速にシミュレーションでき、マイクロコントローラのような制御系のプロセッサに対してもシミュレーションを１命令毎に実行できるシミュレーションシステムおよび命令シミュレーション方法を提供する点にある。
【００１０】
【課題を解決するための手段】
請求項１に記載の発明の要旨は、シミュレーション対象プログラムを従来の命令逐次実行シミュレーションに比べて高速にシミュレーションでき、制御系のプロセッサに対してもシミュレーションを１命令毎に実行できるシミュレーションシステムであって、シミュレーション対象プログラムから命令を取り出してシミュレーションを実行するシミュレーション実行手段と、前記命令が実行済であるか否かの判定用の情報を格納する実行済命令情報格納領域と、前記シミュレーション対象プログラムから取り出した命令が実行済であるか否かを前記実行済命令情報格納領域に格納されている前記判定用の情報を基に判断する手段と、前記命令のシミュレーションを１回目に実行した際に変換した実行済命令にかかる変換結果を格納するネイティブ命令格納領域と、前記命令をネイティブ命令に変換できない場合に当該命令のデコード情報を保存するためのデコード情報格納領域とを有し、前記シミュレーション実行手段は、前記シミュレーション対象プログラムに同一命令が複数含まれ当該同一命令のシミュレーションを２回目以降に実行する際に、前記実行済命令情報格納領域および前記ネイティブ命令格納領域を参照して２回目以降のシミュレーションを実行するとともに、２回目以降のシミュレーションの実行の場合には同一命令のデコード処理を行わずに前記デコード情報格納領域を参照して得た１回目のデコード情報を利用してシミュレーションの処理時間の短縮を図るように構成されていることを特徴とするシミュレーションシステムに存する。
また、請求項２に記載の発明の要旨は、前記命令のシミュレーションを１回目に実行した際に、シミュレータが動作するコンピュータの機械語命令に変換可能であれば当該変換結果を前記ネイティブ命令格納領域に格納するように構成されていることを特徴とする請求項１に記載のシミュレーションシステムに存する。
また、請求項３に記載の発明の要旨は、同一命令のシミュレーションを２回目以降に実行する場合に前記実行済命令情報格納領域から情報を取り出すとともに、前記ネイティブ命令格納領域に既に格納されている機械語で実行可能であれば当該機械語を実行することにより、高速に同一命令の２回目以降のシミュレーションを実行するように構成されていることを特徴とする請求項１に記載のシミュレーションシステムに存する。
また、請求項４に記載の発明の要旨は、シミュレータ全体を制御し実際にシミュレーションを実行する制御部と、シミュレーション対象プログラムと、シミュレーションを実行するために擬似的にシミュレーション対象のプロセッサのハードウェアを持たせた擬似レジスタ・メモリ格納領域と、命令が実行済であるか否かの判定用の情報を格納する前記実行済命令情報格納領域と、前記シミュレーション対象プログラムの命令をコンピュータシステムの機械語の命令に変換して実行することによって命令のシミュレーションを行うことを可能とするための前記ネイティブ命令格納領域と、を有することを特徴とする請求項１乃至３のいずれか一項に記載のシミュレーションシステムに存する。
また、請求項５に記載の発明の要旨は、シミュレーション対象プログラムを従来の命令逐次実行シミュレーションに比べて高速にシミュレーションでき、制御系のプロセッサに対してもシミュレーションを１命令毎に実行できるシミュレーションシステムであって、シミュレーション対象プログラムから命令を取り出してシミュレーションを実行するシミュレーション実行手段と、前記命令が実行済であるか否かの判定用の情報を格納する実行済命令情報格納領域と、前記シミュレーション対象プログラムから取り出した命令が実行済であるか否かを前記実行済命令情報格納領域に格納されている前記判定用の情報を基に判断する手段と、前記命令のシミュレーションを１回目に実行した際に、当該命令をネイティブ命令に変換できない場合に当該命令のデコード情報を保存するためのデコード情報格納領域とを有し、前記シミュレーション実行手段は、前記シミュレーション対象プログラムに同一命令が複数含まれ当該同一命令のシミュレーションを２回目以降に実行する際に、前記実行済命令情報格納領域と前記デコード情報格納領域とを参照して得たデコード情報を利用してシミュレーションの処理時間の短縮を図るように構成されていることを特徴とするシミュレーションシステムに存する。
また、請求項６に記載の発明の要旨は、シミュレーション対象プログラムから命令を取り出してシミュレーションを実行するシミュレーション実行手段を有するシミュレーションシステムであって、前記命令のシミュレーションを実行した際に、当該命令が機械語命令に変換できない場合に当該命令のデコード情報を格納するためのデコード情報格納領域を備え、前記シミュレーション実行手段は、前記シミュレーション対象プログラムから取り出した命令が前記デコード情報格納領域に格納された前記デコード情報に関する命令と同一であるか否かを判定し、当該命令のデコード情報が存在する場合には、前記デコード情報格納領域を参照して当該命令のシミュレーションを実行することを特徴とするシミュレーションシステムに存する。
また、請求項７に記載の発明の要旨は、前記命令のシミュレーションを実行した際に変換した機械語命令変換結果を格納するネイティブ命令格納領域を備え、前記シミュレーション実行手段は、前記シミュレーション対象プログラムから取り出した命令が前記ネイティブ命令格納領域に格納された前記機械語命令変換結果に関する命令と同一であるか否かを判定し、当該命令の機械語命令変換結果が存在する場合には、前記ネイティブ命令格納領域を参照して当該命令のシミュレーションを実行することを特徴とする請求項６に記載のシミュレーションシステムに存する。
また、請求項８に記載の発明の要旨は、前記シミュレーション実行手段は、命令のシミュレーションを実行した際に、シミュレータが動作するコンピュータの前記機械語命令に変換可能であれば、前記デコード情報を前記デコード情報格納領域に格納せずに前記機械語命令変換結果を前記ネイティブ命令格納領域に格納するように構成されていることを特徴とする請求項７に記載のシミュレーションシステムに存する。
また、請求項９に記載の発明の要旨は、前記シミュレーション実行手段において、未実行の命令のシミュレーションを行なうときに、前記デコード情報を前記デコード情報格納領域に格納することを特徴とする請求項６に記載のシミュレーションシステムに存する。
また、請求項１０に記載の発明の要旨は、前記デコード情報は、シミュレーション対象の命令の種類、レジスタ番号、もしくはメモリアドレスであることを特徴とする請求項１及至９のいずれかに記載のシミュレーションシステムに存する。
また、請求項１１に記載の発明の要旨は、シミュレーション対象プログラムを従来の命令逐次実行シミュレーションに比べて高速にシミュレーションでき、制御系のプロセッサに対してもシミュレーションを１命令毎に実行できる命令シミュレーション方法であって、シミュレーション対象プログラムから命令を取り出してシミュレーションを実行するシミュレーション実行工程と、前記命令が実行済であるか否かの判定用の情報を実行済命令情報格納領域に格納する工程と、前記シミュレーション対象プログラムから取り出した命令が実行済であるか否かを前記実行済命令情報格納領域に格納されている前記判定用の情報を基に判断する工程と、前記命令のシミュレーションを１回目に実行した際に変換した実行済命令にかかる変換結果をネイティブ命令格納領域に格納する工程と、前記命令をネイティブ命令に変換できない場合に当該命令のデコード情報をデコード情報格納領に保存する工程とを有し、前記シミュレーション実行工程は、前記シミュレーション対象プログラムに同一命令が複数含まれ当該同一命令のシミュレーションを２回目以降に実行する際に、前記実行済命令情報格納領域および前記ネイティブ命令格納領域を参照して２回目以降のシミュレーションを実行するとともに、２回目以降のシミュレーションの実行の場合には同一命令のデコード処理を行わずに前記デコード情報格納領域を参照して得た１回目のデコード情報を利用してシミュレーションの処理時間の短縮を図る工程を含むことを特徴とする命令シミュレーション方法に存する。
また、請求項１２に記載の発明の要旨は、前記命令のシミュレーションを１回目に実行した際に、シミュレータが動作するコンピュータの機械語命令に変換可能であれば当該変換結果を前記ネイティブ命令格納領域に格納する工程を有することを特徴とする請求項１１に記載の命令シミュレーション方法に存する。
また、請求項１３に記載の発明の要旨は、同一命令のシミュレーションを２回目以降に実行する場合に前記実行済命令情報格納領域から情報を取り出すとともに、前記ネイティブ命令格納領域に既に格納されている機械語で実行可能であれば当該機械語を実行することにより、高速に同一命令の２回目以降のシミュレーションを実行する工程を有することを特徴とする請求項１１に記載の命令シミュレーション方法に存する。
また、請求項１４に記載の発明の要旨は、シミュレーション対象プログラムを従来の命令逐次実行シミュレーションに比べて高速にシミュレーションでき、制御系のプロセッサに対してもシミュレーションを１命令毎に実行できる命令シミュレーション方法であって、シミュレーション対象プログラムから命令を取り出してシミュレーションを実行するシミュレーション実行工程と、前記命令が実行済であるか否かの判定用の情報を実行済命令情報格納領域に格納する工程と、前記シミュレーション対象プログラムから取り出した命令が実行済であるか否かを前記実行済命令情報格納領域に格納されている前記判定用の情報を基に判断する工程と、前記命令のシミュレーションを１回目に実行する際に、当該命令をネイティブ命令に変換できない場合に当該命令のデコード情報をデコード情報格納領域に保存する工程とを有し、前記シミュレーション実行工程は、前記シミュレーション対象プログラムに同一命令が複数含まれ当該同一命令のシミュレーションを２回目以降に実行する際に、前記実行済命令情報格納領域と前記デコード情報格納領域とを参照して得たデコード情報を利用してシミュレーションの処理時間の短縮を図る工程を含むことを特徴とする命令シミュレーション方法に存する。
また、請求項１５に記載の発明の要旨は、シミュレーション対象プログラムから命令を取り出してシミュレーションを実行する命令シミュレーション方法であって、前記命令のシミュレーションを実行した際に、当該命令が機械語命令に変換できない場合に当該命令のデコード情報をデコード情報格納領域に格納する工程と、前記シミュレーション対象プログラムから取り出した命令が前記デコード情報格納領域に格納された前記デコード情報に関する命令と同一であるか否かを判定し、当該命令のデコード情報が存在する場合には、前記デコード情報格納領域を参照して当該命令のシミュレーションを実行する工程とを含むことを特徴とする命令シミュレーション方法に存する。
また、請求項１６に記載の発明の要旨は、前記デコード情報は、シミュレーション対象の命令の種類、レジスタ番号、もしくはメモリアドレスであることを特徴とする請求項１１及至１５のいずれかに記載の命令シミュレーション方法に存する。
【００１１】
【発明の実施の形態】
本発明の特徴は、プロセッサの命令逐次実行シミュレータにおいて、シミュレーション対象プログラムから命令を取り出してシミュレーションを実行した場合に、対象プログラムにループ処理があり２回目に同一命令を実行する際に、１回目のシミュレーション処理よりも高速にシミュレーションを行い、より短時間にシミュレーション結果を取得できる構成を設けた点にある。これにより、第１に、シミュレーション対象プログラムを従来の命令逐次実行シミュレーションに比べて高速にシミュレーションできるようになる。また第２に、マイクロコントローラのような制御系のプロセッサに対して１命令毎に実行することで割り込み処理や周辺機能シミュレーションに対しても正確にシミュレーションを実行できるようになる。そして第３に、プログラムを開発する場合に、従来の命令逐次実行シミュレーションに対する改造点が少ないために開発期間が少なくて済むといった効果を奏する。以下、図面に基づき本発明の実施の形態を説明する。
【００１２】
（第１の実施の形態）
初めに、図面に基づき本発明の第１の実施の形態を説明する。図１は本発明の第１の実施の形態のシステム構成図である。図１において、１はシミュレーション対象プログラム、２０はシミュレータ、２１は制御部、２２は実行済命令情報格納領域、２３は擬似レジスタ・メモリ格納領域、２５はネイティブ命令格納領域、１００はコンピュータシステム、１０１は補助記憶装置、１０２は入出力装置、２００はシミュレーションシステムを示している。
【００１３】
図１を参照すると、本実施の形態のシミュレーションシステム２００は、オペレーティングシステム（たとえば、ＷｉｎｄｏｗｓＮＴやＷｉｎｄｏｗｓ９８，ＵＮＩＸなど（いずれも商標））により動作するコンピュータシステム１００と、シミュレーション対象プログラム１のソースプログラム、実行形式のプログラムを格納する補助記憶装置１０１と、コンピュータシステム１００に接続された入出力装置１０２と、本発明のシミュレータ２０から構成されている。
【００１４】
また、本実施の形態におけるコンピュータシステム１００は、オペレーティングシステム（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）と、当該オペレーティングシステム上で動作するシミュレータ２０を備えている。一方、シミュレータ２０は、シミュレータ２０全体を制御し実際にシミュレーションを実行する制御部２１と、シミュレーション対象プログラム１と、シミュレーションを実行するために、擬似的にシミュレーション対象のプロセッサのハードウェアを持たせた擬似レジスタ・メモリ格納領域２３と、実行済命令であるかの判定用の情報を格納する実行済命令情報格納領域２２と、シミュレーション対象プログラム１の命令をコンピュータシステム１００の機械語の命令に変換して実行することによって命令のシミュレーションを行うことを可能とするためのネイティブ命令格納領域２５を備えている。
【００１５】
すなわち、本実施の形態のシミュレータ２０は、図１に示すように、前述の従来の命令逐次実行シミュレータ（図８参照）の構成に、実行済命令情報格納領域２２を追加することで、１回目の命令シミュレーションを実行した際に、シミュレータ２０が動作するコンピュータの機械語命令に変換可能であればその変換結果をネイティブ命令格納領域２５に格納できる。さらに加えて、ループなどにより同一命令の命令シミュレーションを２回目に実行する場合に実行済命令情報格納領域２２から情報を取り出すとともに、ネイティブ命令格納領域２５の機械語で実行可能であれば当該機械語を実行することにより、高速に２回目の命令シミュレーションを実行できるようになるといった効果を奏する。
【００１６】
次にシミュレーションシステム２００の動作（命令シミュレーション方法）について説明する。図２は制御部２１の処理の流れを示すフローチャートである。なお、本フローチャートに示す処理では実行済命令情報格納領域２２の初期化処理などは省略している。
【００１７】
図２において、ステップＳ２０１は、シミュレーション対象プログラム１からシミュレーションを行う１命令を取り出す処理である。
【００１８】
ステップＳ２０２は、未実行の命令か否かを、実行済命令情報格納領域２２を参照して判断する処理である。
【００１９】
ステップＳ２０３は、ステップＳ２０１で取り出した命令をデコードし、命令の種類（転送、演算、分岐、比較などの命令）や、対象のレジスタ番号やメモリのアドレスの情報を取り出す処理である。
【００２０】
ステップＳ２０４は、１命令シミュレーションを擬似レジスタ・メモリ格納領域２３を参照しながら、命令の種類に従って動作を行い、シミュレーション結果を擬似レジスタ・メモリ格納領域２３に格納する処理である。
【００２１】
ステップＳ２０５は、シミュレーションした命令が、ネイティブ命令変換可能であるかを判断する処理である。
【００２２】
ステップＳ２０６は、シミュレーション対象プログラム１の１命令を、コンピュータシステム１００で直接実行可能な命令（ネイティブ命令）に変換して、ネイティブ命令格納領域２５に格納する処理である。
【００２３】
ステップＳ２０７は、同一命令を２回目に実行する場合に、ネイティブ命令で実行可能であることを示すために、実行済命令情報格納領域２２に論理値（たとえば’１’）を格納する処理である。
【００２４】
ステップＳ２０８は、実行済命令であった場合に、ネイティブ命令格納領域２５の命令を実行して、シミュレーションを行う処理である。
【００２５】
ステップＳ２０９は、周辺機能のシミュレーション、たとえば、プロセッサ内蔵のタイマがあり、かつ動作中であれば、タイマのカウントアップを行う処理である。
【００２６】
ステップＳ２１０は、シミュレーション対象プロセッサに対する擬似割り込みがあった否かのチェック、シミュレーション処理に必要なクロック数の加算、およびシミュレーション対象プログラム１に対してシミュレーション停止の指示があったかのチェックをする処理である。
【００２７】
ステップＳ２１１は、シミュレーション停止の指示があった場合にシミュレーションを停止し、シミュレーション停止の指示がなければシミュレーションを続行する処理である。
【００２８】
次に図１および図２のフローチャートを参照して本実施の形態の全体の動作について詳細に説明する。本実施の形態では、まず、補助記憶装置１０１からコンピュータシステム１００のシミュレータ２０のシミュレーション対象プログラム１をロードする。
【００２９】
続いて、制御部２１の処理によって、シミュレーションを開始する。シミュレーション対象プログラム１の中から擬似レジスタ・メモリ格納領域２３に格納されているプログラムカウンタが示しているアドレスの命令をステップＳ２０１で取り出す。
【００３０】
続いて、ステップＳ２０２によって、取り出した命令が、未実行の命令であるか否かを判断する。もし、実行した命令であれば、ステップＳ２０８のステップ処理へ進む。未実行の命令であれば、次のステップの処理を行うステップＳ２０３によって、命令をデコードし、シミュレーションに必要な情報を取り出す。
【００３１】
続いて、ステップＳ２０３で取り出した情報に従ってステップＳ２０４を実行し擬似レジスタ・メモリ格納領域２３の情報を命令の種類によって操作し、その結果を擬似レジスタ・メモリ格納領域２３に書き戻す。たとえば、ＡＤＤＩ  Ｒ１，＃１０（すなわち、第１のレジスタに数値１０を加え、当該演算結果を第１のレジスタに保持する）といった命令であった場合には擬似レジスタ・メモリ格納領域２３の第１のレジスタに相当するメモリの内容を読み出して数値１０を加算し、該演算結果を擬似レジスタ・メモリ格納領域２３の第１のレジスタに相当するメモリに書き戻すことにより、１命令のシミュレーションを行ったことになる。
【００３２】
続いて、ステップＳ２０５を実行し、シミュレーションした命令がネイティブ命令に変換可能であるかを判定する。このとき、変換可能な命令は事前に制御部２１の管理するテーブルなどに登録しておくことによって判断可能である。変換不可能であれば、ステップＳ２０９へジャンプする。たとえばステップＳ２０４の具体的な命令の例である前述のＡＤＤＩ  Ｒ１，＃１０であれば、変換可能である。すなわち、ネイティブ加算命令が、擬似レジスタ・メモリ格納領域２３のメモリのアドレスの内容と数値１０を加算し、結果を擬似レジスタ・メモリ格納領域２３のメモリに格納できる命令であれば、ステップＳ２０４と同一の動作となる。
【００３３】
続いて、ステップＳ２０６を実行し、シミュレーション対象プログラム１の命令をネイティブ命令に変換して、ネイティブ命令格納領域２５に格納する。
【００３４】
続いて、ステップＳ２０８を実行する際、ネイティブ命令実行可能とするために、ステップＳ２０７で、実行済命令情報格納領域２２に値を書き込んで実行済命令とする。
【００３５】
続いて、ステップＳ２０９にジャンプする。このとき、シミュレーション対象プログラム１と実行済命令情報格納領域２２には、簡単な演算で１対１に対応できるようにマッピングする。たとえば、実行済命令情報格納領域２２を１ビットで表現した場合、シミュレーション対象プログラムがバイト（８ビット単位）で命令が配置されていれば、１／８のメモリの容量で表現することができる。具体的には、シミュレーション対象プログラム１のアドレス（バイト単位）が０番地に対しては、実行済命令情報格納領域２２のアドレス（バイト単位）およびビット位置は０番地およびビット０となる。同様に、シミュレーション対象プログラム１のアドレス（バイト単位）が１番地に対しては、実行済命令情報格納領域２２のアドレス（バイト単位）およびビット位置は０番地およびビット１となる。同様に、シミュレーション対象プログラム１のアドレス（バイト単位）が２番地に対しては、実行済命令情報格納領域２２のアドレス（バイト単位）およびビット位置は０番地およびビット２となる。同様に、シミュレーション対象プログラム１のアドレス（バイト単位）が８番地に対しては、実行済命令情報格納領域２２のアドレス（バイト単位）およびビット位置は１番地およびビット０となる。
【００３６】
続いて、ステップＳ２０８を実行し、ネイティブ命令格納領域２５に格納されたネイティブ命令を実行する。
【００３７】
続いて、ステップＳ２０９を実行し、１命令のシミュレーションでは直接操作できない周辺機能、たとえば、シミュレーション対象プロセッサに内蔵されたタイマーのカウントアップの処理などを行う。
【００３８】
続いて、ステップＳ２１０を実行し、シミュレーション対象プロセッサに対する割り込み（たとえば外部割り込み、タイマーの一致による内部割り込みなど）のチェック、シミュレーションに必要であったクロック数の更新（この値によって、実際のプロセッサでは、どのくらいの時間で、処理ができるかの算出ができる）、シミュレーション停止か否かのチェックを行う。このような外部割り込みのシミュレーションは、入出力装置１０２とシミュレータ２０の制御部２１との会話処理（インタラクティブ処理）によって割り込みを発生させるように登録しておくこと、あるいは事前にシミュレーション開始から何クロック経過したら割り込みを発生させるかを登録しておくことにより実現できる。
【００３９】
続いて、ステップＳ２１１を実行し、シミュレーション停止か否かの判断し、もしシミュレーション続行と判断した場合はステップＳ２０１へジャンプし、シミュレーション停止と判断した場合はシミュレーションを停止させる。
【００４０】
以上説明したように第１の実施の形態によれば以下に掲げる効果を奏する。まず第１の効果は、シミュレーション対象プログラム１を従来の命令逐次実行シミュレーションに比べて、高速にシミュレーションできることである。その理由は、シミュレーション対象プログラム１のループ処理（たとえば、Ｃ言語でのｆｏｒ文）で、同一の命令を実行する場合に、命令のデコードが不要であり、さらに、ネイティブ命令実行によって、擬似レジスタ・メモリ格納領域２３の情報を直接扱うことができるからである。
【００４１】
また第２の効果は、マイクロコントローラのような制御系のプロセッサに対して１命令毎に実行することで割り込み処理や周辺機能シミュレーションに対しても、正確にシミュレーションを行うことができることである。その理由は、従来のように、シミュレーション対象プログラム１をネイティブ命令に変換する場合、ある命令群の固まりを変換するのではなく、１命令毎に変換するため、ネイティブ命令実行によって、割り込み処理や周辺機能シミュレーションの動作に、影響を与えないからである。
【００４２】
そして第３の効果は、本実施の形態のプログラムを開発する場合に、従来の命令逐次実行シミュレーションに対する改造点が少ないために、開発期間が少なくて済ませることができることである。その理由は、基本的な処理の流れは、従来の命令逐次実行シミュレーションと同じであるからである。
【００４３】
（第２の実施の形態）
次に図面に基づき本発明の第２の実施の形態を説明する。なお、上記第１の実施の形態において既に記述したものと同一の部分については、同一符号を付し、重複した説明は省略する。図３は本発明の第２の実施の形態のシステム構成図である。図３において、１はシミュレーション対象プログラム、３０はシミュレータ、３１は制御部、２２は実行済命令情報格納領域、２３は擬似レジスタ・メモリ格納領域、２５はネイティブ命令格納領域、３２はデコード情報格納領域、１００はコンピュータシステム、１０１は補助記憶装置、１０２は入出力装置、２００はシミュレーションシステムを示している。
【００４４】
図３を参照すると、第２の実施の形態は、図１の前述の第１の実施の形態のシステム構成図に対して、デコード情報格納領域３２が追加され、ネイティブ命令に変換できない場合に当該命令のデコード情報を保存する構成とすることによって、２回目の実行の場合に同一命令のデコード処理を行わずに１回目のデコード情報を利用してシミュレーションの処理時間の短縮を図る点に特徴を有している。
【００４５】
上記デコード処理では、通常、シミュレーション対象プログラム１から取り出した命令のコードに対して、フィールド（命令フィールド、レジスタフィールド、アドレスフィールド、その他に分けられているフィールド）毎にマスクを掛け、さらに値を取り出すためにシフト動作を行う。さらに、命令の種類を判別するために命令テーブルを参照するなどの処理が必要であり、数１０ステップから数１００ステップの処理を必要とする。
【００４６】
第２の実施の形態ではこれらをデコード情報格納領域３２へのデコード情報の書き込みと読み出しによって、処理ステップを少なくしてシミュレーションの性能を上げている。
【００４７】
次にシミュレーションシステム２００の動作（命令シミュレーション方法）について説明する。図４は第２の実施の形態の制御部３１の処理の流れを示すフローチャートである。本実施の形態の制御部３１の処理のフローチャートは、前述の制御部２１の処理のフローチャートに、ステップＰ３０１〜ステップＰ３０４の処理が追加されている点に特徴を有している。
【００４８】
これらのステップＰ３０１〜ステップＰ３０４は、それぞれ概ね次のように動作する。まず、ステップＰ３０１は、命令デコードの情報を、デコード情報格納領域３２に格納する処理である。
【００４９】
ステップＰ３０２は、デコード済命令であること示すために、実行済命令情報格納領域２２に値を設定する処理である。前述の第１の実施の形態では、実行済命令情報格納領域２２のデータは、１ビットで実行済（ネイティブ命令実行可能）か未実行かの判断が可能であったが、第２の実施の形態の場合には、未実行／ネイティブ命令は実行不可であるが、デコード情報格納／ネイティブ命令実行可能のいずれかを示す必要があるため、２ビットを使用することにより表現できる。たとえば、「００：初期値、未実行命令、０１：ネイティブ命令実行可能命令、１０：ネイティブ命令実行不可であるが、デコード情報を格納、１１：この場合はありえないため、不定とする。」となる。
【００５０】
ステップＰ３０３は、ステップＰ３０２で設定した２ビットのデータを読み込んで、デコード済命令である（たとえば上記の例の場合１０）かを判定する処理である。
【００５１】
ステップＰ３０４は、ステップＰ３０１で、デコード情報格納領域３２に書き込んだ情報を読み出す処理を行う処理である。
【００５２】
次に図３のシステム構成図および図４のフローチャートを参照して本実施の形態の全体の動作について詳細に説明する。本実施の形態では、まず、補助記憶装置１０１からコンピュータシステム１００のシミュレータ３０のシミュレーション対象プログラム１をロードし、制御部３１の処理によってシミュレーションを開始する。
【００５３】
続いて、ステップＰ２０１を実行し、擬似レジスタ・メモリ格納領域２３に格納されているプログラムカウンタが示しているアドレスの命令を、シミュレーション対象プログラム１の中から取り出す。
【００５４】
続いて、ステップＰ２０２を実行し、取り出した命令が未実行の命令であるかを判断する。もし、取り出した命令が既に実行した命令であれば後述するステップＰ３０３へジャンプする。一方、取り出した命令が未実行の命令であれば、ステップＰ２０３を実行する。ステップＰ２０３では当該命令をデコードしてシミュレーションに必要な情報を取り出す。
【００５５】
続いて、ステップＰ２０４を実行し、ステップＰ２０３を実行して取り出した情報に従って、擬似レジスタ・メモリ格納領域２３の情報を命令の種類によって操作し、当該実行結果を擬似レジスタ・メモリ格納領域２３に書き戻す。
【００５６】
続いて、ステップＰ２０５を実行し、ステップＰ２０４でシミュレーションした命令がネイティブ命令に変換可能であるかを判定する。当該変換可能な命令は、事前に制御部３１の管理するテーブルなどに登録しておくことによって判断可能であり、ステップＰ２０６の処理へジャンプする。一方、ステップＰ２０４でシミュレーションした命令がネイティブ命令に変換不可能であった場合には次の処理を行う。
【００５７】
すなわち、ステップＰ３０１を実行してデコード情報（命令の種類、レジスタ番号、メモリアドレスなどの情報）をデコード情報格納領域３２に書き込む。
【００５８】
続いて、ステップＰ３０２を実行し、値（たとえば’１０’）の２ビットのデータをデコード済命令として実行済命令情報格納領域２２に書き込み、ステップＰ３０４の処理へジャンプする。
【００５９】
ステップＰ２０４でシミュレーションした命令がネイティブ命令に変換可能な場合は、続いてステップＰ２０６を実行し、シミュレーション対象プログラム１の命令をネイティブ命令に変換して、ネイティブ命令格納領域２５に格納する。
【００６０】
続いて、ステップＰ２０７を実行し、ネイティブ命令実行可能とするために、実行済命令（ネイティブ命令実行可能）の値（たとえば、’０１’）の２ビットのデータを実行済命令情報格納領域２２に書き込んでネイティブ命令実行可能命令とし、ステップＰ２０９の処理へジャンプする。
【００６１】
一方、未実行命令でない場合（ステップＰ２０２のＮＯ）は、ステップＰ３０３を実行して実行済命令情報格納領域２２からデータを取り出し、ステップＰ２０１で取り出した命令がデコード済みの命令であるかを判断する。
【００６２】
もし、実行済命令情報格納領域２２から取り出したデータの論理値が’０１’であれば、ネイティブ命令実行可能な命令であると判断してステップＰ２０８の処理へジャンプする。一方、実行済命令情報格納領域２２から取り出したデータの論理値が’１０’であれば、ネイティブ命令実行不可能な命令であるがデコード情報を格納した命令であると判断して次のステップを実行する。
【００６３】
続いて、ステップＰ３０４を実行し、デコード情報格納領域３２から命令シミュレーションに必要なデコードした情報を読み出す。
【００６４】
続いて、ステップＰ２０４を実行して１命令のシミュレーションを実行し、ステップＰ２０９の処理へジャンプする。
【００６５】
デコード済命令でない場合（ステップＰ３０３のＮＯ）は、ステップＰ２０８を実行し、ネイティブ命令格納領域２５に格納されたネイティブ命令を実行する。
【００６６】
続いて、ステップＰ２０９を実行し、１命令のシミュレーションでは直接操作できない周辺機能、たとえば、シミュレーション対象プロセッサに内蔵されたタイマーのカウントアップの処理などを行う。
【００６７】
続いて、ステップＰ２１０を実行し、シミュレーション対象プロセッサに対する割り込み（外部割り込み、タイマーの一致による内部割り込みなど）のチェック、シミュレーションに必要であったクロック数の更新（この値によって、実際のプロセッサでは、どのくらいの時間で、処理ができるかの算出ができる）、シミュレーション停止か否かのチェックなどを行う。
【００６８】
続いて、ステップＰ２１１を実行し、シミュレーション停止か否かの判断し、もし、シミュレーションを続行すると判断したならばステップＰ２０１の処理へジャンプする。一方、シミュレーション停止と判断したならばシミュレーションを停止させる。
【００６９】
ここで、図１を参照すると、本実施の形態は、シミュレータ３０のプログラムを補助記憶装置１０１からコンピュータシステム１００に読み込んでシミュレーションを実行するため、補助記憶装置１０１へシミュレータ３０を記述したプログラムコードを記録した記録媒体（不図示）を備えている。当該記録媒体は磁気ディスク、光ディスク、半導体メモリカードなどの情報記憶媒体であってよい。
【００７０】
以上説明したように第２の実施の形態によれば以下に掲げる効果を奏する。まず第１の効果は、シミュレーション対象プログラム１を従来の命令逐次実行シミュレーションに比べて、高速にシミュレーションできることである。その理由は、シミュレーション対象プログラム１のループ処理（たとえば、Ｃ言語でのｆｏｒ文）で、同一の命令を実行する場合に、命令のデコードが不要であり、さらに、ネイティブ命令実行によって、擬似レジスタ・メモリ格納領域２３の情報を直接扱うことができるからである。
【００７１】
また第２の効果は、マイクロコントローラのような制御系のプロセッサに対して１命令毎に実行することで割り込み処理や周辺機能シミュレーションに対しても、正確にシミュレーションを行うことができることである。その理由は、従来のように、シミュレーション対象プログラム１をネイティブ命令に変換する場合、ある命令群の固まりを変換するのではなく、１命令毎に変換するため、ネイティブ命令実行によって、割り込み処理や周辺機能シミュレーションの動作に、影響を与えないからである。
【００７２】
そして第３の効果は、本実施の形態のプログラムを開発する場合に、従来の命令逐次実行シミュレーションに対する改造点が少ないために、開発期間が少なくて済ませることができることである。その理由は、基本的な処理の流れは、従来の命令逐次実行シミュレーションと同じであるからである。
【００７３】
なお、本発明が上記各実施の形態に限定されず、本発明の技術思想の範囲内において、各実施の形態は適宜変更され得ることは明らかである。また上記構成部材の数、位置、形状などは上記実施の形態に限定されず、本発明を実施する上で好適な数、位置、形状などにすることができる。また、各図において、同一構成要素には同一符号を付している。
【００７４】
【発明の効果】
本発明は以上のように構成されているので、以下に掲げる効果を奏する。まず第１の効果は、シミュレーション対象プログラムを従来の命令逐次実行シミュレーションに比べて、高速にシミュレーションできることである。その理由は、シミュレーション対象プログラムのループ処理（たとえば、Ｃ言語での  ｆｏｒ文）で、同一の命令を実行する場合に、命令のデコードが不要であり、さらに、ネイティブ命令実行によって、擬似レジスタ・メモリ格納領域の情報を直接扱うことができるからである。
【００７５】
また第２の効果は、マイクロコントローラのような制御系のプロセッサに対して１命令毎に実行することで割り込み処理や周辺機能シミュレーションに対しても、正確にシミュレーションを行うことができることである。その理由は、従来のように、シミュレーション対象プログラムをネイティブ命令に変換する場合、ある命令群の固まりを変換するのではなく、１命令毎に変換するため、ネイティブ命令実行によって、割り込み処理や周辺機能シミュレーションの動作に、影響を与えないからである。
【００７６】
そして第３の効果は、本発明のプログラムを開発する場合に、従来の命令逐次実行シミュレーションに対する改造点が少ないために、開発期間が少なくて済ませることができることである。その理由は、基本的な処理の流れは、従来の命令逐次実行シミュレーションと同じであるからである。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態のシステム構成図である。
【図２】第１の実施の形態の制御部の処理の流れを示すフローチャートである。
【図３】本発明の第２の実施の形態のシステム構成図である。
【図４】第２の実施の形態の制御部の処理の流れを示すフローチャートである。
【図５】従来技術のプロセッサ命令シミュレーションの流れを説明するフロー図である。
【図６】従来技術におけるターゲットプログラムの実行のシミュレーションの流れを説明するフロー図である。
【図７】従来の逐次命令シミュレーション方法の処理の流れを示すフローチャートである。
【図８】従来技術を実現するためのシステム構成図である。
【符号の説明】
１…シミュレーション対象プログラム
２０，３０，９０…シミュレータ
２１，３１，９１…制御部
２２…実行済命令情報格納領域
２３…擬似レジスタ・メモリ格納領域
２５…ネイティブ命令格納領域
３２…デコード情報格納領域
１００…コンピュータシステム
１０１…補助記憶装置
１０２…入出力装置
２００…シミュレーションシステム
【図１】
0003753572.tif 000002
【図２】
0003753572.tif 000003
【図３】
0003753572.tif 000004
【図４】
0003753572.tif 000005
【図５】
0003753572.tif 000006
【図６】
0003753572.tif 000007
【図７】
0003753572.tif 000008
【図８】
0003753572.tif 000009