JPH05181703A - データ処理装置 - Google Patents

データ処理装置

Info

Publication number
JPH05181703A
JPH05181703A JP4000666A JP66692A JPH05181703A JP H05181703 A JPH05181703 A JP H05181703A JP 4000666 A JP4000666 A JP 4000666A JP 66692 A JP66692 A JP 66692A JP H05181703 A JPH05181703 A JP H05181703A
Authority
JP
Japan
Prior art keywords
stack
value
subroutine
data
jsr
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.)
Pending
Application number
JP4000666A
Other languages
English (en)
Inventor
Hiromi Okazaki
弘美 岡崎
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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric 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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP4000666A priority Critical patent/JPH05181703A/ja
Publication of JPH05181703A publication Critical patent/JPH05181703A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Executing Machine-Instructions (AREA)
  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【目的】 スタックに退避した前ルーチンのPC値とサ
ブルーチンコール後のスタックポインタ値を保護する。 【構成】 PC値を通常のスタックではなくPCスタッ
クに退避し、PCスタック用のスタックポインタ(PC
SP)の初期値を保持する第一のレジスタと、サブルー
チン用命令実行後のPCSPの値を保持する第二のレジ
スタとで指定される領域にデータを書き込もうとした場
合、エラーを発生して処理を中断する。 【効果】 前ルーチンのPC値を不用意な上書きから保
護し、またPC値を退避するスタックを通常スタックと
分けることで誤ったPC値を読み込むことによるプログ
ラムの流れの変化や暴走を防ぐことができ、また前ルー
チンのPC値を保護してあることでデバッグが容易にな
る。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】この発明はデバッグサポート機能
とスタックポインタとを有するデータ処理装置に関する
ものである。
【0002】
【従来の技術】通常メモリからデータを読み出したり、
メモリにデータを書き込んだりする場合、読み書きにか
かわるメモリのアドレスを指定してデータの転送を行な
う方法が一般的であるが、アドレスの指定方法が通常の
場合とは異なるスタックと呼ばれるメモリとの間でデー
タの転送を行なうこともある。スタックとは先にいれた
データが後から出て来るような構造を持つデータの入れ
物である。スタックにデータを入れることをプッシュと
呼び、スタックからデータを出すことをポップと呼ぶ。
データをプッシュあるいはポップするアドレスは、スタ
ックポインタ(以下SPとする)で指定する。SPの値
はプッシュ、ポップ操作につれて変化し、常に最も新し
いスタック操作が行なわれたデータのアドレスを指して
いるので、後にプッシュされたデータから先にポップさ
れる。
【0003】従来よりデータ処理装置の中には、ジャン
プサブルーチン命令(以下JSRとする)でサブルーチ
ンを呼び出すときに、処理を中断するルーチンのプログ
ラムカウンタ(以下PCとする)値を保存するための記
憶装置としてスタックを利用しているものもある。この
ようなデータ処理装置において、プログラム中で[JS
R(ジャンプ先実効アドレス)]を実行すると、JSR
の次の命令の先頭アドレスを復帰後PC値としてスタッ
クにプッシュし、ジャンプ先実効アドレスを新PC値と
してPCにセットする。その後PCの内容を先頭アドレ
スとする命令をメモリから取り込んでサブルーチンの処
理に移る。このときSPの値はスタックにプッシュした
前ルーチンの復帰後PC値を格納したスタックのアドレ
スを指している。またサブルーチンの最後でリターンサ
ブルーチン命令(以下RTSとする)を実行すると、S
Pの内容の指すスタックから、退避していた復帰後PC
値をポップしてPCにセットし、前ルーチンのJSRの
次命令から処理を再開する。このときSPの値はJSR
を実行する前の値にもどっている。
【0004】図5は従来のデータ処理装置においてメイ
ンプログラムの途中でJSRを実行してサブルーチン1
を呼び出したときの処理の流れとJSR実行前後のスタ
ックの状態について示したものである。図5でメインプ
ログラムは命令A0、B0、JSR、およびC0からな
り、サブルーチン1は命令A1、B1およびRTSから
なる。命令A0が格納されているメモリの先頭アドレス
をPC(A0)とし、同様に命令B0、JSR、C0、
A1、B1、RTSが格納されているメモリの先頭アド
レスをそれぞれPC(B0)、PC(JSR)、PC
(C0)、PC(A1)、PC(B1)、PC(RT
S)とする。JSRのジャンプ先実効アドレスはサブル
ーチン1の先頭命令A1が格納されているメモリの先頭
アドレスPC(A1)であるとする。JSRが実行され
る前のSPの値をSP(0)、JSRが実行された後の
SPの値をSP(1)とする。以下図3を用いてJSR
の動作を詳しく説明する。
【0005】メインプログラム実行中に[JSR PC
(A1)]が読み込まれると、SPの値をSP(0)か
らSP(1)に変化させ、メインプログラムのJSRの
次命令C0の先頭アドレスPC(C0)を復帰後PC値
としてスタックにプッシュする。次にPCにJSRで指
定されたジャンプ先実効アドレスPC(A1)をセット
し、サブルーチン1の処理に移る。PC(A1)を先頭
アドレスとする命令A1から順次命令を読み込んで実行
し、サブルーチン1の最後で[RTS]が読み込まれる
と、スタックからSPの値SP(1)を先頭アドレスと
して退避していた復帰後PC値のPC(C0)をポップ
し、PCにセットしてメインプログラムの処理に戻る。
SPの値はSP(0)にもどっている。
【0006】また図6は従来のデータ処理装置において
n回のサブルーチンジャンプを連続して行ったときの処
理の流れとJSR前のスタックの状態およびn回目のJ
SR実行後のスタックの状態について示したものであ
る。メインプログラムは命令A0、・・・、JSR、命
令C0、・・・からなり、サブルーチン1は命令A1、
・・・、JSR、命令C1、・・・、RTSからなる。
同様にサブルーチンjは命令Aj、・・・、JSR、命
令Cj、・・・、RTSからなる。命令A0、命令B
0、JSR、C0、はそれぞれPC(A0)、PC(B
0)、PC(JS0)、PC(C0)を先頭アドレスと
するメモリに格納されている。メインプログラムのJS
Rのジャンプ先実効アドレスはサブルーチン1の先頭命
令A1が格納されているメモリのアドレスPC(A1)
であるとする。同様にサブルーチンjの命令Aj、B
j、JSR、Cj、RTSはそれぞれPC(Aj)、P
C(Bj)、PC(JSj)、PC(Cj)、PC(R
Tj)を先頭アドレスとするメモリに格納されており、
サブルーチンj中のJSRのジャンプ先実効アドレスは
サブルーチン(j+1)の先頭命令A(j+1)が格納
されているメモリのアドレスPC(A(j+1))であ
るとする。1回目のJSRが実行される前のSPの値を
SP(0)、n回目のJSRが実行された後のSPの値
をSP(n)とする。以下図4を用いて詳しく説明を行
なう。
【0007】メインプログラム実行中に[JSR PC
(A1)]が読み込まれると、SPの値をSP(0)か
らSP(1)に変化させ、メインプログラムのJSRの
次命令C0の先頭アドレスPC(C0)を復帰後PC値
としてスタックにプッシュする。次に、PCにJSRで
指定されたジャンプ先実効アドレスPC(A1)をセッ
トし、サブルーチン1の処理に移る。PC(A1)を先
頭アドレスとする命令A1から順次命令を読み込んで実
行し、サブルーチン1の途中で[JSR PC(A
2)]が読み込まれると、SPの値をSP(1)からS
P(2)に変化させ、サブルーチン1のJSRの次命令
C1の先頭アドレスPC(C1)を復帰後PC値として
スタックにプッシュする。同様にn回のサブルーチンジ
ャンプを実行し、サブルーチンnの処理に移ったときス
タックにはn個のデータがプッシュされておりSPの値
はSP(n)になっている。サブルーチンnの最後で
[RTS]が読み込まれると、スタックからSPの値S
P(n)を先頭アドレスとする退避していたサブルーチ
ン(n−1)への復帰後PC値のPC(C(n−1))
をポップし、PCにセットしてサブルーチン(n−1)
の処理に戻る。SPの値はSP(n−1)にもどってい
る。同様にn回のRTS命令によりデータをポップして
PCにセットしながら処理を続けるとメインプログラム
の処理に戻ることができる。
【0008】また従来のデータ処理装置の中にも高級言
語用のスタックフレームの形成とレジスタの退避処理を
行なう命令としてスタックフレーム生成命令(以下EN
TERとする)、およびレジスタの復帰とスタックフレ
ーム開放、PC値の復帰処理を行なう命令(以下EXI
TDとする)を備えているものがある。
【0009】図7はメインプログラムの途中でJSRに
よりサブルーチン1を呼び出した後ENTERを実行す
るときの処理の流れと、ENTERを実行する前のスタ
ックの状態、およびENTERを実行した後のスタック
の状態について説明したものである。図7でメインプロ
グラムは命令A0、B0、JSR、およびC0からな
り、サブルーチン1はENTER、・・・、EXITD
からなる。命令A0が格納されているメモリの先頭アド
レスをPC(A0)、同様に命令B0、JSR、C0、
ENTER、EXITDが格納されているメモリの先頭
アドレスをそれぞれPC(B0)、PC(JSR)、P
C(C0)、PC(EN)、PC(EX)とする。JS
Rのジャンプ先実効アドレスはサブルーチン1の先頭命
令ENTERが格納されているメモリの先頭アドレスP
C(EN)であるとする。JSRが実行される前のS
P、FPの値をそれぞれSP(0)、FP(0)、JS
Rが実行された後のSPの値をSP(1)、ENTER
が実行された後のSP、FPの値をそれぞれSP
(3)、SP(2)とする。以下図7を用いて詳しく説
明を行なう。
【0010】メインプログラムの途中で[JSR PC
(EN)]が読み込まれると、SPの値をSP(0)か
らSP(1)に変化させ、メインプログラムのJSRの
次命令C0の先頭アドレスPC(C0)を復帰後PC値
としてスタックにプッシュする。その後PCにJSRで
指定されたジャンプ先実効アドレスPC(EN)をセッ
トし、サブルーチン1の処理に移る。PC(EN)を先
頭アドレスとする命令ENTERを読み込んで実行する
と、まずENTER実行前のFPの値FP(0)をスタ
ックにプッシュし、FPにはSPの値SP(2)を新F
P値として格納する。その後スタックにローカル変数領
域を確保してから汎用レジスタ群をプッシュする。EN
TERの全てのスタックプッシュが終わったときSPの
値はSP(3)となっている。ENTER処理後サブル
ーチン1の処理を実行し、サブルーチン1の最後で[E
XITD]が読み込まれると、スタックからSPの値S
P(3)を先頭アドレスとしてまず汎用レジスタ群の値
をポップし、FPの値SP(2)をSPに格納してロー
カル変数領域を開放し、SPの示すスタックからFP値
としてFP(0)、復帰後PC値としてPC(C0)を
ポップしてそれぞれFP、PCにセットしメインプログ
ラムの処理に戻る。SPの値はSP(0)にもどってい
る。
【0011】
【発明が解決しようとする課題】通常上記のようなスタ
ックはメモリの一部に置かれるため、上記のようにサブ
ルーチンジャンプが行われたときに前ルーチンの次命令
の先頭アドレスををスタックに退避する方法では、サブ
ルーチン実行中にPC値を退避してある場所へ不用意に
データを書き込んでしまったり、プッシュ操作やポップ
操作を行なってJSR後のSPと値が変わったままRT
Sを実行すると、サブルーチンを呼び出した前ルーチン
の復帰後PC値をポップすることができず、誤ったデー
タをPCにセットしてプログラムの流れが変わったり、
暴走したりして、プログラムそのものを傷つけたり、デ
ータを破壊してしまい、デバッグも困難になるという問
題点があった。
【0012】また、サブルーチン実行中にFPへ不用意
にデータを書き込んでしまい、FPの値が変わったまま
ENTERを実行すると、誤ったSP値を読み込むこと
になるので前ルーチンでのFP値を復帰することができ
なくなるという問題点があった。
【0013】さらに従来例のようにスタックフレームを
形成した後で、サブルーチン実行中にプッシュ操作やポ
ップ操作を行なってENTER後のSPと値が変わった
ままEXITを実行すると、誤ったレジスタ値をポップ
してしまい、正しい結果が得られないという問題点もあ
った。
【0014】この発明はかかる問題点を解決するために
なされたもので、スタックに退避した前ルーチンのPC
値とFP値等のデータが保護でき、PC値とFP値を格
納しているスタックのスタックポインタ値およびスタッ
クフレーム形成直後の通常スタックのSP値の正常性が
チェックできるデータ処理装置を得ることを目的とす
る。
【0015】
【課題を解決するための手段】第1の発明に係るデータ
処理装置は以下の要素を有するものである。 (a)所定の種類のデータを記憶する第1のスタック、
(b)上記第1のスタックに記憶されるデータ以外のデ
ータを記憶する第2のスタック、(c)データをスタッ
クに記憶する場合、そのデータの種類により上記第1と
第2のスタックのいずれかを選択する選択手段。
【0016】第2の発明に係るデータ処理装置は以下の
要素を有するものである。 (a)所定のデータを記憶するスタック、(b)上記ス
タックの使用されている領域への書き込みを禁止する禁
止手段。
【0017】第3の発明に係るデータ処理装置は以下の
要素を有するものである。 (a)所定のデータを記憶するスタック、(b)上記ス
タックの先頭を示すスタックポインタ、(c)上記スタ
ックポインタの値を保持する保持手段、(d)上記スタ
ックポインタの値と保持手段の値を比較してスタックポ
インタの破壊を検査する検査手段。
【0018】第4の発明に係るデータ処理装置は第1〜
第3の発明における選択手段、禁止手段、検査手段を選
択的に動作させることを指定する指定手段を備えたもの
である。
【0019】
【作用】第1の発明によれば、選択手段が第1のスタッ
クにPC値やFT値の所定の種類のデータを記憶するよ
うにし、第2のスタックに、PC値やFP値以外の通常
のデータを記憶するようにしたので、第2のスタックが
破壊されるようなことがあっても第1のスタックにある
PC値やFP値等の所定の種類のデータは保護される。
【0020】第2の発明によれば、禁止手段がスタック
の使用されている領域への書き込みを禁止するので、ス
タックに退避されたPC値やFP値やその他のデータが
保護される。
【0021】第3の発明によれは、保持手段で保持した
値と比較してからスタックポインタの値を変更するの
で、スタックポインタの値が正常であることが確認され
てからスタックポインタの値が変更される。
【0022】第4の発明によれば、指定手段が、選択手
段、禁止手段、検査手段を選択実行を指定するので、デ
バッグ作業が容易に行える。
【0023】
【実施例】
実施例1.以下この発明の一実施例として、通常のSP
とは別にPC値を退避するスタック(以下PCスタック
とする)を指すスタックポインタとしてPCスタックポ
インタ(以下PCSPとする)を持ち、またPCSPの
初期値を保持するレジスタSR0と、PCSPとともに
変化するレジスタSR1を持ち、デバッグ環境を制御す
るレジスタ中にPC値を退避するのに通常のスタックと
PCスタックのどちらを選択するかを指定するビット
と、PCスタックが選択された場合PCスタックに対す
る書き込みを禁止するかどうかを指定するビットを備え
たデータ処理装置の動作について図1、図2を用いて説
明する。
【0024】図1は本発明のデータ処理装置において、
n回のサブルーチンジャンプを連続して行ったときの処
理の流れとJSR前のPCスタックの状態およびn回目
のJSR実行後のPCスタックの状態について示したも
のである。メインプログラムは命令A0、・・・、JS
R、命令C0、・・・からなり、サブルーチン1は命令
A1、・・・、JSR、命令C1、・・・、RTSから
なり、同様にサブルーチンjは命令Aj、・・・、JS
R、命令Cj、・・・、RTSからなる。命令A0、命
令B0、JSR、C0、はそれぞれPC(A0)、PC
(B0)、PC(JS0)、PC(C0)を先頭アドレ
スとするメモリに格納されている。メインプログラムの
JSRのジャンプ先実効アドレスはサブルーチン1の先
頭命令A1が格納されているメモリのアドレスPC(A
1)であるとする。同様にサブルーチンjの命令Aj、
Bj、JSR、Cj、RTSはそれぞれPC(Aj)、
PC(Bj)、PC(JSj)、PC(Cj)、PC
(RTj)を先頭アドレスとするメモリに格納されてお
り、サブルーチンj中のJSRのジャンプ先実効アドレ
スはサブルーチンjの先頭命令A(j+1)が格納され
ているメモリのアドレスPC(A(j+1))であると
する。1回目のJSRが実行される前のPCSPの値を
PCSP(0)、n回目のJSRが実行された後のPC
SPの値をPCSP(n)とする。
【0025】図2の10は本発明のデータ処理装置のデ
バッグ環境制御レジスタを示す。11はPCDビット
で、PC値を通常のスタックに退避するかPCスタック
に退避するかを指定する。12はPCWビットでPCス
タックでSR0からSR1の範囲のメモリを書き込み禁
止にするかどうかを指定する。
【0026】図2のPCDビット11とPCWビット1
2がセットされているとき、メインプログラムを実行す
る前にまずリセット後の初期PCSPの値がSR0とS
R1に転送される。以後SR0の値はリセットがかかる
まで変化しない。メインプログラムの途中で[JSR
PC(A1)]が読み込まれると、PCSPの値をPC
SP(0)からPCSP(1)に変化させ、メインプロ
グラムのJSRの次命令C0の先頭アドレスPC(C
0)を復帰後PC値としてPCスタックにプッシュす
る。PCSPの値が変化すると同時にSR1の値もPC
SP(1)に変化し、常にPCSPとSR1の内容は同
じになる。次にPCにJSRで指定されたジャンプ先実
効アドレスPC(A1)をセットし、サブルーチン1の
処理に移る。PC(A1)を先頭アドレスとする命令A
1から順次命令を読み込んで実行し、サブルーチン1の
途中で[JSR PC(A2)]が読み込まれると、P
CSPをの値はPCSP(1)からPCSP(2)に変
化させ、サブルーチン1のJSRの次命令C1の先頭ア
ドレスPC(C1)をPCスタックにプッシュする。こ
のときSR1の値もPCSP(2)となる。同様に、n
回のサブルーチンジャンプを実行し、サブルーチンnの
処理に移ったときのPCSPの値はPCSP(n)とな
り、SR1の値もPCSP(n)になっている。サブル
ーチンnの最後で[RTS]が読み込まれると、PCス
タックからPCSPの値PCSP(n)を先頭アドレス
として退避していたサブルーチン(n−1)への復帰後
PC値のPC(C(n−1))をポップし、PCにセッ
トしてサブルーチン(n−1)の処理に戻る。PCSP
の値およびSR1の値はPCSP(n−1)になる。同
様にn回のRTS命令によりPCスタックからPC値の
ポップを行うとメインプログラムの処理に戻ることがで
きる。
【0027】サブルーチン中での、全てのメモリへの書
き込み動作に対しては、書き込みを行なうメモリのアド
レスとSR0およびSR1の値を比較し、書き込み動作
を行なうメモリのアドレスがSR0からSR1の範囲内
にあるとき書き込み禁止エラーを発生する。SR0から
SR1の範囲にない場合には書き込みを許可して処理を
続行する。
【0028】サブルーチン中でのスタックプッシュとポ
ップは通常のSPを使って行い、PCスタックはJSR
のようにPC値をプッシュするような場合にしか使用し
ないこととする。
【0029】上記の実施例では図2のPCDビット11
とPCWビット12をセットしてPC値のプッシュはP
Cスタックへ行い、PCスタックへの書き込みを禁止す
ることとしたがPCDビット11をクリアすればPC値
も通常のスタックへ退避し、PCDビット12は無視さ
れる。PCDビット11がセットされていてもPCWビ
ット12がクリアされていれば、PC値はPCスタック
へ退避するが、PCスタックへの書き込み動作チェック
は行わない。
【0030】以上のように、この実施例にかかるデータ
処理装置は、通常のスタックを記憶する第二のスタック
とそのスタックポインタである第二のスタックポインタ
と、プログラムカウンタ値退避用のスタックを記憶する
第一のスタックとそのスタックポインタである第一のス
タックポインタと、前記第一のスタックポインタの初期
値を保持する第一の保持手段と、前記第一のスタックポ
インタの値の変化にともなって前記第一のスタックポイ
ンタ値と同じ値を保持する第二の保持手段と、プログラ
ムカウンタ値を第一のスタックに退避するかどうか選択
する選択手段と、前記第一の保持手段と前記第二の保持
手段とで指定される第一のスタックの領域に対する書き
込みを禁止する禁止手段を備えるものである。
【0031】また、この実施例によれば、デバッグ環境
を制御するレジスタ中にPC値を通常のスタックとは別
のスタックに退避するかどうか指定するビットがセット
されているときPC値を通常のスタックとは別のスタッ
クに退避し、デバッグ環境を制御するレジスタ中に通常
のスタックとは別のスタックに対する書き込みを禁止す
るかどうか指定するビットがセットされているとき、通
常のスタックとは別のスタック用のスタックポインタの
初期値を保持する第一の保持手段と、サブルーチン用命
令実行後の通常のスタックとは別のスタックのスタック
ポインタ値を保持する第二の保持手段とで指定される領
域に対する書き込みを禁止し、この領域にデータを書き
込もうとした場合、エラーを発生して処理を中断する。
【0032】以上説明したように、この実施例によれ
ば、スタックに退避したPC値を不用意なデータの上書
きから保護し、またPC値を退避するスタックを通常の
データのプッシュポップを行なうスタックと分けること
でPC値を退避しているスタックのスタックポインタ値
を変化させないので、誤ったPC値を読み込むことによ
るプログラムの流れの変化や暴走を防ぐことができ、プ
ログラムそのものやデータを守ることができるという効
果がある。また前ルーチンのPC値を保護してあること
でデバッグが容易になるという効果がある。
【0033】実施例2.以下この発明の一実施例とし
て、通常のSPとは別にPC値を退避するスタック(以
下PCスタックとする)を指すスタックポインタとして
PCスタックポインタ(以下PCSPとする)を持ち、
またPCSPの初期値を保持するレジスタSR0とJS
R実行後のPCSPの値を保持するレジスタSR1を持
ち、ENTER実行後のSPの値を保持するレジスタS
R2を持ち、デバッグ環境を制御するレジスタ中にPC
値を退避するのに通常のスタックとPCスタックのどち
らを選択するかを指定するビットと、FP値を退避する
のに通常のスタックとPCスタックのどちらを選択する
かを指定するビットと、PC値またはFP値の退避にP
Cスタックが選択された場合PCスタックに対する書き
込みを禁止するかどうかを指定するビットを備えたデー
タ処理装置の動作について図3、図4を用いて説明す
る。
【0034】図3は本発明のデータ処理装置において、
メインプログラムの途中でJSRによりサブルーチン1
を呼び出した後ENTERを実行するときの処理の流れ
と、ENTERを実行する前のスタックの状態、および
ENTERを実行した後のスタックの状態について説明
したものである。図3でメインプログラムは命令A0、
B0、JSR、およびC0からなり、サブルーチン1は
ENTER、・・・、EXITDからなる。命令A0が
格納されているメモリの先頭アドレスを、PC(A
0)、同様に命令B0、JSR、C0、ENTER、E
XITDが格納されているメモリの先頭アドレスを、そ
れぞれPC(B0)、PC(JSR)、PC(C0)、
PC(EN)、PC(EX)とする。JSRのジャンプ
先実効アドレスはサブルーチン1の先頭命令ENTER
が格納されているメモリの先頭アドレスPC(EN)で
あるとする。JSRが実行される前のSP、FP、PC
SPの値をそれぞれSP(0)、FP(0)、PCSP
(0)、JSRが実行された後のPCSPの値をPCS
P(1)、ENTERが実行された後のSP、PCSP
の値をそれぞれSP(1)、PCSP(2)とする。
【0035】図4の10はデバッグ環境制御レジスタを
示す。11はPCDビットで、PC値を通常のスタック
に退避するかPCスタックに退避するかを指定する。1
2はFPDビットで、FP値を通常のスタックに退避す
るかPCスタックに退避するかを指定する。13はPC
Wビット(1ビット)でPCスタックでSR0からS
【0036】図4のPCDビット11とFPDビット1
2、PCWビット13がセットされているとき、メイン
プログラムを実行する前にまずリセット後の初期PCS
Pの値がSR0とSR1に転送される。以後SR0の値
はリセットがかかるまで変化しない。メインプログラム
の途中で[JSR PC(EN)]が読み込まれると、
PCSPの値をPCSP(0)からPCSP(1)に変
化させ、メインプログラムのJSRの次命令C0の先頭
アドレスPC(C0)を復帰後PC値としてスタックに
プッシュする。PCSPの値が変化すると同時にSR1
の値もPCSP(1)に変化し、常にPCSPとSR1
の内容は同じになる。次にPCにJSRで指定されたジ
ャンプ先実効アドレスPC(EN)をセットし、サブル
ーチン1の処理に移る。サブルーチン1の先頭命令EN
TERを読み込んで実行すると、まずPCSPとSR1
の値をPCSP(1)からPCSP(2)に変化させて
ENTER実行前のFPの値FP(0)をPCスタック
にプッシュし、FPにはSPの値SP(0)を新FP値
として格納する。その後スタックにローカル変数領域を
確保してから汎用レジスタ群をプッシュする。ENRE
Rの全てのスタックプッシュが終わったときSPの値は
SP(2)となり、同時にSR2の値もSP(2)とな
っている。ENTER処理後サブルーチン1の処理を実
行し、サブルーチン1の最後で[EXITD]が読み込
まれると、SPの値とSR2の値を比較し、一致した場
合スタックからSPの値SP(2)を先頭アドレスとし
てまず汎用レジスタ群の値をポップし、FPの値SP
(0)をSPに格納してローカル変数領域を開放する。
次に、PCスタックから退避していた前ルーチンFP値
FP(0)をポップしてFPに格納する。PCSPはP
CSP(2)からPCSP(1)に変化する。その後P
Cスタックから復帰後PC値をポップしてPCにセット
し、メインプログラムの処理に戻る。PCSPの値はP
CSP(0)にもどっている。
【0037】上記の実施例ではEXITが読み込まれた
ときのSPとSR2が一致した場合について説明した
が、SPとSR2が一致しない場合にはエラーを発生す
る。
【0038】サブルーチン中での、全てのメモリへの書
き込み動作に対しては、書き込みを行なうメモリのアド
レスとSR0およびSR1の値を比較し、書き込み動作
を行なうアドレスがSR0からSR1の範囲内にあると
き書き込み禁止エラーを発生する。SR0からSR1の
範囲にない場合には書き込みを許可して処理を続行す
る。
【0039】サブルーチン中でのスタックプッシュとポ
ップは通常のSPを使って行い、PCスタックはPC値
とFP値をプッシュするような場合にしか使用しないこ
ととする。
【0040】上記の実施例では図4のPCDビット11
とFPDビット12、PCWビット13をセットしてP
C値とFP値のプッシュはPCスタックへ行い、PCス
タックへの書き込みを禁止することとしたが、PCDビ
ット11とFPDビット12をクリアすればPC値とF
P値も通常のスタックへ退避し、PCDビット13は無
視される。PCDビット11とFPDビットがセットさ
れていてもPCWビット12がクリアされていれば、P
C値とFP値はPCスタックへ退避するが、PCスタッ
クへの書き込み動作チェックは行わない。
【0041】以上のように、この発明にかかるデータ処
理装置は、通常の第二のスタックを指す第二のスタック
ポインタと、プログラムカウンタ値退避用の第一のスタ
ックを指す第一のスタックポインタと、スタックフレー
ムを指すフレームポインタと、前記第一のスタックポイ
ンタの初期値を保持する第一の保持手段と、前記第一の
スタックポインタの値の変化にともなって前記第一のス
タックポインタ値と同じ値を保持する第二の保持手段
と、スタックフレーム形成直後の直後の前記第二のスタ
ックポインタの値を保持する第三の保持手段と、プログ
ラムカウンタ値を通常のスタックに退避するかプログラ
ムカウンタ値退避用のスタックに退避するかを選択する
選択手段と、前記第一の保持手段と前記第二の保持手段
とで指定されるプログラムカウンタ値退避用のスタック
に対する書き込みを禁止する禁止手段を備えるものであ
る。
【0042】また、この実施例によれば、デバッグ環境
を制御するレジスタ中にPC値を通常のスタックとは別
のスタックに退避するかどうか指定するビットがセット
されているときPC値を通常のスタックとは別のスタッ
クに退避し、デバッグ環境を制御するレジスタ中にFP
値を通常のスタックとは別のスタックに退避するかどう
か指定するビットがセットされているときFP値を通常
のスタックとは別のスタックに退避し、デバッグ環境を
制御するレジスタ中に通常のスタックとは別のスタック
に対する書き込みを禁止するかどうか指定するビットが
セットされているとき、通常のスタックとは別のスタッ
ク用のスタックポインタの初期値を保持する第一の保持
手段と、サブルーチン用命令実行後の通常のスタックと
は別のスタックのスタックポインタ値を保持する第二の
保持手段とで指定される領域に対する書き込みを禁止
し、この領域にデータを書き込もうとした場合、エラー
を発生して処理を中断しする。またスタックフレーム開
放命令を実行するときに通常のスタックを指すスタック
ポインタの値とスタックフレーム形成命令実行後の通常
のスタックのスタックポインタ値を保持する第三の保持
手段とが一致しない場合もエラーを発生して処理を中断
する。
【0043】以上説明したようにこの実施例によれば、
スタックに退避した前ルーチンのPC値やFP値を不用
意なデータの上書きから保護し、またPC値やFP値を
退避するスタックを通常のデータのプッシュポップを行
なうスタックと分けることでサブルーチンコール後のP
C値やFP値を退避しているスタックのスタックポイン
タ値を変化させないので、誤ったFP値やPC値を読み
込むことによるプログラムの流れの変化や暴走を防ぐこ
とができ、プログラムそのものやデータを守ることがで
きるという効果がある。また前ルーチンのPC値を保護
してあることでデバッグが容易になるという効果があ
る。さらにスタックフレームを形成直後のSP値を保持
し、EXIT実行時にSP値と比較するので、誤ったレ
ジスタ値をポップしてしまうことを防ぐという効果があ
る。
【0044】
【発明の効果】以上のように、第1の発明によれば、ス
タックを2つに分けたので一方のスタックが破壊される
場合でも他方のデータは保護される。
【0045】また、第2の発明によれば、スタックへの
書き込みを禁止したので、スタックのデータが保護され
る。
【0046】また、第3の発明によれば、スタックポイ
ンタの値を別個に保持しているので、スタックポインタ
の値の正常性が検査できる。
【0047】また、第4の発明によれば、上記第1〜3
の発明を選択的に動作させることができるので、デバッ
グ時に用いることでデバッグ作業が容易になる。
【図面の簡単な説明】
【図1】本発明のデータ処理装置でn回のサブルーチン
ジャンプを連続して行ったときの処理の流れと1回目の
JSR前のスタック領域の状態およびn回目のJSR実
行後のスタック領域の状態について示した図である。
【図2】本発明のデータ処理装置のデバッグ環境を制御
するレジスタを示した図である。
【図3】本発明のデータ処理装置でENTER命令を実
行したときの処理の流れとENTER実行後のPCスタ
ックおよびスタックの状態について示した図である。
【図4】本発明のデータ処理装置のデバッグ環境を制御
するレジスタを示した図である。
【図5】従来のデータ処理装置でメインプログラムを実
行途中にJSRによりサブルーチン1を呼び出したとき
の処理の流れとJSR実行前後のスタック領域の状態に
ついて示した図である。
【図6】従来のデータ処理装置でn回のサブルーチンジ
ャンプを連続して行ったときの処理の流れと1回目のJ
SR前のスタック領域の状態およびn回目のJSR実行
後のスタック領域の状態について示した図である。
【図7】従来のデータ処理装置でメインプログラムを実
行途中にJSRによりサブルーチン1を呼び出した後E
NTERを実行するときの処理の流れと、ENTERを
実行する前のスタックの状態、およびENTERを実行
した後のスタックの状態について説明した図である。
【符号の説明】
10 本発明のデバッグ環境を制御するレジスタ 11 PCDビット 12 FPDビット 13 PCWビット

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】 以下の要素を有するデータ処理装置
    (a)所定の種類のデータを記憶する第1のスタック、
    (b)上記第1のスタックに記憶されるデータ以外のデ
    ータを記憶する第2のスタック、(c)データをスタッ
    クに記憶する場合、そのデータの種類により上記第1と
    第2のスタックのいずれかを選択する選択手段。
  2. 【請求項2】 以下の要素を備えたデータ処理装置
    (a)所定のデータを記憶するスタック、(b)上記ス
    タックの使用されている領域への書き込みを禁止する禁
    止手段。
  3. 【請求項3】 以下の要素を備えたデータ処理装置
    (a)所定のデータを記憶するスタック、(b)上記ス
    タックの先頭を示すスタックポインタ、(c)上記スタ
    ックポインタの値を保持する保持手段、(d)上記スタ
    ックポインタの値と保持手段の値を比較してスタックポ
    インタの破壊を検査する検査手段。
  4. 【請求項4】 請求項1,2または3記載のデータ処理
    装置において、選択手段、禁止手段、あるいは、検査手
    段を選択的に動作させることを指定する指定手段を有す
    ることを特徴とする請求項1,2または3記載のデータ
    処理装置。
JP4000666A 1992-01-07 1992-01-07 データ処理装置 Pending JPH05181703A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP4000666A JPH05181703A (ja) 1992-01-07 1992-01-07 データ処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP4000666A JPH05181703A (ja) 1992-01-07 1992-01-07 データ処理装置

Publications (1)

Publication Number Publication Date
JPH05181703A true JPH05181703A (ja) 1993-07-23

Family

ID=11480067

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4000666A Pending JPH05181703A (ja) 1992-01-07 1992-01-07 データ処理装置

Country Status (1)

Country Link
JP (1) JPH05181703A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5953529A (en) * 1995-10-31 1999-09-14 Nec Corporation Data processor with a debug device and a stack area control unit and corresponding data processing method
WO2005020069A1 (ja) * 2003-08-25 2005-03-03 Denki Hompo Ltd. コンピュータシステムのcpu(中央処理装置)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5953529A (en) * 1995-10-31 1999-09-14 Nec Corporation Data processor with a debug device and a stack area control unit and corresponding data processing method
WO2005020069A1 (ja) * 2003-08-25 2005-03-03 Denki Hompo Ltd. コンピュータシステムのcpu(中央処理装置)

Similar Documents

Publication Publication Date Title
US4831517A (en) Branch and return on address instruction and methods and apparatus for implementing same in a digital data processing system
EP0537309B1 (en) System and method for preserving source instruction atomicity in translated program code
JP4476193B2 (ja) 情報処理方法および情報処理装置
US7711914B2 (en) Debugging using virtual watchpoints
JP2850808B2 (ja) データ処理装置およびデータ処理方法
US7293266B2 (en) Plurality of loader modules with a CO- ordinator module where selected loader module executes and each loader module execute
JPH05181703A (ja) データ処理装置
JP7679569B2 (ja) ハードウェアサポートされたメモリバッファオーバーフロー検出を備えるプロセッサ
US20060294433A1 (en) Debugging using watchpoints
JP2001117791A (ja) 割込命令チェック装置及び記録媒体
JP2000029690A (ja) デ―タ処理の方法および装置
JPS6042495B2 (ja) 多重プログラムデ−タ処理装置の特権メモリをアクセスする方法
JP2715988B2 (ja) プログラムシミュレータ装置及びプログラムデバッグ方法
JP2504151B2 (ja) デ―タ処理装置
JPH1049401A (ja) プログラムのデバッグ方法
JPH04322343A (ja) メモリアクセスのトレ−ス方式
US20020083309A1 (en) Hardware spill/fill engine for register windows
JPH03214324A (ja) コンピュータシステム
JPH05257807A (ja) キャッシュメモリ制御装置
JPH0944413A (ja) ページ境界試験方法
JPH07210420A (ja) スレッド環境におけるデバッグ方法
JPH06149569A (ja) レジスタ番号変更装置
RU2393530C2 (ru) Способ формирования дамп файла
JP2002014843A (ja) プログラム実行トレース方式
JP2002091790A (ja) コンピュータ装置の検査方法