JPH09146793A - プログラム評価の方法および装置 - Google Patents

プログラム評価の方法および装置

Info

Publication number
JPH09146793A
JPH09146793A JP7299880A JP29988095A JPH09146793A JP H09146793 A JPH09146793 A JP H09146793A JP 7299880 A JP7299880 A JP 7299880A JP 29988095 A JP29988095 A JP 29988095A JP H09146793 A JPH09146793 A JP H09146793A
Authority
JP
Japan
Prior art keywords
program
address value
instruction
stack pointer
execution
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
JP7299880A
Other languages
English (en)
Other versions
JP2743889B2 (ja
Inventor
Kunio Niwa
邦夫 丹羽
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 JP7299880A priority Critical patent/JP2743889B2/ja
Priority to EP96118360A priority patent/EP0778524A1/en
Priority to US08/751,619 priority patent/US6185700B1/en
Publication of JPH09146793A publication Critical patent/JPH09146793A/ja
Application granted granted Critical
Publication of JP2743889B2 publication Critical patent/JP2743889B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Abstract

(57)【要約】 【課題】リアルタイムOSで実行されるプログラムのデ
バッグにおいて、メインプログラム中で呼び出されるサ
ブプログラムを一度に実行した場合、実行中にタスク切
り換えが起こったとしても、サブプログラムの実行完了
を正しく判定する。 【解決手段】第1のプログラムの命令処理フローの中に
第2のプログラムが存在するプログラムの評価方法にお
いて、第2のプログラムを呼び出す命令の実行時のスタ
ックポインタのアドレス値を保持し、保持したアドレス
値とその後の命令実行時のアドレス値を比較して、両者
の一致により第2のプログラムの実行終了を判定する。

Description

【発明の詳細な説明】
【発明の属する技術分野】本発明は、プログラム評価装
置の機械語命令を1命令だけステップ実行する機能に関
し、特に呼び出されるサブプログラムを一度に実行する
プロシージャステップ実行に関する。
【0001】プログラム開発を行う場合、通常、1つの
大きなプログラムは多くの小さなサブプログラム(また
はサブルーチン)に分割して開発を行う。サブプログラ
ムの大半はその中でさらに別のサブプログラムを呼び出
して処理を行う場合も多く、何重もの入れ子関係をつく
る。このようなプログラムのデバッグは最初から大きな
プログラムの全体をデバッグするのではなく、サブプロ
グラムの入れ子関係の下層にあるサブプログラムから、
順次上層のサブプログラムに向かってデバッグしていく
ことが多い。この場合、デバッグが完了した下層のサブ
プログラムには不具合が存在しないため、より上層のサ
ブプログラムをデバッグするときにはブラックボックス
として扱っても問題ない。
【0002】プログラムのデバッグ作業は、プログラム
を1命令ずつ実行してレジスタやメモリの変化を調べて
いくステップ実行がよく用いられるが、この場合デバッ
グが完了したサブプログラムに対しては、サブプログラ
ム内をステップ実行して変化を確認する必要はなく、サ
ブプログラムを一度に実行した後で変化を確認すればよ
い。このためプログラムのデバッグ作業を行うほとんど
のプログラム評価装置には、ステップ実行しようとして
いる命令がサブプログラムの呼び出し命令であった場
合、そのサブプログラム内を一度に実行してしまうプロ
シージャステップ実行と呼ばれる機能をもっている。
【0003】
【従来の技術】従来のプロシージャステップ実行機能に
おいてデバッグが完了したサブプログラムを一度に実行
するためには、図9に示すようにサブプログラム呼び出
し命令(以下CALL命令とする)の実行回数とサブプ
ログラムからの復帰命令(以下RET命令とする)の実
行回数を数え、それぞれの値が一致したときにサブプロ
グラムの実行が終了したものと判定していた。つまり、
図9では(1)で実行すべき命令がCALL命令かRE
T命令かそれ以外の命令かを判定し、例えばCALL命
令であった場合は(2)でCALL命令を実行して
(3)へ進みCALL命令の実行回数をカウントする。
同様に(1)でRET命令と判定した場合は、(5)、
(6)でRET命令を実行してその回数をカウントす
る。また(1)でCALLおよびRET命令でないと判
定した場合は、(4)でその命令を実行し、次の命令実
行のために(1)に戻る。さらに、実行した命令がCA
LLおよびRET命令であった場合は、(7)でCAL
L命令とRET命令の実行回数を比較し、その実行回数
が一致した場合は最初に呼び出したサブプログラムの実
行が終了したものと判定するが、実行回数が不一致の場
合、最初に呼び出したサブプログラムの実行がまだ終了
していないものとし、次の命令実行のために(1)に戻
る。
【0004】次に、従来のサブプログラム終了判定方法
の一例を、図10のプログラムを例にとり詳細に説明す
る。以下に説明をするサブプログラム終了判定方法は、
上述した図9の終了判定方法とは若干異なり、CALL
命令の実行回数をCOUNTという変数に代入するが、
CALL命令実行でCOUNT変数をインクリメント
し、RET命令の実行でCOUNT変数をデクリメント
して、COUNT変数が0となったときにサブプログラ
ム終了判定を行うものである。図10は、MAINのプ
ログラムの中で、サブプログラムSUB1およびSUB
2を呼び出して処理を行うプログラムの例であり、図1
1にこの処理の模式図とCOUNT変数の変化を示し
た。図11において、(1)〜(5)のCALLおよび
RET命令は、図10の(1)〜(5)に対応している
が、まず(A)のCALL命令が実行されるとCOUN
T変数がインクリメントされ1となり、(B)のCAL
L命令でCOUNT変数=2、(C)のRET命令でC
OUNT変数=1、(D)のCALL命令でCOUNT
変数=2、(E)のRET命令でCOUNT変数=1、
そして(F)のRET命令でCOUNT変数=0とな
り、サブプログラムの終了判定がなされる。
【0005】上述のCOUNT変数を変化させるサブプ
ログラム終了判定方法を実行する回路を図12に示す。
ここで図2にプログラム評価装置の全体図を示すが、図
12は図2中の201に位置するものである。以下図2
および図12を用いて従来例を説明する。図2におい
て、200はプログラム評価装置、201はサブプログ
ラム終了判定回路、202はプログラム評価装置の各部
の制御を行う制御プログラムを実行する中央処理装置、
203、204は制御プログラム用のRAMおよびRO
M、205は被デバッグプログラムおよび被デバッグプ
ログラムの実行を制御するスーパバイザプログラムを実
行する評価用プロセッサ、206、207はスーパバイ
ザプログラム用のRAMおよびROM、208、209
は被デバッグプログラム用のRAMおよびROM、21
0〜212は各部を接続するアドレスバス、データバ
ス、コントロールバス等の各種バス、213はサブプロ
グラム終了判定回路201中のフリップフロップ等のリ
セットを行うリセット信号、214は評価用プロセッサ
205のステップ実行制御信号、215は評価用プロセ
ッサ205とサブプログラム終了判定回路201の間の
各種制御信号、216は被デバッグプログラムが制御す
るためのターゲットシステム、217は評価用プロセッ
サ205とターゲットシステム216の間の各種バス、
218はプログラム評価装置200を制御するホストコ
ンピュータ、219〜222はI/Oポートである。以
下評価用プロセッサ205において、被デバッグプログ
ラムが実行されるときをユーザモード、スーパバイザプ
ログラムが実行されるときをスーパバイザモードと呼
ぶ。次に図12において、1はフリップフロップ回路、
2はOR回路、9はスーパバイザ割込要求端子(以下S
VIRQ端子)、10はステップ実行制御端子、11は
CALLストローブ端子、12はRETストローブ端
子、14は8入力OR回路、15はインバータ、16は
アップダウンカウンタであり、図2に対応するものは同
番号を付している。
【0006】プログラムの評価を行うにあたり、ホスト
コンピュータ218は、制御プログラムをROM204
に、スーパバイザプログラムをROM207に、被デバ
ッグプログラムをROM209にそれぞれあらかじめ格
納する。この場合、ROMを用いず、RAM203、2
06、208に各プログラムを格納してもよい。次に、
制御プログラムは評価用プロセッサ205にスーパバイ
ザプログラムを起動させ、プログラム評価の準備をす
る。評価用プロセッサ205がスーパバイザモードのと
きは、被デバッグプログラムが格納されたROM209
やRAM208、被デバッグプログラムの実行結果によ
る評価用プロセッサ205の内部レジスタの値、また場
合によりターゲットシステム216内の状態をモニタ
し、ホストコンピュータ218から確認することができ
る。ただし本従来例の場合ではターゲットシステム21
6に実際に載せるプロセッサはシングルチップマイコン
を想定しており、ターゲットシステム216内には特に
メモリ等を持たない構成となっている。
【0007】プログラムの評価を開始すると、評価用プ
ロセッサ205はスーパバイザモードにおいて中央処理
装置202にリセット信号213を発生させ、フリップ
フロップ1およびアップダウンカウンタ16を初期化す
る。そしてROM209を参照して被デバッグプログラ
ムの実行すべき命令がCALL命令かその他の命令かを
判定する。CALL命令以外の命令であった場合、中央
処理装置202によりステップ実行制御信号214をア
クティブとする。評価用プロセッサ205はステップ実
行制御端子10がアクティブになると、ユーザモードに
おいて被デバッグプログラムの命令を一つ実行し、スー
パバイザモードに再び戻る。ただしステップ実行制御信
号214はI/Oポート222でラッチされているの
で、評価用プロセッサ205はスーパバイザモードに戻
ったとき、中央処理装置202にステップ実行制御信号
214をインアクティブにさせる。次に被デバッグプロ
グラムがCALL命令であった場合は、ステップ実行制
御信号214はアクティブとせず、ユーザモードにおい
てCALL命令を実行する。この場合、CALL命令実
行後も続けて被デバッグプログラムが実行される。評価
用プロセッサ205は、通常CALLストローブ端子1
1およびRETストローブ端子12に1レベルを出力し
ているが、実行する命令がCALLまたはRET命令で
ある場合、CALL命令実行時にCALLストローブ端
子11に0レベルを出力し、RET命令実行時にRET
ストローブ端子12に0レベルを出力する。これはあら
かじめ評価用プロセッサ205に内蔵されたCALLお
よびRET命令のマイクロプログラムに組み込まれた処
理で行う。ここで図12のCALLストローブ、RET
ストローブ、およびSVIRQの各信号は、図2の制御
信号215にあたる。フリップフロップ1は、上述のよ
うにあらかじめリセットされているので、SVIRQ端
子9に1レベルを出力している。アップダウンカウンタ
16はCALLストローブの立ち上がりでアップカウン
トし、RETストローブの立ち上がりでダウンカウント
する。すなわち、CALL命令の実行終了時にアップカ
ウントし、RET命令の実行終了時にダウンカウントす
る。インバータ回路15は、アップダウンカウンタ16
のD0ビットの出力を反転する。8入力OR回路14
は、インバータ回路15の出力とアップダウンカウンタ
16のD1〜D7ビットの出力が全て0のとき、すなわ
ち、アップダウンカウンタ16の値が1のときに、S1
ラインに0レベルを出力する。OR回路2は、S1ライ
ンが0レベルのときにRETストローブが0レベルにな
ると、S2ラインに0レベルを出力する。フリップフロ
ップ1は、S2ラインが0レベルになるとセットされ、
それ以後、SVIRQ端子9に0レベルを出力する。評
価用プロセッサ205は、SVIRQ端子9が0レベル
になったとき被デバッグプログラムの実行を停止し、ス
ーパバイザモードに戻る。
【0008】以上をまとめると、アップダウンカウンタ
16のカウント値が1となったときにRET命令を実行
すると、サブプログラムの実行が終了したものと判定す
ることになる。
【0009】図13に、図12のサブプログラム終了判
定回路の動作を示すタイミングチャートを示す。図13
中、各符号は図12と共通である。図13の時刻t1、
t5、t13のCALLストローブと、時刻t9、t1
7、t21のRETストローブは、図11の(A)、
(B)、(D)のCALL命令、(C)、(E)、
(F)のRET命令にそれぞれ対応する。アップダウン
カウンタ16の出力であるD0、D1は、CALLスト
ローブの立ち上がりでアップカウントされ、RETスト
ローブの立ち上がりでダウンカウントされている。アッ
プダウンカウンタ16のカウント値は、時刻t2〜t
5、t10〜t13、t18〜t21で1となり、S1
ラインが0レベルとなる。さらに時刻t21ではアップ
ダウンカウンタ16のカウント値が1であり、かつRE
Tストローブが発生するのでS1ラインとS2ラインが
同時に0レベルとなり、それ以降のSVIRQが0レベ
ルとなる。
【0010】以上に説明したようなサブプログラムの終
了判定方法を用いたプログラム評価装置は、被デバッグ
プログラムのOSが従来のように複数のプログラムが並
行して動作しないOSでは問題ないが、OSとしてリア
ルタイムOSを用いた場合、正常に動作しないことがあ
る。
【0011】
【発明が解決しようとする課題】以下に、リアルタイム
OSで従来のサブプログラムの終了判定方法を行った場
合の問題点を述べる。リアルタイムOSとは、タスクと
いう単位に分割された複数のプログラムを状況により切
り換えながら動作させるOSであり、OSに対するシス
テムコールの発行や、割り込みによるイベントの発生に
より、実行中のタスクが切り替わる。よってリアルタイ
ムOSは、その特色からプログラムの構成上いくつかの
並列的に行われる処理や、時間経過の管理を伴うような
処理を必要とする場合に使用されることがある。また、
タスクは通常のプログラムと同様に幾つかのサブプログ
ラムに分割されて開発される。
【0012】リアルタイムOSでは、タスクが切り替わ
ることが原因となってCALL命令とRET命令の実行
回数が一致しないことがある。以下に図14に示したプ
ログラムを例にとって、リアルタイムOSを使用した場
合のCALL命令とRET命令の実行回数について説明
する。図14のプログラムは、MAIN_A、SUB1
_A、およびSUB2_AがTASK_Aのプログラム
群、MAIN_BおよびSUB1_BがTASK_Bの
プログラム群である。このTASK_AとTASK_B
は互いに独立したプログラム群であり、TASK_Aが
TASK_Bを呼び出したりするわけではない。図14
中の「CALL SYS_CALL」がリアルタイムO
Sに対してシステムコールを発行している箇所である。
図15は、図14のプログラムを実行したときの処理の
模式図であり、時間の流れに対して実行する処理がTA
SK_A、TASK_B、およびリアルタイムOSに切
り替わる様子を表す。この場合、TIME3からTIM
E4にかけて、実行するタスクはTASK_Bに切り替
わっている。図16にTASK_Aの、図17にTAS
K_Bの詳細な処理の流れをそれぞれ示す。図16、図
17の(2)〜(11)のCALLおよびRET命令
は、図14の(2)〜(11)の各命令に対応してい
る。また、図16、図17には処理の流れに応じて
(A)〜(M)の符号をつけたが、図16の(A)、
(E)、(H)はリアルタイムOSがTASK_Aに戻
るときのRET命令であり、図17の(K)はリアルタ
イムOSがTASK_Bに戻るときのRET命令であ
る。なお、リアルタイムOSからタスクへ戻る動作は、
OS自身が管理して行う。図18、図19は、図16、
図17の(A)〜(M)に対応した、CALLおよびR
ET命令実行後のスタックポインタのアドレス値とスタ
ックの内容である。リアルタイムOSでは各タスク毎に
別々のスタック領域を割り当てるようになっており、タ
スクが切り替わったときにスタック領域も一緒に切り替
わる。この例ではTASK_Aのスタック領域は0F7
40H〜0F77FHに、TASK_Bのスタック領域
は0F700H〜0F73FHとするが、図18、図1
9には変化する範囲のスタックしか示していない。リア
ルタイムOSでは図18、図19の様に各タスク毎にサ
ブプログラムの戻りアドレスを管理できるので、各タス
ク毎に独自にサブプログラムの呼び出しができる。
【0013】ここで、図14の(4)のサブプログラム
呼び出し命令についてCALL命令とRET命令の実行
回数を説明すると、サブプログラムSUB1_Aで呼び
出されたサブプログラムSUB2_Aの実行が完了する
のは、(8)のRET命令、すなわち図16の(F)の
RET命令を実行したときである。この間には、TIM
E3〜TIME4にかけてTASK_Bが実行されてい
るため、TASK_Aでは図16の(C)、(D)のC
ALL命令と(E)、(F)のRET命令が、TASK
_Bでは図17の(L)、(M)のCALL命令と
(K)のRET命令が実行される。つまり、全部で4回
のCALL命令と3回のRET命令が実行されるので、
CALL命令とRET命令の実行回数が異なる。ゆえに
従来のようなサブプログラム終了判定方法を用いた場合
は、図16の(F)のRET命令の実行後もサブプログ
ラムが終了していないという判定をするという問題が生
じる。
【0014】
【課題を解決するための手段】上述したようなリアルタ
イムOSに対して、本発明はプログラムの処理がメイン
プログラムからサブプログラムに分岐するときに変化す
るスタックポインタのアドレス値を利用することによ
り、サブプログラムの実行の終了判定を行うものであ
る。具体的には、被デバッグプログラムにサブプログラ
ムを呼び出す命令が存在する場合に、被デバッグプログ
ラムにおいてサブプログラムを呼び出す命令を最初に実
行した時のスタックポインタのアドレス値を保持し、こ
の保持されたスタックポインタのアドレス値とサブプロ
グラムの実行において変化した現在のスタックポインタ
のアドレス値とを比較して、両者が一致した場合に被デ
バッグプログラムから呼び出されたサブプログラムの実
行が終了したことを判定する。
【0015】
【発明の実施の形態】以下、本発明の実施の形態につい
て説明する。第1の実施の形態として本発明の基本とな
る処理説明図を図1に示す。図1において、100は被
デバッグプログラム、101は被デバッグプログラムが
その処理において呼び出すサブプログラム、102はサ
ブプログラム101が呼び出すサブプログラム、103
はスタックポインタのアドレス値保持手段、104はス
タックポインタのアドレス値比較手段、105はスタッ
クポインタのアドレス値出力信号、106は一致信号、
107は被デバッグプログラム100のCALL命令、
108はサブプログラム101および102の命令、1
09は被デバッグプログラム100のCALLおよびR
ET命令以外の命令、110は評価用プロセッサ、11
1はステップ実行制御手段、112は命令実行処理、1
13はステップ実行制御手段111のフラグ状態を調べ
る処理、114は被デバッグプログラム100の命令実
行結果の状態を調べる処理(プログラム評価)である。
本実施の形態では、サブプログラム101、102のデ
バッグは既に完了しているとする。
【0016】プログラムの評価を開始し、被デバッグプ
ログラム100中のCALLおよびRET命令以外の命
令を実行した場合、ステップ実行制御手段111におい
て命令のステップ実行を行うためのフラグを立て、11
2の命令実行処理を行う。そして113のフラグ状態を
調べる処理でフラグが立っていることを判定するので、
114の命令実行結果を調べる処理が実行される。つま
り、1命令の実行毎に実行結果を調べる。
【0017】上述のように被デバッグプログラム100
を実行する過程で、実行すべき命令がCALL命令であ
る場合、例えば被デバッグプログラム100中の(1)
のCALL命令の実行時には、アドレス値保持手段10
3にスタックポインタのアドレス値を保持し、アドレス
値比較手段104に出力する。そしてステップ実行制御
手段111のフラグを立てずにCALL命令を実行し、
サブプログラム101を呼び出す。CALL命令実行
後、113のフラグ状態を調べる処理ではフラグが立っ
ていないことを判定するので、サブプログラム101が
続けて実行される。ここでサブプログラム101中に
(2)の様にCALL命令があった場合、その実行時の
スタックポインタのアドレス値をアドレス値比較手段1
04に出力する。また同様にRET命令の実行時にも、
スタックポインタのアドレス値をアドレス値比較手段1
04に出力し、アドレス値保持手段103から出力され
る(1)のCALL命令実行時のスタックポインタのア
ドレス値と逐次比較を行う。サブプログラムの実行を続
けていくと、サブプログラム101の(4)のRET命
令を実行するが、このRET命令はサブプログラム10
1が被デバッグプログラム100に戻る命令である。よ
って、アドレス値比較手段104では(1)のCALL
命令実行時のスタックポインタのアドレス値との一致を
判定し、一致信号106がステップ実行制御手段111
に対して発生され、ステップ実行制御のフラグが立つ。
そして113のフラグ状態を調べる処理でフラグが立っ
ていることを判定するのでサブプログラムの実行が終了
したと判定し、114の命令実行結果を調べる処理に移
る。
【0018】以上の説明をまとめると、プログラムの実
行において最初に実行すべきCALL命令の実行時のス
タックポインタのアドレス値、つまりCALL命令の実
行においてプログラムの戻り番地が保持されるスタック
ポインタのアドレス値を保持し、サブプログラムの実行
に移る。しかし、サブプログラム中にCALL命令があ
ったときはスタックポインタのアドレス値は保持せず、
CALLおよびRET命令で変化するスタックポインタ
のアドレス値と、はじめに保持されたスタックポインタ
のアドレス値を比較し、両者が一致したときにサブプロ
グラムの実行が終了したものとみなすことになる。
【0019】次に図14のリアルタイムOSのプログラ
ムの実行過程におけるスタックポインタを示した図1
8、図19を用いてスタックポインタのアドレス値の比
較の説明をする。図14のTASK_Aのメインプログ
ラムであるMAIN_Aにおいて、(1)の「CALL
SYS_CALL」はリアルタイムOSに分岐して戻
ってくるだけであるので、(2)の「CALL SUB
1_A」の実行について説明する。図18において、図
14の(2)は(B)に対応するので、スタックポイン
タのアドレス値の保持手段には「0F780H」が保持
される。その後(B)〜(D)のCALL命令が実行さ
れ、スタックポインタのアドレス値は変化していくが、
その値は保持されない。時間の流れにおいて、TIME
3〜4でTASK_Bに移っているが、上述したように
各タスク用のスタック領域に切り替わるため、TASK
_Aに戻ったとき、スタックポインタのアドレス値はT
ASK_Bに移る前の値となる。以下処理が実行され、
結局(I)のRET命令を実行するとスタックポインタ
のアドレス値は「0F780H]になるため、保持され
ていたアドレス値と等しくなり、図14の(2)で呼び
出されたサブプログラムの実行が終了する。よって、サ
ブプログラムの終了判定が正しく行われる。またこの方
法では、再帰呼び出しと呼ばれる、あるプログラムが自
分自身を呼び出すようなサブプログラムの分岐処理にも
対応できる。
【0020】第2の実施の形態として、本発明を回路
(ハードウェア)により実現したものを図3に示す。こ
こでプログラム評価装置の全体の構成は従来例で説明し
た図2のものと同様である。図3において、1、6、お
よび8はフリップフロップ回路、2はOR回路、3は1
6入力NAND回路、4は16個のEXNOR回路、5
は16ビットラッチ回路、7はNOR回路、9はスーパ
バイザ割込要求端子、10はステップ実行制御端子、1
1はCALLストローブ端子、12はRETストローブ
端子、13はスタックポインタ出力端子であり、図2お
よび図12に対応するものは同番号を付している。ただ
し、図2の各種制御信号215は従来例と同様のCAL
Lストローブ、RETストローブ、SVIRQに加え
て、スタックポインタ出力信号も表す。なお図4は図3
の16入力NAND回路3およびEXNOR回路4の詳
細な接続図であり、図3における16本のビット線であ
るL1およびL2ラインの、対応するビット線同志を1
6個のEXNOR回路で比較し、全てのEXNOR回路
で一致を判定して1レベルを出力すると、16入力NA
ND回路3が0レベルを出力するものである。
【0021】以下に図3の回路の動作を説明する。第2
の実施の形態において評価用プロセッサ205は、スタ
ックポインタのアドレス値をスタックポインタ出力端子
13に出力していることとOSがリアルタイムOSであ
る以外は、スーパバイザモードおよびユーザモードにお
いても従来例のものと同様の動作を行うのでサブプログ
ラムの終了判定以外の動作は省略する。フリップフロッ
プ1、6、および8は、従来例と同様あらかじめリセッ
ト信号213によりリセットされる。フリップフロップ
8、NAND回路7、およびフリップフロップ6は、最
初のCALL命令の実行終了時(CALLストローブの
最初の立ち上がり)に、F3ラインを0レベルから1レ
ベルに変化させ、それ以後CALLストローブが発生し
てもF3ラインが1レベルのままになるようにしてい
る。16ビットラッチ5は、F3ラインの立ち上がりで
L2ラインの値をラッチし、L1ラインに出力する。す
なわち、16ビットラッチ5は最初のCALL命令の実
行終了時におけるスタックポインタのアドレス値をラッ
チし、以後その値を保持するようになっている。EXN
OR回路4と16入力NAND回路3は、16ビットラ
ッチ5の出力とスタックポインタ出力端子13の出力を
比較し、両者の値が一致したとき、S1ラインに0レベ
ルを出力する。OR回路2は、S1ラインが0レベルの
ときにRETストローブが0レベルになると、0レベル
をS2ラインに出力する。そしてフリップフロップ1
は、S2ラインの0レベルによりセットされ、それ以後
0レベルをSVIRQ端子9に出力し、評価用プロセッ
サ205がスーパバイザモードに移行する。
【0022】図5に、図3のサブプログラム終了判定回
路の動作を示すタイミングチャートを示す。図5中、各
符号は図3と共通である。また、時刻t8〜t21まで
の間にはタスクの切換えなどがあるとする。なお、評価
用プロセッサ205は、本実施の形態の場合CALL命
令の実行によりスタックポインタのアドレス値を2減算
し、RET命令の実行により2加算する。すなわち、ス
タックポインタのアドレス値SPはCALLストローブ
の立ち下がりで2が減算され、RETストローブの立ち
上がりで2が加算される。スタックポインタのアドレス
値SPは、最初のCALL命令の実行前はaであるとす
ると、時刻t1にある最初のCALL命令開始時にa−
2となる。そして、時刻t1のCALL命令終了時に対
応してF2ラインが0レベルとなり、さらにF3ライン
が1レベルとなる。16ビットラッチ5はF3ラインの
1レベルに対応してスタックポインタのアドレス値SP
の値をラッチするので時刻t1の終わりでL1ラインは
a−2となる。その後、時刻t5のCALL命令開始時
にCALLストローブによりF2ラインが1レベルとな
るがF3ラインは変化しないのでL1ラインも変化しな
い。ただし、スタックポインタのアドレス値SPはa−
4となる。時刻t25ではRET命令終了時にスタック
ポインタのアドレス値SPがa−2に戻る。つまり時刻
t26〜t29では、スタックポインタのアドレス値S
Pの値が最初のCALL命令の実行終了時の値に戻るた
め、S1ラインが0レベルになる。さらに時刻t29で
はS1ラインとRETストローブが同時に0レベルにな
るため、S2ラインが0レベルとなるので、時刻t29
以降、SVIRQは0レベルになり、評価用チップ20
5がスーパバイザモードに移行する。
【0023】以上のように本発明の第2の実施の形態
は、最初のCALL命令の実行過程におけるスタックポ
インタが変化した後のアドレス値を記憶し、その後変化
するスタックポインタのアドレス値と逐次比較を行い、
メインプログラムに戻るRET命令の実行過程における
スタックポインタが変化する前のアドレス値と比較する
ことにより、サブプログラムの終了判定を正しく行うこ
とができる。
【0024】第3の実施の形態として、本発明をソフト
ウェアにより実現したものを図6〜8に示す。本実施の
形態の場合第2の実施の形態とは異なり、図2のプログ
ラム評価装置の全体図からは、リセット信号213、各
種制御信号およびスタックポインタ出力信号215、サ
ブプログラム終了判定回路201が無くなる。そして代
わりにサブプログラムの終了判定を実現するソフトウェ
アがスーパバイザプログラムの一部としてROM207
に格納される。
【0025】プログラムの評価を開始するまでの準備は
従来例および第2の実施の形態と同一であるので説明を
省略する。プログラムの評価を開始すると、評価用プロ
セッサ205はスーパバイザモードにおいて中央処理装
置202によりステップ実行制御信号214をアクティ
ブとする。そして図6に示すフローチャートが開始され
る。つまり従来例や第2の実施の形態とは異なり、命令
の種類に係わりなくステップ実行制御信号214をアク
ティブとする。なお、図6、図7のフローチャートでは
省略したが、被デバッグプログラムの命令を実行する場
合、スーパバイザプログラムはスーパバイザリターン命
令(RETSVI命令)を発行する。このRETSVI
命令は評価用プロセッサ205をユーザモードに移行さ
せ、被デバッグプログラムの命令を1命令実行した後、
再びスーパバイザモードに戻る命令であり、ステップ実
行制御信号214がアクティブのときのみ有効となる。
以下に、図6〜8のフローチャートの説明をする。まず
(1)ではROM209を参照して被デバッグプログラ
ムの実行すべき命令の命令コードを調べRAM206に
確保されたDATAという変数に格納する。(2)では
該命令コードがCALL命令かその他の命令かを判定す
る。本実施の形態の場合、CALL命令を表す命令コー
ドの1バイト目は「01H」であり、RET命令を表す
命令コードの1バイト目は「02H」であるとする。よ
って命令コードの1バイト目を調べることにより命令コ
ードを判定するが、これはどのような情報処理装置であ
っても命令コードを解析することにより行うことができ
る。(2)で命令がCALL命令以外の命令であった場
合、(3)に分岐して1命令実行し、(11)へ進む。
また(2)で命令がCALL命令であった場合は、図7
に示すサブプログラムの終了判定を行うフローチャート
に分岐する。次に図7の(4)では、RAM206に確
保されたVALUEという変数にスタックポインタのア
ドレス値を格納する。そして評価用プロセッサ205が
ユーザモードに移行して(5)のCALL命令を実行
し、再びスーパバイザモードに戻って図8の(6)に進
む。(6)および(7)では、(1)および(2)と同
様の処理を行い、(5)のCALL命令によって呼び出
されたサブプログラム中の命令がRET命令か、CAL
L命令を含むその他の命令かを判定する。(7)でRE
T命令以外の命令であった場合、図7の(10)に分岐
して1命令実行し、(6)に戻る。また(7)で命令が
RET命令であった場合、(8)へ分岐してRET命令
を実行し、(9)へ進む。(9)では(4)で保持され
たスタックポインタのアドレス値であるVALUE変数
と現在のスタックポインタのアドレス値を比較するが、
両者が不一致だった場合は(6)へ戻る。また両者が一
致した場合は、サブプログラムの実行が終了したものと
判定し、図6の(11)へ進む。(11)は、従来例や
第2の実施の形態のスーパバイザモードと同様のもので
あり、ステップ実行制御信号214をインアクティブと
し、被デバッグプログラムの実行結果をモニタする処理
が起動される。
【0026】以上のように本発明の第3の実施の形態
は、最初のCALL命令の実行過程におけるスタックポ
インタが変化する前のアドレス値を記憶し、その後変化
するスタックポインタのアドレス値と逐次比較を行い、
メインプログラムに戻るRET命令の実行過程における
スタックポインタが変化した後のアドレス値と比較する
ことにより、サブプログラムの終了判定を正しく行うこ
とができる。
【0027】
【発明の効果】本発明は、リアルタイムOSを用いたプ
ログラム評価装置のプロシージャステップ実行におい
て、従来のようなサブプログラムの呼び出し命令および
戻り命令の実行数を数える方法ではサブプログラムの実
行終了を正しく判定できない場合があったものを、一般
的に情報処理装置に備わっているサブプログラムの呼び
出し命令および戻り命令の実行により変化するスタック
ポインタを利用し、そのアドレス値の変化を見ることで
サブプログラムの実行終了を正しく判定できる効果を奏
する。
【図面の簡単な説明】
【図1】 第1の実施の形態の説明図
【図2】 評価装置全体図
【図3】 第2の実施の形態のサブプログラム終了判
定回路図
【図4】 図3の補足図
【図5】 図3の回路のタイミングチャート
【図6】 第3の実施の形態の全体フローチャート
【図7】 第3の実施の形態のサブプログラム終了判
定フローチャート
【図8】 第3の実施の形態のRET命令判定フロー
チャート
【図9】 従来の技術の基本処理説明図
【図10】 リアルタイムOSを使用しない場合のプロ
グラム例
【図11】 図10のプログラムによるサブプログラム
呼出処理の模式図
【図12】 従来の技術のサブプログラム終了判定回路
【図13】 図12の回路のタイミングチャート
【図14】 リアルタイムOSを使用した場合のプログ
ラム例
【図15】 図14のプログラムによるタスクの切り替
わりの模式図
【図16】 図14のプログラムのTASK_Aの処理
の流れ図
【図17】 図14のプログラムのTASK_Bの処理
の流れ図
【図18】 図14のプログラムのTASK_Aのスタ
ックの変化
【図19】 図14のプログラムのTASK_Bのスタ
ックの変化
【符号の説明】
1、6、8、フリップフロップ回路 2、OR回路 3、16入力NAND回路 4、EXNOR回路 5、16ビットラッチ回路 7、NOR回路 9、スーパバイザ割込要求端子 10、ステップ実行制御端子 11、CALLストローブ端子 12、RETストローブ端子 13、スタックポインタ出力端子 14、8入力OR回路 15、インバータ 16、アップダウンカウンタ 100、被デバッグプログラム 101、102、サブプログラム 103、スタックポインタのアドレス値保持手段 104、スタックポインタのアドレス値比較手段 105、スタックポインタのアドレス値出力信号 106、一致信号 107、被デバッグプログラムのCALL命令 108、サブプログラムの命令 109、被デバッグプログラムのCALLおよびRET
命令以外の命令 110、評価用プロセッサ 111、ステップ実行制御手段 112、命令実行処理 113、ステップ実行制御手段のフラグ状態を調べる処
理 114、命令実行結果の状態を調べる処理 200、プログラム評価装置 201、サブプログラム終了判定回路 202、中央処理装置、 203、制御プログラム用RAM 204、制御プログラム用ROM 205、評価用プロセッサ 206、スーパバイザプログラム用RAM 207、スーパバイザプログラム用ROM 208、被デバッグプログラム用RAM 209、被デバッグプログラム用ROM 210〜212、各種バス 213、リセット信号 214、ステップ実行制御信号 215、各種制御信号 216、ターゲットシステム 217、評価用プロセッサとターゲットシステム間の各
種バス 218、ホストコンピュータ 219〜222、I/Oポート

Claims (6)

    【特許請求の範囲】
  1. 【請求項1】第1のプログラムによる命令処理フローの
    中に第2のプログラムが挿入されたプログラムの評価方
    法において、前記第2のプログラムを呼び出すための命
    令を実行したときのスタックポインタのアドレス値を保
    持し、当該保持されたスタックポインタのアドレス値と
    その後の命令実行におけるスタックポインタのアドレス
    値とを比較して、両者が一致した場合に前記第2のプロ
    グラムの実行終了を判定するプログラム評価方法。
  2. 【請求項2】第1および第2のプログラムを有し、前記
    第1のプログラムの中に前記第2のプログラムを呼び出
    す呼び出し命令を有するプログラムの評価方法におい
    て、前記第1のプログラム中の前記呼び出し命令を検知
    して、当該呼び出し命令の実行過程においてその時点の
    スタックポインタのアドレス値を保持し、前記第2のプ
    ログラムの実行において、さらに第3のプログラムを呼
    び出す命令を実行する場合においてはスタックポインタ
    のアドレス値を保持せず、前記第3のプログラムの呼び
    出し命令を含む前記第2および第3のプログラムの命令
    の実行におけるスタックポインタのアドレス値と前記保
    持されたスタックポインタのアドレス値と比較し、両者
    が一致した場合に前記第2のプログラムの実行終了を判
    定するプログラム評価方法。
  3. 【請求項3】複数のプログラムで構成されるプログラム
    であり、第1のプログラムが第2のプログラムを呼び出
    す処理を有するプログラムと、前記プログラムの実行に
    より変化するスタックポインタのアドレス値を出力する
    アドレス値出力手段と、前記アドレス値出力手段から出
    力されたスタックポインタのアドレス値を保持するアド
    レス値保持手段と、前記アドレス値保持手段に保持され
    たスタックポインタのアドレス値と前記第2のプログラ
    ムの実行において変化したスタックポインタのアドレス
    値とを比較するアドレス値比較手段とを備えるプログラ
    ム評価装置であって、前記アドレス値保持手段には前記
    第1のプログラムにおいて前記第2のプログラムを呼び
    出すときのスタックポインタのアドレス値が保持され、
    前記アドレス値比較手段において前記保持されたスタッ
    クポインタのアドレス値と前記変化したスタックポイン
    タのアドレス値が一致した場合に前記第2のプログラム
    の実行終了を判定するプログラム評価装置。
  4. 【請求項4】評価の対象である被デバッグプログラム
    と、前記被デバッグプログラムが記憶される記憶手段
    と、前記被デバッグプログラムを実行する評価用プロセ
    ッサとを有するプログラム評価装置において、前記被デ
    バッグプログラムは複数のサブプログラムから構成さ
    れ、前記評価用プロセッサは前記被デバッグプログラム
    のサブプログラム呼び出し命令の実行を示す制御信号
    と、前記被デバッグプログラムの命令実行時に変化する
    スタックポインタのアドレス値を示すアドレス値情報と
    を出力する手段を有し、さらに前記制御信号によってセ
    ットされるフリップフロップと、前記フリップフロップ
    のセット信号が最初に発生したときの前記アドレス値情
    報を保持し出力するアドレス値保持回路と、前記変化す
    るアドレス値情報と前記アドレス値保持回路の出力とを
    比較し、両者が一致したときに前記サブプログラムの実
    行終了を示す一致信号を発生するアドレス値比較回路を
    備えることを特徴とするプログラム評価装置。
  5. 【請求項5】プログラムの評価を行うスーパバイザプロ
    グラムと、評価の対象である被デバッグプログラムが実
    行される評価用プロセッサであって、第1の制御信号が
    入力されるスーパバイザ割込要求端子と、第2の制御信
    号が入力されるステップ実行制御端子と、プログラムの
    呼び出し命令実行時に第3の制御信号を発生するコール
    ストローブ端子と、プログラムの戻り命令実行時に第4
    の制御信号を発生するリターンストローブ端子とを備
    え、前記第1の制御信号が入力されたときに前記スーパ
    バイザプログラムを実行し、前記第2の制御信号が第1
    の状態であるときは前記被デバッグプログラムを1命令
    実行して前記スーパバイザプログラムに処理が戻る動作
    を行い、前記第2の制御信号が第2の状態であるときは
    前記被デバッグプログラムを連続して実行する評価用プ
    ロセッサにおいて、前記被デバッグプログラムの命令の
    実行において変化するスタックポインタのアドレス値を
    出力するスタックポインタ出力端子をさらに備えること
    を特徴とする評価用プロセッサ。
  6. 【請求項6】前記アドレス値保持回路が、前記フリップ
    フロップを第1のフリップフロップとすると、前記制御
    信号と前記第1のフリップフロップのセット信号との論
    理積をとる第1の論理積回路と、前記第1の論理積回路
    の出力によりセットされる第2のフリップフロップと、
    前記第2のフリップフロップのセット信号に応じて前記
    アドレス値情報をラッチし出力するラッチ回路から構成
    され、前記アドレス値比較回路が、前記アドレス値情報
    と前記ラッチ回路の出力との対応するビット同志が入力
    される、スタックポインタのアドレス値のビット数と同
    数の排他的論理和回路と、前記排他的論理和回路の出力
    の論理積をとる第2の論理積回路から構成されることを
    特徴とする請求項4記載のプログラム評価装置。
JP7299880A 1995-11-17 1995-11-17 プログラム評価の方法および装置 Expired - Fee Related JP2743889B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP7299880A JP2743889B2 (ja) 1995-11-17 1995-11-17 プログラム評価の方法および装置
EP96118360A EP0778524A1 (en) 1995-11-17 1996-11-15 Method and device for evaluating a program
US08/751,619 US6185700B1 (en) 1995-11-17 1996-11-18 Method and device for evaluating a program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP7299880A JP2743889B2 (ja) 1995-11-17 1995-11-17 プログラム評価の方法および装置

Publications (2)

Publication Number Publication Date
JPH09146793A true JPH09146793A (ja) 1997-06-06
JP2743889B2 JP2743889B2 (ja) 1998-04-22

Family

ID=17878070

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7299880A Expired - Fee Related JP2743889B2 (ja) 1995-11-17 1995-11-17 プログラム評価の方法および装置

Country Status (1)

Country Link
JP (1) JP2743889B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018158032A (ja) * 2017-03-23 2018-10-11 株式会社平和 遊技機

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5914058A (ja) * 1982-07-15 1984-01-24 Matsushita Electric Works Ltd プログラムデバツグ装置
JPS59121678A (ja) * 1982-12-27 1984-07-13 Fujitsu Ltd スタツクの書込み・読出し制御方式
JPS61160146A (ja) * 1984-12-31 1986-07-19 Fujitsu Ltd アドレス・スタツク・ポインタ装置の制御方式
JPS63150732A (ja) * 1986-12-16 1988-06-23 Fujitsu Ltd プログラム走行監視装置
JPH036618A (ja) * 1989-06-02 1991-01-14 Fuji Electric Co Ltd スタックポインタの異常検出回路
JPH0348933A (ja) * 1989-07-17 1991-03-01 Nec Corp リターンアドレスのスタック制御回路

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5914058A (ja) * 1982-07-15 1984-01-24 Matsushita Electric Works Ltd プログラムデバツグ装置
JPS59121678A (ja) * 1982-12-27 1984-07-13 Fujitsu Ltd スタツクの書込み・読出し制御方式
JPS61160146A (ja) * 1984-12-31 1986-07-19 Fujitsu Ltd アドレス・スタツク・ポインタ装置の制御方式
JPS63150732A (ja) * 1986-12-16 1988-06-23 Fujitsu Ltd プログラム走行監視装置
JPH036618A (ja) * 1989-06-02 1991-01-14 Fuji Electric Co Ltd スタックポインタの異常検出回路
JPH0348933A (ja) * 1989-07-17 1991-03-01 Nec Corp リターンアドレスのスタック制御回路

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018158032A (ja) * 2017-03-23 2018-10-11 株式会社平和 遊技機

Also Published As

Publication number Publication date
JP2743889B2 (ja) 1998-04-22

Similar Documents

Publication Publication Date Title
JP4094724B2 (ja) ソフトウェアをデバッグする際に例外を識別するための装置および方法
JP2005317023A (ja) データ処理装置のブレークポイント論理ユニット、デバッグ論理、およびブレークポイントの方法
JP2743889B2 (ja) プログラム評価の方法および装置
US20210357312A1 (en) Method and device for testing robustness and stability of smm, and storage medium
EP0829048B1 (en) Programmable instruction trap system and method
EP0448127B1 (en) Microprogram sequence controller
EP0778524A1 (en) Method and device for evaluating a program
JPH08171504A (ja) エミュレ−ション装置
JPS6385942A (ja) 並列プログラムのデバツグ支援装置
JP2990800B2 (ja) 割込み処理装置
JPS6270947A (ja) デバグ割込み制御方式
JPH08305607A (ja) マルチプロセッサシステムのプログラムデバッグ方法およびデバッガ
JP2755646B2 (ja) データ駆動型データ処理装置
JP3159155B2 (ja) プログラムのデバッグ方法および装置
JPH0736735A (ja) デバッグ装置
JPH06282353A (ja) 時間短縮機能を有するタイマ装置
JPH02118740A (ja) デバッグ用割込み発生回路
JPH11167500A (ja) エミュレータ装置のイベント回路及びデバッグシステム
JPS5977553A (ja) デ−タ収集方式
JPH0399338A (ja) マイクロプロセッサ
JPS6075945A (ja) トリガタイミング機能を備えたプログラム制御式デ−タ処理装置
JPH07271608A (ja) 割込み発生回路
JPS6244836A (ja) マイクロアドレススタツク制御方式
JPH02193228A (ja) 情報処理装置
JPH02120940A (ja) デバッグ支援回路

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 19980106

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080206

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090206

Year of fee payment: 11

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100206

Year of fee payment: 12

LAPS Cancellation because of no payment of annual fees