JPH08137690A - プログラム実行制御方法 - Google Patents
プログラム実行制御方法Info
- Publication number
- JPH08137690A JPH08137690A JP30416994A JP30416994A JPH08137690A JP H08137690 A JPH08137690 A JP H08137690A JP 30416994 A JP30416994 A JP 30416994A JP 30416994 A JP30416994 A JP 30416994A JP H08137690 A JPH08137690 A JP H08137690A
- Authority
- JP
- Japan
- Prior art keywords
- address
- program
- control
- stack
- processing module
- 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
Links
Landscapes
- Executing Machine-Instructions (AREA)
Abstract
(57)【要約】
【目的】 複数の処理モジュール間の制御移行を簡単か
つ高速に行うことができるようにする。 【構成】 メインプログラムMのPUSH命令によりサ
ブルーチンAの先頭アドレス“i”をスタックメモリ領
域Sに格納した後、CALL命令によりスタックメモリ
領域Sに戻り先アドレス“m+2”を格納しサブルーチ
ンBに制御を移す。サブルーチンBの所定の処理Wの
後、サブルーチンAに移る場合は、アドレス“k+5”
に分岐し、POP命令でスタックメモリ領域Sから不要
なメインプログラムMの戻り先アドレス“m+2”を除
き、リターン命令でサブルーチンAに移る。一方、メイ
ンプログラムMに戻る場合は、アドレス“k+1”に分
岐し、POP命令でスタックメモリ領域Sの戻り先アド
レス“m+2”を一旦退避した上で、不要なサブルーチ
ンAの先頭アドレス“i”を除き、再び戻り先アドレス
“m+2”をスタックメモリ領域Sに格納する。そし
て、リターン命令でメインプログラムMに戻る。
つ高速に行うことができるようにする。 【構成】 メインプログラムMのPUSH命令によりサ
ブルーチンAの先頭アドレス“i”をスタックメモリ領
域Sに格納した後、CALL命令によりスタックメモリ
領域Sに戻り先アドレス“m+2”を格納しサブルーチ
ンBに制御を移す。サブルーチンBの所定の処理Wの
後、サブルーチンAに移る場合は、アドレス“k+5”
に分岐し、POP命令でスタックメモリ領域Sから不要
なメインプログラムMの戻り先アドレス“m+2”を除
き、リターン命令でサブルーチンAに移る。一方、メイ
ンプログラムMに戻る場合は、アドレス“k+1”に分
岐し、POP命令でスタックメモリ領域Sの戻り先アド
レス“m+2”を一旦退避した上で、不要なサブルーチ
ンAの先頭アドレス“i”を除き、再び戻り先アドレス
“m+2”をスタックメモリ領域Sに格納する。そし
て、リターン命令でメインプログラムMに戻る。
Description
【0001】
【産業上の利用分野】本発明は、複数の処理モジュール
を含むプログラムにおいてこれらの処理モジュールの実
行順序を制御するためのプログラム実行制御方法に係
り、特にスタック情報を用いて制御を行うプログラム実
行制御方法に関する。
を含むプログラムにおいてこれらの処理モジュールの実
行順序を制御するためのプログラム実行制御方法に係
り、特にスタック情報を用いて制御を行うプログラム実
行制御方法に関する。
【0002】
【従来の技術】従来、スタック情報を格納するための先
入れ先出しメモリ(スタックメモリ)を備えたいわゆる
スタックマシンにおいて、あるプログラム(処理モジュ
ール)から他のプログラムに制御を移す場合には、例え
ばアセンブラ言語のCALL命令等が用いられる。この
CALL命令では、戻り先のアドレス(通常はCALL
命令があるアドレスの次のアドレス)をスタックメモリ
に格納した上で、指定された処理モジュール(サブルー
チン)へ制御を移すと共に、サブルーチンでの処理が終
了すると、スタックメモリの戻り先アドレスを参照して
そのアドレスに戻るようになっている。
入れ先出しメモリ(スタックメモリ)を備えたいわゆる
スタックマシンにおいて、あるプログラム(処理モジュ
ール)から他のプログラムに制御を移す場合には、例え
ばアセンブラ言語のCALL命令等が用いられる。この
CALL命令では、戻り先のアドレス(通常はCALL
命令があるアドレスの次のアドレス)をスタックメモリ
に格納した上で、指定された処理モジュール(サブルー
チン)へ制御を移すと共に、サブルーチンでの処理が終
了すると、スタックメモリの戻り先アドレスを参照して
そのアドレスに戻るようになっている。
【0003】
【発明が解決しようとする課題】したがって、従来、あ
るサブルーチン中でCALL命令等によってさらに下層
のサブルーチン(処理モジュール)に制御を移すような
いわゆる多重ネスティング(入れ子)構造でプログラミ
ングを行った場合、その下層のサブルーチンからメイン
プログラムに戻る場合には、逐次スタックメモリの内容
(スタック情報)を参照しつつ中間のネスティングレベ
ルのサブルーチン(処理モジュール)を経由しなければ
ならない。このため、特に、ネスティングレベルが深い
場合、その最下層からメインプログラムに戻る場合に
は、多くの中間サブルーチンを経なければならず、移行
経路が複雑化し高速処理が困難であった。
るサブルーチン中でCALL命令等によってさらに下層
のサブルーチン(処理モジュール)に制御を移すような
いわゆる多重ネスティング(入れ子)構造でプログラミ
ングを行った場合、その下層のサブルーチンからメイン
プログラムに戻る場合には、逐次スタックメモリの内容
(スタック情報)を参照しつつ中間のネスティングレベ
ルのサブルーチン(処理モジュール)を経由しなければ
ならない。このため、特に、ネスティングレベルが深い
場合、その最下層からメインプログラムに戻る場合に
は、多くの中間サブルーチンを経なければならず、移行
経路が複雑化し高速処理が困難であった。
【0004】本発明はかかる問題点に鑑みてなされたも
ので、その課題は、任意のネスティングレベルの処理モ
ジュールから他の任意の処理モジュールへの制御移行を
簡単かつ高速に行うことができるプログラム実行制御方
法を提供することにある。
ので、その課題は、任意のネスティングレベルの処理モ
ジュールから他の任意の処理モジュールへの制御移行を
簡単かつ高速に行うことができるプログラム実行制御方
法を提供することにある。
【0005】
【課題を解決するための手段】請求項1記載のプログラ
ム実行制御方法は、ネスティング構造により結合された
複数の処理モジュールの各先頭アドレス等をスタック情
報として後入れ先出しメモリに格納しておき、このスタ
ック情報を用いて前記複数の処理モジュールからなるプ
ログラムの実行制御を行う方法であって、前記後入れ先
出しメモリに格納されたスタック情報のうち、現在実行
中の処理モジュールが属するネスティングレベルから制
御移行先である他の処理モジュールが属するネスティン
グレベルまでの各処理モジュールの先頭アドレスを削除
するステップと、前記後入れ先出しメモリに、前記制御
移行先である他の処理モジュールの先頭アドレスを格納
するステップとを含んでいる。
ム実行制御方法は、ネスティング構造により結合された
複数の処理モジュールの各先頭アドレス等をスタック情
報として後入れ先出しメモリに格納しておき、このスタ
ック情報を用いて前記複数の処理モジュールからなるプ
ログラムの実行制御を行う方法であって、前記後入れ先
出しメモリに格納されたスタック情報のうち、現在実行
中の処理モジュールが属するネスティングレベルから制
御移行先である他の処理モジュールが属するネスティン
グレベルまでの各処理モジュールの先頭アドレスを削除
するステップと、前記後入れ先出しメモリに、前記制御
移行先である他の処理モジュールの先頭アドレスを格納
するステップとを含んでいる。
【0006】請求項2記載のプログラム実行制御方法
は、ネスティング構造により結合された複数の処理モジ
ュールの各先頭アドレス等をスタック情報として後入れ
先出しメモリに格納しておき、このスタック情報を用い
て前記複数の処理モジュールからなるプログラムの実行
制御を行う方法であって、前記後入れ先出しメモリに、
予め制御移行可能性のある処理モジュールの先頭アドレ
スを格納するステップと、1の処理モジュールから他の
処理モジュールへの制御移行に際し、前記後入れ先出し
メモリに、前記他の処理モジュールからの戻り先アドレ
スを格納するステップと、前記他の処理モジュールの実
行結果に基づき、前記1の処理モジュールに戻るか、あ
るいは前記制御移行可能性のある処理モジュールに移る
かを判定するステップと、前記判定の結果、前記1の処
理モジュールに戻るときには、前記後入れ先出しメモリ
に格納されたスタック情報のうち、前記制御移行可能性
のある処理モジュールの先頭アドレスを削除するステッ
プと、前記判定の結果、前記制御移行可能性のある処理
モジュールに移るときには、前記後入れ先出しメモリに
格納されたスタック情報のうち、前記戻り先アドレスを
削除するステップとを含んでいる。
は、ネスティング構造により結合された複数の処理モジ
ュールの各先頭アドレス等をスタック情報として後入れ
先出しメモリに格納しておき、このスタック情報を用い
て前記複数の処理モジュールからなるプログラムの実行
制御を行う方法であって、前記後入れ先出しメモリに、
予め制御移行可能性のある処理モジュールの先頭アドレ
スを格納するステップと、1の処理モジュールから他の
処理モジュールへの制御移行に際し、前記後入れ先出し
メモリに、前記他の処理モジュールからの戻り先アドレ
スを格納するステップと、前記他の処理モジュールの実
行結果に基づき、前記1の処理モジュールに戻るか、あ
るいは前記制御移行可能性のある処理モジュールに移る
かを判定するステップと、前記判定の結果、前記1の処
理モジュールに戻るときには、前記後入れ先出しメモリ
に格納されたスタック情報のうち、前記制御移行可能性
のある処理モジュールの先頭アドレスを削除するステッ
プと、前記判定の結果、前記制御移行可能性のある処理
モジュールに移るときには、前記後入れ先出しメモリに
格納されたスタック情報のうち、前記戻り先アドレスを
削除するステップとを含んでいる。
【0007】請求項3記載のプログラム実行制御方法
は、請求項2記載のプログラム実行制御方法において、
前記制御移行可能性のある処理モジュールが複数存在
し、前記判定の結果、前記制御移行可能性のある処理モ
ジュールに制御を移行するとの判定が行われたときに
は、前記各ステップに加えて、さらに、前記複数の制御
移行可能性のある処理モジュールから、1つを選択する
選択ステップと、前記後入れ先出しメモリに格納された
スタック情報のうち、前記選択ステップで選択された処
理モジュール以外の前記制御移行可能性のある処理モジ
ュールの先頭アドレスを削除するステップとを含むよう
に構成したものである。
は、請求項2記載のプログラム実行制御方法において、
前記制御移行可能性のある処理モジュールが複数存在
し、前記判定の結果、前記制御移行可能性のある処理モ
ジュールに制御を移行するとの判定が行われたときに
は、前記各ステップに加えて、さらに、前記複数の制御
移行可能性のある処理モジュールから、1つを選択する
選択ステップと、前記後入れ先出しメモリに格納された
スタック情報のうち、前記選択ステップで選択された処
理モジュール以外の前記制御移行可能性のある処理モジ
ュールの先頭アドレスを削除するステップとを含むよう
に構成したものである。
【0008】
【作用】請求項1ないし請求項3記載のプログラム実行
制御方法では、後入れ先出しメモリに格納されたスタッ
ク情報のうち、制御を移行しようとする先の処理モジュ
ールの先頭アドレスが残って他の不要なスタック情報は
消去される。このため、その後に後入れ先出しメモリの
スタック情報を参照して行われるプログラム実行制御に
影響を与えることなく、目的の処理モジュールに制御を
移すことが可能となる。
制御方法では、後入れ先出しメモリに格納されたスタッ
ク情報のうち、制御を移行しようとする先の処理モジュ
ールの先頭アドレスが残って他の不要なスタック情報は
消去される。このため、その後に後入れ先出しメモリの
スタック情報を参照して行われるプログラム実行制御に
影響を与えることなく、目的の処理モジュールに制御を
移すことが可能となる。
【0009】
【実施例】以下、本発明の実施例について図面を参照し
て詳細に説明する。
て詳細に説明する。
【0010】図1は本発明の一実施例に係るプログラム
実行制御方法を適用したマイクロコンピュータシステム
の要部構成を表すものである。このシステムは、中央処
理装置(以下、CPUという)10およびメインメモリ
30を備えている。CPU10は、各種のレジスタを含
むレジスタ部11、各種の算術および論理演算を行う算
術論理演算部(以下、ALUという)12、および逐次
実行すべき命令を解読し他の各部間のデータの授受を制
御するための制御信号15を出力する命令デコーダ14
を含んでいる。レジスタ部11はALU12および命令
データ14に接続されると共に、内部バス13にも接続
されている。この内部バス13には命令デコーダ14も
接続されている。
実行制御方法を適用したマイクロコンピュータシステム
の要部構成を表すものである。このシステムは、中央処
理装置(以下、CPUという)10およびメインメモリ
30を備えている。CPU10は、各種のレジスタを含
むレジスタ部11、各種の算術および論理演算を行う算
術論理演算部(以下、ALUという)12、および逐次
実行すべき命令を解読し他の各部間のデータの授受を制
御するための制御信号15を出力する命令デコーダ14
を含んでいる。レジスタ部11はALU12および命令
データ14に接続されると共に、内部バス13にも接続
されている。この内部バス13には命令デコーダ14も
接続されている。
【0011】レジスタ部11には、次に実行すべき命令
を格納するための命令レジスタ(IR)21、次に実行
すべき命令(または現在実行中の命令)が格納されてい
るメインメモリアドレスを格納するためのプログラムカ
ウンタ(PC)22、後述するスタックメモリの最上層
(先頭)アドレスを指し示すためのスタックポインタ
(SP)23、並びに汎用のaレジスタ24およびbレ
ジスタ25等が含まれている。
を格納するための命令レジスタ(IR)21、次に実行
すべき命令(または現在実行中の命令)が格納されてい
るメインメモリアドレスを格納するためのプログラムカ
ウンタ(PC)22、後述するスタックメモリの最上層
(先頭)アドレスを指し示すためのスタックポインタ
(SP)23、並びに汎用のaレジスタ24およびbレ
ジスタ25等が含まれている。
【0012】また、このシステムには、実行すべきプロ
グラムや各種のデータを記憶するメインメモリ30が備
えられ、CPU10のレジスタ部11に接続されてい
る。
グラムや各種のデータを記憶するメインメモリ30が備
えられ、CPU10のレジスタ部11に接続されてい
る。
【0013】図2は、図1のメインメモリ30の記憶内
容の一例を表すものである。このメインメモリ30に
は、アセンブラ言語で記述されたメインプログラムM、
サブルーチン(処理モジュール)A、およびサブルーチ
ンBが格納され(図2(A))、さらにその一部はスタ
ックメモリ領域Sとして割当てられている(図2
(B))。サブルーチンAは、一定の処理を行うための
もので、アドレス“i”を先頭アドレスとしている。サ
ブルーチンBは所定の処理W′を行うためのものであ
り、アドレス“j”を先頭アドレスとしている。スタッ
クメモリ領域Sは、いわゆる後入れ先出し(LIFO)
方式でアクセスされるメモリ領域であり、後述するPU
SH命令によってデータ格納、POP命令によってデー
タ取出が行われる。このスタックメモリ領域Sのスタッ
クの先頭アドレスは、スタックポインタ(SP)によっ
て指し示されるようになっている。図2の例では、スタ
ックポインタは当初アドレス“n+1”を指している
(すなわち、スタックポインタ23(図1)の内容が
“n+1”になっている)ものとする。
容の一例を表すものである。このメインメモリ30に
は、アセンブラ言語で記述されたメインプログラムM、
サブルーチン(処理モジュール)A、およびサブルーチ
ンBが格納され(図2(A))、さらにその一部はスタ
ックメモリ領域Sとして割当てられている(図2
(B))。サブルーチンAは、一定の処理を行うための
もので、アドレス“i”を先頭アドレスとしている。サ
ブルーチンBは所定の処理W′を行うためのものであ
り、アドレス“j”を先頭アドレスとしている。スタッ
クメモリ領域Sは、いわゆる後入れ先出し(LIFO)
方式でアクセスされるメモリ領域であり、後述するPU
SH命令によってデータ格納、POP命令によってデー
タ取出が行われる。このスタックメモリ領域Sのスタッ
クの先頭アドレスは、スタックポインタ(SP)によっ
て指し示されるようになっている。図2の例では、スタ
ックポインタは当初アドレス“n+1”を指している
(すなわち、スタックポインタ23(図1)の内容が
“n+1”になっている)ものとする。
【0014】このプログラムは、メインプログラムMか
らサブルーチンBに制御を移し、さらにサブルーチンB
での処理結果に基づきメインプログラムMに戻るかある
いは他のサブルーチンAに制御を移す、という処理を内
容とするものである。以下、このプログラムの実行手順
を図3ないし図8を参照して説明する。なお、図3ない
し図8は、それぞれ各実行段階における各レジスタおよ
びスタックメモリ領域Sの内容を表している。
らサブルーチンBに制御を移し、さらにサブルーチンB
での処理結果に基づきメインプログラムMに戻るかある
いは他のサブルーチンAに制御を移す、という処理を内
容とするものである。以下、このプログラムの実行手順
を図3ないし図8を参照して説明する。なお、図3ない
し図8は、それぞれ各実行段階における各レジスタおよ
びスタックメモリ領域Sの内容を表している。
【0015】まず、メインプログラムMのアドレス“m
−1”の命令を実行して、サブルーチンAの先頭アドレ
ス“i”をaレジスタ24に格納したのち、次のアドレ
ス“m”のPUSH命令を実行する。これにより図3に
示すように、aレジスタ24の内容(“i”)がスタッ
クメモリ領域Sのアドレス“n”に格納され、スタック
ポインタ23はアドレス“n”を指す。なお、このと
き、プログラムカウンタ(PC)22の内容はメインプ
ログラムMの実行アドレス“m”を示している。
−1”の命令を実行して、サブルーチンAの先頭アドレ
ス“i”をaレジスタ24に格納したのち、次のアドレ
ス“m”のPUSH命令を実行する。これにより図3に
示すように、aレジスタ24の内容(“i”)がスタッ
クメモリ領域Sのアドレス“n”に格納され、スタック
ポインタ23はアドレス“n”を指す。なお、このと
き、プログラムカウンタ(PC)22の内容はメインプ
ログラムMの実行アドレス“m”を示している。
【0016】次に、アドレス“m+1”に格納されたC
ALL命令を実行してサブルーチンBを呼び出す。この
命令はサブルーチン呼出のための命令であり、その実行
に際してメインプログラムMの戻り先アドレスの保持を
伴う。すなわち、この命令を実行することにより、図4
に示すように、その時点のプログラムカウンタ22の内
容(“m+1”)に“1”を加算して得られる戻り先ア
ドレス“m+2”が、スタックメモリ領域Sのアドレス
“n−1”に格納され、スタックポインタ23がこのア
ドレス“n−1”を指す。そして、その後プログラムカ
ウンタ22に、制御移行先であるサブルーチンBの先頭
アドレス“j”がロードされる。
ALL命令を実行してサブルーチンBを呼び出す。この
命令はサブルーチン呼出のための命令であり、その実行
に際してメインプログラムMの戻り先アドレスの保持を
伴う。すなわち、この命令を実行することにより、図4
に示すように、その時点のプログラムカウンタ22の内
容(“m+1”)に“1”を加算して得られる戻り先ア
ドレス“m+2”が、スタックメモリ領域Sのアドレス
“n−1”に格納され、スタックポインタ23がこのア
ドレス“n−1”を指す。そして、その後プログラムカ
ウンタ22に、制御移行先であるサブルーチンBの先頭
アドレス“j”がロードされる。
【0017】制御がサブルーチンBに移行すると、ま
ず、その先頭アドレス“j”からアドレス“k−1”ま
でに記述された所定の処理Wが実行される。
ず、その先頭アドレス“j”からアドレス“k−1”ま
でに記述された所定の処理Wが実行される。
【0018】次のアドレス“k”には条件分岐命令(条
件付きJUMP命令)が格納されており、処理Wの処理
結果に基づき、メインプログラムMに戻るか、あるいは
サブルーチンAに制御を移すかの判定を行う。この判定
の結果、メインプログラムMに戻る場合には、プログラ
ムカウンタ22に制御移行先アドレス“k+1”がロー
ドされてそのアドレス“k+1”に制御が移り、サブル
ーチンAに移る場合には、プログラムカウンタ22に制
御移行先アドレス“k+5”がロードされてそのアドレ
ス“k+5”に制御が移る。
件付きJUMP命令)が格納されており、処理Wの処理
結果に基づき、メインプログラムMに戻るか、あるいは
サブルーチンAに制御を移すかの判定を行う。この判定
の結果、メインプログラムMに戻る場合には、プログラ
ムカウンタ22に制御移行先アドレス“k+1”がロー
ドされてそのアドレス“k+1”に制御が移り、サブル
ーチンAに移る場合には、プログラムカウンタ22に制
御移行先アドレス“k+5”がロードされてそのアドレ
ス“k+5”に制御が移る。
【0019】メインプログラムMに戻る場合の処理手順
は、アドレス“k+1”〜“k+4”に記述されてい
る。アドレス“k+1”には、スタックメモリ領域Sか
らbレジスタ25にデータを取り出すためのPOP命令
が格納されており、これを実行することにより、図5に
示すように、スタックメモリ領域Sの先頭アドレス“n
−1”からデータ“m+2”が取り出され、bレジスタ
25に格納される。このとき、スタックポインタ23は
アドレス“n”を指す。
は、アドレス“k+1”〜“k+4”に記述されてい
る。アドレス“k+1”には、スタックメモリ領域Sか
らbレジスタ25にデータを取り出すためのPOP命令
が格納されており、これを実行することにより、図5に
示すように、スタックメモリ領域Sの先頭アドレス“n
−1”からデータ“m+2”が取り出され、bレジスタ
25に格納される。このとき、スタックポインタ23は
アドレス“n”を指す。
【0020】次のアドレス“k+2”には、スタックメ
モリ領域Sからaレジスタ24にデータを取り出すため
のPOP命令が格納されており、これを実行することに
より、図6に示すように、スタックメモリ領域Sの先頭
アドレス“n”からデータ“i”が取り出され、aレジ
スタ24に格納される。このとき、スタックポインタ2
3はアドレス“n+1”を指す。
モリ領域Sからaレジスタ24にデータを取り出すため
のPOP命令が格納されており、これを実行することに
より、図6に示すように、スタックメモリ領域Sの先頭
アドレス“n”からデータ“i”が取り出され、aレジ
スタ24に格納される。このとき、スタックポインタ2
3はアドレス“n+1”を指す。
【0021】次のアドレス“k+3”には、bレジスタ
25の内容をスタックメモリ領域Sに格納するためのP
USH命令が格納されており、これを実行することによ
り、図7に示すように、bレジスタ25の内容(“m+
2”)がスタックメモリ領域Sのアドレス“n”に格納
される。このとき、スタックポインタ23はアドレス
“n”を指す。
25の内容をスタックメモリ領域Sに格納するためのP
USH命令が格納されており、これを実行することによ
り、図7に示すように、bレジスタ25の内容(“m+
2”)がスタックメモリ領域Sのアドレス“n”に格納
される。このとき、スタックポインタ23はアドレス
“n”を指す。
【0022】次のアドレス“k+4”には、スタックメ
モリ領域Sのスタックポインタ23が示すアドレスに格
納されたアドレスに戻るためのリターン命令RETが格
納されている。この場合、スタックメモリ領域Sのスタ
ックポインタ23が示すアドレス“n”には“m+2”
が格納されており、このRET命令を実行することによ
り、アドレス“m+2”、すなわちメインプログラムM
に戻ることとなる。
モリ領域Sのスタックポインタ23が示すアドレスに格
納されたアドレスに戻るためのリターン命令RETが格
納されている。この場合、スタックメモリ領域Sのスタ
ックポインタ23が示すアドレス“n”には“m+2”
が格納されており、このRET命令を実行することによ
り、アドレス“m+2”、すなわちメインプログラムM
に戻ることとなる。
【0023】以上の処理において、アドレス“k+1”
〜“k+3”のPOP命令およびPUSH命令は、メイ
ンプログラムMに戻ることになった結果不要となったサ
ブルーチンAの先頭アドレス“i”をスタックメモリ領
域Sから取り出して捨てるためのもので、この操作によ
り、スタックメモリ領域Sのアドレス“n−1”に格納
されていたメインプログラムMへの戻りアドレス“m+
2”(図4)は、スタックメモリ領域Sのアドレス
“n”(図7)に移動される。このように、スタックメ
モリ領域Sの不要なデータを消去するのは、その不要デ
ータの存在によって後のプログラム実行制御等における
不具合(戻りアドレスの混乱等)が生じないようにする
ためである。
〜“k+3”のPOP命令およびPUSH命令は、メイ
ンプログラムMに戻ることになった結果不要となったサ
ブルーチンAの先頭アドレス“i”をスタックメモリ領
域Sから取り出して捨てるためのもので、この操作によ
り、スタックメモリ領域Sのアドレス“n−1”に格納
されていたメインプログラムMへの戻りアドレス“m+
2”(図4)は、スタックメモリ領域Sのアドレス
“n”(図7)に移動される。このように、スタックメ
モリ領域Sの不要なデータを消去するのは、その不要デ
ータの存在によって後のプログラム実行制御等における
不具合(戻りアドレスの混乱等)が生じないようにする
ためである。
【0024】一方、サブルーチンAに移る場合の処理手
順は、アドレス“k+5”および“k+6”に記述され
ている。アドレス“k+5”には、スタックメモリ領域
Sからbレジスタ25にデータを取り出すためのPOP
命令が格納されている。この命令を実行する前のスタッ
クメモリ領域Sの状態は、図4に示したように、メイン
プログラムMのアドレス“m+1”のCALL命令実行
後の状態になっている。したがって、このPOP命令の
実行により、図8に示すように、スタックメモリ領域S
の先頭アドレス“n−1”からデータ“m+2”が取り
出され、bレジスタ25に格納される。これにより、サ
ブルーチンAに移ることになった結果不要となったメイ
ンプログラムMの戻りアドレス“m+2”がスタックメ
モリ領域Sから消去され、スタックポインタ23は、デ
ータ“i”が格納されたアドレス“n”を指す。
順は、アドレス“k+5”および“k+6”に記述され
ている。アドレス“k+5”には、スタックメモリ領域
Sからbレジスタ25にデータを取り出すためのPOP
命令が格納されている。この命令を実行する前のスタッ
クメモリ領域Sの状態は、図4に示したように、メイン
プログラムMのアドレス“m+1”のCALL命令実行
後の状態になっている。したがって、このPOP命令の
実行により、図8に示すように、スタックメモリ領域S
の先頭アドレス“n−1”からデータ“m+2”が取り
出され、bレジスタ25に格納される。これにより、サ
ブルーチンAに移ることになった結果不要となったメイ
ンプログラムMの戻りアドレス“m+2”がスタックメ
モリ領域Sから消去され、スタックポインタ23は、デ
ータ“i”が格納されたアドレス“n”を指す。
【0025】次のアドレス“k+6”には、リターン命
令RETが格納されている。この場合、スタックメモリ
領域Sのスタックポインタ23が示すアドレス“n”に
は“i”が格納されており、このRET命令を実行する
ことにより、制御がアドレス“i”、すなわちサブルー
チンAに戻ることとなる。
令RETが格納されている。この場合、スタックメモリ
領域Sのスタックポインタ23が示すアドレス“n”に
は“i”が格納されており、このRET命令を実行する
ことにより、制御がアドレス“i”、すなわちサブルー
チンAに戻ることとなる。
【0026】このように、本実施例では、サブルーチン
Bから他のサブルーチンAに制御を移す場合、スタック
メモリ領域Sの内容を操作することにより、メインプロ
グラムMに一旦戻ることなく直接サブルーチンAに制御
を移すことができる。しかも、スタックメモリ領域Sか
ら不要となったデータ(メインプログラムMの戻り先ア
ドレス)を除去しているため、その後のプログラム実行
制御に不具合を生じることもない。
Bから他のサブルーチンAに制御を移す場合、スタック
メモリ領域Sの内容を操作することにより、メインプロ
グラムMに一旦戻ることなく直接サブルーチンAに制御
を移すことができる。しかも、スタックメモリ領域Sか
ら不要となったデータ(メインプログラムMの戻り先ア
ドレス)を除去しているため、その後のプログラム実行
制御に不具合を生じることもない。
【0027】次に、本発明の他の実施例を説明する。
【0028】図9は、図1のメインメモリ30の記憶内
容の他の例を表すものである。この図に示すように、メ
インメモリ30は、アセンブラ言語で記述されたメイン
プログラムM′およびサブルーチンCのほか、プログラ
ムテーブルTを記憶し、さらに、スタックメモリ領域S
を保有している。
容の他の例を表すものである。この図に示すように、メ
インメモリ30は、アセンブラ言語で記述されたメイン
プログラムM′およびサブルーチンCのほか、プログラ
ムテーブルTを記憶し、さらに、スタックメモリ領域S
を保有している。
【0029】サブルーチンCは、所定の処理W′を行う
ためのものであり、アドレス“j”を先頭アドレスとし
ている。プログラムテーブルTは、別途用意されたリン
カプログラム(図示せず)を使用することによりメイン
メモリ30の所定の領域(アドレス“t”〜“t+
3”)に作成されたもので、図示しないサブルーチンプ
ログラム(Prog1〜Prog4)の各先頭アドレス
(p1〜p4)を格納している。スタックメモリ領域S
は、図2に示したものと同様のLIFO方式でアクセス
される領域である。この例でも、スタックポインタは当
初アドレス“n+1”を指しているものとする。
ためのものであり、アドレス“j”を先頭アドレスとし
ている。プログラムテーブルTは、別途用意されたリン
カプログラム(図示せず)を使用することによりメイン
メモリ30の所定の領域(アドレス“t”〜“t+
3”)に作成されたもので、図示しないサブルーチンプ
ログラム(Prog1〜Prog4)の各先頭アドレス
(p1〜p4)を格納している。スタックメモリ領域S
は、図2に示したものと同様のLIFO方式でアクセス
される領域である。この例でも、スタックポインタは当
初アドレス“n+1”を指しているものとする。
【0030】このプログラムは、メインプログラムMか
らサブルーチンCに制御を移し、さらに、サブルーチン
Cでの処理結果に基づきメインプログラムMに戻るかあ
るいは他のサブルーチンプログラム(Prog1〜Pr
og4)のいずれかに制御を移す、という処理を内容と
するものである。以下、このプログラムの実行手順を図
10ないし図18を参照して説明する。
らサブルーチンCに制御を移し、さらに、サブルーチン
Cでの処理結果に基づきメインプログラムMに戻るかあ
るいは他のサブルーチンプログラム(Prog1〜Pr
og4)のいずれかに制御を移す、という処理を内容と
するものである。以下、このプログラムの実行手順を図
10ないし図18を参照して説明する。
【0031】まず、メインプログラムMのアドレス“m
−1”の命令を実行して、プログラムテーブルTの先頭
アドレスの内容(p1)をaレジスタ24に格納したの
ち、アドレス“m”のPUSH命令を実行する。なお、
図9で〔t〕はアドレス“t”に格納されたデータ内容
を示す。アドレス“m”のPUSH命令により、aレジ
スタ24の内容(“p1”)がスタックメモリ領域Sの
アドレス“n”に格納され、スタックポインタ23はア
ドレス“n”を指す。
−1”の命令を実行して、プログラムテーブルTの先頭
アドレスの内容(p1)をaレジスタ24に格納したの
ち、アドレス“m”のPUSH命令を実行する。なお、
図9で〔t〕はアドレス“t”に格納されたデータ内容
を示す。アドレス“m”のPUSH命令により、aレジ
スタ24の内容(“p1”)がスタックメモリ領域Sの
アドレス“n”に格納され、スタックポインタ23はア
ドレス“n”を指す。
【0032】以下同様にして、アドレス“m+1”〜
“m+6”の命令を実行することにより、プログラムテ
ーブルTの内容(p2〜p4)が、それぞれスタックメ
モリ領域Sのアドレス“n−1”〜“n−3”に格納さ
れる。図10に示すように、この時点で、スタックポイ
ンタ23はアドレス“n−3”を指し、プログラムカウ
ンタ22の内容は“m+6”となっている。
“m+6”の命令を実行することにより、プログラムテ
ーブルTの内容(p2〜p4)が、それぞれスタックメ
モリ領域Sのアドレス“n−1”〜“n−3”に格納さ
れる。図10に示すように、この時点で、スタックポイ
ンタ23はアドレス“n−3”を指し、プログラムカウ
ンタ22の内容は“m+6”となっている。
【0033】次に、アドレス“m+7”に格納されたC
ALL命令を実行してサブルーチンCを呼び出す。これ
により、図11に示すように、その時点のプログラムカ
ウンタ22の内容(“m+7”)に“1”を加算して得
られる戻り先アドレス“m+8”が、スタックメモリ領
域Sのアドレス“n−4”に格納されてスタックポイン
タ23がこのアドレス“n−4”を指す。そして、その
後プログラムカウンタ22に、サブルーチンCの先頭ア
ドレス“j”がロードされる。
ALL命令を実行してサブルーチンCを呼び出す。これ
により、図11に示すように、その時点のプログラムカ
ウンタ22の内容(“m+7”)に“1”を加算して得
られる戻り先アドレス“m+8”が、スタックメモリ領
域Sのアドレス“n−4”に格納されてスタックポイン
タ23がこのアドレス“n−4”を指す。そして、その
後プログラムカウンタ22に、サブルーチンCの先頭ア
ドレス“j”がロードされる。
【0034】制御がサブルーチンCに移行すると、ま
ず、その先頭アドレス“j”からアドレス“k−1”ま
でに記述された所定の処理W′が実行される。そして、
次のアドレス“k”の条件分岐命令によって、処理W′
の処理結果に基づき、メインプログラムMに戻るか、あ
るいはサブルーチンプログラム(Prog1〜Prog
4)のいずれかに制御を移すかの判定を行う。この判定
の結果、メインプログラムMに戻る場合には、プログラ
ムカウンタ22に制御移行先アドレス“k+1”がロー
ドされてそのアドレス“k+1”に制御が移り、サブル
ーチンプログラム(Prog1〜Prog4)のいずれ
かに移る場合には、プログラムカウンタ22に制御移行
先アドレス“k+8”がロードされ、そのアドレス“k
+8”に制御が移る。
ず、その先頭アドレス“j”からアドレス“k−1”ま
でに記述された所定の処理W′が実行される。そして、
次のアドレス“k”の条件分岐命令によって、処理W′
の処理結果に基づき、メインプログラムMに戻るか、あ
るいはサブルーチンプログラム(Prog1〜Prog
4)のいずれかに制御を移すかの判定を行う。この判定
の結果、メインプログラムMに戻る場合には、プログラ
ムカウンタ22に制御移行先アドレス“k+1”がロー
ドされてそのアドレス“k+1”に制御が移り、サブル
ーチンプログラム(Prog1〜Prog4)のいずれ
かに移る場合には、プログラムカウンタ22に制御移行
先アドレス“k+8”がロードされ、そのアドレス“k
+8”に制御が移る。
【0035】メインプログラムMに戻る場合の処理手順
は、アドレス“k+1”〜“k+7”に記述されてい
る。アドレス“k+1”には、スタックメモリ領域Sか
らbレジスタ25にデータを取り出すためのPOP命令
が格納されており、これを実行することにより、図12
に示すように、スタックメモリ領域Sの先頭アドレス
“n−4”からデータ“m+8”が取り出され、bレジ
スタ25に格納される。このとき、スタックポインタ2
3はアドレス“n−3”を指す。
は、アドレス“k+1”〜“k+7”に記述されてい
る。アドレス“k+1”には、スタックメモリ領域Sか
らbレジスタ25にデータを取り出すためのPOP命令
が格納されており、これを実行することにより、図12
に示すように、スタックメモリ領域Sの先頭アドレス
“n−4”からデータ“m+8”が取り出され、bレジ
スタ25に格納される。このとき、スタックポインタ2
3はアドレス“n−3”を指す。
【0036】次のアドレス“k+2”には、スタックメ
モリ領域Sからaレジスタ24にデータを取り出すため
のPOP命令が格納されており、これを実行することに
より、スタックメモリ領域Sの先頭アドレス“n−3”
からデータ“p4”が取り出され、aレジスタ24に格
納される。このとき、スタックポインタ23はアドレス
“n+1”を指す。同様に、アドレス“k+3”〜“k
+5”のPOP命令を実行することにより、スタックメ
モリ領域Sのアドレス“n−2”〜“n”からそれぞれ
データ“p3”,“p2”“p1”がaレジスタ24に
取り出される。これらの処理の終了時点では、図13に
示すように、bレジスタ25の内容は“m+8”となっ
ており、スタックポインタ23は“n+1”を指してい
る。
モリ領域Sからaレジスタ24にデータを取り出すため
のPOP命令が格納されており、これを実行することに
より、スタックメモリ領域Sの先頭アドレス“n−3”
からデータ“p4”が取り出され、aレジスタ24に格
納される。このとき、スタックポインタ23はアドレス
“n+1”を指す。同様に、アドレス“k+3”〜“k
+5”のPOP命令を実行することにより、スタックメ
モリ領域Sのアドレス“n−2”〜“n”からそれぞれ
データ“p3”,“p2”“p1”がaレジスタ24に
取り出される。これらの処理の終了時点では、図13に
示すように、bレジスタ25の内容は“m+8”となっ
ており、スタックポインタ23は“n+1”を指してい
る。
【0037】次のアドレス“k+6”には、bレジスタ
25の内容をスタックメモリ領域Sに格納するためのP
USH命令が格納されており、これを実行することによ
り、図14に示すように、bレジスタ25の内容(“m
+2”)がスタックメモリ領域Sのアドレス“n”に格
納され、スタックポインタ23はアドレス“n”を指
す。したがって、次のアドレス“k+7”のRET命令
を実行することにより、制御がアドレス“m+2”、す
なわちメインプログラムMに戻ることとなる。
25の内容をスタックメモリ領域Sに格納するためのP
USH命令が格納されており、これを実行することによ
り、図14に示すように、bレジスタ25の内容(“m
+2”)がスタックメモリ領域Sのアドレス“n”に格
納され、スタックポインタ23はアドレス“n”を指
す。したがって、次のアドレス“k+7”のRET命令
を実行することにより、制御がアドレス“m+2”、す
なわちメインプログラムMに戻ることとなる。
【0038】以上の処理において、アドレス“k+2”
〜“k+5”のPOP命令は、メインプログラムMに戻
ることになった結果不要となったサブルーチンプログラ
ム(Prog1〜Prog4)の各先頭アドレス“p
4”,“p3”,“p2”,“p1”をスタックメモリ
領域Sから消去するためのもので、これにより、スタッ
クメモリ領域Sのアドレス“n−4”に格納されていた
メインプログラムMへの戻りアドレス“m+8”(図1
1)は、スタックメモリ領域Sのアドレス“n”(図1
4)に移動される。このように、スタックメモリ領域S
の不要なデータを捨てるのは、図2の例の場合と同様
に、その後のプログラム実行制御等における不具合(戻
りアドレスの混乱等)が生じないようにするためであ
る。
〜“k+5”のPOP命令は、メインプログラムMに戻
ることになった結果不要となったサブルーチンプログラ
ム(Prog1〜Prog4)の各先頭アドレス“p
4”,“p3”,“p2”,“p1”をスタックメモリ
領域Sから消去するためのもので、これにより、スタッ
クメモリ領域Sのアドレス“n−4”に格納されていた
メインプログラムMへの戻りアドレス“m+8”(図1
1)は、スタックメモリ領域Sのアドレス“n”(図1
4)に移動される。このように、スタックメモリ領域S
の不要なデータを捨てるのは、図2の例の場合と同様
に、その後のプログラム実行制御等における不具合(戻
りアドレスの混乱等)が生じないようにするためであ
る。
【0039】一方、サブルーチンプログラム(Prog
1〜Prog4)のいずれかに移る場合の処理手順は、
アドレス“k+8”ないし“k+14”に記述されてい
る。なお、ここでは、一例としてサブルーチンプログラ
ムProg2に制御を移すものとして説明する。
1〜Prog4)のいずれかに移る場合の処理手順は、
アドレス“k+8”ないし“k+14”に記述されてい
る。なお、ここでは、一例としてサブルーチンプログラ
ムProg2に制御を移すものとして説明する。
【0040】アドレス“k+8”には、スタックメモリ
領域Sからaレジスタ24にデータを取り出すためのP
OP命令が格納されている。この命令を実行する前の時
点でのスタックメモリ領域Sの状態は、図11に示した
ように、メインプログラムMのアドレス“m+7”のC
ALL命令実行後の状態になっている。したがって、ア
ドレス“k+8”のPOP命令の実行により、スタック
メモリ領域Sの先頭アドレス“n−4”からデータ“m
+8”が取り出され、aレジスタ24に格納される。
領域Sからaレジスタ24にデータを取り出すためのP
OP命令が格納されている。この命令を実行する前の時
点でのスタックメモリ領域Sの状態は、図11に示した
ように、メインプログラムMのアドレス“m+7”のC
ALL命令実行後の状態になっている。したがって、ア
ドレス“k+8”のPOP命令の実行により、スタック
メモリ領域Sの先頭アドレス“n−4”からデータ“m
+8”が取り出され、aレジスタ24に格納される。
【0041】同様に、アドレス“k+9”および“k+
10”のPOP命令の実行により、スタックメモリ領域
Sのアドレス“n−3”および“n−2”から、それぞ
れデータ“p4”,“p3”が取り出され、aレジスタ
24に格納される。これにより、サブルーチンプログラ
ムProg2に移ることになった結果不要となったメイ
ンプログラムMの戻りアドレス“m+8”と他のサブル
ーチンプログラムProg3,4の各先頭アドレスとが
スタックメモリ領域Sから消去され、スタックポインタ
23は、図15に示すように、データ“p2”が格納さ
れたアドレス“n−1”を指す。
10”のPOP命令の実行により、スタックメモリ領域
Sのアドレス“n−3”および“n−2”から、それぞ
れデータ“p4”,“p3”が取り出され、aレジスタ
24に格納される。これにより、サブルーチンプログラ
ムProg2に移ることになった結果不要となったメイ
ンプログラムMの戻りアドレス“m+8”と他のサブル
ーチンプログラムProg3,4の各先頭アドレスとが
スタックメモリ領域Sから消去され、スタックポインタ
23は、図15に示すように、データ“p2”が格納さ
れたアドレス“n−1”を指す。
【0042】次のアドレス“k+11”には、スタック
メモリ領域Sからbレジスタ25にデータを取り出すた
めのPOP命令が格納されている。したがって、この命
令の実行により、図16に示すように、スタックメモリ
領域Sのアドレス“n−1”からbレジスタ25にデー
タ“p2”が取り出され、スタックポインタ23はアド
レス“n”を指す。このようにして、制御移行先である
サブルーチンプログラムProg2の先頭アドレス“p
2”が一時的にbレジスタ25に退避される。
メモリ領域Sからbレジスタ25にデータを取り出すた
めのPOP命令が格納されている。したがって、この命
令の実行により、図16に示すように、スタックメモリ
領域Sのアドレス“n−1”からbレジスタ25にデー
タ“p2”が取り出され、スタックポインタ23はアド
レス“n”を指す。このようにして、制御移行先である
サブルーチンプログラムProg2の先頭アドレス“p
2”が一時的にbレジスタ25に退避される。
【0043】次のアドレス“k+12”には、スタック
メモリ領域Sからaレジスタ24にデータを取り出すた
めのPOP命令が格納され、この命令の実行により、図
17に示すように、スタックメモリ領域Sのアドレス
“n”からaレジスタ24にデータ“p1”が取り出さ
れ、スタックポインタ23はアドレス“n+1”を指
す。これにより、スタックメモリ領域Sから不要なデー
タがすべて消去されたことになる。
メモリ領域Sからaレジスタ24にデータを取り出すた
めのPOP命令が格納され、この命令の実行により、図
17に示すように、スタックメモリ領域Sのアドレス
“n”からaレジスタ24にデータ“p1”が取り出さ
れ、スタックポインタ23はアドレス“n+1”を指
す。これにより、スタックメモリ領域Sから不要なデー
タがすべて消去されたことになる。
【0044】次のアドレス“k+13”には、bレジス
タ25に退避されていたデータをスタックメモリ領域S
に格納するためのPUSH命令が格納され、この命令の
実行により、図18に示すように、スタックメモリ領域
Sのアドレス“n”に“p2”が格納される。したがっ
て、次のアドレス“k+14”のRET命令を実行する
ことにより、制御がアドレス“p2”、すなわちサブル
ーチンプログラムProg2に移ることとなる。
タ25に退避されていたデータをスタックメモリ領域S
に格納するためのPUSH命令が格納され、この命令の
実行により、図18に示すように、スタックメモリ領域
Sのアドレス“n”に“p2”が格納される。したがっ
て、次のアドレス“k+14”のRET命令を実行する
ことにより、制御がアドレス“p2”、すなわちサブル
ーチンプログラムProg2に移ることとなる。
【0045】このように、本実施例では、サブルーチン
CからサブルーチンプログラムProg2に制御を移す
場合、スタックメモリ領域Sの内容を操作することによ
り、メインプログラムMに一旦戻ることなく直接サブル
ーチンプログラムProg2に制御を移すことができ
る。しかも、スタックメモリ領域Sから不要となったデ
ータ(メインプログラムMの戻り先アドレスおよび他の
サブルーチンプログラムProg1,Prog3,Pr
og4の各先頭アドレス)を消去しているため、その後
のプログラム実行制御に不具合を生じることもない。
CからサブルーチンプログラムProg2に制御を移す
場合、スタックメモリ領域Sの内容を操作することによ
り、メインプログラムMに一旦戻ることなく直接サブル
ーチンプログラムProg2に制御を移すことができ
る。しかも、スタックメモリ領域Sから不要となったデ
ータ(メインプログラムMの戻り先アドレスおよび他の
サブルーチンプログラムProg1,Prog3,Pr
og4の各先頭アドレス)を消去しているため、その後
のプログラム実行制御に不具合を生じることもない。
【0046】なお、本実施例では、サブルーチンプログ
ラムProg2に制御を移す場合について説明したが、
他のサブルーチンプログラム、例えばProg4に制御
を移す場合には、スタックメモリ領域Sのアドレス“n
−2”に格納されたデータ“p4”(図11)をbレジ
スタ25に退避すると共に、アドレス“n”より上の他
のデータを消去し、その後、bレジスタ25に退避して
おいたデータ“p4”をアドレス“n”に格納するよう
にすればよい。すなわち、図9において、アドレス“k
+8”〜“k+12”のうちのどのアドレスに“POP
bReg”命令を記述するかによって、制御を移すサ
ブルーチンプログラムを任意に選択することができる。
ラムProg2に制御を移す場合について説明したが、
他のサブルーチンプログラム、例えばProg4に制御
を移す場合には、スタックメモリ領域Sのアドレス“n
−2”に格納されたデータ“p4”(図11)をbレジ
スタ25に退避すると共に、アドレス“n”より上の他
のデータを消去し、その後、bレジスタ25に退避して
おいたデータ“p4”をアドレス“n”に格納するよう
にすればよい。すなわち、図9において、アドレス“k
+8”〜“k+12”のうちのどのアドレスに“POP
bReg”命令を記述するかによって、制御を移すサ
ブルーチンプログラムを任意に選択することができる。
【0047】以上の各実施例では、スタックメモリ領域
Sをメインメモリ上に設けるようにしているが、これに
限るものではなく、例えばCPU内部のレジスタ部内に
専用のスタックレジスタを設け、このスタック情報を操
作するようにしてもよい。この場合には、メインメモリ
内にスタックメモリ領域Sを設ける場合に比べて物理的
にアクセス速度が速くなり、より一層の高速処理が可能
となる。
Sをメインメモリ上に設けるようにしているが、これに
限るものではなく、例えばCPU内部のレジスタ部内に
専用のスタックレジスタを設け、このスタック情報を操
作するようにしてもよい。この場合には、メインメモリ
内にスタックメモリ領域Sを設ける場合に比べて物理的
にアクセス速度が速くなり、より一層の高速処理が可能
となる。
【0048】また、上記実施例ではネスティングの深さ
が1の場合を説明したが、ネスティングの深さがより深
い場合(多重ネスティング)でも、同様にスタック情報
を適宜操作することにより、各ネスティングレベル間で
直接制御移行を行うことができるのはもちろんである。
が1の場合を説明したが、ネスティングの深さがより深
い場合(多重ネスティング)でも、同様にスタック情報
を適宜操作することにより、各ネスティングレベル間で
直接制御移行を行うことができるのはもちろんである。
【0049】
【発明の効果】以上説明したように請求項1ないし請求
項3記載のプログラム実行制御方法によれば、後入れ先
出しメモリに格納されたスタック情報のうち、制御を移
行しようとする先の処理モジュールの先頭アドレスを残
して他の不要なスタック情報は消去することとしたの
で、その後のプログラム実行制御に影響を与えることな
く、目的の処理モジュールに直接制御を移すことができ
る。したがって、ネスティング構造を有するプログラム
における任意の深さ(ネスティングレベル)の処理モジ
ュールから上位の任意の深さの処理モジュールに直接制
御を移すことができ、中間のネスティングレベルに存在
する処理モジュールを経由する必要がない。このため、
特にネスティングレベルが深い場合には、プログラムシ
ーケンス制御の高速化が可能となる。
項3記載のプログラム実行制御方法によれば、後入れ先
出しメモリに格納されたスタック情報のうち、制御を移
行しようとする先の処理モジュールの先頭アドレスを残
して他の不要なスタック情報は消去することとしたの
で、その後のプログラム実行制御に影響を与えることな
く、目的の処理モジュールに直接制御を移すことができ
る。したがって、ネスティング構造を有するプログラム
における任意の深さ(ネスティングレベル)の処理モジ
ュールから上位の任意の深さの処理モジュールに直接制
御を移すことができ、中間のネスティングレベルに存在
する処理モジュールを経由する必要がない。このため、
特にネスティングレベルが深い場合には、プログラムシ
ーケンス制御の高速化が可能となる。
【0050】また、CALL命令やJUMP命令等のプ
ログラムシーケンス命令を用いずにプログラムシーケン
スを任意に変更できるという効果もある。
ログラムシーケンス命令を用いずにプログラムシーケン
スを任意に変更できるという効果もある。
【0051】さらに、常に後入れ先出しメモリに格納さ
れたスタック情報を意識してプログラミングを行うよう
になるため、構造化されたプログラム作成が可能になる
という効果もある。
れたスタック情報を意識してプログラミングを行うよう
になるため、構造化されたプログラム作成が可能になる
という効果もある。
【図1】本発明の一実施例に係るプログラム実行制御方
法を適用したマイクロコンピュータシステムの要部を表
すブロック図である。
法を適用したマイクロコンピュータシステムの要部を表
すブロック図である。
【図2】図1のメインメモリの内容の一例を表す図であ
る。
る。
【図3】図2のメインメモリのプログラムを実行する際
のスタックメモリ領域およびレジスタ部の一状態を示す
図である。
のスタックメモリ領域およびレジスタ部の一状態を示す
図である。
【図4】図2のメインメモリのプログラムを実行する際
のスタックメモリ領域およびレジスタ部の一状態を示す
図である。
のスタックメモリ領域およびレジスタ部の一状態を示す
図である。
【図5】図2のメインメモリのプログラムを実行する際
のスタックメモリ領域およびレジスタ部の一状態を示す
図である。
のスタックメモリ領域およびレジスタ部の一状態を示す
図である。
【図6】図2のメインメモリのプログラムを実行する際
のスタックメモリ領域およびレジスタ部の一状態を示す
図である。
のスタックメモリ領域およびレジスタ部の一状態を示す
図である。
【図7】図2のメインメモリのプログラムを実行する際
のスタックメモリ領域およびレジスタ部の一状態を示す
図である。
のスタックメモリ領域およびレジスタ部の一状態を示す
図である。
【図8】図2のメインメモリのプログラムを実行する際
のスタックメモリ領域およびレジスタ部の一状態を示す
図である。
のスタックメモリ領域およびレジスタ部の一状態を示す
図である。
【図9】図1のメインメモリの内容の他の例を表す図で
ある。
ある。
【図10】図9のメインメモリのプログラムを実行する
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
【図11】図9のメインメモリのプログラムを実行する
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
【図12】図9のメインメモリのプログラムを実行する
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
【図13】図9のメインメモリのプログラムを実行する
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
【図14】図9のメインメモリのプログラムを実行する
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
【図15】図9のメインメモリのプログラムを実行する
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
【図16】図9のメインメモリのプログラムを実行する
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
【図17】図9のメインメモリのプログラムを実行する
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
【図18】図9のメインメモリのプログラムを実行する
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
際のスタックメモリ領域およびレジスタ部の一状態を示
す図である。
10 CPU 11 レジスタ部 23 スタックポインタ 24 aレジスタ 25 bレジスタ 30 メインメモリ A,B,C サブルーチン M,M′メインプログラム S スタックメモリ領域 T プログラムテーブル
Claims (3)
- 【請求項1】 ネスティング構造により結合された複数
の処理モジュールの各先頭アドレス等をスタック情報と
して後入れ先出しメモリに格納しておき、このスタック
情報を用いて前記複数の処理モジュールからなるプログ
ラムの実行制御を行う方法であって、 前記後入れ先出しメモリに格納されたスタック情報のう
ち、現在実行中の処理モジュールが属するネスティング
レベルから制御移行先である他の処理モジュールが属す
るネスティングレベルまでの各処理モジュールの先頭ア
ドレスを削除するステップと、 前記後入れ先出しメモリに、前記制御移行先である他の
処理モジュールの先頭アドレスを格納するステップとを
含むことを特徴とするプログラム実行制御方法。 - 【請求項2】 ネスティング構造により結合された複数
の処理モジュールの各先頭アドレス等をスタック情報と
して後入れ先出しメモリに格納しておき、このスタック
情報を用いて前記複数の処理モジュールからなるプログ
ラムの実行制御を行う方法であって、 前記後入れ先出しメモリに、予め制御移行可能性のある
処理モジュールの先頭アドレスを格納するステップと、 1の処理モジュールから他の処理モジュールへの制御移
行に際し、前記後入れ先出しメモリに、前記他の処理モ
ジュールからの戻り先アドレスを格納するステップと、 前記他の処理モジュールの実行結果に基づき、前記1の
処理モジュールに戻るか、あるいは前記制御移行可能性
のある処理モジュールに移るかを判定するステップと、 前記判定の結果、前記1の処理モジュールに戻るときに
は、前記後入れ先出しメモリに格納されたスタック情報
のうち、前記制御移行可能性のある処理モジュールの先
頭アドレスを削除するステップと、 前記判定の結果、前記制御移行可能性のある処理モジュ
ールに移るときには、前記後入れ先出しメモリに格納さ
れたスタック情報のうち、前記戻り先アドレスを削除す
るステップとを含むことを特徴とするプログラム実行制
御方法。 - 【請求項3】 前記制御移行可能性のある処理モジュー
ルが複数存在し、前記判定の結果、前記制御移行可能性
のある処理モジュールに制御を移行するとの判定が行わ
れたときには、前記各ステップに加えて、さらに、 前記複数の制御移行可能性のある処理モジュールから、
1つを選択する選択ステップと、 前記後入れ先出しメモリに格納されたスタック情報のう
ち、前記選択ステップで選択された処理モジュール以外
の前記制御移行可能性のある処理モジュールの先頭アド
レスを削除するステップを含むことを特徴とする請求項
2記載のプログラム実行制御方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP30416994A JPH08137690A (ja) | 1994-11-15 | 1994-11-15 | プログラム実行制御方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP30416994A JPH08137690A (ja) | 1994-11-15 | 1994-11-15 | プログラム実行制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH08137690A true JPH08137690A (ja) | 1996-05-31 |
Family
ID=17929879
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP30416994A Pending JPH08137690A (ja) | 1994-11-15 | 1994-11-15 | プログラム実行制御方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH08137690A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013173064A (ja) * | 2013-06-14 | 2013-09-05 | Sanyo Product Co Ltd | 遊技機 |
JP2014239997A (ja) * | 2014-09-01 | 2014-12-25 | 株式会社三洋物産 | 遊技機 |
JP2016064211A (ja) * | 2015-12-18 | 2016-04-28 | 株式会社三洋物産 | 遊技機 |
-
1994
- 1994-11-15 JP JP30416994A patent/JPH08137690A/ja active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013173064A (ja) * | 2013-06-14 | 2013-09-05 | Sanyo Product Co Ltd | 遊技機 |
JP2014239997A (ja) * | 2014-09-01 | 2014-12-25 | 株式会社三洋物産 | 遊技機 |
JP2016064211A (ja) * | 2015-12-18 | 2016-04-28 | 株式会社三洋物産 | 遊技機 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5872985A (en) | Switching multi-context processor and method overcoming pipeline vacancies | |
US4989133A (en) | System for executing, scheduling, and selectively linking time dependent processes based upon scheduling time thereof | |
EP1003095B1 (en) | A computer system for executing branch instructions | |
EP0365188B1 (en) | Central processor condition code method and apparatus | |
EP0180725A2 (en) | Instruction prefetch operation for branch instructions | |
US5446849A (en) | Electronic computer which executes squash branching | |
JPH02206837A (ja) | パイプライン方式のコンピューターシステムにおける色々な個数の潜在的メモリーアクセス矛盾を解決する方法及び装置 | |
JP2898105B2 (ja) | コンパイル中にソフトウェア・スケジューリング技術を用いてハードウェアのパイプライン処理の中断を最小化する方法 | |
KR100875377B1 (ko) | 처리 시스템에서 스택 팝 및 푸쉬 동작들을 수행하는 장치 및 방법 | |
EP0655679B1 (en) | Method and apparatus for controlling instruction in pipeline processor | |
JP2560988B2 (ja) | 情報処理装置および処理方法 | |
US7080239B2 (en) | Loop control circuit and loop control method | |
US5146570A (en) | System executing branch-with-execute instruction resulting in next successive instruction being execute while specified target instruction is prefetched for following execution | |
JP2004529405A (ja) | 依存性を決定するためのコンテンツ・アドレス指定可能メモリを実装したスーパースケーラ・プロセッサ | |
US6640297B1 (en) | Link pipe system for storage and retrieval of sequences of branch addresses | |
JPH08137690A (ja) | プログラム実行制御方法 | |
US7472264B2 (en) | Predicting a jump target based on a program counter and state information for a process | |
US20010037444A1 (en) | Instruction buffering mechanism | |
US5819081A (en) | Method of executing a branch instruction of jumping to a subroutine in a pipeline control system | |
EP0183877B1 (en) | Microcomputer for time dependent processes | |
JP2000181707A (ja) | 命令制御装置及びその方法 | |
JP3335735B2 (ja) | 演算処理装置 | |
JPH0877021A (ja) | 割込処理装置および方法 | |
JP2814683B2 (ja) | 命令処理装置 | |
JPH01291327A (ja) | 処理モード先取り制御方式 |