JPH0610793B2 - プログラム暴走検出方法 - Google Patents

プログラム暴走検出方法

Info

Publication number
JPH0610793B2
JPH0610793B2 JP58029720A JP2972083A JPH0610793B2 JP H0610793 B2 JPH0610793 B2 JP H0610793B2 JP 58029720 A JP58029720 A JP 58029720A JP 2972083 A JP2972083 A JP 2972083A JP H0610793 B2 JPH0610793 B2 JP H0610793B2
Authority
JP
Japan
Prior art keywords
program
address
return
instruction
executed
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
Application number
JP58029720A
Other languages
English (en)
Other versions
JPS59154557A (ja
Inventor
章二 田代
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.)
Toshiba Corp
Original Assignee
Tokyo Shibaura Electric Co Ltd
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 Tokyo Shibaura Electric Co Ltd filed Critical Tokyo Shibaura Electric Co Ltd
Priority to JP58029720A priority Critical patent/JPH0610793B2/ja
Publication of JPS59154557A publication Critical patent/JPS59154557A/ja
Publication of JPH0610793B2 publication Critical patent/JPH0610793B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/004Error avoidance

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Debugging And Monitoring (AREA)

Description

【発明の詳細な説明】 〔発明の技術分野〕 本発明はサブルーチンプログラムを含む各種プログラム
を実行する情報処理装置に好適するプログラム暴走検出
方法に関する。
〔発明の技術的背景とその問題点〕
この種の情報処理装置では、サブルーチンプログラムを
呼ぶ場合、CALL文(CALL命令)が用いられるのが一般的
である。第1図はメインプログラムP1中のCALL文でサ
ブルーチンプログラムP2を呼び、当該プログラムP2
中のCALL文でサブルーチンプログラムP3を呼び、当該
プログラムP3中のCALL文でサブルーチンプログラ
ムP4を呼び、当該プログラムP4中のCALL文でサブル
ーチンプログラムP5を呼ぶプログラム例を示したもの
である。周知のようにCALL文の実行時にはその戻り番地
が戻り先スタックに記憶(退避)される。この戻り先ス
タックは通常メモリで構成され、カウンタによりアドレ
スが指定される。第2図(a)〜(e)は戻り先スタックの内
容とカウンタの示すアドレスとを第1図に対応させて示
したものである。図中、11は戻り先スタック、12は
カウンタである。この例では、戻り先スタック11は2
2(=4)ワードのメモリであり、カウンタ12は2ビ
ットの2進カウンタである。第2図(a)はメインプログ
ラムP1中の)中のCALL文を実行する前の戻り先スタッ
ク11およびカウンタ12の状態を示すもので、戻り先
スタック11には有効な戻り番地は記憶されておらず、
カウンタ12は戻り先スタック11のアドレス“00”
を指定している。しかしてメインプログラムP1の番地
AでCALL文が実行されると、戻り先スタック11のアド
レス“00”には戻り番地A+1が記憶(退避)され、
カウンタ12は+1される。同様にしてサブルーチンプ
ログラムP2,P3,P4が順に呼び出されて最後にサ
ブルーチンプログラムP5が呼び出された時点では、戻
り先スタック11およびカウンタ12は第2図(e)に示
される如き状態となる。すなわち、戻り先スタック11
のアドレス“00”にはP2からP1への戻り番地A+
1が、同じくアドレス“01”にはP3からP2への戻
り番地B+1が、同じくアドレス“10”にはP4から
P3への戻り番地C+1が、同じくアドレス、“11”
にはP5からP4への戻り番地D+1がそれぞれ記憶さ
れている。また、カウンタ12はアドレス“00”を示
している。そして、サブルーチンプログラムP5が走行
し、やがてRET(RETURN)命令が実行されるとカウンタ
12が−1され、当該カウンタ12の示す戻り先スタッ
ク11のアドレス“11”に記憶されている戻り番地D
+1へ実行が移る。これによりサブルーチンプログラム
P4の番地D+1以降の命令が逐次実行され、RET命令
によりサブルーチンプログラムP3の番地C+1に実行
が戻る。以下、同様にサブルーチンプログラムP3でRE
T命令が実行されることによりサブルーチンプログラム
P2の番地B+1に実行が戻り、当該P2でRET命令が
実行されることによりメインプログラムP1の番地A+
1に実行が戻る。
ところが、このような構成では、第3図に示されるよう
に例えばメインプログラムP6の番地Fから何らかの原
因で(番地F+1に実行が移らずに)サブルーチンプロ
グラム7の番地Gへ実行が移った場合、当該P7のRET
命令が実行されることになり、次のような不都合が生じ
る。すなわちP7のRET命令が実行されると、カウンタ
(12)が−1され、当該カウンタ(12)の示す戻り先スタッ
ク(11)のアドレス“11”に書き込まれている番地に実
行が移るため、プログラムが暴走してしまうことであ
る。そこで従来は、カウンタ(12)の内容が“00”の場
合に−1しようとするとエラーになるようにしてプログ
ラムの暴走を防いでいた。しかし、この方式には次に示
す2つの次点があるため問題であった。
ハードウェア量が増大し、高価格となる。
CALL文を何回か重ねて使用して第2図(e)に示される
如き状態になると、RET命令を実行したときにエラーと
なってしまうので、戻り先スタックをmワードのメモリ
で構成した場合でもCALL文はm−1回(第2図の例では
3回)までしか重複できない。
〔発明の目的〕
本発明は上記事情に鑑みてなされたものでその目的は、
何らかの原因で誤ってプログラムが分岐し、RET命令が
余分に実行された場合に、その旨をハードウェアを追加
することなく効率よく検出することができ、もってプロ
グラムの暴走が防止できるプログラム暴走検出方法を提
供することにある。
〔発明の概要〕
本発明は、プログラム中のCALL(コール)命令の実
行により別のプログラムを呼び出す際に戻り番地が格納
される先入れ後出し方式の戻り先スタックを備えた情報
処理であって、RET(リターン)命令の実行により、
上記スタックからその時点で最も最後に格納されている
戻り番地を取り出して同番地にプログラム実行を復帰さ
せるようにした情報処理装置上で実行されるプログラム
の暴走を検出するためのプログラム暴走検出方法におい
て、 プログラムの任意のチェックポイントで、エラー処理ル
ーチンの先頭番地またはエラー処理ルーチンへジャンプ
させる命令の番地を戻り番地とする1つ以上の特別のC
ALL命令を実行させることにより、 もし、それに続いて行われるプログラム処理の途中で何
らかの原因によりCALL命令の実行なしに別のプログ
ラムの或る番地の処理に移るプログラム暴走が発生する
と、上記スタッタへの戻り番地の格納動作が行われない
ために、CALL命令実行に伴う上記スタッタへの戻り
番地の格納回数よりRET命令実行に伴う上記スタッタ
からの戻り番地の取り出し回数の方が多くなることか
ら、実際にプログラム暴走が発生した場合には、その後
のプログラム処理の過程での少なくとも1回目のRET
命令の実行により、上記特別のCALL命令の実行に伴
って上記スタックに格納された戻り番地が同スタックか
ら取り出されて、上記エラー処理ルーチンに飛ぶように
したものである。
〔発明の実施例〕
以下、本発明の一実施例を図面を参照して説明する。な
お、第1図と同一部分には同一符号を付して詳細な説明
を省略する。第4図は本発明一実施例で適用されるプロ
グラム構成を示すもので、P8はプログラムの或るチェ
ックポイント(例えば電源をオンしたとき、割込み復帰
のとき、サブルーチンプログラムのRET命令を実行して
メインプログラムに復帰したときなど)で実行されるプ
ログラムである。このプログラムP8は、図示せぬ主メ
モリの番地Iから始まる領域に格納されており、番地I
に実行すべきメインプログラム9を呼び出すCALL文を、
番地I+1以降にエラー処理ルーチンを有している。こ
のエラー処理ルーチンはエラー情報を出力してプログラ
ム実行を停止するようにプログラムされたものである。
メインプログラムP9はCALL文を含んでおり、当該CALL
文が実行されることによりサブルーチンプログラムP1
0が呼び出されるようになっている。
今、プログラムの或るチェックポイントでプログラムP
8のCALL文が実行されたものとする。これにより、第2
図(a)に示される如き状態にあった戻り先スタック11
およびカウンタ12の内容は第5図に示される状態とな
る。すなわち、カウンタ12の示す戻り先スタック11
のアドレス“00”に戻り番地I+1が記憶(退避)さ
れ、カウンタ12は+1されてその内容が“01”とな
る。そして、メインプログラムP9が呼び出され、当該P
9が実行される。
この状態で、何らかの原因により第6図に示されるよう
にメインプログラムP9の番地Jから誤ってサブルーチ
ンプログラムP10の番地Kに実行が移ったものとす
る。やがてサブルーチンプログラムP10中のRET命令
が実行されると、カウンタ12が−1され、当該カウン
タ12の示す戻り先スタック11のアドレス“00”に
記憶されている戻り番地I+1が取り出される。しかし
てプログラムP8の番地I+1以降のエラー処理ルーチ
ンが実行され、これによりエラー情報が出力されプログ
ラム実行が停止される。
次に本発明の他の実施例を第7図乃至第9図を参照して
説明する。第7図はプログラム構成例を示すもので、P
11は前述したエラー処理ルーチンと同様のプログラム
である。このプログラムP11は図示せぬ主メモリの番
地Xから始まる領域に格納されている。P12〜P15
はプログラムの或るチェックポイントで実行されるプロ
グラム、P16はメインプログラム、P17はサブルー
チンプログラムである。各プログラムP12〜P16は
それぞれプログラムP13〜P17を呼び出すためのCA
LL文を含んでいる。
本実施例では、プログラムの或るチェックポイントでま
ずプログラムP12の番地PのCALL文が実行され、当該
CALL文によりプログラムP13が呼び出される。そし
て、プログラムP13の番地QのCALL文が実行されること
によりプログラムP14が呼び出される。以下、同様に
プログラムP14の番地RのCALL文が実行されることに
よりプログラムP15が呼び出され、続いて当該プログ
ラムP15の番地SのCALL文が実行されることによりメ
インプログラムP16が呼び出される。第8図はこの時点
における戻り先スタック11およびカウンタ12の状態
を示すもので、戻り先スタック11のアドレス“0
0”,“01”,“10”,“11”にはそれぞれ戻り
番地P+1,Q+1,R+1,S+1が記憶(退避)されている。図示
せぬ主メモリのこれらの番地P+1,Q+1,R+1,S+1には、第
7図から明らかなようにいずれも番地XへのGO TO
命令、すなわちプログラムP11へのGO TO命令が
書き込まれている。また、カウンタ12の内容は、“0
0”となっている。
このような状態で、何らかの原因により第9図に示され
るようにメインプログラムP16の番地Yから誤ってサ
ブルーチンプログラムP17の番地Zに実行が移ったも
のとする。やがてサブルーチンプログラム中のRET命令
が実行されると、カウンタ12が−1され、当該カウン
タ12の示す戻り先スタック11のアドレス“11”に
記憶されている戻り番地S+1が取り出される。主メモ
リのS+1番地には番地XへのGO TO命令が格納されて
おり、当該GO TO命令が実行されることによりエラー処
理ルーチンであるプログラムP11に実行が移る。この
結果エラー情報が出力されプログラム実行が停止され
る。これに対して、メインプログラムP16のCALL
文が実行されて、サブルーチンプログラムP17が呼び
出される通常の状態では、そのCALL文の実行時に、
その戻り番地(メインプログラムP16への戻り番地)
が戻り先スタック11に記憶されることから(ここで
は、第8図から明らかなようにアドレス“00”に記憶
され、それまで同アドレス“00”に記憶されていたP
+1は失われる)、このメインプログラムP16から呼
び出されたサブルーチンプログラムP17でRET命令
が実行されると、その戻り番地(アドレス“00”に記
憶されている最新の戻り番地)へ実行が移り、正しくメ
インルーチンP16に戻る。したがって、当該メインル
ーチンP16の呼び出し時に戻り先スタック11に記憶
された戻り番地、即ち番地XへのGO TO命令の格納
番地に実行が移ることはない。
また、本実施例では、上述の説明から明らかなようにプ
ログラムP12〜P15の各CALL文の実行により戻り先
スタック11の各アドレスに戻り番地P+1,Q+1,R+1,S+1
を記憶しておき、RET命令によりいずれが読み出されて
も番地XへのGO TOの命令が実行されるようになってい
る。したがって、何らかの原因でカウンタ12が故障し
て正常な動作をしなくなった場合でも、余分なRET命令
が実行されると番地XへのGO TO命令によりプログラム
P11に実行が移る。
ところで上述の例では、サブルーチンP17から別のサ
ブルーチンを呼ぶようにはなっていないが、第1図のよ
うに或るサブルーチンが別のサブルーチンを呼び、当該
別のサブルーチンが更に別のサブルーチンを呼ぶ場合な
どにおいても、プログラムP12〜P15の各CALL文の
実行により戻り先スタック11に記憶された戻り番地
(P+1,Q+1,R+1,S+1)の全てが、その後のCALL文の重複
により新たな戻り番地の書き替えられない限り、RET命
令に余分に実行されたことが検出できる。この場合、CA
LL文の重複が3回までのプログラムに対しては、RET命
令が余分に実行されたことが検出でき、プログラムの暴
走を防止できる。これに対して、CALL文によりサブ
ルーチンが呼び出される通常の状態では、メインプログ
ラムとの複数のサブルーチンプログラムによる一連のプ
ログラム処理の過程で発生するCALL文の実行回数と
RET命令の実行回数とは一致して余分なRET命令は
実行されないことから、即ちCALL文実行に伴う戻り
先スタック11への戻り番地の格納回数とRET命令実
行に伴う戻り先スタック11からの戻り番地の取り出し
回数とは必ず一致することから、正しくメインプログラ
ムに戻り、該当プログラム処理の直前に戻り先スタック
11に格納された戻り番地、即ち番地XへのGO TO
命令の格納番地に実行が移ることはない。また、本実施
例では、CALL文の重複が4回以上ある場合には、プログ
ラムの暴走の防止を図ることは困難であるが、従来方式
と異ってCALL文の重複回数が制限されることはない。
なお、前記実施例では、戻り先スタックが4ワードのメ
モリで構成されているものとしたがこれに限るものでは
ない。また、前記実施例では、1CALL命令、或いは戻り
先スタックのワード数(アドレス数)と等しい回数のCA
LL命令により、戻り先スタックの1アドレス位置、或い
は全アドレス位置にエラー処理ルーチンへジャンプさせ
るべくプログラムされた番地を書き込むものとして説明
したが、戻り先スタックのワード数(アドレス数)をm
(mは1上の整数)とすると、n回(nは1≦n≦mを
満足する整数)のCALL命令により戻り先スタックのnア
ドレス位置に、上述の番地を書き込むようにしてもよ
い。
〔発明の効果〕
以上詳述したように本発明によれば何らかの原因でRET
命令が余分に実行されても、その旨をハードウェアを追
加することなく効率よく検出でき、プログラムの暴走の
防止が図れる。
【図面の簡単な説明】
第1図はサブルーチンを含む一般的なプログラム例を示
す図、第2図は戻り先スタックおよびカウンタの状態の
変化を第1図に対応させて示す図、第3図はプログラム
の異常分岐を示す図、第4図は本発明に係るプログラム
構成の一実施例を示す図、第5図はプログラムのチェッ
クポイントで第4図のプログラム構成によりCALL文が実
行された際の戻り先スタックおよびカウンタの状態を示
す図、第6図は上記実施例におけるプログラムの異常分
岐を示す図、第7図は本発明の他の実施例に係るプログ
ラム構成例を示す図、第8図は上記他の実施例において
プログラムのチェックポイントで4回CALL文が実行され
た際の戻り先スタックおよびカウンタの状態を示す図、
第9図は上記他の実施例におけるプログラムの異常分岐
を示す図である。 11……カウンタ、12……戻り先スタック。

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】プログラム中のCALL(コール)命令の
    実行により別のプログラムを呼び出す際に戻り番地が格
    納される先入れ後出し方式の戻り先スタックを備えた情
    報処理装置であって、RET(リターン)命令の実行に
    より、上記スタックからその時点で最も最後に格納され
    ている戻り番地を取り出して同番地にプログラム実行を
    復帰させるようにした情報処理装置上で実行されるプロ
    グラムの暴走を検出するためのプログラム暴走検出方法
    において、 プログラムの任意のチェックポイントで、エラー処理ル
    ーチンの先頭番地またはエラー処理ルーチンへジャンプ
    させる命令の番地を戻り番地とする1つ以上の特別のC
    ALL命令を実行させ、 プログラム処理の過程でCALL命令の実行なしに別の
    プログラムの処理に移るプログラム暴走が発生した場合
    には、その後のプログラム処理の過程での少なくとも1
    回目のRET命令の実行により、上記特別のCALL命
    令の実行に伴って上記スタックに格納された上記戻り番
    地が同スタックから取り出されて、上記エラー処理ルー
    チンが実行されるようにしたことを特徴とするプログラ
    ム暴走検出方法。
JP58029720A 1983-02-24 1983-02-24 プログラム暴走検出方法 Expired - Lifetime JPH0610793B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP58029720A JPH0610793B2 (ja) 1983-02-24 1983-02-24 プログラム暴走検出方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP58029720A JPH0610793B2 (ja) 1983-02-24 1983-02-24 プログラム暴走検出方法

Publications (2)

Publication Number Publication Date
JPS59154557A JPS59154557A (ja) 1984-09-03
JPH0610793B2 true JPH0610793B2 (ja) 1994-02-09

Family

ID=12283938

Family Applications (1)

Application Number Title Priority Date Filing Date
JP58029720A Expired - Lifetime JPH0610793B2 (ja) 1983-02-24 1983-02-24 プログラム暴走検出方法

Country Status (1)

Country Link
JP (1) JPH0610793B2 (ja)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS50138749A (ja) * 1974-04-23 1975-11-05
JPS54106142A (en) * 1978-02-08 1979-08-20 Nec Corp Data processor

Also Published As

Publication number Publication date
JPS59154557A (ja) 1984-09-03

Similar Documents

Publication Publication Date Title
JPH0114611B2 (ja)
EP0402856B1 (en) Instruction execution control system
US6829719B2 (en) Method and apparatus for handling nested faults
JPS58121457A (ja) 情報処理装置
JPS6362039A (ja) 計算機
JPH09128267A (ja) データ処理装置およびデータ処理方法
JPH0610793B2 (ja) プログラム暴走検出方法
EP0113982A2 (en) A data processing system
JPS62262146A (ja) 処理装置
JPS5855529B2 (ja) デ−タ処理装置のエラ−処理方式
JPH03113646A (ja) トレース回路
WO1990005951A1 (en) Method of handling unintended software interrupt exceptions
JPS59114637A (ja) デ−タ処理装置
JPS59129995A (ja) 記憶装置
JPS6142301B2 (ja)
JPS58213349A (ja) 情報処理装置
JPS6148738B2 (ja)
JPH0262633A (ja) プログラム間通知方式
JPS63214856A (ja) デ−タ処理装置のデ−タ保護制御方式
JPH0667942A (ja) ログ採取方式
JPS6161417B2 (ja)
JPS6240550A (ja) プログラムデバツク装置
JPS62264345A (ja) ベクトル・プロセツサにおけるアドレス変換例外時の処理方式
JPH0740226B2 (ja) 分岐命令制御方式
JPH05127895A (ja) 汎用レジスタへの書込みプロテクト方式