JPH01128135A - スタック制御方式 - Google Patents

スタック制御方式

Info

Publication number
JPH01128135A
JPH01128135A JP62286602A JP28660287A JPH01128135A JP H01128135 A JPH01128135 A JP H01128135A JP 62286602 A JP62286602 A JP 62286602A JP 28660287 A JP28660287 A JP 28660287A JP H01128135 A JPH01128135 A JP H01128135A
Authority
JP
Japan
Prior art keywords
stack
program
stack pointer
contents
register
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
JP62286602A
Other languages
English (en)
Inventor
Toru Tanada
徹 棚田
Takatsugu Kurokawa
黒河 隆次
Tetsuya Mori
哲也 森
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP62286602A priority Critical patent/JPH01128135A/ja
Publication of JPH01128135A publication Critical patent/JPH01128135A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Executing Machine-Instructions (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 [概要コ サブルーチンへの分岐の際、汎用レジスタのデータとプ
ログラムカウンタの内容をスタックへ退避する方式の情
報処理装置におけるスタック制御方式に関し、 汎用レジスタのデータをスタックする領域とプログラム
カウンタをスタックする領域を分離し、個別に管理して
サブルーチンからの復帰時にプロダラムの暴走を防止す
るスタック制御方式を提供することを目的とし、 プログラムの実行中にサブルーチンコールが発生したと
き、汎用レジスタおよびプログラムカウンタの内容をス
タックポインタが指示するスタックアドレスに退避する
処理を行う情報処理装置のスタック制御方式において、
レジスタ用スタックとプログラムカウンタ用のスタック
と、レジスタ用スタックポインタとプログラムカウンタ
用スタックポインタとを設け、プログラムの実行におい
て新たなサブルーチンに移る前および元のルーチンに戻
る前に、第1転送手段によりスタックポインタの内容を
レジスタ用スタックポインタへ移し、プログラムカウン
タ用スタックポインタの内容をスタックポインタへ移し
、新たなサブルーチンへ移った後および前のルーチンに
戻った後に、第2転送手段によりスタックポインタの内
容をプログラムカウンタ用スタックポインタへ移し、レ
ジスタ用スタックポインタの内容をスタックポインタへ
移すよう構成する。
[産業上の利用分野コ 本発明はサブルーチンの分岐の際、汎用レジスタのデー
タとプログラムカウンタの内容をスタックへ退避する方
式の情報処理装置におけるスタック制御方式に関する。
近年、マイクロプロセッサの技術において、CPU(中
央処理装置)を16ビツト構成のものが使用されるよう
になった。そのようなCPUにおいて、メモリのスタッ
クエリアをレジスタの内容を一時的に格納して、レジス
タを他の演算に使用することが行われている。その場合
、−時的に格納したレジスタのデータを後で元のレジス
タに戻すことによりスタックは以前の状態に戻り、正常
に動作するが、サブルーチンの処理が含まれる時にプロ
グラムミスがあると重大な影響があり、その対策が望ま
れていた。
[従来の技術] 従来例の構成を第3図に示す。
第3図において、30はCPU、31は汎用レジスタ、
32はフラグレジスタ(F)、33はプログラムカウン
タ(PC)、34はスタックポインタ(SP)、35は
プログラム領域、変数領域、スタック領域、作業領域か
らなるメモリを表す。
第3図の構成の汎用レジスタ31として示す複数のレジ
スタの内容(データ)はプログラムの命令(PUSH)
により必要に応じてメモリ35のスタック領域の中のス
タックポインタ(SP)34が指定する位置へ一時的に
記憶され(積まれ)、その汎用レジスタはその後他の演
算のために用いられる。スタック領域に積まれたデータ
はそのデータを使用する時にスタック領域から命令(P
OP)により取り出されて元のレジスタへ格納される。
第3図に示す従来例の構成によるスタック動作例を第4
図に示す。
第4図のプログラム40の実行過程におけるスタック領
域41へのスタック動作について説明すると、プログラ
ム番号1の処理は汎用レジスタAXに80H(但し、H
は16進数を表す)を設定し、次の2番目のPUSHで
レジスタAXの内容をスタックポインタ34が保持する
アドレスnへ格納する。
なお、周知の通り、スタック領域41は後入れ先だしく
先入れ後出し)の記憶方式が採用され、スタックポイン
タ34はスタック領域へデータが積まれる(PUSHが
実行される)毎に、保持しているスタックの先頭アドレ
スがマイナスされ、スタック領域から格納されているデ
ータを取り出す(POPが実行される)毎にアドレスが
プラスされる。
プログラム番号2の次の番号3に移ると、CAL L命
令により、ABCDという名前のサブルーチンへ移行す
る。このCALL命令(マクロ命令)により、通常新た
なサブルーチンの実行を開始する前に、その前に実行さ
れていたメインルーチンのプログラムカウンタ33の内
容をスタックへ格納する処理が行われる。従って、スタ
ック領域のスタックポインタ34が指示する番地n−1
に、この時のプログラムカウンタ33の内容が格納され
る。
この後サブルーチンABCDの実行開始番地がプログラ
ムカウンタ33にセントされて、プログラムを順次実行
し、その中に汎用レジスタのBXへFF(H)をロード
して、そのデータをスタックへ積む命令がプログラム番
号4.5において実行されると、スタック領域のスタッ
クポインタ34が指示するアドレスn−2にFF(H)
が格納される。
次に、プログラム番号6のPOP命令を実行すると、先
の番号5でスタックへ積んでおいたデータFFHがレジ
スタBXへ呼戻され(第4図の点線60)、スタックポ
インタ34の内容(スタックアドレス)はn−1の状態
になる。
この状態の時プログラム番号7でRET (リターン)
命令が実行されると、スタックポインタ34が指示する
スタック領域のアドレス(n−1)から、メインルーチ
ンへ復帰するためのプログラムカウンタの値が取り出さ
れ、プログラムカウンタ33へ設定され(第4図の点線
70)、以後メインルーチンについてプログラムが実行
される。
[発明が解決しようとする問題点] 上記の第4図のスタック動作にお゛いて、プログラムの
段階でプログラム番号6のPOP命令をうっかりして入
れ忘れた場合、このプログラムを番号1から実行すると
、プログラム番号5のPUSHBXから番号7のRET
命令が実行されてしまう。この時、メインルーチンのプ
ログラムへ戻るために、スタックからデータを読み出し
て、プログラムカウンタ33へ設定する動作が行われる
が、その時のスタックポインタ34が指示するアドレス
はn−2であり、そこにはレジスタBXからPUSH命
令により格納されたデータFF(H)が存在する。
すると、メインルーチン(呼出し元)へ復帰するつもり
でも、元のプログラム番地が回復せずに、プログラムカ
ウンタ33はFFXX (H)番地(8ピント以上のC
PUではプログラムカウンタは2バイト以上あるのでF
FXXとなる)を命令開始番地として解して処理を進め
る。
ところが、そのようなデータを開始番地としてプログラ
ムを実行しても本来のプログラムが格納された番地とは
無関係なので、結局プログラムの暴走状態となる。
このように、スタック領域の先頭位置にレジスタのデー
タが存在した状態でプログラムのルーチンが前のルーチ
ンに復帰すると、プログラムの暴走状態となって、プロ
グラムミスが原因であったとしても、暴走状態となるこ
とからデバッグを行うことが困難であり、プログラムの
開発に支障をきたしていた。
また、スタックにより、サブルーチンに対し引数を渡す
時に、スタックポインタの操作が煩雑となり、やはりプ
ログラム開発を効率的に行う上で問題となっていた。
本発明は、汎用レジスタのデータをスタックす ・る領
域とプログラムカウンタをスタックする領域を分離し、
個別に管理してサブルーチンからの復帰時にプログラム
の暴走を防止するスタック制御方式を提供することを目
的とする。
[問題点を解決するための手段] 本発明の原理的構成を第1図に示す。
第1図において、lは汎用レジスタ(GR)、2はプロ
グラムカウンタ(PC)、3はスタックポインタ(SP
) 、4はスタックポインタ切換部、5はレジスタ用ス
タックの先頭アドレスであるレジスタ用スタックポイン
タ(以下、R3Pという)、6はプログラムカウンタ用
スタックの先頭アドレスであるプログラムカウンタ用ス
タックポインタ(以下、pcspという)、7はレジス
タ用スタック、8はプログラムカウンタ用スタック(以
下、PC用スタックという)を表す。
本発明は1つのルーチン内のプログラム実行動作中はス
タックポインタ3によりレジスタ用スタック7のスタッ
クアドレスを指示して、データをレジスタ用スタック7
に積み込み、サブルーチンへ移る前にスタックポインタ
3の内容をPC用スタック8を指示するよう切換えて、
サブルーチンへ移行後プログラムカウンタの内容をPC
用スタック8へ退避させ、その後再びスタックポインタ
3の内容をレジスタ用スタック7を指示するよう切換え
、元のルーチンへ戻る場合もスタックポインタ3がPC
3P6を指示するよう切換えるものである。
[作用] 通常のメインルーチンでプログラムの実行を行っている
時は、プログラムカウンタ2が指定アドレスに従ってメ
モリからプログラムを読出して順次処理を行い、その場
合、スタックポインタ3はレジスタ用スタック7の先頭
アドレスを表示し、そのルーチンにおいて一時的に退避
する汎用レジスタ(フラグレジスタも含む)1のデータ
をレジスタ用スタック7にデータ線10を介して格納し
、また必要な時に取り出す。
メインルーチンから別のサブルーチンを呼び出す場合は
、サブルーチンへ移る前に、第1転送手段41が動作し
て、先ずスタックポインタの内容をR3P5へ転送する
動作を制御線13.14の駆動により実行する。次にP
C3P6の内容をスタックポインタ3へ転送する動作を
制御線15.13を制御することにより実行する。
この後、サブルーチンの動作に移るが、サブルーチンの
プログラムが開始される前に、プログラムカウンタ2に
あるメインルーチンのプログラム番地がスタックポイン
タ3が指示するPC用スタック8に積まれ、続いて第2
転送手段42が動作する。すなわち、初めにスタックポ
インタ3にあるPC用スタックポインタをPC3P6へ
転送する動作を制御線13.16を制御することにより
実行し、次にR3P5の内容をスタックポインタ3へ転
送する動作を制御線17.13を駆動して行う。
こうして、サブルーチンのプログラムの実行中はスタッ
クポインタ3はレジスタ用スタック7に対してレジスタ
のデータを格納、取出しすることになる。
次にこのサブルーチンの動作が終了してメインルーチン
へ戻る時はその前に、第1転送手段が動作され、前記し
た転送が実行される。次に戻り処理(RET)により、
スタックポインタ3が指示するPC用スクソク8の先頭
アドレスを用いて、PC用スタック8から以前に格納し
たプログラムカウンタの復帰番地を取り出してプログラ
ムカウンタ2に設定する。この後、第2転送手段42が
駆動され、上記と同じように転送制御が行われ、スタッ
クポインタ3にはレジスタ用スタック7の先頭アドレス
が保持され、メインルーチンのプログラムを実行する。
[実施例] 本発明の実施例の構成を第2図に示す。
第2図において、20はCPU、21は汎用レジスタ、
22はプログラムカウンタ、23はスタックポインタ、
24は命令レジスタ、25は命令実行部、26はバス、
27はメモリを表す。
メモリ27はその中の変数領域に、R3P (レジスタ
用スタックポインタ)271とpcsp−12= (プログラムカウンタ用スタックポインタ)272を設
定し、同じ変数領域にPC用スタックエリア273を設
け、スタック領域にはレジスタ用スタックエリア274
を設けた。
各スタックエリア273.274は共にデータが格納さ
れる(積まれる)毎にアドレスがマイナスされて、現在
実行動作中のスタックエリアの先頭番地はスタックポイ
ンタ23に保持され、他方の現在実行動作していないス
タックエリアの先頭番地はR3P271またはPC3P
272に保持される。
第2図(b)に示す実施例の動作例について第2図(a
lを参照しながら説明すると、先ずメインルーチンから
サブルーチンに動作が移行する時、その前に、命令10
0が実行される。この命令は、2つの処理すなわち、ス
タックポインタ23の内容をR3P271へ転送する動
作と、メモリのPC8P272の内容をスタックポイン
タ23へ転送する動作を実行するものである。これによ
りスタックポインタ23はPC用スタックエリアを指示
するよう切換えられる。
次にサブルーチンが呼び込まれ(CALL命令、110
)、その処理の中でプログラムカウンタ22の内容(次
に復帰した時に戻るプログラム番地)がスタックポイン
タが指示するPC用スタックエリア273に積まれる。
この後命令120が実行され、その命令も2つの処理す
なわち、スタックポインタ23の内容をPC3P2’7
2へ転送し、メモリのR3P271の内容をスタックポ
インタへ転送する動作を実行するものである。これによ
り、スタックポインタ23はレジスタ用スタックエリア
274の先頭アドレスを指示する状態に切換えられる。
次にサブルーチンのプログラムを実行してスタックオペ
レーションをレジスタ用スタックエリア274を用いて
行い、そのサブルーチンの終了時に命令130を実行す
る。この命令は上記した命令100と同しで、これを実
行するとスタックポインタ23にはPC用スタックポイ
ンタが格納され、次のリターン命令140を実行すると
、PC用スタックエリアから命令110の時に退避した
戻りプログラム番地がプログラムカウンタ22に格納さ
れる。
このリターン命令の実行の後命令150が実行され、上
記したプログラム120と同様の転送動作を実行するこ
とによりスタックポインタ23はレジスタ用スタックの
先頭アドレスを指示し、この後メインルーチンのプログ
ラムが実行される。
なお、命令100(130)と命令120(150)は
、各々2つの転送動作をおこなうマクロ命令を設けてお
き、そのマクロ命令を含むプログラムをアセンブラする
ことにより実行するよう構成する(予めR3P271と
PC3P272を定義して各々のアドレスを設定してお
く)か、その都度2つの転送命令(MOV)をプログラ
ム中に組み込むかは任意である。
本発明の方式により、プログラムの上でサブルーチンへ
復帰する時に、従来例で説明したようなミスがあっても
、プログラムカウンタは正しい復帰番地に戻るので暴走
することは防止される。但しこの場合はデータについて
誤ったデータを使用することになり結果が正しくならな
いが、その場合はプログラムデバッグによりプログラム
の誤りを検出できる。
[発明の効果] 本発明によればプログラムカウンタの内容を退避するた
めのPC用スタックとレジスタのデータを一時格納する
ためのレジスタ用スタックを分離して個別に管理するこ
とができるのでサブルーチンからの復帰時のプログラム
ミスによるプログラムの暴走を防ぐことができる。
また、スタック領域上のプログラムカウンタ値の存在を
意識することなくプログラムすることができ、開発効率
を向上させることができる。さらに、スタックを用いて
サブルーチンに引数を渡すことがプログラム上簡単に行
うことができる。
【図面の簡単な説明】
第1図は本発明の原理的構成を示す図、第2図(a)は
本発明の実施例の構成を示す図、第2図(blは実施例
の動作例を示す図、第3図は従来例の構成を示す図、第
4図は従来例のスタック動作例を示す図である。 第1図中、 1:汎用レジスタ(GR) 2ニブログラムカウンタ(PC) 3ニスタツクポインタ(SP) 4ニスタックポインタ切換部 5:レジスタ用スタックポインタ(RS P)6:プロ
グラムカウンタ用スタックポインタ(PC3P> 7:レジスタ用スタック 8ニブログラムカウンタ用スタック

Claims (1)

  1. 【特許請求の範囲】 プログラムの実行中にサブルーチンコールが発生したと
    き、汎用レジスタ(1)およびプログラムカウンタ(2
    )の内容をスタックポインタ(3)が指示するスタック
    アドレスに退避する処理を行う情報処理装置のスタック
    制御方式において、 レジスタ用スタック(7)とプログラムカウンタ用のス
    タック(8)と、レジスタ用スタックポインタ(5)と
    プログラムカウンタ用スタックポインタ(6)、および
    スタックポインタ切換部(4)を設け、プログラムの実
    行において新たなサブルーチンに移る前および元のルー
    チンに戻る前に、スタックポインタ切換部(4)の第1
    転送手段(41)によりスタックポインタ(3)の内容
    をレジスタ用スタックポインタ(5)へ移し、プログラ
    ムカウンタ用スタックポインタ(6)の内容をスタック
    ポインタ(3)へ移し、 新たなサブルーチンへ移った後および前のルーチンに戻
    った後に、スタックポインタ切換部(4)の第2転送手
    段(42)によりスタックポインタ(3)の内容をプロ
    グラムカウンタ用スタックポインタ(6)へ移し、レジ
    スタ用スタックポインタ(5)の内容をスタックポイン
    タ(3)へ移すことを特徴とするスタック制御方式。
JP62286602A 1987-11-13 1987-11-13 スタック制御方式 Pending JPH01128135A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP62286602A JPH01128135A (ja) 1987-11-13 1987-11-13 スタック制御方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP62286602A JPH01128135A (ja) 1987-11-13 1987-11-13 スタック制御方式

Publications (1)

Publication Number Publication Date
JPH01128135A true JPH01128135A (ja) 1989-05-19

Family

ID=17706539

Family Applications (1)

Application Number Title Priority Date Filing Date
JP62286602A Pending JPH01128135A (ja) 1987-11-13 1987-11-13 スタック制御方式

Country Status (1)

Country Link
JP (1) JPH01128135A (ja)

Similar Documents

Publication Publication Date Title
EP0087978B1 (en) Information processing unit
CN101730881A (zh) 包括多个处理器的系统以及操作该系统的方法
JPS6040067B2 (ja) 分散制御型多重処理システム
JPS62226234A (ja) スタツクポインタ制御回路
US4942524A (en) Software trap system which saves previous content of software trap handling pointer in a stack upon execution of a trap
EP0417916B1 (en) Procedure state descriptor system for digital data processors
JPH01128135A (ja) スタック制御方式
JPS60214044A (ja) マイクロコンピュ−タ
JPS59218569A (ja) マイクロ・コンピユ−タ
JP2005275703A (ja) プロセッサ及びコンテキスト切り替え方法
JPS617940A (ja) マイクロプログラム制御装置
JPS6337439B2 (ja)
JPS6398704A (ja) プログラマブルコントロ−ラ
JPS5933558A (ja) 情報処理装置
JPS59144955A (ja) 情報処理装置
JPS60214046A (ja) 異常終了処理制御方式
JP2000250762A (ja) マイクロコンピュータ
JPS62221059A (ja) 中央処理装置
JPS61184644A (ja) 仮想計算機システム制御方式
JPS6356728A (ja) プログラム修正実行方式
JPH0883188A (ja) マルチタスク処理を行う計算機
JPS6010342A (ja) 汎用レジスタのリロ−ド制御方式
JPH064319A (ja) オペレーティング・システムにおける共有ルーチン管理方式
JPH083792B2 (ja) 関数呼び出し処理方法
JPH03257565A (ja) 並行処理マイクロプロセッサ