JP2747164B2 - ソフトウェア・シミュレータ - Google Patents
ソフトウェア・シミュレータInfo
- Publication number
- JP2747164B2 JP2747164B2 JP4098976A JP9897692A JP2747164B2 JP 2747164 B2 JP2747164 B2 JP 2747164B2 JP 4098976 A JP4098976 A JP 4098976A JP 9897692 A JP9897692 A JP 9897692A JP 2747164 B2 JP2747164 B2 JP 2747164B2
- Authority
- JP
- Japan
- Prior art keywords
- function
- stack
- processing step
- execution
- name
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Landscapes
- Executing Machine-Instructions (AREA)
- Debugging And Monitoring (AREA)
Description
【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明はソフトウェア・シミュレ
ータに関し、特にシミュレーションの対象となるマイク
ロプロセサの命令実行時のスタック使用状況の表示に関
する。
ータに関し、特にシミュレーションの対象となるマイク
ロプロセサの命令実行時のスタック使用状況の表示に関
する。
【0002】
【従来の技術】従来のマイクロプロセサ用ソフトウェア
・シミュレータにおいて、入力装置からコマンド単位で
動作を指示する処理の全体処理フローを図6に示す。コ
マンド入力処理ステップ100では、入力装置からコマ
ンドを入力し、コマンド解析処理ステップ101ではコ
マンドを解析して、各コマンド処理ステップ102へ分
岐する。コマンド処理ステップ102では、メモリ内容
の表示,レジスタ内容の表示,ステップの実行,あるい
はランの実行等を行なう。
・シミュレータにおいて、入力装置からコマンド単位で
動作を指示する処理の全体処理フローを図6に示す。コ
マンド入力処理ステップ100では、入力装置からコマ
ンドを入力し、コマンド解析処理ステップ101ではコ
マンドを解析して、各コマンド処理ステップ102へ分
岐する。コマンド処理ステップ102では、メモリ内容
の表示,レジスタ内容の表示,ステップの実行,あるい
はランの実行等を行なう。
【0003】命令実行系コマンド判定処理ステップ10
3ではステップの実行,ランの実行等の命令実行系のコ
マンドであるか否かを判定する。判定の結果,命令実行
系コマンドの場合には、単一命令実行処理ステップ10
4で命令を実行し、実行後にブレークの条件の成立,命
令実行時の異常,あるいは外部からの強制停止指示等の
発生を命令実行終了判定処理ステップ105で行なう。
その結果に応じて、次の命令を続行するか,あるいはコ
マンド入力処理ステップ100へ分岐し、以降,繰り返
し処理を続行する。
3ではステップの実行,ランの実行等の命令実行系のコ
マンドであるか否かを判定する。判定の結果,命令実行
系コマンドの場合には、単一命令実行処理ステップ10
4で命令を実行し、実行後にブレークの条件の成立,命
令実行時の異常,あるいは外部からの強制停止指示等の
発生を命令実行終了判定処理ステップ105で行なう。
その結果に応じて、次の命令を続行するか,あるいはコ
マンド入力処理ステップ100へ分岐し、以降,繰り返
し処理を続行する。
【0004】次に、上記説明したソフトウェア・シミュ
レータを使用して、命令実行中のスタック状態を把握
し、適切なスタック領域を決定する方法を説明する。予
め設定したスタック領域が不足している場合、スタック
領域を越えた領域に対してアクセス・ブレーク条件を設
定し、一連の命令を実行させる。ブレーク条件が成立
し、命令実行が停止した地点で、スタックに保存されて
いる状態から、関数の実行経過と各関数でのスタック使
用量とを求め、プログラムのアルゴリズムの変更,ある
いは、関数のパラメータ等の変更によりスタック使用量
を削減する。スタック使用量を削減することができない
場合には、スタック領域を拡張する。ブレーク条件の成
立する箇所が複数ある場合には、上記の作業を複数回行
い、最適なスタック領域を決定する。
レータを使用して、命令実行中のスタック状態を把握
し、適切なスタック領域を決定する方法を説明する。予
め設定したスタック領域が不足している場合、スタック
領域を越えた領域に対してアクセス・ブレーク条件を設
定し、一連の命令を実行させる。ブレーク条件が成立
し、命令実行が停止した地点で、スタックに保存されて
いる状態から、関数の実行経過と各関数でのスタック使
用量とを求め、プログラムのアルゴリズムの変更,ある
いは、関数のパラメータ等の変更によりスタック使用量
を削減する。スタック使用量を削減することができない
場合には、スタック領域を拡張する。ブレーク条件の成
立する箇所が複数ある場合には、上記の作業を複数回行
い、最適なスタック領域を決定する。
【0005】
【発明が解決しようとする課題】解決しようとする問題
は、一連の命令実行中に動的に変化するスタック使用量
に対して、スタック使用量がスタック領域を越えるプロ
グラム箇所を検出していたため、操作が煩雑であるとい
う点である。そのため、スタック使用量がスタック領域
を越えるプログラム箇所を検出するまでの操作が煩雑で
あるという問題があった。
は、一連の命令実行中に動的に変化するスタック使用量
に対して、スタック使用量がスタック領域を越えるプロ
グラム箇所を検出していたため、操作が煩雑であるとい
う点である。そのため、スタック使用量がスタック領域
を越えるプログラム箇所を検出するまでの操作が煩雑で
あるという問題があった。
【0006】
【課題を解決するための手段】本発明のソフトウェア・
シミュレータは、シミュレーションの対象となるマイク
ロプロセサのプログラム実行時に、スタック使用量がユ
ーザ指定量を越えた地点を判定し、スタック使用量がユ
ーザ指定量を超えた地点までに実行した全ての関数の関
数名と、関数毎のスタック使用量とを、関数の呼び出し
順序に従って表示することを特徴とする。
シミュレータは、シミュレーションの対象となるマイク
ロプロセサのプログラム実行時に、スタック使用量がユ
ーザ指定量を越えた地点を判定し、スタック使用量がユ
ーザ指定量を超えた地点までに実行した全ての関数の関
数名と、関数毎のスタック使用量とを、関数の呼び出し
順序に従って表示することを特徴とする。
【0007】
【実施例】次に、本発明について図面を参照して説明す
る。図1は、本発明によるソフトウェア・シミュレータ
の一実施例を示す全体処理フローである。図1におい
て、100はコマンド入力処理ステップ,101はコマ
ンド解析処理ステップ,102はコマンド処理ステッ
プ,103は命令実行系コマンド判定処理ステップ,1
04は単一命令実行処理ステップ,105は命令実行終
了判定処理ステップ,200はスタック状態表示指定量
入力処理ステップ,300はスタック状態表示処理ステ
ップである。
る。図1は、本発明によるソフトウェア・シミュレータ
の一実施例を示す全体処理フローである。図1におい
て、100はコマンド入力処理ステップ,101はコマ
ンド解析処理ステップ,102はコマンド処理ステッ
プ,103は命令実行系コマンド判定処理ステップ,1
04は単一命令実行処理ステップ,105は命令実行終
了判定処理ステップ,200はスタック状態表示指定量
入力処理ステップ,300はスタック状態表示処理ステ
ップである。
【0008】従来形式の処理フローに加えて、開始直後
に、起動行からスタック状態を表示し始めるため、ユー
ザ指定量を入力するためのスタック状態表示指定量入力
処理ステップ200を配置する。さらに、単一命令実行
処理ステップ104の後に、スタック使用量がユーザ指
定量を越える地点を判定し、スタック使用量がユーザ指
定量を超えた地点までに実行した全ての関数の関数名と
関数毎のスタック使用量とを、関数の呼び出し順序に従
って表示するため、スタック状態表示処理ステップ30
0を追加している。
に、起動行からスタック状態を表示し始めるため、ユー
ザ指定量を入力するためのスタック状態表示指定量入力
処理ステップ200を配置する。さらに、単一命令実行
処理ステップ104の後に、スタック使用量がユーザ指
定量を越える地点を判定し、スタック使用量がユーザ指
定量を超えた地点までに実行した全ての関数の関数名と
関数毎のスタック使用量とを、関数の呼び出し順序に従
って表示するため、スタック状態表示処理ステップ30
0を追加している。
【0009】また、本発明では、図に示すように命令実
行時の関数毎のスタック使用量格納用データ配列(以
降、関数テーブルと称する。)を追加している。関数テ
ーブルのデータ構造は、命令実行中の関数名,関数実行
開始時のスタック・ポインタ(以降,先頭SPと称す
る。)、および関数実行時の最大スタック・ポインタ
(以降,カレントSPと称する。)を一群としたデータ
の要素の連続と、その一群の先頭を示す指示ポインタ
(以降,関数指示ポインタと称する。)とから構成され
ている。
行時の関数毎のスタック使用量格納用データ配列(以
降、関数テーブルと称する。)を追加している。関数テ
ーブルのデータ構造は、命令実行中の関数名,関数実行
開始時のスタック・ポインタ(以降,先頭SPと称す
る。)、および関数実行時の最大スタック・ポインタ
(以降,カレントSPと称する。)を一群としたデータ
の要素の連続と、その一群の先頭を示す指示ポインタ
(以降,関数指示ポインタと称する。)とから構成され
ている。
【0010】図3は、図1に示すスタック状態表示処理
ステップの処理の詳細を示す処理フローである。次に、
図3に従って、スタック状態表示処理ステップ300で
の処理フローを説明する。なお、本実施例では、スタッ
ク領域はメモリの高アドレスから低アドレスの方向に確
保されるマイクロプロセサを想定している。まず、初期
状態判定処理ステップ301で、ソフトウェア・シミュ
レータで命令のシミュレーションが一度も実行されてい
ない初期状態でこの処理を実行したか否かを判定する。
初期状態で、この処理を実行した場合には、関数テーブ
ル作成処理ステップ302で現時点の関数名,先頭S
P,カレントSP,および関数指示ポインタを関数テー
ブルに設定する。さらに、表示フラグ設定処理ステップ
303で表示フラグをオフに初期化する。
ステップの処理の詳細を示す処理フローである。次に、
図3に従って、スタック状態表示処理ステップ300で
の処理フローを説明する。なお、本実施例では、スタッ
ク領域はメモリの高アドレスから低アドレスの方向に確
保されるマイクロプロセサを想定している。まず、初期
状態判定処理ステップ301で、ソフトウェア・シミュ
レータで命令のシミュレーションが一度も実行されてい
ない初期状態でこの処理を実行したか否かを判定する。
初期状態で、この処理を実行した場合には、関数テーブ
ル作成処理ステップ302で現時点の関数名,先頭S
P,カレントSP,および関数指示ポインタを関数テー
ブルに設定する。さらに、表示フラグ設定処理ステップ
303で表示フラグをオフに初期化する。
【0011】次に、前命令実行時からのスタック・ポイ
ンタの変化を、スタック・ポインタ増減判定処理ステッ
プ304で判定する。増減がなかった場合には、そのま
ま処理を終了する。他の関数の呼び出し時の関数への引
数,戻りアドレス,あるいは関数内での一時変数等をス
タック領域へ待避する等の処理でスタック・ポインタが
増加した場合には、最大スタック・ポインタ判定処理ス
テップ305で現時点のスタック・ポインタと、関数指
示ポインタで示しているデータ構造のカレントSPとを
比較する。スタック・ポインタの方がカレントSPより
大きければ、関数テーブル更新処理ステップ306で、
カレントSP領域にスタック・ポインタを格納する。さ
らに、関数名取得処理ステップ307で、命令実行後の
プログラム・カウンタと、予め言語処理プログラムで生
成している関数用シンボル・テーブルとにより現時点で
実行している関数名を得る。
ンタの変化を、スタック・ポインタ増減判定処理ステッ
プ304で判定する。増減がなかった場合には、そのま
ま処理を終了する。他の関数の呼び出し時の関数への引
数,戻りアドレス,あるいは関数内での一時変数等をス
タック領域へ待避する等の処理でスタック・ポインタが
増加した場合には、最大スタック・ポインタ判定処理ス
テップ305で現時点のスタック・ポインタと、関数指
示ポインタで示しているデータ構造のカレントSPとを
比較する。スタック・ポインタの方がカレントSPより
大きければ、関数テーブル更新処理ステップ306で、
カレントSP領域にスタック・ポインタを格納する。さ
らに、関数名取得処理ステップ307で、命令実行後の
プログラム・カウンタと、予め言語処理プログラムで生
成している関数用シンボル・テーブルとにより現時点で
実行している関数名を得る。
【0012】次に、実行関数変化判定処理ステップ30
8では、命令実行前の実行関数名と,関数名取得処理ス
テップ307で得られた関数名とが異なるか否かを判定
する。異なる場合には、表示フラグ設定処理ステップ3
09で表示フラグをオフに設定する。さらに、関数テー
ブル追加処理ステップ310で関数テーブルの終端に、
現時点での関数名,先頭SP,およびカレントSPを追
加し、関数指示ポインタを更新する。
8では、命令実行前の実行関数名と,関数名取得処理ス
テップ307で得られた関数名とが異なるか否かを判定
する。異なる場合には、表示フラグ設定処理ステップ3
09で表示フラグをオフに設定する。さらに、関数テー
ブル追加処理ステップ310で関数テーブルの終端に、
現時点での関数名,先頭SP,およびカレントSPを追
加し、関数指示ポインタを更新する。
【0013】一方、スタック・ポインタ増減判定処理ス
テップ304で、スタック領域からの回復等によりスタ
ック・ポインタが減少した場合には、関数名の取得処理
ステップ307を実行し、実行関数変化判定処理ステッ
プ308で命令実行前の実行関数名と関数名取得処理ス
テップ307で得られた関数名とが異なるか否かを判定
する。同じである場合には、そのまま処理を終了する。
異なる場合には、最初にスタック使用量算出処理ステッ
プ311により、先頭関数のデータ構造の先頭SPから
関数指示ポインタで示しているデータ構造のカレントS
Pを減算して、現時点でのスタック使用量を算出する。
次に、スタック使用量判定処理ステップ312によりユ
ーザ指定量と、求めたスタック使用量とを比較する。ス
タック使用量がユーザ指定量を越えていれば、表示フラ
グ判定処理ステップ313を実行する。
テップ304で、スタック領域からの回復等によりスタ
ック・ポインタが減少した場合には、関数名の取得処理
ステップ307を実行し、実行関数変化判定処理ステッ
プ308で命令実行前の実行関数名と関数名取得処理ス
テップ307で得られた関数名とが異なるか否かを判定
する。同じである場合には、そのまま処理を終了する。
異なる場合には、最初にスタック使用量算出処理ステッ
プ311により、先頭関数のデータ構造の先頭SPから
関数指示ポインタで示しているデータ構造のカレントS
Pを減算して、現時点でのスタック使用量を算出する。
次に、スタック使用量判定処理ステップ312によりユ
ーザ指定量と、求めたスタック使用量とを比較する。ス
タック使用量がユーザ指定量を越えていれば、表示フラ
グ判定処理ステップ313を実行する。
【0014】表示フラグがオフであれば、関数名,およ
びスタック使用量の表示処理ステップ314により、現
時点までの関数名,および関数毎のスタック使用量を,
関数の呼び出し順序に従って表示し、表示フラグ設定処
理ステップ315で表示フラグをオンにする。次に、関
数テーブル削除処理ステップ316では、関数指示ポイ
ンタで示しているデータ構造の関数名格納領域を数値の
0で埋め、関数指示ポインタの指示を1つ戻す。これに
より、関数テーブルから命令実行前の関数名,先頭S
P,およびカレントSPを削除し、処理を終了する。ま
た、スタック使用量判定処理ステップ312では、スタ
ック使用量がユーザ指定量を越えていない場合、または
表示フラグ判定処理ステップ313で、表示フラグがオ
ンの場合には、関数テーブル削除処理ステップ316を
実行し、処理を終了する。
びスタック使用量の表示処理ステップ314により、現
時点までの関数名,および関数毎のスタック使用量を,
関数の呼び出し順序に従って表示し、表示フラグ設定処
理ステップ315で表示フラグをオンにする。次に、関
数テーブル削除処理ステップ316では、関数指示ポイ
ンタで示しているデータ構造の関数名格納領域を数値の
0で埋め、関数指示ポインタの指示を1つ戻す。これに
より、関数テーブルから命令実行前の関数名,先頭S
P,およびカレントSPを削除し、処理を終了する。ま
た、スタック使用量判定処理ステップ312では、スタ
ック使用量がユーザ指定量を越えていない場合、または
表示フラグ判定処理ステップ313で、表示フラグがオ
ンの場合には、関数テーブル削除処理ステップ316を
実行し、処理を終了する。
【0015】次に、本実施例におけるスタック使用量
が、ユーザ指定量を越えた場合の表示例を説明する。一
例として、ここでは高級言語の一つであるC言語を用い
て説明する。まず、一般的なC言語でのスタックの使用
方法を図4を参照して説明する。図4において、図4
(a) は第1のソース・プログラムを示し、図4(b) はス
タックの使用状況を示している。
が、ユーザ指定量を越えた場合の表示例を説明する。一
例として、ここでは高級言語の一つであるC言語を用い
て説明する。まず、一般的なC言語でのスタックの使用
方法を図4を参照して説明する。図4において、図4
(a) は第1のソース・プログラムを示し、図4(b) はス
タックの使用状況を示している。
【0016】図4(a) に示す第1のソース・プログラム
400は、関数FUNC2が外部関数であることを宣言
する外部関数宣言部401と、関数func1の始まり
を示す関数宣言部402と、関数func1内で一時変
数i,j,lを宣言している変数宣言部403と、一時
変数i,lに数値を代入する変数代入部404と、i,
lを引数として関数FUNC2を呼び出し、関数FUN
C2の返り値を一時変数jに代入している関数呼び出し
部405とから構成する。この時のスタックの使用状況
を図4(b) に示す。
400は、関数FUNC2が外部関数であることを宣言
する外部関数宣言部401と、関数func1の始まり
を示す関数宣言部402と、関数func1内で一時変
数i,j,lを宣言している変数宣言部403と、一時
変数i,lに数値を代入する変数代入部404と、i,
lを引数として関数FUNC2を呼び出し、関数FUN
C2の返り値を一時変数jに代入している関数呼び出し
部405とから構成する。この時のスタックの使用状況
を図4(b) に示す。
【0017】スタック領域はメモリの高アドレスから低
アドレスの方向に確保されるマイクロプロセッサを想定
しているため図4(a) の変数宣言部403において、一
時変数i,j,lが一時変数格納領域406に積まれ
る。この時点で、スタック・ポインタ409である。次
に、図4(a) の関数呼び出し部405では、引数1と引
数iとが引数格納領域407に積まれ、更に、関数fu
nc1への返り番地が関数への返り番地格納領域408
へ積まれる。この時点で、スタック・ポインタは第2の
スタック・ポインタ410となる。外部関数FUNC2
の実行後、関数funcl内で不用となった関数への返
り番地格納領域408と、引数格納領域407とを開放
するため、スタック・ポインタは第1のスタック・ポイ
ンタ409まで戻される。
アドレスの方向に確保されるマイクロプロセッサを想定
しているため図4(a) の変数宣言部403において、一
時変数i,j,lが一時変数格納領域406に積まれ
る。この時点で、スタック・ポインタ409である。次
に、図4(a) の関数呼び出し部405では、引数1と引
数iとが引数格納領域407に積まれ、更に、関数fu
nc1への返り番地が関数への返り番地格納領域408
へ積まれる。この時点で、スタック・ポインタは第2の
スタック・ポインタ410となる。外部関数FUNC2
の実行後、関数funcl内で不用となった関数への返
り番地格納領域408と、引数格納領域407とを開放
するため、スタック・ポインタは第1のスタック・ポイ
ンタ409まで戻される。
【0018】図5は、第2のソース・プログラムの構
成,スタック領域の状態,および関数テーブルの状態を
示す説明図である。以上、説明したC言語で一般的なス
タック使用方法にもとづいて、第2のソース・プログラ
ムの実行開始から、スタック使用量がユーザ指定量を越
えた場合の表示例を出力するステップまでを図1〜図3
を参照して説明する。ここで、図5は第2のソースプロ
グラム500を示す説明図である。また、図13はスタ
ック使用量がユーザ指定量を越えた場合の表示例であ
る。
成,スタック領域の状態,および関数テーブルの状態を
示す説明図である。以上、説明したC言語で一般的なス
タック使用方法にもとづいて、第2のソース・プログラ
ムの実行開始から、スタック使用量がユーザ指定量を越
えた場合の表示例を出力するステップまでを図1〜図3
を参照して説明する。ここで、図5は第2のソースプロ
グラム500を示す説明図である。また、図13はスタ
ック使用量がユーザ指定量を越えた場合の表示例であ
る。
【0019】図5に示す第2のソースプログラム500
において、main関数はmain関数宣言部501か
らmain関数の終端部505までによって定義されて
いる。main関数は、一時変数i,jの変数宣言部5
02と,func1関数呼び出し部503と,func
2関数呼び出し部504とから成る。
において、main関数はmain関数宣言部501か
らmain関数の終端部505までによって定義されて
いる。main関数は、一時変数i,jの変数宣言部5
02と,func1関数呼び出し部503と,func
2関数呼び出し部504とから成る。
【0020】func1関数は、func1関数宣言部
506からfunc1関数の終端部508までによって
定義されていて、一時変数xの変数宣言部507から成
る。func2関数は、func2関数宣言部509か
らfunc2関数の終端部512までによって定義され
ていて、一時変数i,jの変数宣言部510と、fun
c3関数呼び出し部511とから成る。func3関数
は、func3関数宣言部513からfunc3関数の
終端部516までによって定義されていて、一時変数x
の変数宣言部514と、func4関数呼び出し部51
5とから成る。func4関数は、func4関数宣言
部517からfunc4関数の終端部519までによっ
て定義されていて、一時変数xの変数宣言部518から
成る。
506からfunc1関数の終端部508までによって
定義されていて、一時変数xの変数宣言部507から成
る。func2関数は、func2関数宣言部509か
らfunc2関数の終端部512までによって定義され
ていて、一時変数i,jの変数宣言部510と、fun
c3関数呼び出し部511とから成る。func3関数
は、func3関数宣言部513からfunc3関数の
終端部516までによって定義されていて、一時変数x
の変数宣言部514と、func4関数呼び出し部51
5とから成る。func4関数は、func4関数宣言
部517からfunc4関数の終端部519までによっ
て定義されていて、一時変数xの変数宣言部518から
成る。
【0021】図1のスタック状態表示指定量入力処理ス
テップ200で得られるユーザ指定量を15バイトと
し、main関数が実行されたときのスタック・ポイン
タが7ffeH番地、スタック領域の7ffeH番地と
7fffH番地とには、それぞれmain関数の戻り番
地が格納されているものとする。ここで、C言語のin
t型のサイズは2バイト、記述できる関数名の長さは最
大8文字とする。従って、関数テーブルの関数名格納領
域は固定して8バイトを確保し、8文字未満の関数名の
場合には、残りの領域は数値の0を埋めることにする。
テップ200で得られるユーザ指定量を15バイトと
し、main関数が実行されたときのスタック・ポイン
タが7ffeH番地、スタック領域の7ffeH番地と
7fffH番地とには、それぞれmain関数の戻り番
地が格納されているものとする。ここで、C言語のin
t型のサイズは2バイト、記述できる関数名の長さは最
大8文字とする。従って、関数テーブルの関数名格納領
域は固定して8バイトを確保し、8文字未満の関数名の
場合には、残りの領域は数値の0を埋めることにする。
【0022】まず、図5のmain関数宣言部501で
は、通常、main関数の関数名のみが存在し、本ソフ
トウェア・シミュレータでシミュレーションを実行すべ
き実行命令は存在しない。変数宣言部502によって一
時変数i,jを宣言した時点では、図2の初期状態判定
処理ステップ301において、命令のシミュレーション
が一度も実行されていない初期状態である。従って、関
数テーブル作成処理ステップ302で図6(b) に示す現
時点の関数テーブルを作成する。更に、表示フラグ設定
処理ステップ303で表示フラグをオフに初期化する。
は、通常、main関数の関数名のみが存在し、本ソフ
トウェア・シミュレータでシミュレーションを実行すべ
き実行命令は存在しない。変数宣言部502によって一
時変数i,jを宣言した時点では、図2の初期状態判定
処理ステップ301において、命令のシミュレーション
が一度も実行されていない初期状態である。従って、関
数テーブル作成処理ステップ302で図6(b) に示す現
時点の関数テーブルを作成する。更に、表示フラグ設定
処理ステップ303で表示フラグをオフに初期化する。
【0023】スタック・ポインタ増減判定処理ステップ
304では、実行前のスタック・ポインタと実行後のス
タック・ポインタとを比較する。ここでは、一時変数
i,jがスタックに積まれ、スタック・ポインタが増加
している。このため、最大スタック・ポインタ判定処理
ステップ305でも、関数指示ポインタで示しているデ
ータ構造のカレントSPの方が現時点のスタック・ポイ
ンタよりも大きくなる。よって、関数テーブル更新処理
ステップ306によって、カレントSP領域にスタック
・ポインタを格納する。更に、関数名取得処理ステップ
307では、関数名としてmainが得られる。次に、
実行関数変化判定処理ステップ308を実行するが、命
令実行前の実行関数名と関数名取得処理ステップ307
で得られた関数名とがともにmainであるため、その
まま処理を終了する。図5の変数宣言部502におい
て、スタックの状態は図6(a) に示すとおりであり、関
数テーブルは図6(b) に示すとおりである。
304では、実行前のスタック・ポインタと実行後のス
タック・ポインタとを比較する。ここでは、一時変数
i,jがスタックに積まれ、スタック・ポインタが増加
している。このため、最大スタック・ポインタ判定処理
ステップ305でも、関数指示ポインタで示しているデ
ータ構造のカレントSPの方が現時点のスタック・ポイ
ンタよりも大きくなる。よって、関数テーブル更新処理
ステップ306によって、カレントSP領域にスタック
・ポインタを格納する。更に、関数名取得処理ステップ
307では、関数名としてmainが得られる。次に、
実行関数変化判定処理ステップ308を実行するが、命
令実行前の実行関数名と関数名取得処理ステップ307
で得られた関数名とがともにmainであるため、その
まま処理を終了する。図5の変数宣言部502におい
て、スタックの状態は図6(a) に示すとおりであり、関
数テーブルは図6(b) に示すとおりである。
【0024】func1関数呼び出し部503では、関
数func1への引数i,jおよび関数func1の戻
り番地がスタックに積まれる。スタックが増加している
ため、最大スタック・ポインタ判定処理ステップ305
でも、関数指示ポインタで示しているデータ構造のカレ
ントSPの方が現時点のスタック・ポインタよりも大き
くなる。よって、関数テーブル更新処理ステップ306
で、スタック・ポインタをカレントSPに格納する。更
に、関数名取得処理ステップ307では、関数名として
func1が得られる。
数func1への引数i,jおよび関数func1の戻
り番地がスタックに積まれる。スタックが増加している
ため、最大スタック・ポインタ判定処理ステップ305
でも、関数指示ポインタで示しているデータ構造のカレ
ントSPの方が現時点のスタック・ポインタよりも大き
くなる。よって、関数テーブル更新処理ステップ306
で、スタック・ポインタをカレントSPに格納する。更
に、関数名取得処理ステップ307では、関数名として
func1が得られる。
【0025】次に、実行関数変化判定処理ステップ30
8では、命令実行前の実行関数名mainと関数名取得
処理ステップ307で得られた現時点での関数名とが異
なる。従って、表示フラグ設定処理ステップ309で、
表示フラグをオフに設定する。更に、関数テーブル追加
処理ステップ310によって、関数テーブルの終端に現
時点での関数テーブルの追加処理を行い、処理を終了す
る。図5のfunc1関数呼び出し部503において、
スタックの状態は図7(a) に示すとおりであり、関数テ
ーブルは図7(b) に示すとおりである。
8では、命令実行前の実行関数名mainと関数名取得
処理ステップ307で得られた現時点での関数名とが異
なる。従って、表示フラグ設定処理ステップ309で、
表示フラグをオフに設定する。更に、関数テーブル追加
処理ステップ310によって、関数テーブルの終端に現
時点での関数テーブルの追加処理を行い、処理を終了す
る。図5のfunc1関数呼び出し部503において、
スタックの状態は図7(a) に示すとおりであり、関数テ
ーブルは図7(b) に示すとおりである。
【0026】func1関数宣言部506および変数宣
言部507の処理は、以上説明した処理と同様である。
図5の関数func1内の変数宣言部507において、
スタックの状態は図8(a) に示すとおりであり、関数テ
ーブルは図8(b) に示すとおりである。func1関数
の終端部508では、一時変数xがスタック領域から削
除され、main関数に実行が戻り、更に、func1
関数の戻り番地と引数i,jとがスタックから削除され
る。スタック・ポインタが減少しているため、関数名取
得処理ステップ307を実行し、関数名としてmain
を取得する。
言部507の処理は、以上説明した処理と同様である。
図5の関数func1内の変数宣言部507において、
スタックの状態は図8(a) に示すとおりであり、関数テ
ーブルは図8(b) に示すとおりである。func1関数
の終端部508では、一時変数xがスタック領域から削
除され、main関数に実行が戻り、更に、func1
関数の戻り番地と引数i,jとがスタックから削除され
る。スタック・ポインタが減少しているため、関数名取
得処理ステップ307を実行し、関数名としてmain
を取得する。
【0027】次に、実行関数変化判定処理ステップ30
8では、命令実行前の実行関数名func1と、関数名
取得処理ステップ307で得られた現時点での関数名と
が異なる。また、先頭関数のデータ構造の先頭SPが7
ffeH、関数指示ポインタで示しているデータ構造の
カレントSPが7ffe4Hである。従って、スタック
使用量算出処理ステップ311を実行し、スタック使用
量が10バイトであることを求める。更に、スタック使
用量判定処理ステップ312では、求められたスタック
使用量10バイトと、ユーザ指定量の15バイトとを比
較し、スタック使用量がユーザ指定量を越えないことを
確認する。そこで、関数削除処理ステップ316で関数
テーブルから関数func1の情報を削除し、処理を終
了する。図5のfunc1関数の終端部508におい
て、スタックの状態は図6(a) に示すとおりであり、関
数テーブル図6(b) に示すとおりである。
8では、命令実行前の実行関数名func1と、関数名
取得処理ステップ307で得られた現時点での関数名と
が異なる。また、先頭関数のデータ構造の先頭SPが7
ffeH、関数指示ポインタで示しているデータ構造の
カレントSPが7ffe4Hである。従って、スタック
使用量算出処理ステップ311を実行し、スタック使用
量が10バイトであることを求める。更に、スタック使
用量判定処理ステップ312では、求められたスタック
使用量10バイトと、ユーザ指定量の15バイトとを比
較し、スタック使用量がユーザ指定量を越えないことを
確認する。そこで、関数削除処理ステップ316で関数
テーブルから関数func1の情報を削除し、処理を終
了する。図5のfunc1関数の終端部508におい
て、スタックの状態は図6(a) に示すとおりであり、関
数テーブル図6(b) に示すとおりである。
【0028】func2関数呼び出し部504,fun
c2関数宣言部509,変数宣言部510,func3
関数呼び出し部511,func3関数宣言部513,
変数宣言部514,func4関数呼び出し部515,
func4関数宣言部517および変数宣言部518の
処理は、以上説明した処理と同様である。図5の変数宣
言部518において、スタックの状態は図9(a) に示す
とおりであり、関数テーブルは図9(b) に示すとおりで
ある。
c2関数宣言部509,変数宣言部510,func3
関数呼び出し部511,func3関数宣言部513,
変数宣言部514,func4関数呼び出し部515,
func4関数宣言部517および変数宣言部518の
処理は、以上説明した処理と同様である。図5の変数宣
言部518において、スタックの状態は図9(a) に示す
とおりであり、関数テーブルは図9(b) に示すとおりで
ある。
【0029】func4関数の終端部519では一時変
数xがスタック領域から削除され、func3関数に実
行が戻り、更にfunc4関数の戻り番地と引数iとが
スタックから削除される。スタック・ポインタが減少し
ているため、関数名取得処理ステップ307を実行し、
関数名としてfunc3を取得する。次に、実行関数変
化判定処理ステップ308では、命令実行前の実行関数
名func4と関数名取得処理ステップ307で得られ
た現時点での関数名とが異なる。また、先頭関数のデー
タ構造の先頭SPが7ffeH、関数指示ポインタで示
しているデータ構造のカレントSPが7ffe6Hであ
る。従って、スタック使用量算出処理ステップ311を
実行し、スタック使用量が24バイトであることを求め
る。更に、スタック使用量判定処理ステップ312で
は、求められたスタック使用量24バイトと、ユーザ指
定量の15バイトとを比較し、スタック使用量がユーザ
指定量を越えることを確認する。そこで、表示フラグ判
定処理ステップ313を実行する。
数xがスタック領域から削除され、func3関数に実
行が戻り、更にfunc4関数の戻り番地と引数iとが
スタックから削除される。スタック・ポインタが減少し
ているため、関数名取得処理ステップ307を実行し、
関数名としてfunc3を取得する。次に、実行関数変
化判定処理ステップ308では、命令実行前の実行関数
名func4と関数名取得処理ステップ307で得られ
た現時点での関数名とが異なる。また、先頭関数のデー
タ構造の先頭SPが7ffeH、関数指示ポインタで示
しているデータ構造のカレントSPが7ffe6Hであ
る。従って、スタック使用量算出処理ステップ311を
実行し、スタック使用量が24バイトであることを求め
る。更に、スタック使用量判定処理ステップ312で
は、求められたスタック使用量24バイトと、ユーザ指
定量の15バイトとを比較し、スタック使用量がユーザ
指定量を越えることを確認する。そこで、表示フラグ判
定処理ステップ313を実行する。
【0030】ここで、表示フラグはオフであるため、関
数名およびスタック使用量の表示処理ステップ314で
現時点までの関数名および関数毎のスタック使用量を関
数の呼び出し順序に従って表示し、表示フラグ設定処理
ステップ315で表示フラグをオンにする。更に、関数
削除処理ステップ316で関数テーブルから関数fun
c4の情報を削除し、処理を終了する。図5のfunc
4関数の終端部519において、スタックの状態は図1
0(a)に示すとおりであり、関数テーブルは図10(b)
に示すとおりである。また、関数名およびスタック使用
量表示例は、図13に示すとおりである。
数名およびスタック使用量の表示処理ステップ314で
現時点までの関数名および関数毎のスタック使用量を関
数の呼び出し順序に従って表示し、表示フラグ設定処理
ステップ315で表示フラグをオンにする。更に、関数
削除処理ステップ316で関数テーブルから関数fun
c4の情報を削除し、処理を終了する。図5のfunc
4関数の終端部519において、スタックの状態は図1
0(a)に示すとおりであり、関数テーブルは図10(b)
に示すとおりである。また、関数名およびスタック使用
量表示例は、図13に示すとおりである。
【0031】func3関数の終端部515では、fu
nc4関数の終端部519と同様の処理を実行するが、
表示フラグ判定処理ステップ313以降の処理が異なっ
ている。表示フラグ判定処理ステップ313では、表示
フラグがオンであるため、関数削除処理ステップ316
で関数テーブルから関数func3の情報を削除し、処
理を終了する。図5のfunc3関数の終端部515に
おいて、スタックの状態は図11(a)に示すとおりであ
り、関数テーブルは図11(b) に示すとおりである。図
5のfunc2関数の終端部512において、スタック
の状態は図6(a) に示すとおりであり、関数テーブルは
図6(b) に示すとおりである。図5のmain関数の終
端部505において、スタックの状態は図12(a) に示
すとおりであり、関数テーブルは図12(b) に示すとお
りである。
nc4関数の終端部519と同様の処理を実行するが、
表示フラグ判定処理ステップ313以降の処理が異なっ
ている。表示フラグ判定処理ステップ313では、表示
フラグがオンであるため、関数削除処理ステップ316
で関数テーブルから関数func3の情報を削除し、処
理を終了する。図5のfunc3関数の終端部515に
おいて、スタックの状態は図11(a)に示すとおりであ
り、関数テーブルは図11(b) に示すとおりである。図
5のfunc2関数の終端部512において、スタック
の状態は図6(a) に示すとおりであり、関数テーブルは
図6(b) に示すとおりである。図5のmain関数の終
端部505において、スタックの状態は図12(a) に示
すとおりであり、関数テーブルは図12(b) に示すとお
りである。
【0032】
【発明の効果】以上説明したように本発明は、プログラ
ム開発者がスタック領域を決定する際、プログラム実行
時に関数名およびスタック使用量を関数の呼び出し順序
に従って表示することにより、最適なスタック・サイズ
を求めるための検出工数およびスタック使用方法の変更
工数を短縮できる効果がある。
ム開発者がスタック領域を決定する際、プログラム実行
時に関数名およびスタック使用量を関数の呼び出し順序
に従って表示することにより、最適なスタック・サイズ
を求めるための検出工数およびスタック使用方法の変更
工数を短縮できる効果がある。
【図1】本発明によるソフトウェア・シミュレータの一
実施例を示す全体処理のフローである。
実施例を示す全体処理のフローである。
【図2】スタック状態表示処理のフローである。
【図3】関数テーブルの構成図である。
【図4】第1のソース・プログラムの構成、および第1
のソース・プログラムのスタック領域の使用状況を示す
説明図である。
のソース・プログラムのスタック領域の使用状況を示す
説明図である。
【図5】第2のソース・プログラムの構成、スタック領
域の状態、および関数テーブルの状態を示す説明図であ
る。
域の状態、および関数テーブルの状態を示す説明図であ
る。
【図6】従来技術によるソフトウェア・シミュレータを
示す全体処理のフローである。
示す全体処理のフローである。
【図7】func1関数の呼び出し部のスタック状態を
示す図である。
示す図である。
【図8】func1内の変数宣言部のスタック状態,お
よび関数テーブルを示す図である。
よび関数テーブルを示す図である。
【図9】変数宣言部のスタック状態,および関数テーブ
ルを示す図である。
ルを示す図である。
【図10】func4関数の終端部のスタックの状態,
および関数テーブルを示す図である。
および関数テーブルを示す図である。
【図11】func3関数の終端部のスタックの状態,
および関数テーブルを示す図である。
および関数テーブルを示す図である。
【図12】main関数の終端部のスタックの状態,お
よび関数テーブルを示す図である。
よび関数テーブルを示す図である。
【図13】関数名およびスタック使用量表示例を示す図
である。
である。
【図14】マイクロプロセサ用ソフトウェア・シミュレ
ータの入力装置からコマンド単位で動作を指示する処理
の全体処理フローを示す図である。
ータの入力装置からコマンド単位で動作を指示する処理
の全体処理フローを示す図である。
100〜105,200,300,301〜316 処
理ステップ 400,500 ソース・プログラム 401〜405,501〜519 ソース・プログラム
の構成要素 406〜410 スタック領域の構成要素
理ステップ 400,500 ソース・プログラム 401〜405,501〜519 ソース・プログラム
の構成要素 406〜410 スタック領域の構成要素
Claims (3)
- 【請求項1】 処理データの保存,回復を目的にしたス
タック機構を有するマイクロプロセサのシミュレーショ
ンにおいて、シミュレーションの対象となるマイクロプ
ロセサのプログラム実行時に、スタック使用量がユーザ
指定量を超えた地点を判定するための判定手段と、 前記スタック使用量がユーザ指定量を超えた地点まで実
行したすべての関数の関数名と前記関数毎のスタック使
用量とを、関数の呼び出し順序に従って表示するための
表示手段とを備えたソフトウェア・シミュレータ。 - 【請求項2】 前記表示手段は関数テーブルの生成を判
定し、生成されていなければ関数テーブルを生成した
後、スタック・ポインタの増減を判定するステップと、 前記スタック・ポインタの増加時にはスタック・ポイン
タがカレントSPよりも大きいか否かを判定して、前者
が後者より大きいときには前記関数テーブルを更新し、
関数名を取得することにより実行関数変化を判定して、
変化時には表示フラグをオフにし、関数テーブルを追加
しするステップと、 前記スタック・ポインタの減少時には前記関数名を取得
して実行関数変化を判定し、変化時にはスタック使用量
を算出した後、ユーザ指定量がスタック使用量より大き
いか否かを判定して、前者が後者より大きいときには関
数名およびスタック使用量を表示し、表示フラグをオン
にして関数テーブルを削除するステップとから成る請求
項1記載のソフトウェア・シミュレータ。 - 【請求項3】 前記関数テーブルは関数名,先頭SP,
およびカレントSPを含むように構成した請求項1記載
のソフトウェア・シミュレータ。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP4098976A JP2747164B2 (ja) | 1992-02-28 | 1992-02-28 | ソフトウェア・シミュレータ |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP4098976A JP2747164B2 (ja) | 1992-02-28 | 1992-02-28 | ソフトウェア・シミュレータ |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH05241902A JPH05241902A (ja) | 1993-09-21 |
JP2747164B2 true JP2747164B2 (ja) | 1998-05-06 |
Family
ID=14234061
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP4098976A Expired - Lifetime JP2747164B2 (ja) | 1992-02-28 | 1992-02-28 | ソフトウェア・シミュレータ |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2747164B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07129429A (ja) * | 1993-10-28 | 1995-05-19 | Toppan Printing Co Ltd | プリンターページ記述言語の出力エラー予測装置ならびにコード最適化装置 |
-
1992
- 1992-02-28 JP JP4098976A patent/JP2747164B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JPH05241902A (ja) | 1993-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2883784B2 (ja) | マイクロコンピュータ | |
JPH04337843A (ja) | プログラム動作表示方法 | |
JPH07200217A (ja) | データ表示方法、システム及び実行方法 | |
JP2747164B2 (ja) | ソフトウェア・シミュレータ | |
JP3538292B2 (ja) | 実行時プログラム翻訳方法 | |
JP3463331B2 (ja) | メニュー選択方法 | |
US8069193B2 (en) | Method and system for utilizing a generic scalar function to allow a column function to operate on row data | |
JP2845519B2 (ja) | データパスシミュレーション装置 | |
JPH0581075A (ja) | ソフトウエア開発装置 | |
JP2619487B2 (ja) | フアイル操作方式 | |
JP3307461B2 (ja) | 推論装置 | |
JP2902006B2 (ja) | 情報提示装置 | |
JPH10283231A (ja) | データ処理装置 | |
CN115686325A (zh) | 页面布局方法、装置、电子设备和存储介质 | |
JPH0916381A (ja) | プログラム作成実行方式 | |
JPH077346B2 (ja) | データフローコンピュータのデバッグ方式 | |
JPH05120222A (ja) | オンラインシステムの共通情報取得方式 | |
JP2000242524A (ja) | プロセッサのソフトウエアシミュレータ | |
JPH04326137A (ja) | 動的領域管理方法 | |
JPH10149357A (ja) | アンドゥ処理装置及びアンドゥ処理方法 | |
JPH0643959A (ja) | 計算機システム | |
JPH056417A (ja) | 図形指定システム | |
JPH0675757A (ja) | 仮想空間常駐プログラムのリンク方式 | |
JPH0362238A (ja) | ファイル容量決定支援方式 | |
JPS63223982A (ja) | 図形処理装置 |