(57)【特許請求の範囲】
【請求項１】
ソースプログラムからターゲットシステム上で実行される目的プログラムを生成する装置における実行ステップ調整方法であって、
前記ソースプログラムより命令コードに変換して生成されたオブジェクトの分岐構造および分岐ルートごとの命令ステップ数の静的解析を行い、その結果によりステップ数調整オブジェクトを生成する第１の手順と、
前記生成されたオブジェクトのメモリ割付情報を参照し該メモリ割付情報に基づき前記ステップ数調整オブジェクトを修正する第２の手順と、
前記生成されたオブジェクトと前記ステップ数調整オブジェクトを結合し、前記目的プログラムとしての実行形式を生成する第３の手順とを含むことを特徴とする目的プログラムの実行ステップ数調整方法。
【請求項２】
前記第１の手順は、前記ソースプログラムおよび命令実行ステップ数情報を参照して、前記ステップ数調整オブジェクトと個別ステップ数調整情報とを作成し、前記第２の手順は、前記メモリ割付情報を参照して、前記個別ステップ数調整情報と前記ステップ数調整オブジェクトを修正し、第３の手順は、前記生成されたオブジェクトおよび前記ステップ数調整オブジェクトを結合して前記実行形式および結合ステップ数調整情報を作成する請求項１記載の目的プログラム実行ステップ調整方法。
【請求項３】
ソースプログラムからターゲットシステム上で実行される目的プログラムを生成する装置における実行ステップ調整方法であって、
前記ソースプログラムより命令コードに変換して生成されたオブジェクトの分岐構造および分岐ルートごとの命令ステップ数の静的解析を行い、その結果によりステップ数調整オブジェクトを生成する第１の手順と、
前記生成されたオブジェクトのメモリ割付情報を参照し該メモリ割付情報に基づき前記ステップ数調整オブジェクトを修正する第２の手順と、
前記生成されたオブジェクトと前記ステップ数調整オブジェクトを結合し、前記目的プログラムとしての実行形式を生成する第３の手順と、
前記第３の手順により生成された前記実行形式を前記ステップ数調整情報によって動的解析を行い、その結果により実行ステップ数計測結果を出力する第４の手順と、
前記実行ステップ数計測結果を用いて前記ステップ数調整オブジェクトを修正する第５の手順とを含み、
前記第５の手順により前記ステップ数調整オブジェクトが修正されたとき、前記第３の手順に戻って前記目的プログラムとしての実行形式を再生成することを特徴とする目的プログラムの実行ステップ数調整方法。
【請求項４】
前記第１の手順は、前記ソースプログラムおよび命令実行ステップ数情報を参照して、前記ステップ数調整オブジェクトと個別ステップ数調整情報とを作成し、前記第２の手順は、前記メモリ割付情報を参照して、前記個別ステップ数調整情報と前記ステップ数調整オブジェクトを修正し、第３の手順は、前記生成されたオブジェクトおよび前記ステップ数調整オブジェクトを結合して前記実行形式および結合ステップ数調整情報を作成し、前記第４の手順は、前記結合ステップ数調整情報を用いて、分岐ルートに対する実行ステップ数の計測および不要ステップの削除を行った後に、前記実行ステップ数計測結果を作成し、前記第５の手順は、前記実行ステップ数計測結果を参照し、前記個別ステップ数調整情報と前記ステップ数調整オブジェクトを修正する請求項３記載の目的プログラムの実行ステップ数調整方法。
【請求項５】
ソースプログラムからターゲットシステム上で実行される目的プログラムを生成する装置における実行ステップ調整方法であって、
前記ソースプログラムより命令コードに変換して生成されたオブジェクトの分岐構造および分岐ルートごとの命令ステップ数の静的解析および前記生成されたオブジェクトのメモリ割付情報の参照を行い、それらの結果によりステップ数調整オブジェクトを生成する第１の手順と、
前記生成されたオブジェクトと前記ステップ数調整オブジェクトを結合し、前記目的プログラムとしての実行形式を生成する第２の手順と、
前記第２の手順により生成された前記実行形式をステップ数調整情報によって動的解析を行い、その結果により実行ステップ数計測結果を出力する第３の手順と、
前記実行ステップ数計測結果により前記ステップ数調整オブジェクトを修正する第４の手順とを含み、
前記第４の手順によって前記ステップ数調整オブジェクトが修正されたとき、前記第２の手順に戻って前記目的プログラムを再生成することを特徴とする目的プログラムの実行ステップ数調整方法。
【請求項６】
ソースプログラムより命令コードに変換して生成されたオブジェクトを出力し、前記生成されたオブジェクトをメモリ割付情報に基づいて結合することにより、目的プログラムとしての実行形式を作成し、それによって実行ステップ数を計測する目的プログラムの実行ステップ数調整装置において、
命令実行ステップ数情報を参照して前記生成されたオブジェクトの分岐構造および分岐ルートごとの命令ステップ数の静的解析を行うコード解析ステップ数計測手段と，前記コード解析ステップ数計測手段によって得られた静的解析の結果を用い、個別ステップ数調整情報およびステップ数調整オブジェクトを作成するコード解析ステップ数調整手段とを備えるオブジェクト生成部と、
前記生成されたオブジェクト，前記ステップ数調整オブジェクト，前記個別ステップ数調整情報を結合し、前記目的プログラムとしての実行形式と結合ステップ数調整情報を出力するオブジェクト結合手段と，前記生成されたオブジェクトのメモリ割付情報を参照し該メモリ割付情報に基づき前記ステップ数調整オブジェクトおよび前記個別ステップ数調整情報を修正するメモリ割付ステップ数調整手段とを備えるオブジェクト結合部と、
を有することを特徴とする目的プログラムの実行ステップ数調整装置。
【請求項７】
前記目的プログラムの実行ステップ数調整装置は、前記オブジェクト結合部で作成された前記実行形式を実行するとともに、前記結合ステップ数調整情報によって分岐ルートごとの実行ステップ数を計測する実行ステップ数計測手段と，前記実行ステップ数計測手段の計測結果から不要ステップを削除し、実行ステップ数計測結果を出力する不要ステップ削除手段とを備える目的プログラムの実行部と、前記実行ステップ数計測結果より分岐ルートごとの実行ステップ数を取出し、調整を行って、前記ステップ数調整オブジェクトと前記個別ステップ数調整情報を修正する実行ステップ数調整手段を備える実行ステップ数更新部とを有し、前記オブジェクト結合手段により、前記実行形式と前記結合ステップ数調整情報を再結合する請求項６記載の目的プログラムの実行ステップ数調整装置。
【請求項８】
ソースプログラムより命令コードに変換して生成されたオブジェクトを出力し、前記生成されたオブジェクトをメモリ割付情報に基づいて結合することにより、目的プログラムとしての実行形式を作成し、それによって実行ステップ数を計測する目的プログラムの実行ステップ数調整装置において、
命令実行ステップ数情報を参照して前記生成されたオブジェクトの分岐構造および分岐ルートごとの命令ステップ数の静的解析を行うコード解析ステップ数計測手段と，前記コード解析ステップ数計測手段によって得られた静的解析の結果を用い、個別ステップ数調整情報およびステップ数調整オブジェクトを作成するコード解析ステップ数調整手段と，前記生成されたオブジェクトのメモリ割付情報を参照し該メモリ割付情報に基づき前記ステップ数調整オブジェクトおよび前記個別ステップ数調整情報を修正するメモリ割付ステップ数調整手段とを備えるオブジェクト生成部と、前記生成されたオブジェクト，前記ステップ数調整オブジェクト，前記個別ステップ数調整情報を結合し、前記目的プログラムとしての実行形式と結合ステップ数調整情報を出力するオブジェクト結合手段を備えるオブジェクト結合部とを有することを特徴とする目的プログラムの実行ステップ数調整装置。
【請求項９】
前記目的プログラムの実行ステップ数調整装置は、前記オブジェクト結合部で作成された前記実行形式を実行するとともに、前記結合ステップ数調整情報によって分岐ルートごとの実行ステップ数を計測する実行ステップ数計測手段と，前記実行ステップ数計測手段の計測結果から不要ステップを削除し、実行ステップ数計測結果を出力する不要ステップ削除手段とを備える目的プログラムの実行部と、前記実行ステップ数計測結果より分岐ルートごとの実行ステップ数を取出し、調整を行って、前記ステップ数調整オブジェクトと前記個別ステップ数調整情報を修正する実行ステップ数調整手段を備える実行ステップ数更新部とを有し、前記オブジェクト結合手段により、前記実行形式と前記結合ステップ数調整情報を再結合する請求項８記載の目的プログラムの実行ステップ数調整装置。
【請求項１０】
ソースプログラムより命令コードに変換して生成されたオブジェクトの分岐構造および分岐ルートごとの命令ステップ数の静的解析を行い、その結果によりステップ数調整オブジェクトを生成する第１の手順と、
前記生成されたオブジェクトのメモリ割付情報を参照し該メモリ割付情報に基づき前記ステップ数調整オブジェクトを修正する第２の手順と、
前記生成されたオブジェクトと前記ステップ数調整オブジェクトを結合し、目的プログラムとしての実行形式を生成する第３の手順とを処理として、目的プログラムの生成装置に実行させるプログラムを記録したことを特徴とするプログラムを記憶した記録媒体。
【請求項１１】
ソースプログラムより命令コードに変換して生成されたオブジェクトの分岐構造および分岐ルートごとの命令ステップ数の静的解析を行い、その結果によりステップ数調整オブジェクトを生成する第１の手順と、
前記生成されたオブジェクトのメモリ割付情報を参照し該メモリ割付情報に基づき前記ステップ数調整オブジェクトを修正する第２の手順と、
前記生成されたオブジェクトと前記ステップ数調整オブジェクトを結合し、目的プログラムとしての実行形式を生成する第３の手順と、
前記第３の手順により生成された前記実行形式を前記ステップ数調整情報によって動的解析を行い、その結果により実行ステップ数計測結果を出力する第４の手順と、
前記実行ステップ数計測結果を用いて前記ステップ数調整オブジェクトを修正する第５の手順とを処理として、目的プログラムの実行装置に実行されるプログラムを記録したことを特徴とするプログラムを記憶した記憶媒体。
【請求項１２】
ソースプログラムより命令コードに変換して生成されたオブジェクトの分岐構造および分岐ルートごとの命令ステップ数の静的解析および前記生成されたオブジェクトのメモリ割付情報の参照を行い、それらの結果によりステップ数調整オブジェクトを生成する第１の手順と、
前記生成されたオブジェクトと前記ステップ数調整オブジェクトを結合し、目的プログラムとしての実行形式を生成する第２の手順と、
前記第２の手順により生成された前記実行形式をステップ数調整情報によって動的解析を行い、その結果により実行ステップ数計測結果を出力する第３の手順と、
前記実行ステップ数計測結果により前記ステップ数調整オブジェクトを修正する第４の手順とを処理として、目的プログラムの生成装置または前記目的プログラムの実行装置に実行させるプログラムを記録したことを特徴とするプログラムを記憶した記録媒体。
【請求項１３】
前記目的プログラムの実行ステップ数調整によって作成されたプログラムを記録した請求項１０乃至請求項１２のいずれかに記載のプログラムを記憶した記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプログラムの実行ステップ数を調整する方法とその調整装置およびプログラムを記憶した記録媒体に関し、特に目的プログラムの実行ステップ数調整方法とその調整装置および目的プログラムやその実行プログラムを記憶した記録媒体に関する。
【０００２】
【従来の技術】
一般に、プログラムの性能を向上させる意味で、コンパイラの最適化を行うことおよびプログラムの実行速度を知ることは、プログラム開発における重要な要素の一つである。
【０００３】
このコンパイラは、限られた時間および記録媒体にプログラムを収めるために、プログラムを高速動作させるとともに、プログラムのサイズを小さくすることが理想とされており、通常この為のソースプログラムの変換をコンパイラの最適化と呼んでいる。また、プログラムの実行速度を予測あるいは計測し、その結果によりソースプログラムを修正するか、あるいは実行速度の結果に基づきコンパイラを最適化し直すことが行われている。
【０００４】
しかし、このソースプログラムの修正あるいはコンパイラの最適化を行うと、プログラムの実行速度が変化したとき、プログラムの動作に不具合が生じる場合がある。
【０００５】
例えば、第一の不具合の例は、プログラムによって動作するＣＰＵに接続された外部回路の動作速度が遅く、そのためにプログラム上に時間待ち処理を挿入した場合に発生する。
【０００６】
また、第二の不具合の例は、外部入力を正確に計測したり、あるいは外部出力を正確に行う必要があり、そのためにプログラム上に待ち合せ処理を挿入した場合に発生する。
【０００７】
これらの不具合は、タイマ回路を使用して正確に時間計測を行っていたときには発生しないが、時間待ち処理機構や待ち合わせ処理機構がプログラムの命令コード実行ステップ数に依存する形式になっていたときには発生する。本来ならば、タイマ回路を使用して正確に時間計測を行うべきであるが、幾つかの要因によって、プログラムの命令コード実行ステップ数に依存する場合がある。
【０００８】
その第一の要因は、ソースプログラムの流用の問題である。例えば、ソースプログラムをＣＰＵに依存するアセンブラ命令や、タイマ回路によって実現したとき、そのソースプログラムのアルゴリズムを修正することになる。しかし、このアルゴリズムの修正を直接行うと、修正が面倒であり、信頼性も乏しくなるため、アルゴリズムの修正に比べて、より信頼性の高い命令コード実行ステップ数の修正に依存してしまうからである。
【０００９】
第二の要因は、組み込みシステムなどにおける価格の問題である。一般的に、タイマ回路などをシステムに組み込んだ場合、その分価格が上昇してしまう。近年、ＣＰＵ性能は向上したものの、それに合わせてプログラムも複雑な機能を組み込むことが要求されており、十分な性能を持ったＣＰＵを使用できないことが多い。
【００１０】
要するに、これらの要因により、前述した２つの不具合は無くならない問題であると言える。
【００１１】
かかる２つの不具合を抑制させる為に、規模の小さいシステムでは、目的プログラム中の必要な点にトラップ命令を埋め込み、ターゲットシステム上で実際にプログラムを動作させた上で調整を行っている。しかし、プログラムの規模が大きく、調整箇所が多い場合は再コンパイルなどの作業後、何度も調整を繰り返す必要があり時間がかかった。
【００１２】
また、例えば特開平１１−０３９１５５号公報（文献１）や特開平１１−２９６４１６号公報（文献２）にも開示されているように、静的にソースプログラムを解析し、実行ステップを出力する方法もある。この方法は、コンパイラの最適化によって、実行ステップが変化するため、何度も調整を繰り返す必要がある。しかも、かかる方法は時間がかかり、ターゲットシステム上で行う動的な計測を利用した調整、およびソース解析による静的な調整では、ソースプログラムを何度も修正することが必要であり、ソースプログラムの流用を著しく妨げていた。
【００１３】
さらに、動的に計測する方法として、例えば特開平６−２８２４４４号公報（文献３）に記載されたコンパイル方法もある。このコンパイル方法は、予め準備された機械語を選択するか、命令数のみを計測するものであり、上述した２つの不具合を発生させないためには不十分である。
【００１４】
図１６は従来の実行ステップ数調整方法の一例を示すシステム構成図である。図１６に示すように、従来の実行ステップ数調整にあたっては、ソースプログラム５０よりオブジェクト５２を作成するオブジェクト生成部１ａと、オブジェクト結合部２ａと、実行ステップ数の計測を行う実行部３ａとを有している。このオブジェクト生成部１ａは、オブジェクト生成手段１２と、コード解析ステップ数計測手段１３と、アセンブラソース生成手段１５とを備え、ソースプログラム５０より命令実行ステップ数情報５１に基づいてオブジェクト５２およびステップ数計測結果６１を出力するとともに、アセンブラソース生成手段１５よりアセンブラソース６０を出力する。またオブジェクト結合部２ａは、オブジェクト５２をメモリ割付情報５５に基づいて結合するオブジェクト結合手段２１を備え、実行形式５６を出力する。さらに、実行部３ａは、実行ステップ数計測手段３１を備え、ターゲットシステム３４との間の情報授受を行うとともに、外部モデル３３および実行形式５６により実行ステップ数計測結果５９を出力する。
【００１５】
このソースプログラム５０はＣ言語，アセンブリ言語などで記述された原始プログラムであり、オブジェクト５２はかかる原始プログラムをコンパイラ，アセンブラによって命令コードに変換したオブジェクトコード群である。ここで、命令実行ステップ数情報５１は、命令コードと，この命令コードの実行ステップ数とによって構成されている。このオブジェクト５２はメモリ割付情報５５を元にし、オブジェクト結合手段２１によって実行形式５６として出力されるが、この実行形式５６は実行部３ａにおいて実行できるオブジェクトコード群である。一方、ターゲットシステム３４は、実行部３ａが例えばエミュレータであったときには、メモリや外部装置などのハードウェアであり、また外部モデル３３は、実行部３ａが例えばシミュレータであったときには、メモリや外部装置などをソフトウェアにより、シミュレーションするための構成と動作を定義されているファイルである。
【００１６】
このように、従来の実行ステップ数の調整（文献１）においては、ソースプログラム５０を解析し、ステップ数計測結果６１をアセンブラソース６０に付加して出力することにより、ソースプログラム５０の実行ステップ数を予測しようとしている。すなわち、この従来例においては、アセンブラソース６０に付加された実行ステップ数によって、ソースプログラム５０の修正と、オブジェクト５２の生成とを繰返えすことにより、実行ステップ数を調整する必要がある。
【００１７】
また、上述したシステムにおいて、文献２に記載したような技術を用いても、文献２では、ソースプログラム５０を解析し、ステップ数計測結果６１に基づいて、ループ毎のステップ数を求め、ソースプログラム５０の実行ステップ数を予測するものであるため、ループ毎の命令数を計測するだけであり、実行ステップ数を求めることはできない。
【００１８】
同様に、上述したシステムにおいて、文献３のようなシステムを用いても、文献３では、オブジェクト生成部１ａおよびオブジェクト結合部２ａの組込み時、またはソースプログラム５０を翻訳してオブジェクト５２を生成するとき、実行部３ａによって命令実行ステップ数情報５１を最適なものに更新することはできても、予め準備された命令を選択するだけであるので、実行ステップ数を求めることはできない。
【００１９】
したがって、上述した従来例においては、計測技術が不十分であることに加えて、複数の外部装置を接続するシステムの通信部分が、前述したプログラムの命令コード実行ステップ数に依存する構成になっている場合には、すべての機器接続の組合せにおいて、前述したような計測を行い、ソースプログラムの修正を行うことは、プログラムの開発の後段階での評価を長くするという問題がある。さらに、プログラムの開発途中において、ＣＰＵに接続するＲＯＭ，ＲＡＭ，Ｉ／Ｏなどの外部回路および前述した外部装置は、タイミングが変化することから、結果を簡単に反映することが必要である。
【００２０】
以上のことから、アルゴリズムを変更しないで、しかもソースプログラムを修正せずに、上述した２つの不具合の対策を施すこと、再コンパイルなどによる調整時間を短くすること、さらには開発途中における外部回路または外部装置のタイミング調整を簡単に行えることが重要である。
【００２１】
図１７は従来の他の例を説明するためのコンパイル装置を用いたシステム構成図である。図１７に示すように、このシステムは、例えば特開２０００−１９４５６６号公報（文献４）に記載されているように、オブジェクト生成部にコンパイル装置１ｂを用いたものであり、ソースプログラム５０からオブジェクト５２を生成するにあたり、分岐履歴情報ファイル６７を使用している。特に、コンパイル装置１ｂは分岐履歴情報採取コード生成手段６３と、分岐パターン解析手段６４と、ループ並列化手段６５と、ループ最適化手段６６とを備え、分岐情報を貯えるためのコードを埋め込み、実行結果を元に最適なオブジェクトプロゲラムを生成することにより、並列化処理における各ループの負荷分散を均等化し、プログラムの性能を向上させるものである。
【００２２】
しかし、このコンパイル装置を用いたシステムは、オブジェクトから履歴情報ファイルを作成するため、コンパイル装置１ｂで再コンパイルを必要とし、実行環境が無いと最適化を行えないという問題がある。しかも、この例は、分岐に関する最適化のみであり、外部回路（ＲＯＭ，ＲＡＭ，Ｉ／Ｏなど）や外部装置のタイミング調整を行えないという問題がある。
【００２３】
図１８は従来のまた別の例を説明するための目的プログラムの最適化を行うＣＰＵとメモリ等の接続構成図である。図１８に示すように、この構成例は、例えば特開平７−６４７９９号公報（文献５）に記載されているように、コンパイラで生成した目的プログラムを計算機に試行させ、その試行結果で目的プログラムを最適化させるものである。
【００２４】
すなわち、コンパイラが最適化処理中の目的プログラムを第１のＣＰＵ７５に対応した第１のメモリ７６に格納し、そのプログラムの試行の実行をＯＳに要求する。この要求により、ＯＳは試行モードを設定し、第２のＣＰＵ７３の試行モード切換スイッチ７２を切換えるとともに、目的プログラム試行に際して実行する命令毎に計算機内部の動的状態を格納する実行状況テーブルを第２のＣＰＵ７３に接続された第２のメモリ７７に設定し且つトレース先頭指定レジスタ７１を設定する。また、パイプライン制御機構７４は、命令の実行毎に実行状況テーブルに計算機の動的状態を自動的に記録する。かかる試行後、その実行状況テーブルの記録内容をコンパイラに渡すと、コンパイラはその記録内容により目的プログラムの未最適化部分の最適化を行う。要するに、この従来例は、第１のＣＰＵ７５で実行された結果を、第２のＣＰＵ７３により実行状況テーブルとしての第２のメモリ７７の指定位置から保存し、その結果をコンパイラに知らせるものである。
【００２５】
しかし、この例においては、コンパイラ最適化処理中に、第１のＣＰＵ７５で試行の実行をし、その後第２のＣＰＵ７３が記録する実行状況テーブルを読み出して、再度コンパイラによる最適化を実行するため、コンパイル時間が長くなるという問題がある。また、この例においては、コンパイル時に、特別なハードウェアを必要とするという問題がある。例えば、パイプライン制御機構７４から出力される情報を記録するためには、第２のＣＰＵ７３の性能が、少なくとも第１のＣＰＵ７５よりも上でないと、記録することはできない。その理由は、プログラムによって第２のメモリ７７に保存するための命令が１命令では実行できないからである。このために、かかる従来例においては、外部回路などのタイミング調整を行うことができないことになる。
【００２６】
【発明が解決しようとする課題】
上述した図１６のシステムにおいては、計測技術が不十分であり、複数の外部装置を接続するシステムの通信部分が、前述したプログラムの命令コード実行ステップ数に依存する構成になっている場合には、すべての機器接続の組合せにおいて計測を行い、ソースプログラムの修正を行わねばならず、プログラム開発の時間を長くするという欠点がある。さらに、プログラムの開発途中において、外部回路などはタイミングが変化することから、結果を簡単に反映することが困難であるという欠点がある。
【００２７】
このため、アルゴリズムを変更せずに且つソースプログラムも修正せずに、上述した不具合の対策を施すこと、再コンパイルなどによる調整時間を短くすること、さらには開発途中における外部回路等のタイミング調整を簡単に行うことが困難であるという欠点もある。
【００２８】
また、上述した図１７および図１８のシステムにおいては、プログラムの最適化が目的である。つまり、これらが意図しているのは、プログラムを高速に動作させたり、あるいはプログラムのサイズを小さくすることであり、時間待ちおよび待ち合せを命令コードの挿入によって行っているとき、分岐ルートごとの実行ステップ数を合わせるようなことは、実現できないという欠点がある。
【００２９】
本発明の目的は、上述したソースプログラム上に時間待ち処理や待ち合わせ処理を挿入したとき、正確な時間待ちや待ち合わせを実現し、再コンパイルなどによる調整時間を短くするとともに、プログラム開発における外部回路などのタイミング調整を簡単に行うことのできる目的プログラムの実行ステップ数調整方法とその調整装置およびプログラムを記憶した記録媒体を提供することにある。
【００３０】
【課題を解決するための手段】
本発明の目的プログラムの実行ステップ数調整方法は、ソースプログラムからターゲットシステム上で実行される目的プログラムを生成する装置における実行ステップ調整方法であって、前記ソースプログラムより命令コードに変換して生成されたオブジェクトの分岐構造および分岐ルートごとの命令ステップ数の静的解析を行い、その結果によりステップ数調整オブジェクトを生成する第１の手順と、前記生成されたオブジェクトのメモリ割付情報を参照し該メモリ割付情報に基づき前記ステップ数調整オブジェクトを修正する第２の手順と、前記生成されたオブジェクトと前記ステップ数調整オブジェクトを結合し、前記目的プログラムとしての実行形式を生成する第３の手順とを含んで構成される。
【００３１】
また、本発明における前記第１の手順は、前記ソースプログラムおよび命令実行ステップ数情報を参照して、前記ステップ数調整オブジェクトと個別ステップ数調整情報とを作成し、前記第２の手順は、前記メモリ割付情報を参照して、前記個別ステップ数調整情報と前記ステップ数調整オブジェクトを修正し、第３の手順は、前記生成されたオブジェクトおよび前記ステップ数調整オブジェクトを結合して前記実行形式および結合ステップ数調整情報を作成するように形成される。
【００３２】
本発明の目的プログラムの実行ステップ数調整方法は、ソースプログラムからターゲットシステム上で実行される目的プログラムを生成する装置における実行ステップ調整方法であって、前記ソースプログラムより命令コードに変換して生成されたオブジェクトの分岐構造および分岐ルートごとの命令ステップ数の静的解析を行い、その結果によりステップ数調整オブジェクトを生成する第１の手順と、前記生成されたオブジェクトのメモリ割付情報を参照し該メモリ割付情報に基づき前記ステップ数調整オブジェクトを修正する第２の手順と、前記生成されたオブジェクトと前記ステップ数調整オブジェクトを結合し、前記目的プログラムとしての実行形式を生成する第３の手順と、前記第３の手順により生成された前記実行形式を前記ステップ数調整情報によって動的解析を行い、その結果により実行ステップ数計測結果を出力する第４の手順と、前記実行ステップ数計測結果を用いて前記ステップ数調整オブジェクトを修正する第５の手順とを含み、前記第５の手順により前記ステップ数調整オブジェクトが修正されたとき、前記第３の手順に戻って前記目的プログラムとしての実行形式を再生成するように形成される。
【００３３】
また、本発明における前記第１の手順は、前記第１の手順は、前記ソースプログラムおよび命令実行ステップ数情報を参照して、前記ステップ数調整オブジェクトと個別ステップ数調整情報とを作成し、前記第２の手順は、前記メモリ割付情報を参照して、前記個別ステップ数調整情報と前記ステップ数調整オブジェクトを修正し、第３の手順は、前記生成されたオブジェクトおよび前記ステップ数調整オブジェクトを結合して前記実行形式および結合ステップ数調整情報を作成し、前記第４の手順は、前記結合ステップ数調整情報を用いて、分岐ルートに対する実行ステップ数の計測および不要ステップの削除を行った後に、前記実行ステップ数計測結果を作成し、前記第５の手順は、前記実行ステップ数計測結果を参照し、前記個別ステップ数調整情報と前記ステップ数調整オブジェクトを修正するように形成される。
【００３４】
本発明の目的プログラムの実行ステップ数調整方法は、ソースプログラムからターゲットシステム上で実行される目的プログラムを生成する装置における実行ステップ調整方法であって、前記ソースプログラムより命令コードに変換して生成されたオブジェクトの分岐構造および分岐ルートごとの命令ステップ数の静的解析および前記生成されたオブジェクトのメモリ割付情報の参照を行い、それらの結果によりステップ数調整オブジェクトを生成する第１の手順と、前記生成されたオブジェクトと前記ステップ数調整オブジェクトを結合し、前記目的プログラムとしての実行形式を生成する第２の手順と、前記第２の手順により生成された前記実行形式をステップ数調整情報によって動的解析を行い、その結果により実行ステップ数計測結果を出力する第３の手順と、前記実行ステップ数計測結果により前記ステップ数調整オブジェクトを修正する第４の手順とを含み、前記第４の手順によって前記ステップ数調整オブジェクトが修正されたとき、前記第２の手順に戻って前記目的プログラムを再生成するように構成される。
【００３５】
本発明の目的プログラムの実行ステップ数調整装置は、ソースプログラムより命令コードに変換して生成されたオブジェクトを出力し、前記生成されたオブジェクトをメモリ割付情報に基づいて結合することにより、目的プログラムとしての実行形式を作成し、それによって実行ステップ数を計測する目的プログラムの実行ステップ数調整装置において、命令実行ステップ数情報を参照して前記生成されたオブジェクトの分岐構造および分岐ルートごとの命令ステップ数の静的解析を行うコード解析ステップ数計測手段と，前記コード解析ステップ数計測手段によって得られた静的解析の結果を用い、個別ステップ数調整情報およびステップ数調整オブジェクトを作成するコード解析ステップ数調整手段とを備えるオブジェクト生成部と、前記生成されたオブジェクト，前記ステップ数調整オブジェクト，前記個別ステップ数調整情報を結合し、前記目的プログラムとしての実行形式と結合ステップ数調整情報を出力するオブジェクト結合手段と，前記生成されたオブジェクトのメモリ割付情報を参照し該メモリ割付情報に基づき前記ステップ数調整オブジェクトおよび前記個別ステップ数調整情報を修正するメモリ割付ステップ数調整手段とを備えるオブジェクト結合部と、を有して構成される。
【００３６】
また、本発明の目的プログラムの実行ステップ数調整装置は、前記オブジェクト結合部で作成された前記実行形式を実行するとともに、前記結合ステップ数調整情報によって分岐ルートごとの実行ステップ数を計測する実行ステップ数計測手段と，前記実行ステップ数計測手段の計測結果から不要ステップを削除し、実行ステップ数計測結果を出力する不要ステップ削除手段とを備える目的プログラムの実行部と、前記実行ステップ数計測結果より分岐ルートごとの実行ステップ数を取出し、調整を行って、前記ステップ数調整オブジェクトと前記個別ステップ数調整情報を修正する実行ステップ数調整手段を備える実行ステップ数更新部とを有し、前記オブジェクト結合手段により、前記実行形式と前記結合ステップ数調整情報を再結合するように形成される。
【００３７】
本発明の目的プログラムの実行ステップ数調整装置は、ソースプログラムより命令コードに変換して生成されたオブジェクトを出力し、前記生成されたオブジェクトをメモリ割付情報に基づいて結合することにより、目的プログラムとしての実行形式を作成し、それによって実行ステップ数を計測する目的プログラムの実行ステップ数調整装置において、
命令実行ステップ数情報を参照して前記生成されたオブジェクトの分岐構造および分岐ルートごとの命令ステップ数の静的解析を行うコード解析ステップ数計測手段と，前記コード解析ステップ数計測手段によって得られた静的解析の結果を用い、個別ステップ数調整情報およびステップ数調整オブジェクトを作成するコード解析ステップ数調整手段と，前記生成されたオブジェクトのメモリ割付情報を参照し該メモリ割付情報に基づき前記ステップ数調整オブジェクトおよび前記個別ステップ数調整情報を修正するメモリ割付ステップ数調整手段とを備えるオブジェクト生成部と、前記生成されたオブジェクト，前記ステップ数調整オブジェクト，前記個別ステップ数調整情報を結合し、前記目的プログラムとしての実行形式と結合ステップ数調整情報を出力するオブジェクト結合手段を備えるオブジェクト結合部とを有して構成される。
【００３８】
また、本発明の目的プログラムの実行ステップ数調整装置は、前記オブジェクト結合部で作成された前記実行形式を実行するとともに、前記結合ステップ数調整情報によって分岐ルートごとの実行ステップ数を計測する実行ステップ数計測手段と，前記実行ステップ数計測手段の計測結果から不要ステップを削除し、実行ステップ数計測結果を出力する不要ステップ削除手段とを備える目的プログラムの実行部と、前記実行ステップ数計測結果より分岐ルートごとの実行ステップ数を取出し、調整を行って、前記ステップ数調整オブジェクトと前記個別ステップ数調整情報を修正する実行ステップ数調整手段を備える実行ステップ数更新部とを有し、前記オブジェクト結合手段により、前記実行形式と前記結合ステップ数調整情報を再結合するようぬ形成される。
【００３９】
本発明のプログラムを記憶した記録媒体は、ソースプログラムより命令コードに変換して生成されたオブジェクトの分岐構造および分岐ルートごとの命令ステップ数の静的解析を行い、その結果によりステップ数調整オブジェクトを生成する第１の手順と、前記生成されたオブジェクトのメモリ割付情報を参照し該メモリ割付情報に基づき前記ステップ数調整オブジェクトを修正する第２の手順と、前記生成されたオブジェクトと前記ステップ数調整オブジェクトを結合し、目的プログラムとしての実行形式を生成する第３の手順とを処理として、目的プログラムの生成装置に実行させるプログラムを記録して構成される。
【００４０】
本発明のプログラムを記憶した記録媒体は、ソースプログラムより命令コードに変換して生成されたオブジェクトの分岐構造および分岐ルートごとの命令ステップ数の静的解析を行い、その結果によりステップ数調整オブジェクトを生成する第１の手順と、前記生成されたオブジェクトのメモリ割付情報を参照し該メモリ割付情報に基づき前記ステップ数調整オブジェクトを修正する第２の手順と、前記生成されたオブジェクトと前記ステップ数調整オブジェクトを結合し、目的プログラムとしての実行形式を生成する第３の手順と、前記第３の手順により生成された前記実行形式を前記ステップ数調整情報によって動的解析を行い、その結果により実行ステップ数計測結果を出力する第４の手順と、前記実行ステップ数計測結果を用いて前記ステップ数調整オブジェクトを修正する第５の手順とを処理として、目的プログラムの実行装置に実行されるプログラムを記録して構成される。
【００４１】
本発明のプログラムを記憶した記録媒体は、ソースプログラムより命令コードに変換して生成されたオブジェクトの分岐構造および分岐ルートごとの命令ステップ数の静的解析および前記生成されたオブジェクトのメモリ割付情報の参照を行い、それらの結果によりステップ数調整オブジェクトを生成する第１の手順と、前記生成されたオブジェクトと前記ステップ数調整オブジェクトを結合し、目的プログラムとしての実行形式を生成する第２の手順と、前記第２の手順により生成された前記実行形式をステップ数調整情報によって動的解析を行い、その結果により実行ステップ数計測結果を出力する第３の手順と、前記実行ステップ数計測結果により前記ステップ数調整オブジェクトを修正する第４の手順とを処理として、目的プログラムの生成装置または前記目的プログラムの実行装置に実行させるプログラムを記録して構成される。
【００４２】
また、本発明のプログラムを記憶した記録媒体は、前記目的プログラムの実行ステップ数調整によって作成されたいずれかのプログラムを記録して形成される。
【００４３】
【発明の実施の形態】
本発明の実施の形態は、ソースプログラムに記述された時間待ちおよび待ち合せを命令コード挿入によって行っているとき、プログラムの分岐ルートごとに異なる実行ステップ数を同一ステップ数にすることにより、タイマ回路などの特殊なハードウェアを用いずに正確に行うものである。
【００４４】
具体的には、まずコンパイラ，アセンブラにより静的解析を行い、その結果によってステップ数調整オブジェクトを出力する。ついで、リンカによってメモリ配置による静的解析を行い、その結果でステップ数調整オブジェクトを修正する。さらに、エミュレータ，シミュレータにより動的解析を行い、その結果によりステップ数調整オブジェクトを修正する。しかる後、再度リンクすることによって、プログラムの分岐ルートごとの実行ステップ数を同一ステップ数にする。以上の操作により、実行ステップ数を段階的に調整する。
【００４５】
以下、本発明の実施の形態を図面を参照して説明する。
【００４６】
図１は本発明の一実施の形態を説明するための実行ステップ数調整装置のシステム構成図である。なお、前述した図１６のシステム構成における回路やファイルの機能と同様の要素については、同一の番号を付与している。図１に示すように、本実施の形態は、目的プログラムの実行ステップ数調整を行うにあたり、ソースプログラム５０および命令実行ステップ数情報５１よりオブジェクト５２，個別ステップ数調整情報５３およびステップ数調整オブジェクト５４を作成するオブジェクト生成部１と、このオブジェクト５２やメモリ割付情報５５などにより複数のオブジェクトを結合し、実行形式（目的プログラム）５６および結合ステップ数調整情報５７を作成するオブジェクト結合部２と、外部モデル３３やターゲットシステム３４を入力するとともに、実行形式５６や結合ステップ数調整情報５７に基づいてプログラムを試行実行し、実行ステップ数計測結果５８を出力する実行部３と、この実行ステップ数計測結果５８を用いて実行ステップ数の調整を行い、前述した個別ステップ数調整情報５３およびステップ数調整オブジェクト５４を更新する実行ステップ数更新部４とを有している。
【００４７】
ここで、ソースプログラム５０は、Ｃ言語，アセンブリ言語など記述された原始プログラムであり、命令実行ステップ数情報５１は、命令コードと、この命令コードの実行ステップ数とによって構成されている。オブジェクト５２は、原始プログラムをコンパイラ，アセンブラによって命令コードに変換したオブジェクトコード群である。このオブジェクト５２は、メモリ割付情報５５を元にし、オブジェクト結合部２によりて実行形式５６として出力される。この実行形式５６は、実行部３において実行できるオブジェクトコード群である。
【００４８】
一方、ターゲットシステム３４は、実行部３をエミュレータとしたときに、メモリや外部装置などのハードウェアであり、また外部モデル３３は、実行部３をシミュレータで形成した場合、メモリや外部装置などを、ソフトウェアによりシミュレーションするための構成と動作を定義したファイルである。なお、ターゲットシステム３４とシミュレータ、および外部モデル３３とエミュレータの組合わせでは、使用されない。
【００４９】
さらに、実行部３における実行ステップ数とは、命令コードをＣＰＵによって実行した場合に必要なクロック数であり、後述する合計ステップ数，差分ステップ数，加算ステップ数は、それぞれ複数個の実行クロック数を合計、差分、加算した値である。さらに、調整ステップ数は、分岐ルートごとの実行ステップ数を同一ステップにするために調整する値を意味する。
【００５０】
以下の説明では、コンパイラ、アセンブラ、リンカなどによって、ソースプログラム５０、オブジェクト５２、実行形式５６の命令コードを実行せずに、分岐ルートを解析することを静的解析と呼び、命令コードを実行せずに、実行ステップ数、合計ステップ数、差分ステップ数、加算ステップ数を計測することを静的計測と呼び、この静的計測によって、ステップ数を調整することを静的調整と呼ぶ。同様に、エミュレータやシミュレータなどによって、実行形式５６の命令コードを実行し、その実行した結果により分岐ルートを解析することを動的解析と呼び、実行した結果によって、実行ステップ数、合計ステップ数、差分ステップ数、加算ステップ数を計測することを動的計測と呼び、この動的計測によって、ステップ数を調整することを動的調整と呼ぶ。
【００５１】
また、個別ステップ数調整情報５３は、ソースプログラム５０ごとに生成し、ソースプログラム５０を識別するためのソースファイル情報と、ステップ数範囲行とステップ数範囲レーベルとステップ数解析調整データとステップ数調整オブジェクト開始レーベル名を含むステップ数調整範囲情報と、によって構成される。メモリ割付情報５５は、メモリ割付の種類を識別できるセグメント名と、このセグメント名ごとのメモリ割付アドレス範囲と、このメモリ割付アドレス範囲をアクセスしたときに余分にかかる加算ステップ数とによって構成されている。結合ステップ数調整情報５７は、個別ステップ数調整情報５３を結合したものである。
【００５２】
このことを具体的に説明すると、ソースプログラム５０は、通常複数個（ｎ個）存在し、これらｎ個のソースプログラム５０をコンパイルすると、ｎ個のオブジェクト５２が生成される。このとき、ｎ個のソースプログラム５０に、例えばステップ数調整範囲を１個所指定すると、ｎ個の個別ステップ数調整情報５３と、ｎ個×（分岐ルート数）のステップ数調整オブジェクト５４が生成される。このため、ｎ個のオブジェクト５２と、ｎ個×（分岐ルート数）のステップ数調整オブジェクト５４とは、１つに結合して実行形式５６を得る。同様に、ｎ個の個別ステップ数調整情報５３を１つに結合して結合ステップ数調整情報５７を得るようにしている。
【００５３】
かかるオブジェクト生成部１は、ソースプログラム５０におけるステップ数の調整範囲を判定するステップ数調整範囲判定手段１１と、この判定手段１１の判定結果により実際のオブジェクトを生成するオブジェクト生成手段１２と、このオブジェクト生成結果によりコード解析するステップ数を計測するコード解析ステップ数計測手段１３と、ステップ数の計測結果によりコード解析するステップ数を調整するコード解析ステップ数調整手段１４とを備えている。このオブジェクト生成部１は、コンパイラまたはアセンブラであり、ソースプログラム５０と、命令実行ステップ数情報５１によって、オブジェクト５２と、個別ステップ数調整情報５３と、ステップ数調整オブジェクト５４を出力する。このオブジェクト生成部１におけるステップ数調整範囲判定手段１１は、ソースプログラム５０の計測範囲を識別し、個別ステップ数調整情報５３とステップ数調整オブジェクト５４の初期情報を出力する。また、コード解析ステップ数計測手段１３は、オブジェクト生成手段１２で生成したオブジェクト５２の計測範囲に対して分岐ルートを解析し、命令実行ステップ数情報５１を使った分岐ルートごとの命令コード実行ステップ数の合計と、各分岐ルートについてメモリ割付ごとのアクセス回数とを計測する。その結果、コード解析ステップ数調整手段１４は、分岐ルートごとの命令ステップ数から調整ステップ数を求め、個別ステップ数調整情報５３を更新し、ステップ数調整オブジェクト５４を呼び出す命令コードをオブジェクト５２に対して挿入した後、個別ステップ数調整情報５３で更新された調整ステップ数に相当する命令コードをステップ数調整オブジェクト５４として出力する。
【００５４】
また、オブジェクト生成部２は、リンカおよびアーカイバで構成され、オブジェクト結合手段２１と、個別ステップ数調整情報結合手段２２と、メモリ割付ステップ数調整手段２３とを備えており、メモリ割付情報５５を元にして、オブジェクト５２を結合して実行形式５６を出力するとともに、ステップ数調整オブジェクト５４を結合して結合ステップ数調整情報５７を出力する。すなわち、オブジェクト結合手段２１によって、オブジェクト５２を結合し、必要であればアーカイバまたはライブラリアンで作成されたライブラリも結合して実行形式５６を出力する。個別ステップ数調整情報結合手段２２はメモリ割付情報５５を元にして、個別ステップ数調整情報５３を結合し、結合ステップ数調整情報５７を出力する。このとき、結合ステップ数調整情報５７内のアドレスは、実行形式５６を作成することによって得られた絶対アドレスに変換する。ついで、メモリ割付ステップ数調整手段２３は、個別ステップ数調整情報結合手段２２の出力により、分岐ルートごとのメモリ割付によるアクセス回数から調整ステップ数を求め、それを個別ステップ数調整情報５３に挿入し且つ調整ステップ数に相当する命令をステップ数調整オブジェクト５４に挿入するとともに、その調整ステップ数に相当する命令を実行形式５６に結合する。
【００５５】
次に、実行部３は、シミュレータまたはエミュレータで構成され、実行ステップ数計測手段３１と、不要ステップ数削除手段３２とを備えている。この実行部３は、外部モデル３３またはターゲットシステム３４を使用し、実行形式５６に対しエミュレーションまたはシミュレーションを行い、結合ステップ数調整情報５７によって分岐ルートごとの計測範囲を得ることにより、実行ステップ数計測結果５８を出力する。特に、実行ステップ数計測手段３１は、結合ステップ数調整情報５７における分岐ルートの分岐開始アドレスと分岐終了アドレスを取出し、シミュレータまたはエミュレータに対して、分岐ルートの計測開始アドレスと計測終了アドレスとして命令コード実行ステップ数を計測する。また、不要ステップ削除手段３２は、割り込み処理やＤＭＡ転送などの分岐ルート以外の命令が実行された場合、実行ステップ数計測手段３１に対して再計測を要求するか、あるいは計測開始アドレスから計測終了アドレスまでの命令コード実行ステップ数より割り込み処理とＤＭＡ転送などの分岐ルート以外の実行ステップ数を減算することによって、実行ステップ数計測結果５８を出力する。
【００５６】
さらに、実行ステップ数更新部４は、実行ステップ数調整手段４１を備え、実行ステップ数計測結果５８に基づいて実行ステップ数の計算を行い、その結果によって個別ステップ数調整情報５３とステップ数調整オブジェクト５４とを更新する。要するに、実行ステップ数調整手段４１によって、コード解析による分岐ルートごとの実行ステップ数にメモリ割付による加算ステップ数を加えた値と、実行ステップ数計測結果５８の実行ステップ数との差分ステップ数を求め、それを調整ステップ数として個別ステップ数調整情報５３に挿入するとともに、差分ステップ数に相当する命令コードをステップ数調整オブジェクト５４に挿入する。
【００５７】
上述した実行部３において、初めて実行形式５６をエミュレーションまたはシミュレーションを行った場合、オブジェクト生成部１のコード解析による調整ステップ数と、オブジェクト結合部２におけるメモリ割付による加算ステップ数とによって、ソースプログラム５０に記述された調整範囲の分岐ルートを捜し、その分岐ルートごとの実行ステップ数を大まかに調整する。
【００５８】
その後、オブジェクト結合部２におけるメモリ割付情報５５の加算ステップ数が変更されたとき、メモリ割付ステップ数調整手段２３によりその加算ステップ数の変更が反映されたステップ数調整オブジェクト５４を作成し、その変更結果で実行形式５６を生成することにより、ソースプログラム５０に記述された調整範囲の分岐ルートごとの実行ステップ数も同時に調整される。
【００５９】
再度、実行部３において、実行ステップ数計測結果５８が出力された後、実行ステップ数更新部４において、個別ステップ数調整情報５３を更新する。この個別ステップ数調整情報５３が更新されたとき、再度オブジェクト結合部２は、調整範囲の分岐ルートごとの実行ステップ数の精度が向上した実行形式５６を出力するので、再度実行部３が実行ステップ数の計測を実行したときは、分岐ルート毎の実行ステップ数に差異が無くなる。
【００６０】
なお、上述したオブジェクト生成部１、オブジェクト結合部２、実行部３、実行ステップ数更新部４は、記憶媒体（図示せず）に記録されても良い。ここで、記憶媒体とは、プログラムを記録したコンピュータ読み取り可能な記録媒体のことであり、具体的には、光ディスク、磁気ディスク、半導体メモリなどが用いられる。要するに、この記憶媒体には、コンピュータが読み取り可能な形式で保存され、コンピュータが実行可能な形式に変換された媒体であればよい。これにより、記憶媒体に保存されたプログラムをコンピュータが直接実行するか、あるいは記憶媒体から別の高速な半導体メモリなどへ出力した後、コンピュータが実行することができる。
【００６１】
図２は図１に示すシステムの動作を説明するフロー図である。図２に示すように、このシステム全体の動作フローにおいて、図１のブロック図との関係で説明すると、ステップＳ１〜Ｓ３はオブジェクト生成部１のステップ数調整範囲判定手段１１によって実現し、ステップＳ４はオブジェクト生成手段１２によって実現し、ステップＳ５〜Ｓ７はコード解析ステップ数計測手段１３とコード解析ステップ数調整手段１４によって実現している。また、ステップＳ８はオブジェクト結合部２におけるオブジェクト結合手段２１と個別ステップ数調整情報結合手段２２によって実現し、ステップＳ９〜Ｓ１１はメモリ割付ステップ数調整手段２３によって実現し、ステップＳ１２はオブジェクト結合手段２１によって実現する。さらに、ステップＳ１３〜Ｓ１５は実行部３の実行ステップ数計測手段３１と不要ステップ数削除手段３２および実行ステップ数更新部４の実行ステップ数調整手段４１とによって実現し、ステップＳ１６はオブジェクト結合手段２１によって実現する。
【００６２】
まず、ソースプログラム５０のステップ数調整範囲は、ステップＳ１〜Ｓ３によって検索され、ステップ数調整範囲の開始行と終了行に、それぞれ開始レーベルと終了レーベルを挿入する。すなわち、ステップＳ１でステップ数調整開始位置を検出したか否かの判定を行い、検出した場合には、ステップＳ２の処理を行う。このとき、ステップ調整情報が存在するときはそのままとするが、存在しないときはステップ調整情報を作成する。ついで、ステップＳ３で、ステップ数調整範囲レーベルをソースプログラムに挿入してステップ調整情報を書込む。この書込みが完了すると、ステップＳ１に戻って再度ステップ調整開始位置の検出判定を行う。
【００６３】
一方、このステップＳ１でステップ調整開始位置を検出しないと、ステップＳ４のオブジェクト生成を行う。このオブジェクト生成ステップでは、開始レーベルと終了レーベルを挿入したソースプログラム５０よりオブジェクト５２を生成する。このソースプログラム５０の記述例としては、例えば後述する図１０のＣ言語におけるｐｒａｇｍａ疑似命令を用いる。
【００６４】
次に、ステップＳ５により、開始レーベルと終了レーベルを元にオブジェクト５２に含まれるステップ数調整範囲の分岐ルートを解析し、命令実行ステップ数情報５１を使った分岐ルートごとの命令コード実行ステップ数の合計と、各分岐ルートにおけるメモリ割付ごとのアクセス回数とを計測する。その結果、分岐ルートごとの命令ステップ数から調整ステップ数を求め、個別ステップ数調整情報５３を更新する。
【００６５】
この分岐ルートの解析，調整が完了すると、ステップＳ５で解析および調整の結果より、ステップ数調整オブジェクトを作成する。すなわち、ステップ数調整オブジェクト５４を呼び出す命令コードをオブジェクト５２に対して挿入し、個別ステップ数調整情報５３で更新された調整ステップ数に相当する命令コードをステップ数調整オブジェクト５４に挿入する。ついで、ステップＳ７で調整範囲が未だ残っているかの判定を行う。残っている場合、つまりステップ数調整範囲がオブジェクト５２に存在する間、ステップＳ５，ステップＳ６を継続する。
【００６６】
次に、ステップＳ８によって、オブジェクト５２を結合するとともに、ステップ数調整情報を結合し、実行形式５６および結合ステップ数調整情報５７を生成する。
【００６７】
次に、ステップＳ９により、メモリ割付情報５５の加算ステップ数を元にして、個別ステップ数調整情報５３に含まれるメモリ割付ごとのアクセス回数から分岐ルートごとのメモリ割付による調整ステップ数を求め、個別ステップ数調整情報５３を更新する。ついで、ステップＳ１０により、個別ステップ数調整情報５３で更新された調整ステップ数に相当する命令コードをステップ数調整オブジェクト５４に挿入する。このステップ数調整オブジェクト５４への挿入が完了すると、ステップ１１において、調整範囲が未だ残っているか否かの判定を行う。ステップ数調整範囲が実行形式５６に存在する間、ステップＳ９，ステップＳ１０を繰返し継続する。
【００６８】
次に、このステップ数調整範囲が無くなると、ステップＳ１２によって、実行形式５６に調整済みのステップ調整オブジェクト５４を結合する。ついで、ステップＳ１３により、結合ステップ数調整情報５７における分岐ルートの分岐開始アドレスと分岐終了アドレスを取出し、分岐ルートの計測開始アドレスと計測終了アドレスとして命令コード実行ステップ数を計測した後、割り込み処理やＤＭＡ転送などの分岐ルート以外の実行ステップ数を減算して調整した結果を実行ステップ数計測結果５８として出力する。
【００６９】
次に、ステップＳ１４により、上述の調整結果に基づいて、コード解析による分岐ルートごとの実行ステップ数にメモリ割付による加算ステップ数を加えた値と、実行ステップ数計測結果５８の実行ステップ数との差分ステップ数を求める。このステップＳ１４では、求めた差分ステップ数を調整ステップ数として個別ステップ数調整情報５３に挿入し、差分ステップ数に相当する命令コードをステップ数調整オブジェクト５４に挿入する。さらに、ステップ１５で調整範囲が未だ残っているか否かの判定を行う。この結果、ステップ数調整範囲が実行形式５６に存在する間、ステップＳ１３、ステップＳ１４は繰返し継続する。要するに、実行ステップ数のフィードバックがかけられる。
【００７０】
最後に、ステップＳ１６により、ステップＳ１４によって調整されたステップ数調整オブジェクト５４を再度結合し、実行形式５６を作成する。このオブジェクト５４の再結合が完了すると、一連の処理が終了する。
【００７１】
図３は図１における個別ステップ数調整情報の構成図である。図３に示すように、この個別ステップ数調整情報５３は、ファイル情報１００と、複数の（個別）ステップ数調整範囲情報１０１とから構成され、そのステップ数調整範囲情報１０１は、ステップ数の調整範囲を行で規定したステップ数調整範囲行１０２とステップ数調整範囲レーベル１０３と複数のステップ数解析調整データ１０４とを含んで形成される。なお、このファイル情報１００は、個別ステップ数調整情報５３の元になるソースプログラム５０およびオブジェクト５２のファイル名、作成日付などによって構成され、ソースプログラム５０とオブジェクト５２と個別ステップ数調整情報５３との関係および更新日時、更新理由（例えば、ソースプログラム５０の変更、メモリ割付による更新、実行ステップ数による更新）などを備えている。したがって、前述した図１のコード解析ステップ数調整手段１４と、メモリ割付ステップ数調整手段２３と、実行ステップ数調整手段４１とにおいて、何時更新されたか、さらには更新する必要があるか否かを知ることができる。
【００７２】
また、複数のステップ数解析調整データ１０４は、それぞれステップ数調整オブジェクト開始レーベル名１０５を持って形成される。この個別ステップ数調整情報５３は、前述したように、図２におけるステップＳ２によって生成し、ステップＳ６とステップＳ１０によって更新し、ステップＳ８によってオブジェクト結合と同時に、個別ステップ数調整情報も結合される。
【００７３】
なお、前述した結合ステップ数調整情報５７もこの個別ステップ数調整情報５３と同様に、ファイル情報と複数のステップ数調整範囲情報とで構成される。
、結合ステップ数調整情報５７の構成例である。
【００７４】
図４は図３におけるステップ数調整解析調整データの構成図である。図４に示すように、ステップ数調整情報５３におけるステップ数解析調整データ１０４は、解析開始アドレス，コード解析合計ステップ数，メモリ割付個別アクセス数，コード解析調整ステップ数，メモリ割付調整ステップ数，実行時計測ステップ数，実行時調整ステップ数，複数（分岐先１〜ｎ）のステップ数解析調整データへのポインタを含んでおり、分岐先毎のポインタが複数個あるときのステップ数解析調整データ例を調整データ（１〜３）１０６，１０７，１０８で表わしている。例えば、分岐先１に複数のポインタがあるときのステップ数解析調整データ１０６は、解析開始アドレス，コード解析合計ステップ数，メモリ割付個別アクセス数，コード解析調整ステップ数，メモリ割付調整ステップ数，実行時計測ステップ数，実行時調整ステップ数，分岐先１−１乃至分岐先１−ｎのステップ数解析調整データへのポインタとから形成される。要するに、実行ステップ数調整範囲１個に対して分岐先がｎ個あったときには、ｎ個のポインタによりｎ個の調整データを管理する。つまり、データ１０６において、ｎ個の分岐先のうち、さらにｍ個の分岐先があったとき、ｍ個のポインタによってｍ個の調整データを管理する方法を説明している。
【００７５】
すなわち、前述した図２のステップＳ５において、分岐ルートを解析した結果に基づき、ステップ数解析調整データをポインタによって接続している。
【００７６】
図５は図１におけるステップ数調整オブジェクトの構成図である。図５に示すように、ステップ数調整オブジェクト５４は、ステップ数調整オブジェクト開始レーベル名〔Ｅｎｔｒｙ〕１０６，コード解析調整ステップ数に相当する命令コード〔ｎｏｐ〕１０７，メモリ割付調整ステップ数に相当する命令コード〔ｎｏｐ〕１０８，実行時調整ステップ数に相当する命令コード〔ｎｏｐ〕１０９，ステップ数調整オブジェクトからの復帰コード〔ｊｍｐ（ｊｐ）〕１１０から構成される。このステップ数調整オブジェクト５４は、調整ステップ数に相当する命令コードとして、ＮＯＰ（ノン・オペレーション）命令を挿入した例である。
【００７７】
すなわち、前述した図２のフローにおいては、ステップＳ６によって生成し、ステップＳ１０によって更新し、ステップＳ１２によって結合している。このステップ数調整オブジェクト５４は、ステップ数調整オブジェクト情報に対応して生成し、オブジェクト５２からステップ数調整オブジェクト５４を呼び出すステップ数調整オブジェクト開始レーベル名１０６と、コード解析調整ステップ数に相当する命令コード１０７と、メモリ割付調整ステップ数に相当する命令コード１０８と、実行時調整ステップ数に相当する命令コード１０９と、ステップ数調整オブジェクト５４から復帰する命令コード１１０とによって構成される。
【００７８】
次に、図２における個々の動作フロー（図６〜図８）と前述した図３〜図５を参照し、本実施の形態の調整動作について説明する。
【００７９】
図６は図２における分岐ステップ数解析および調整のフロー図である。図６に示すように、この分岐ステップ数解析および調整フローは、前述した図２のステップＳ５の詳細なフローである。このステップＳ５で呼び出される分岐ステップ数解析および調整は、まずステップＳ２０により、解析開始アドレスを記憶させ、解析中アドレスを個別ステップ調整情報５３に追加する。このアドレスの記憶が完了すると、ステップＳ２１により分岐命令を検索する。
【００８０】
この検索判定の結果、分岐命令がある場合は、ステップ２３で解析調整処理を再帰呼出し、このときの分岐先アドレスを解析開始アドレスとする。
【００８１】
一方、ステップＳ２１で分岐命令がない場合は、ステップＳ２２において、コード解析によって選られた合計ステップ数（コード解析合計ステップ数）とメモリ割付ごとのアクセス回数（メモリ割付個別アクセス数）を測定し、その測定結果を個別ステップ調整情報５３に追加し、処理を終了する。
【００８２】
ついで、ステップＳ２４において、再帰呼出しからの復帰後、ステップＳ２４により、再帰呼出しからの復帰後、前述した図４のステップ数解析調整データ１０４における分岐先１〜ｎへのポインタを設定する。このポインタの設定が完了すると、ステップＳ２５において、全ての分岐を処理したか否かの判定を行う。これらステップＳ２４，ステップＳ２５は、分岐命令がある間、すなわち未処理がある間、ステップＳ２３へ戻り、繰返し継続される。
【００８３】
さらに、全ての分岐について処理済みになると、ステップＳ２６において、分岐先へのポインタ（図４のステップ数解析調整データ１０４における分岐先１〜ｎ）が指し示すステップ数解析調整データ１０６，１０７，１０８にあるコード解析合計ステップ数の差分ステップ数を求め、コード解析調整ステップ数を挿入し、処理を終了する。
【００８４】
図７は図２におけるメモリ割付ステップ数調整フロー図である。図７に示すように、メモリ割付ステップ数調整フローは、前述した図２のステップＳ９の詳細なフローである。このステップＳ９で呼び出されるメモリ割付ステップ数調整は、まずステップＳ３０により分岐命令を検索する。なお、この分岐命令の検索およびつぎの図８で説明する分岐命令の検索は、図２のコード解析によって得られたステップ数解析データのポインタ接続を追い掛けることを意味する。
【００８５】
このステップＳ３０で分岐命令がある場合は、ステップＳ３１のメモリ割付ステップ数調整を行った後、ステップＳ３２で全ての分岐について処理したか否かの判定をする。ここで、未処理の分岐があった場合には、ステップＳ３１に戻ってステップ数調整の再帰呼出しを行う。しかし、前述したステップＳ３０の分岐命令検索の結果、分岐命令が残っていないときは、メモリ割付ステップ数調整の処理を終了させる。
【００８６】
最後に、ステップＳ３３により、再帰呼出しからの復帰後、分岐先へのポインタ（図４のステップ数解析調整データ１０４の分岐先１〜ｎのポインタ）が指し示すコード解析によって得られたメモリ割付個別アクセス数とメモリ割付情報５５の加算ステップ数から図４のステップ数解析調整データ１，２，３（１０６〜１０８）におけるメモリ割付調整ステップ数を挿入（加算）して終了する。
【００８７】
図８は図２における実行ステップ数調整フロー図である。図８に示すように、この実行ステップ数調整フローは、前述した図２のステップＳ１３の詳細なフローである。このステップＳ１３で呼び出される実行ステップ数調整は、まずステップＳ４０により分岐命令を検索する。ここで、分岐命令がある場合は、ステップＳ４１の実行ステップ数調整を行い、続いてステップＳ４３で全ての分岐について処理したか否かの判定を行う。この判定の結果、未処理の分岐が残っていると処理を繰返し継続する。
【００８８】
一方、ステップＳ４０で分岐命令がない場合は、分岐開始アドレスを計測開始アドレスとし、エミュレータまたはシミュレータを実行した結果から実行時計測ステップ数（図４の１０６〜１０８）を挿入して終了する。
【００８９】
しかし、ステップＳ４１によって、再帰呼出しから復帰後、すべての分岐に対して、実行時計測ステップ数を得られたら、ステップＳ４４において、分岐先へのポインタ（図４の１０６〜１０８）が指し示す実行時計測ステップ数の差分ステップ数を求め、実行時調整ステップ数を挿入（加算）して処理を終了する。
【００９０】
図９は図１におけるメモリ割付情報の一例を示す構成図である。図９に示すように、このメモリ割付情報５５は、変数と領域と加算ステップ数からなる。例えば、変数ＭＥＭ１は低速ＲＡＭの領域であり、加算するステップ数は１としている。この加算ステップ数を１，０，３などと規定することにより、異った領域の長さ（時間）の調整を行っている。
【００９１】
図１０は図１におけるソースプログラムの一例を示す構成図である。図１０に示すように、このソースプログラム５０は、＃ｐｒａｇｍａ  ａｄｊｕｓｔ  ｓｔａｒｔ（ステップ数調整範囲の開始位置）と＃ｐｒａｇｍａ  ａｄｊｕｓｔ  ｅｎｄ（ステップ数調整範囲の終了位置）を指定した例である。この例におけるステップ数調整範囲内のソースプログラム５０は、「ｉｆ（ＭＥＭ２＝＝０）｛ＭＥＭ１＝０；｝」において、前述した図９の高速ＲＡＭを参照して値が０であれば、低速ＲＡＭに０を書き込み、また「ｅｌｓｅ  ｉｆ（ＭＥＭ２＝＝１）｛ＭＥＭ３＝０；｝」において高速ＲＡＭを参照して値が１であれば、Ｉ／Ｏポートに０を書き込み、さらに「ｅｌｓｅ｛ＭＥＭ２＝０；｝」において高速ＲＡＭを参照して値が０または１１でなければ、高速ＲＡＭに０を書き込むことを表わしている。
【００９２】
このように、かかる調整範囲に指定されたコマンドが、上述の意味を表わすことにより、ソースプログラム５０は、オブジェクト生成部１によりオブジェクト５２に形成される。
【００９３】
図１１は図１におけるオブジェクトの一例を示す構成図である。図１１に示すように、このオブジェクト５２は、前述した図１０のステップ数調整範囲内のソースプログラム５０より変換されたものである。
【００９４】
すなわち、図１１において、「ｉｆ（ＭＥＭ２＝＝０）」が、「ＣＭＰ  ＭＥＭ２，０」、「ＢＮＺ  ＬＡＢＥＬ  １」となり、「｛ＭＥＭ１＝０；｝」が、「ＭＯＶＥ  ＭＥＭ１，０」、「ＢＲ  ＬＡＢＥＬ  １  ＥＮＤ」となり、「ｅｌｓｅ  ｉｆ（ＭＥＭ２＝＝１）」が、「ＣＭＰ  ＭＥＭ２，１」、「ＢＮＺＬＡＢＥＬ  １  ２」となり、「｛ＭＥＭ３＝０；｝」が、「ＭＯＶＥ  ＭＥＭ３，０」、「ＢＲ  ＬＡＢＥＬ  １  ＥＮＤ」となり、「ｅｌｓｅ｛ＭＥＭ２＝０；｝」が、「ＭＯＶＥ  ＭＥＭ２，０」とそれぞれ変換される。なお、記号Ａ〜Ｅは、図１２で説明するブロックを表わしている。
【００９５】
図１２は図１１に示すオブジェクトのフロー図である。図１２に示すように、このフローは、オブジェクト５２を分解したとき、ブロックＡ，Ｃが比較命令と分岐判定を行うブロック、ブロックＢ，Ｄ，Ｅがメモリに数値を代入するブロックである。
【００９６】
しかるに、前述した図１０のソースプログラム５０の調整範囲（スタートとエンドを除く範囲）が指定されているとき、図１１のようなオブジェクト５２が生成される。したがって、分岐ルートを解析する場合、まず分岐しない側を先に解析し、次に分岐する側を解析する。その結果、図１２のフローに示すように、ブロックＡ→Ｂ→Ｃ→Ｄ→Ｅの順番で解析を行う。
【００９７】
図１３（ａ）〜（ｃ）はそれぞれ図１２における分岐ルートの解析フロー図である。図１３（ａ）に示すように、この解析フローは、ブロックＡ，Ｂからなるルートである。同様に、図１３（ｂ），（ｃ）に示すように、これらの解析フローは、ブロックＡ，Ｃ，ＤからなるルートおよびブロックＡ，Ｃ，Ｅからなるルートである。要するに、図１２の解析フローは、図１３のような３つの分岐ルートになる。
【００９８】
かかる解析フローにおいて、ブロックＡは全ルートで実行されるため、調整ステップを挿入しない。また、ブロックＢは、ブロックＣとＤの合計ステップ数と、ＣとＥの合計ステップ数と同じ長さのステップになるように、調整ステップを挿入する。また、ブロックＣは、分岐ルート２（Ａ→Ｃ→Ｄ）と分岐ルート３（Ａ→Ｃ→Ｅ）で実行されるため、調整ステップを挿入しない。さらに、ブロックＤおよびＥは、同一ステップになるように、どちらかに、調整ステップを挿入する。
【００９９】
要するに、図１３は、図１２のフローを分岐ルートごとに組合わせを説明したものであり、（ａ）〜（ｃ）の３つのルートが存在するので、そのルートごとのトータル時間を同じにするため、コード解析による調整ステップと、メモリ割付による調整ステップと、実行時による調整ステップとを挿入した例を示している。すなわち、処理ステップ１つについて１ステップだけの処理時間がかかる場合、すべてのルートの処理時間は一致しないといけないため、図１３における比較，分岐命令，調整ステップなどのステップ数（箱の数）は、各ルートごとに一致させる必要がある。これら分岐ルートごとの箱の数は、前述した図１におけるコード解析ステップ数調整手段１４によって同じになるように調整される。
【０１００】
つぎに、箱の数だけでは分らない時間の調整、例えばＭＥＭ１とＭＥＭ２とＭＥＭ３の実行ステップの違いによる調整は、メモリ割付ステップ数調整手段２３により行う。すなわち、前述した図９の例に示すように、加算ステップの関係が、ＭＥＭ３〉ＭＥＭ１〉ＭＥＭ１であった場合、［ＭＥＭ３の加算ステップ数−ＭＥＭ２の加算ステップ数］を図１３（ｃ）の分岐ルートに挿入し、［ＭＥＭ３の加算ステップ数−ＭＥＭ１の加算ステップ数］を図１３（ａ）の分岐ルートに挿入することにより、箱の数だけでは分からない部分の調整を行う。
【０１０１】
さらに、実行部３において、図１３（ｂ），（ｃ）のブロックＤ，Ｅを実行ブロックＤの方が遅いステップ数であった場合、そのステップ数の差を図１３（ｂ）に挿入することにより、箱の数だけでは分からず、メモリ割付でも分からなかった調整を実行ステップ数調整手段４１で行う。
【０１０２】
図１４（ａ）〜（ｃ）はそれぞれ図１３におけるオブジェクトをステップ数調整オブジェクトに置き換えた解析フロー図である。。図１４（ａ）〜（ｃ）に示すように、これらの解析フローは、図１３（ａ）〜（ｃ）におけるブロックＡ〜ＥをブロックＡ′〜Ｅ′に置換えるとともに、ステップ数を合わせるための新たなブロックＦ，Ｇ，Ｈを追加して記載したものである。
【０１０３】
要するに、本実施の形態においては、前述した図６の分岐ステップ数解析および調整フローにおいて、分岐ルートを再帰呼出しによって検索し、枝から順番に合計ステップが決定する。したがって、図１２のフローの場合、ブロックＥ→Ｄ→Ｃ→Ｂ→Ａの順番で決定する。
【０１０４】
すなわち、ブロックＤが決定したとき、ブロックＥとＤの調整ステップ数をブロックＥまたはＤに挿入し、ブロックＥまたはＤの最大ステップ数をブロックＣの合計ステップ数とする。
【０１０５】
また、ブロックＢが決定したとき、ブロックＣとＢの調整ステップ数をブロックＣまたはＢに挿入し、ブロックＣまたはＤの最大ステップ数をブロックＡの合計ステップ数とする。
【０１０６】
しかるに、図１３および図１４において、ブロックＥとＨの両方にコード解析調整ステップが挿入されているが、図１３のブロックＢ，ブロックＤおよび図１４のブロックＢ′，ブロックＤ′における「ＬＡＢＥＬ  １  ＥＮＤにジャンプ」と同様に、分岐命令を挿入した場合を想定している。
【０１０７】
最終的に、図１３のブロックＢにおける「コード解析調整ステップ」（一番下），ブロックＤにおける「コード解析調整ステップ」，ブロックＥにおける「コード解析調整ステップ」および図１４におけるブロックＦにおける「コード解析調整ステップ」（一番下），ブロックＧにおける「コード解析調整ステップ」，ブロックＨにおける「コード解析調整ステップ」の差分ステップ数から片方のステップを削除することができる。
【０１０８】
なお、図１３（ａ）のブロックＢにおける「コード解析調整ステップ」（上の３つ），ブロックＥにおける「分岐する（偽）場合のステップ」および図１４におけるブロックＦにおける「コード解析調整ステップ」（上の３つ），ブロックＥ′に「分岐する（偽）場合のステップ」は、個別ステップ数調整情報５３に入れたとき合計ステップ数として挿入される。
【０１０９】
このように、図１４（ａ）〜（ｃ）に示すとおり、分岐ルートの最後に調整ステップをまとめたブロックＦ，Ｇ，Ｈがステップ数調整オブジェクトになる。
【０１１０】
上述した点をさらに図１２〜図１４を用い、各調整フローを参照して、より具対的に説明する。
【０１１１】
図１２に示すブロックＡ、Ｂ、Ｃ、Ｄ、Ｅは、前述した図６の分岐ステップ数解析および調整フローにより、以下のように分岐ルートを再帰呼び出しによって検索し、枝から順番に合計ステップを決定する。ここで、枝とは、ブロックＡに対してブロックＢとＣであり、ブロックＣに対してブロックＤとＥである。まず、ブロックＤとＥの解析後にブロックＣの解析が終了し、ブロックＢとＣの解析後にブロックＡの解析が終了する。
【０１１２】
▲１▼ブロックＡの解析からブロックＣの解析呼び出し
ブロックＡから他分岐命令を検索（図６のステップＳ２１）し、「ＢＮＺ  ＬＡＢＥＬ  １」（図１１）を発見すると、分岐先である「ＬＡＢＥＬ１」を現在の解析位置として、１回目の再帰呼び出しを行う（ステップＳ２３）。
【０１１３】
▲２▼ブロックＣの解析からブロックＥの解析呼び出し
ブロックＣから他分岐命令を検索（ステップＳ２１）し、「ＢＮＺ  ＬＡＢＥＬ  １  ２」を発見すると、分岐先である「ＢＮＺ  ＬＡＢＥＬ  １  ２」を現在の解析位置として、２回目の再帰呼び出しを行う（ステップＳ２３）。ついで、ブロックＥから他分岐命令を検索（ステップＳ２１）すると、他分岐命令が無いため、「ＭＯＶＥ  ＭＥＭ２，０」のステップ数をブロックＥにおけるコード解析合計ステップ数とする（ステップＳ２２）。
【０１１４】
▲３▼ブロックＣの解析からブロックＤの解析呼び出し
２回目の再帰呼び出しから復帰し、分岐しない場合の「ＭＯＶＥ  ＭＥＭ３，０」を現在の解析位置として、３回目の再帰呼び出しを行う（ステップＳ２５）。ついで、ブロックＤから他分岐命令を検索する（ステップＳ２１）と、他分岐命令が無いため、「ＭＯＶＥ  ＭＥＭ３，０」と「ＢＲ  ＬＡＢＥＬ  １  ＥＮＤ」の合計ステップ数をブロックＤにおけるコード解析合計ステップ数とする（ステップ２２）。
【０１１５】
▲４▼ブロックＥとブロックＤの解析結果からブロックＣの結果を保存
３回目の再帰呼び出しから復帰し、ブロックＥとＤのコード解析合計ステップ数の合計ステップが長い方のステップ数と、ブロックＣにおける「ＣＭＰ  ＭＥＭ２，１」と「ＢＮＺ  ＬＡＢＥＬ  １  ２」とのステップ数を加算したステップ数をブロックＣにおけるコード解析合計ステップ数とする（ステップＳ２６）。また、ブロックＥとＤのコード解析合計ステップ数との差分を調整ステップ数とする。
【０１１６】
▲５▼ブロックＡの解析からブロックＢの解析呼び出し
１回目の再帰呼び出しから復帰し、分岐しない場合の「ＭＯＶＥ  ＭＥＭ１，０」を現在の解析位置として、４回目の再帰呼び出しを行う（ステップ２５）。ついで、ブロックＢから多分岐命令を検索（ステップＳ２１）すると、多分岐が無いため、「ＭＯＶＥ  ＭＥＭ１，０」と「ＢＲ  ＬＡＢＥＬ  １  ＥＮＤ」の合計ステップ数をブロックＢにおけるコード解析合計ステップ数とする（ステップＳ２２）。
【０１１７】
▲６▼ブロックＣとブロックＢの解析結果からブロックＡの結果を保存
４回目の再帰呼び出しから復帰し、ブロックＣとＢのコード解析合計ステップ数の合計ステップが長い方のステップ数と、ブロックＡにおける「ＣＭＰ  ＭＥＭ２，０」と「ＢＮＺ  ＬＡＢＥＬ  １」とのステップ数を加算したステップ数をブロックＡにおけるコード解析合計ステップ数とする（ステップＳ２６）。また、ブロックＣとＢのコード解析合計ステップ数との差分を調整ステップ数とする。
【０１１８】
以上の解析によって、多分岐を２回検出したことから、図１３（ａ）、（ｂ）、（ｃ）のように、３つの分岐ルートがあったことになる。この解析した結果は、前述した図４のステップ数解析調整データ１０４として記憶させる。
【０１１９】
さらに、図１３に示すように、ブロックＥとＤの調整ステップ数は、ブロックＤにコード解析調整ステップ数Ｄ−１を挿入し、ブロックＣとＢの調整ステップ数は、ブロックＢにコード解析調整ステップ数Ｂ−１、Ｂ−２、Ｂ−３、Ｂ−４として挿入した調整オブジェクトを生成する（図２のステップＳ６）。
【０１２０】
次に、図７のメモリ割付ステップ数調整フローによリ、図４のステップ数解析調整データを用い、以下のように解析する。
【０１２１】
▲１▼図１２に示すブロックＡの解析からブロックＣの解析呼び出し
ブロックＣの１回目の再帰呼び出しを行う（ステップＳ３１）。
【０１２２】
▲２▼ブロックＣの解析からブロックＥの解析呼び出し
ブロックＥの２回目の再帰呼び出しを行う（ステップＳ３１）。このブロックＥには多分岐がないので、ブロックＥからメモリ割付個別アクセス数を記憶した後、２回目の再帰呼び出しから復帰する。
【０１２３】
▲３▼ブロックＣの解析からブロックＤの解析呼び出し
ブロックＣには、もう一つの分岐先が残っていることから、再度ステップＳ３１により、ブロックＤの３回目の再帰呼び出しを行う（ステップＳ３２）。ブロックＤには多分岐がないので、ブロックＤのメモリ割付個別アクセス数を記憶した後、３回目の再帰呼び出しから復帰する。
【０１２４】
▲４▼ブロックＥとブロックＤの解析結果からブロックＣの結果を保存する
ブロックＥとブロックＤのメモリ割付個別アクセス数の差分を求め、ブロックＥとブロックＤのそれぞれのメモリ割付調整ステップ数を更新する（ステップＳ３３）。メモリ割付個別アクセス数の大きい側のステップ数は、ブロックＣのメモリ割付個別アクセス数として記憶する。
【０１２５】
▲５▼ブロックＡの解析からブロックＢの解析呼び出し
１回目の再帰呼び出しから復帰し、ステップＳ３２によりもう一つの分岐先が残っていることから、再度ステップＳ３１によって、ブロックＢの４回目の再帰呼び出しを行う。ブロックＢには多分岐がないので、ブロックＢのメモリ割付個別アクセス数を記憶した後、４回目の再帰呼び出しから復帰する。
【０１２６】
▲６▼ブロックＣとブロックＢの解析結果からブロックＡの結果を保存する
ステップＳ３３によりブロックＣとブロックＢのメモリ割付個別アクセス数の差分を求め、ブロックＣとブロックＢのメモリ割付調整ステップ数を更新する。メモリ割付個別アクセス数の大きい側のステップ数は、ブロックＡのメモリ割付個別アクセス数として記憶する。
【０１２７】
以上の解析により、解析した結果は、図４のステップ数解析調整データを更新することによって実現する。
【０１２８】
さらに、図１３に示すように、ブロックＥとＤの調整ステップ数は、ブロックＥにメモリ割付調整ステップ数Ｅ−１として挿入し、ブロックＣとＢの調整ステップ数は、ブロックＢにメモリ割付調整ステップ数Ｂ−５として挿入した調整オブジェクトを生成する（図２のステップＳ１０）。
【０１２９】
次に、図８によって、図４のステップ数解析調整データを使って、以下のように解析する。
【０１３０】
▲１▼ブロックＡの解析からブロックＣの解析呼び出し
ブロックＣの１回目の再帰呼び出しを行う（ステップＳ４１）。
【０１３１】
▲２▼ブロックＣの解析からブロックＥの解析呼び出し
ブロックＥの２回目の再帰呼び出しを行う（ステップＳ４１）。ブロックＥには多分岐がないので、実行時計測ステップ数を計測し、２回目の再帰呼び出しから復帰する（ステップＳ４２）。
【０１３２】
▲３▼ブロックＣの解析からブロックＤの解析呼び出し
もう一つの分岐先が残っていること（ステップＳ４３）から、再度ステップＳ４１により、ブロックＤの３回目の再帰呼び出しを行う。ブロックＤには多分岐がないので、実行時計測ステップ数を計測し（ステップ４２）、３回目の再帰呼び出しから復帰する。
【０１３３】
▲４▼ブロックＥとブロックＤの解析結果からブロックＣの結果を保存する
ブロックＥとブロックＤの実行時計測ステップ数の差分を求め（ステップＳ４４）、ブロックＥとブロックＤのそれぞれの実行時調整ステップ数を更新する。実行時計測ステップ数の大きい側のステップ数は、ブロックＣの実行時計測ステップ数として記憶する。
【０１３４】
▲５▼ブロックＡの解析からブロックＢの解析呼び出し
１回目の再帰呼び出しから復帰し、ステップＳ４３によりもう一つの分岐先が残っていることから、再度ブロックＢの４回目の再帰呼び出しを行う（ステップ４１）。ブロックＢには多分岐がないので、実行時計測ステップ数を計測し（ステップ４２）、４回目の再帰呼び出しから復帰する。
【０１３５】
▲６▼ブロックＣとブロックＢの解析結果からブロックＡの結果を保存する
ブロックＣとブロックＢの実行時計測ステップ数の差分を求め（ステップＳ４４）、ブロックＣとブロックＢの実行時調整ステップ数を更新する。実行時計測ステップ数の大きい側のステップ数は、ブロックＡの実行時計測ステップ数として記憶する。
【０１３６】
以上の解析によって、解析した結果は、図４のステップ数解析調整データを更新することによって実現する。
【０１３７】
さらに、図１３に示すように、ブロックＥとＤの調整ステップ数は、ブロックＤに実行時調整ステップ数Ｄ−２として挿入し（図２のステップＳ１４）、ブロックＣとＢの調整ステップ数は、ブロックＢに実行時調整ステップ数Ｂ−６として挿入した調整オブジェクトを生成する。
【０１３８】
最終的には、調整ステップＢ−１〜Ｂ−６を図１４のブロックＦとして、調整ステップＤ−１，Ｄ−２を図１４のブロックＧとして、調整ステップＥ−１を図１４のブロックＨとして、分岐ルートごとに調整オブジェクトを生成したことになる。
【０１３９】
以上、本発明の一実施の形態について説明したが、本発明はこれに限ることなく、以下のような変形も可能である。
【０１４０】
前述した一実施の形態では、図１におけるオブジェクト生成部１は命令ステップ数情報５１を参照したが、このオブジェクト生成部１が命令ステップ数情報５１の他に、オブジェクト結合部２で参照していたメモリ割付情報５５を参照するようにしてもよい。その場合を図１５を参照して説明する。
【０１４１】
図１５は本発明の他の実施の形態を説明するための実行ステップ数調整装置のシステム構成図である。図１５に示すように、命令実行ステップ数情報５１とメモリ割付情報５５を結合するとともに、オブジェクト結合部２に設けていたメモリ割付ステップ数調整手段２３をオブジェクト生成部１の内部に設けることで実現することができる。これによって、前述の図７で行っていたメモリ割付ステップ数調整を、図６のステップＳ２２における個別メモリアクセス数を求めたときに、メモリ割付情報５５を参照して、図７のステップＳ３３における差分の計算および調整ステップ数の計算を行うことができる。これによって、図２におけるステップＳ９〜Ｓ１２を削除することができる。
【０１４２】
また、前述したように、ソースプログラム５０は複数存在するために、オブジェクト５２と個別ステップ数調整情報５３とステップ数調整オブジェクト５４とは、複数存在する。例えば、ｎ個のソースプログラム５０があると、ｎ個のオブジェクト５２と、［ｎ個×調整範囲数］の個別ステップ数調整情報５３と、［ｎ個×調整範囲数×分岐ルート数］のステップ数調整オブジェクト５４を生成しているが、記憶装置に記憶する際はまとめることが考えられる。例えば、［ｎ個×調整範囲数］の個別ステップ数調整情報５３は、一つにまとめて、ｎ個の個別ステップ数調整情報５３とすることができる。また、［ｎ個×調整範囲数×分岐ルート数］のステップ数調整オブジェクト５４は、一つにまとめて、ｎ個のステップ数調整オブジェクト５４とすることができる。ただし、この場合であっても記憶装置への記憶のさせ方が異なるだけであり、それぞれ、［調整範囲数］および［調整範囲数×分岐ルート数］の情報を持つため、同等になることは明白である。
【０１４３】
以上は図１５に示す他の実施形態の構成およびその主要部の動作であり、他は図１と同様である。
【０１４４】
また、図１におけるステップ数調整オブジェクト５４は、ソースプログラムとしても実現することができる。すなわち、ソースプログラムが単純であり、コンパイルまたはアセンブルに時間がかからないからである。しかも、このステップ数調整オブジェクト５４は、アーカイバまたはライブラリアンを使用して、ライブラリ化して実現することも可能である。その場合、コード解析ステップ数調整手段１４とメモリ割付ステップ数調整手段２３と実行ステップ数調整手段４１とに、ライブラリアンを更新する機能を付属させるか、調整ステップ数を可変したくないとき、意図的にライブラリアンとすることが可能である。
【０１４５】
また、図１における実行部３および実行ステップ数変更部４は一体化することも可能である。その場合は、実行ステップ数調整手段４１を実行部３に含ませることにより、実行ステップ数計測結果５８を省くこともできる。
【０１４６】
さらに、前述した図１０のソースプログラム５０中のｐｒａｇｍａ調整スタート，調整終了のようなＣ言語におけるｐｒａｇｍａ疑似命令において、ステップ数の最大ステップ数または最小ステップ数を制限するオプションを加え、個別ステップ数調整情報５３や結合ステップ数調整情報５７に、前記最大ステップ数または最小ステップ数を挿入することにより、コード解析ステップ数調整手段１４，メモリ割付ステップ数調整手段２３，実行ステップ数調整手段４１のそれぞれで挿入される調整ステップ数を制限することも可能である。
【０１４７】
例えば、ステップ数調整範囲内にｆｏｒ文，ｗｈｉｌｅ文などのループ文があり、且つその終了条件に変数が使用されていた場合には、ステップ調整を毎回更新することが有得るため、図１０のソースプログラム５０中のｐｒａｇｍａ調整スタート，調整終了のようなＣ言語におけるｐｒａｇｍａ疑似命令において、ｆｏｒ文，ｗｈｉｌｅ文などの終了条件に変数が使用されていたとき、平均ステップ数を求めるオプションを加え、個別ステップ数調整情報５３、結合ステップ数調整情報５７に平均ステップ数を挿入することにより、コード解析ステップ数調整手段１４、メモリ割付ステップ数調整手段２３、実行ステップ数調整手段４１に挿入される調整ステップ数の乱れを抑制することが可能である。また、これらｆｏｒ文，ｗｈｉｌｅ文などの終了条件に変数が使用されている箇所に、調整ステップ数を固定ステップ数にしたり、最大ステップ数または最小ステップ数を制限できる特殊コメントなどを挿入することにより、調整ステップ数を制限することができる。その理由は、ある範囲だけ特定ステップ数に固定することは、一部分だけ調整を無効化することにもなり、また調整ステップ数を入れすぎると、全体の処理時間が長くなりすぎるという問題があるためである。
【０１４８】
一方、前述した図１０のｐｒａｇｍａ調整スタート，調整終了のように、Ｃ言語におけるｐｒａｇｍａ疑似命令を使用せず、個別ステップ数調整情報５３の行番号などにより、まったくソースプログラム５０を修正せずにステップ数調整範囲判定手段１１を簡略化することも可能である。つまり、ソースプログラム５０の調整したい範囲を直接個別ステップ数調整情報５３に入れることにより、＃ｐｒａｇｍａ疑似命令を使用しない方法では、行番号から開始レーベルと終了レーベルを生成することになる。例えば、ソースプログラム５０のファイル名が「ａｂｃｄ」というファイル名であるとし、調整開始行が１１行目、調整終了行が２０行目であったとすると、前記ファイル名「ａｂｃｄ」と行番号を組合わせて、ａｂｃｄ１１を開始レーベル、ａｂｃｄ２０を終了レーベルとする方法が考えられる。
【０１４９】
上述した実施の形態の変形例は、これらに限定されることなく、特許請求範囲に記載した範囲内で各種の変形が可能であることは、言うまでもない。
【０１５０】
【発明の効果】
以上説明したように、本発明の目的プログラムの実行ステップ数調整方法およびその調整装置は、プログラムで動作させるＣＰＵに接続された外部回路の動作速度が遅く、ソースプログラム上に時間待ち処理を挿入するときでも、正確な時間待ちを得ることが出来るという効果がある。また、本発明は、外部入力を正確に計測したり、あるいは外部出力を正確に行う必要があり、ソースプログラム上に待ち合せ処理を挿入したときでも、正確な待ち合せを実現できるという効果がある。
【０１５１】
その理由は、ソースプログラムの分岐ルートごとのステップ数を同一ステップにすることにより、分岐ルートごとに存在した命令ステップ数の違いによる待ち時間の誤差を無くし、外部回路，外部装置の実際の動作に応じた待ち合せ時間を反映することができるからである。
【０１５２】
すなわち、コンパイラまたはアセンブラにおいて、分岐ルートを解析し、分岐ルートごとに命令コードの実行ステップ数を計測して分岐ルートごとに同一ステップ数になるように大まかに調整し、エミュレータまたはシミュレータにおいて分岐ルートごとに命令コードをエミュレーションまたはシミュレーションした実行ステップ数を計測することにより、命令コードの実行ステップ数との差分ステップ数によって分岐ルートごとに同一ステップ数になるように細かく調整できるからである。
【０１５３】
また、本発明は、目的オブジェクトとステップ数調整オブジェクトとを別々に出力するため、ステップ調整にあたっては、ステップ数調整オブジェクトを調整した後に再結合するだけで良いので、時間待ちおよび待ち合せを調整するための再コンパイルなどによる調整期間を短くできるという効果がある。
【０１５４】
さらに、本発明は、エミュレータまたはシミュレータによって、実行ステップ数の計測結果を元にした細かな調整を行うので、ターゲットシステムの外部回路または外部装置をバージョンアップするとき、ステップ数調整オブジェクトを調整した後に再結合するだけで済み、開発途中における外部回路または外部装置のタイミング調整を簡単に行うことができるという効果がある。
【図面の簡単な説明】
【図１】本発明の一実施の形態を説明するための実行ステップ数調整装置のシステム構成図である。
【図２】図１に示すシステムの動作を説明するフロー図である。
【図３】図１における個別ステップ数調整情報の構成図である。
【図４】図３におけるステップ数解析調整データの構成図である。
【図５】図１におけるステップ数調整オブジェクトの構成図である。
【図６】図２における分岐ステップ数解析および調整のフロー図である。
【図７】図２におけるメモリ割付ステップ数調整フロー図である。
【図８】図２における実行ステップ数調整フロー図である。
【図９】図１におけるメモリ割付情報の一例を示す構成図である。
【図１０】図１におけるソースプログラムの一例を示す構成図である。
【図１１】図１におけるオブジェクトの一例を示す構成図である。
【図１２】図１１に示すオブジェクトのフロー図である。
【図１３】図１２における分岐ルートの解析フロー図である。
【図１４】図１３におけるオブジェクトをステップ数調整オブジェクトに置き換えた解析フロー図である。
【図１５】本発明の他の実施の形態を説明するための実行ステップ数調整装置のシステム構成図である。
【図１６】従来の実行ステップ数調整方法の一例を示すシステム構成図である。
【図１７】従来の他の例を説明するためのコンパイル装置を用いたシステム構成図である。
【図１８】従来のまた別の例を説明するための目的プログラムの最適化を行うＣＰＵとメモリ等の接続構成図である。
【符号の説明】
１    オブジェクト生成部
２    オブジェクト結合部
３    実行部
４    実行ステップ数更新部
１１    ステップ数調整範囲判定手段
１２    オブジェクト生成手段
１３    コード解析ステップ数計測手段
１４    コード解析ステップ数調整手段
２１    オブジェクト結合手段
２２    個別ステップ数調整情報結合手段
２３    メモリ割付ステップ数調整手段
３１    実行ステップ数計測手段
３２    不要ステップ削除手段
３３    外部モデル
３４    ターゲットシステム
４１    実行ステップ数調整手段
５０    ソースプログラム
５１    命令実行ステップ数情報
５２    オブジェクト
５３    個別ステップ数調整情報
５４    ステップ数調整オブジェクト
５５    メモリ割付情報
５６    実行形式
５７    結合ステップ数調整情報
５８    実行ステップ数計測結果
【図１】
0003758991.tif 000002
【図２】
0003758991.tif 000003
【図３】
0003758991.tif 000004
【図４】
0003758991.tif 000005
【図５】
0003758991.tif 000006
【図６】
0003758991.tif 000007
【図７】
0003758991.tif 000008
【図８】
0003758991.tif 000009
【図９】
0003758991.tif 000010
【図１０】
0003758991.tif 000011
【図１１】
0003758991.tif 000012
【図１２】
0003758991.tif 000013
【図１３】
0003758991.tif 000014
【図１４】
0003758991.tif 000015
【図１５】
0003758991.tif 000016
【図１６】
0003758991.tif 000017
【図１７】
0003758991.tif 000018
【図１８】
0003758991.tif 000019