(57)【要約】【課題】マイクロプロセッサなどでプログラムを実行する際に用いられるスタック制御装置およびその方法を提供。【解決手段】スタック制御装置10は、割り込みコントローラ18が、H/Wスタック26の容量を監視して、プッシュおよびポップ対象容量になったとき、それぞれプッシュおよびポップ割り込みを発生して主制御部12に通知し、主制御部12が、プッシュ割り込みに応じて、H/Wスタック26の底からデータを取り出してS/Wスタック28にプッシュし、これを所定の退避数繰り返してプッシュ割り込み処理とし、ポップ割り込みに応じて、S/Wスタック28からデータをポップしてH/Wスタック26の底に格納し、これを所定の復帰数繰り返してポップ割り込み処理とすることにより、スタックレジスタの容量を超えるようなプログラムを実行しても、プログラムが停止および暴走することなく実行を継続することができる。【選択図】図１
2006309508.tif 000002
【特許請求の範囲】
【請求項１】
演算命令やサブルーチン呼出命令などの複数の命令からなる所定のプログラムを実行する主制御手段と、
前記所定のプログラムにおけるプログラムカウンタ、ループカウンタおよびループエンドアドレスなどの第１のデータをLIFO形式で格納する第１のスタックを有するスタックレジスタと、
前記演算命令で処理される途中結果などの第２のデータを一時記憶する記憶手段とを含むスタック制御装置において、
前記記憶手段は、LIFO形式で第１のデータを格納する第２のスタックを含み、
該装置は、第１のスタックの容量を監視して、その残り容量が所定のプッシュ対象容量になったときにプッシュ割り込みを発生して前記主制御手段に通知し、また所定のポップ対象容量になったときにポップ割り込みを発生して前記主制御手段に通知する割り込み制御手段を含み、
前記主制御手段は、前記プッシュ割り込みに応じて、第１のスタックの底からデータを取り出して第２のスタックにプッシュし、これを所定の退避数繰り返すプッシュ割り込み処理手段と、前記ポップ割り込みに応じて、第２のスタックからデータをポップして第１のスタックの底に格納し、これを所定の復帰数繰り返すポップ割り込み処理手段とを含むことを特徴とするスタック制御装置。
【請求項２】
請求項１に記載のスタック制御装置において、前記割り込み制御手段は、前記ポップ割り込みの許可または禁止を示し、初期状態では禁止を示す第１のフラグレジスタと、周辺機器などの外部装置からの割り込み要求に応じた外部割り込みの許可または禁止を示し、初期状態では許可を示す第２のフラグレジスタとを含み、
前記残り容量が前記所定のプッシュ対象容量になったとき、第２のフラグレジスタを禁止に設定してからプッシュ割り込みを発生して、その後、プッシュ割り込みから復帰したときに第２のフラグレジスタを許可に設定し、
また、前記残り容量が前記所定のポップ対象容量になったとき、第１のフラグレジスタが許可を示す場合に限り、第２のフラグレジスタを禁止に設定してからポップ割り込みを発生して、その後、ポップ割り込みから復帰したときに第２のフラグレジスタを許可に設定し、
前記プッシュ割り込み処理手段は、第２のスタックにデータをプッシュしたときに第１のフラグレジスタを許可に設定し、
前記ポップ割り込み処理手段は、第２のスタックからデータをポップしたときで、かつ第２のスタックに格納されているデータ数が０である場合に限り第１のフラグレジスタを禁止に設定することを特徴とするスタック制御装置。
【請求項３】
請求項１または２に記載のスタック制御装置において、前記スタックレジスタは、第１のスタックの底のデータのアドレスである読み出し内部アドレスと、該アドレスよりデータ１個分だけ底方向にシフトした書き込み内部アドレスとを有する内部アドレス・アクセスレジスタを含み、
前記プッシュ割り込み処理手段は、前記内部アドレス・アクセスレジスタにおける読み出し内部アドレスにアクセスして第１のスタックの底からデータを取り出し、
ポップ割り込み処理手段は、前記内部アドレス・アクセスレジスタにおける書き込み内部アドレスにアクセスして第１のスタックの底にデータを格納することを特徴とするスタック制御装置。
【請求項４】
請求項１ないし３のいずれかに記載のスタック制御装置において、前記所定のプッシュ対象容量は、第１のデータ１個分であり、
前記プッシュ割り込み処理手段は、前記主制御手段で実行可能な第１のプログラムであり、
前記ポップ割り込み処理手段は、前記主制御手段で実行可能な第２のプログラムであり、
前記主制御手段は、前記プッシュ割り込みに応じて、第１のプログラムからの第１の戻りアドレスを第１のスタックにプッシュしてから第１のプログラムを実行し、その後、第１のプログラムを終了するときに第１の戻りアドレスを第１のスタックからポップして第１の戻りアドレスが示す命令に戻り、
また、前記ポップ割り込みに応じて、第２のプログラムからの第２の戻りアドレスを第１のスタックにプッシュしてから第２のプログラムを実行し、その後、第２のプログラムを終了するときに第２の戻りアドレスを第１のスタックからポップして第１の戻りアドレスが示す命令に戻ることを特徴とするスタック制御装置。
【請求項５】
請求項１ないし４のいずれかに記載のスタック制御装置において、前記所定のポップ対象容量は、第１のデータ１個分以上で、第１のスタックが第１のデータを記憶可能な最大データ数以下であり、
前記所定の退避数および前記所定の復帰数は、第１のデータ１個分以上で、数式［（前記最大データ数−１）÷２］（少数点以下は切り捨てる）で算出される値以下であることを特徴とするスタック制御装置。
【請求項６】
請求項５に記載のスタック制御装置において、前記所定のポップ対象容量、前記所定の退避数および前記所定の復帰数は、第１のデータ１個分であることを特徴とするスタック制御装置。
【請求項７】
請求項５に記載のスタック制御装置において、前記所定のポップ対象容量は、第１のスタックの全容量であり、
前記所定の退避数および前記所定の復帰数は、数式［（第１のスタックが第１のデータを記憶可能な最大データ数−１）÷２］（少数点以下は切り捨てる）で算出される値であることを特徴とするスタック制御装置。
【請求項８】
請求項５に記載のスタック制御装置において、前記割り込み制御手段は、前記プッシュ割り込みまたは前記ポップ割り込みが発生する頻度を監視して、該頻度に応じて最適な前記ポップ対象容量、前記所定の退避数および前記所定の復帰数を判定して設定する頻度監視手段を含むことを特徴とするスタック制御装置。
【請求項９】
請求項８に記載のスタック制御装置において、前記頻度監視手段は、通常、前記ポップ対象容量、前記所定の退避数および前記所定の復帰数を第１のデータ１個分に設定し、前記プッシュ割り込みまたは前記ポップ割り込みが所定回数連続して発生した場合に、前記ポップ対象容量、前記所定の退避数および前記所定の復帰数を増加して設定し、さらに、第１のスタックに格納されているデータ数が０になったときに、再度前記ポップ対象容量、前記所定の退避数および前記所定の復帰数を第１のデータ１個分に設定することを特徴とするスタック制御装置。
【請求項１０】
主制御部において演算命令やサブルーチン呼出命令などの複数の命令からなる所定のプログラムを実行する第１の工程と、
前記所定のプログラムにおけるプログラムカウンタ、ループカウンタおよびループエンドアドレスなどの第１のデータを、スタックレジスタにおいて第１のスタックにLIFO形式で格納する第２の工程と、
前記演算命令で処理される途中結果などの第２のデータをメモリに一時記憶する第３の工程とを含むスタック制御方法において、該方法は、
前記メモリにおいて第２のスタックにLIFO形式で第１のデータを格納する第４の工程と、
第１のスタックの容量を監視して、その残り容量が所定のプッシュ対象容量になったときにプッシュ割り込みを発生して前記主制御部に通知し、また所定のポップ対象容量になったときにポップ割り込みを発生して前記主制御部に通知する割り込み制御工程と、
前記プッシュ割り込みに応じた前記主制御部により、第１のスタックの底からデータを取り出して第２のスタックにプッシュし、これを所定の退避数繰り返すプッシュ割り込み処理工程と、
前記ポップ割り込みに応じた前記主制御部により、第２のスタックからデータをポップして第１のスタックの底に格納し、これを所定の復帰数繰り返すポップ割り込み処理工程とを含むことを特徴とするスタック制御方法。
【請求項１１】
請求項１０に記載のスタック制御方法において、前記割り込み制御工程は、初期状態では禁止を示す第１のフラグレジスタで、前記ポップ割り込みの許可または禁止を示し、初期状態では許可を示す第２のフラグレジスタで、周辺機器などの外部装置からの割り込み要求に応じた外部割り込みの許可または禁止を示し、
前記残り容量が前記所定のプッシュ対象容量になったとき、第２のフラグレジスタを禁止に設定してからプッシュ割り込みを発生して、その後、プッシュ割り込みから復帰したときに第２のフラグレジスタを許可に設定し、
また、前記残り容量が前記所定のポップ対象容量になったとき、第１のフラグレジスタが許可を示す場合に限り、第２のフラグレジスタを禁止に設定してからポップ割り込みを発生して、その後、ポップ割り込みから復帰したときに第２のフラグレジスタを許可に設定し、
前記プッシュ割り込み処理工程は、第２のスタックにデータをプッシュしたときに第１のフラグレジスタを許可に設定し、
前記ポップ割り込み処理工程は、第２のスタックからデータをポップしたときで、かつ第２のスタックに格納されているデータ数が０である場合に限り第１のフラグレジスタを禁止に設定することを特徴とするスタック制御方法。
【請求項１２】
請求項１０または１１に記載のスタック制御方法において、前記スタックレジスタは、第１のスタックの底のデータのアドレスである読み出し内部アドレスと、該アドレスよりデータ１個分だけ底方向にシフトした書き込み内部アドレスとを有する内部アドレス・アクセスレジスタを含み、
前記プッシュ割り込み処理手段は、前記スタックレジスタにおける内部アドレス・アクセスレジスタに格納されている、第１のスタックの底のデータのアドレスである読み出し内部アドレスにアクセスして第１のスタックの底からデータを取り出し、
ポップ割り込み処理手段は、前記内部アドレス・アクセスレジスタに格納されている、前記読み出し内部アドレスよりデータ１個分だけ底方向にシフトした書き込み内部アドレスにアクセスして第１のスタックの底にデータを格納することを特徴とするスタック制御方法。
【請求項１３】
請求項１０ないし１２のいずれかに記載のスタック制御方法において、前記所定のプッシュ対象容量は、第１のデータ１個分であり、
前記プッシュ割り込み処理工程は、第１のプログラムとして前記主制御部で実行されて、前記プッシュ割り込みに応じて、第１のプログラムからの第１の戻りアドレスを第１のスタックにプッシュしてから第１のプログラムを実行し、その後、第１のプログラムを終了するときに第１の戻りアドレスを第１のスタックからポップして第１の戻りアドレスが示す命令に戻り、
前記ポップ割り込み処理手段は、第２のプログラムとして前記主制御部で実行されて、前記ポップ割り込みに応じて、第２のプログラムからの第２の戻りアドレスを第１のスタックにプッシュしてから第２のプログラムを実行し、その後、第２のプログラムを終了するときに第２の戻りアドレスを第１のスタックからポップして第１の戻りアドレスが示す命令に戻ることを特徴とするスタック制御方法。
【請求項１４】
請求項１０ないし１３のいずれかに記載のスタック制御方法において、前記所定のポップ対象容量は、第１のデータ１個分以上で、第１のスタックが第１のデータを記憶可能な最大データ数以下であり、
前記所定の退避数および前記所定の復帰数は、第１のデータ１個分以上で、数式［（前記最大データ数−１）÷２］（少数点以下は切り捨てる）で算出される値以下であることを特徴とするスタック制御方法。
【請求項１５】
請求項１４に記載のスタック制御方法において、前記所定のポップ対象容量、前記所定の退避数および前記所定の復帰数は、第１のデータ１個分であることを特徴とするスタック制御方法。
【請求項１６】
請求項１４に記載のスタック制御方法において、前記所定のポップ対象容量は、第１のスタックの全容量であり、
前記所定の退避数および前記所定の復帰数は、数式［（第１のスタックが第１のデータを記憶可能な最大データ数−１）÷２］（少数点以下は切り捨てる）で算出される値であることを特徴とするスタック制御方法。
【請求項１７】
請求項１４に記載のスタック制御方法において、前記割り込み制御工程は、前記プッシュ割り込みまたは前記ポップ割り込みが発生する頻度を監視して、該頻度に応じて最適な前記ポップ対象容量、前記所定の退避数および前記所定の復帰数を判定して設定する頻度監視工程を含むことを特徴とするスタック制御方法。
【請求項１８】
請求項１７に記載のスタック制御方法において、前記頻度監視工程は、通常、前記ポップ対象容量、前記所定の退避数および前記所定の復帰数を第１のデータ１個分に設定し、前記プッシュ割り込みまたは前記ポップ割り込みが所定回数連続して発生した場合に、前記ポップ対象容量、前記所定の退避数および前記所定の復帰数を増加して設定し、さらに、第１のスタックに格納されているデータ数が０になったときに、再度前記ポップ対象容量、前記所定の退避数および前記所定の復帰数を第１のデータ１個分に設定することを特徴とするスタック制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサなどでプログラムを実行する際に用いられるスタック制御装置およびその方法に関するものである。
【背景技術】
【０００２】
従来から、マイクロプロセッサでは、同じプログラムを複数回実行する場合、その処理部分をサブルーチン化して効率化したプログラムを実行することができる。このようなサブルーチンの呼び出し命令が実行された場合、そのサブルーチンの次に処理するルーチンへの戻りアドレスをスタックにプッシュしてから、サブルーチンの先頭アドレスへジャンプする。このサブルーチンの処理が終了すると、サブルーチンからの復帰命令が実行され、スタックから戻りアドレスをポップしてそのアドレスにジャンプする。
【０００３】
このようなマイクロプロセッサは、プログラム命令を実行する際に、スタックへのプッシュおよびポップを高速に行うために、ハードウエア内部にスタックレジスタを備えて、プログラムの実行に従ってハードウエアが制御することによりプログラムカウンタやループカウンタ、ループエンドアドレスを自動的にプッシュまたはポップしている。
【０００４】
また、マイクロプロセッサでは、プログラムを実行してスタックの容量を超えてしまうと、意図しないプログラムの停止や、サブルーチンからの戻りアドレスが消失することによるプログラムの暴走などの問題が生じる。これらの問題は、単にスタックの容量を増やすだけでは、ハードウエアの規模が際限なく増大してしまうため、その他の解決策が知られている。
【０００５】
たとえば、特許文献１に記載のメモリ管理方式では、バス管理機構がスタックエリアのオーバーフローさせる割り込みを検知したときに、スタックエリアのスタックポインタにおけるアドレスを退避させて、RAMの空きエリアのアドレスをスタックポインタとして設定することにより、プロセスを継続させることができる。
【０００６】
また、特許文献２に記載のデータ処理システムにおけるメモリ拡張スタック装置では、ハードウエア・スタックがほぼ満杯の場合、実行中のプログラムに移動命令を挿入することによって、ハードウエア・スタックの最後部からエントリをメモリ拡張スタックに移動させ、ハードウエア・スタックがほぼ空の場合、プログラムに移動命令を挿入することによって、メモリ拡張スタックからエントリをハードウエアの最後部に移動させるもので、これによって、プログラムはハードウエアを実行させ続けることができる。
【０００７】
【特許文献１】特開平8-77004号
【特許文献２】特開平8-255476号
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかし、上記の特許文献１におけるメモリ管理方式では、スタックは主メモリ上に設けられるもので、さらに拡張スタックに割り当てられるデータは、より頻繁に使用されるスタック最前部のデータであるため、高速に処理することは難しい。
【０００９】
また、特許文献２におけるメモリ拡張スタック装置では、ハードウエア・スタックおよびメモリ拡張スタックなどのすべての処理を制御論理回路が管理および制御するため、制御論理回路が肥大化および複雑化してしまう。
【００１０】
本発明はこのような従来技術の欠点を解消し、ハードウエア規模の増大化や回路の複雑化をすることなく構成され、スタックレジスタの容量を超えるようなプログラムを実行する場合でも、プログラムが停止および暴走することなく実行を継続するスタック制御装置およびその方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明は上述の課題を解決するために、演算命令やサブルーチン呼出命令などの複数の命令からなる所定のプログラムを実行する主制御手段と、この所定のプログラムにおけるプログラムカウンタ、ループカウンタおよびループエンドアドレスなどの第１のデータをLIFO形式で格納する第１のスタックを有するスタックレジスタと、この演算命令で処理される途中結果などの第２のデータを一時記憶する記憶手段とを含むスタック制御装置において、この記憶手段は、LIFO形式で第１のデータを格納する第２のスタックを含み、この装置は、第１のスタックの容量を監視して、その残り容量が所定のプッシュ対象容量になったときにプッシュ割り込みを発生してこの主制御手段に通知し、また所定のポップ対象容量になったときにポップ割り込みを発生してこの主制御手段に通知する割り込み制御手段を含み、この主制御手段は、このプッシュ割り込みに応じて、第１のスタックの底からデータを取り出して第２のスタックにプッシュし、これを所定の退避数繰り返すプッシュ割り込み処理手段と、このポップ割り込みに応じて、第２のスタックからデータをポップして第１のスタックの底に格納し、これを所定の復帰数繰り返すポップ割り込み処理手段とを含むことを特徴とする。
【００１２】
また、主制御部において演算命令やサブルーチン呼出命令などの複数の命令からなる所定のプログラムを実行する第１の工程と、この所定のプログラムにおけるプログラムカウンタ、ループカウンタおよびループエンドアドレスなどの第１のデータを、スタックレジスタにおいて第１のスタックにLIFO形式で格納する第２の工程と、この演算命令で処理される途中結果などの第２のデータをメモリに一時記憶する第３の工程とを含むスタック制御方法は、このメモリにおいて第２のスタックにLIFO形式で第１のデータを格納する第４の工程と、第１のスタックの容量を監視して、その残り容量が所定のプッシュ対象容量になったときにプッシュ割り込みを発生してこの主制御部に通知し、また所定のポップ対象容量になったときにポップ割り込みを発生してこの主制御部に通知する割り込み制御工程と、このプッシュ割り込みに応じたこの主制御部により、第１のスタックの底からデータを取り出して第２のスタックにプッシュし、これを所定の退避数繰り返すプッシュ割り込み処理工程と、このポップ割り込みに応じたこの主制御部により、第２のスタックからデータをポップして第１のスタックの底に格納し、これを所定の復帰数繰り返すポップ割り込み処理工程とを含むことを特徴とする。
【発明の効果】
【００１３】
本発明のスタック制御装置によれば、H/Wスタックの容量が満たされる前に、割り込みコントローラがプッシュ割り込みを発生させることにより、主制御部がH/Wスタックの底からデータを取り出してS/Wスタックにプッシュして一時的に退避させることができ、H/Wスタックの容量が空いた後で、割り込みコントローラがポップ割り込みを発生させることにより、主制御部がS/WスタックからデータをポップしてH/Wスタックの底へ格納して復帰させることができる。このように、本発明のスタック制御装置では、主制御部を増大化および複雑化することなく、H/Wスタックの容量を超えるようなプロクラムが実行されても、プログラムが停止したり暴走したりすることなく継続して実行することができる。
【００１４】
また、本発明のスタック制御装置によれば、H/Wスタックに対して一度に複数のデータを退避および復帰することにより、プッシュおよびポップ割り込みの発生する頻度を少なくすることができ、さらにプッシュおよびポップ割り込みの発生に伴うパフォーマンスの低下を防ぐことができる。
【発明を実施するための最良の形態】
【００１５】
次に添付図面を参照して、本発明によるスタック制御装置の実施例を詳細に説明する。たとえば、本発明のスタック制御装置10は、図１に示すように、主制御部12がROM（Read-Only Memory）14に内蔵されたプログラムを実行する際に、スタックレジスタ16にサブルーチンからの戻りアドレスなどのデータを格納するもので、そのデータがスタックレジスタ16の容量を超えないように割り込みコントローラ18が制御してスタックレジスタ16におけるハードウエア（Hardware：H/W）スタック26およびRAM（Random Access Memory）20におけるソフトウエア（Software：S/W）スタック28の間でデータをやり取りする。なお、本発明の理解に直接関係のない部分は、図示を省略し、冗長な説明を避ける。
【００１６】
また、本実施例のスタック制御装置10は、制御信号を伝送する制御バス22を介して、主制御部12、ROM 14、スタックレジスタ16、割り込みコントローラ18およびRAM 20を互いに接続し、データ信号を伝送するデータバス24を介して、主制御部12、ROM 14、スタックレジスタ16、割り込みコントローラ18およびRAM 20を互いに接続するものである。
【００１７】
主制御部12は、本装置全体の動作を制御および統括する機能を有してCPU（Central Processing Unit）などで構成されるもので、特に、ROM 14に記録されたプログラムにおける命令を順次読み出して実行する。また、主制御部12は、プログラムの実行に関するプログラムカウンタ、ループカウンタおよびループエンドアドレスなどのデータをH/Wスタック26にプッシュし、またこのデータをポップする機能を有する。
【００１８】
たとえば、主制御部12は、実行する命令がサブルーチン呼出命令であった場合、サブルーチンからの戻りアドレスをH/Wスタック26にプッシュしてからサブルーチンを処理し、サブルーチン処理後にH/Wスタック26からその戻りアドレスをポップしてその戻りアドレスが示す命令の処理を継続することができる。また、主制御部12は、割り込みコントローラ18から外部割り込み命令を受ける場合、処理中の命令の次の命令への戻りアドレスをH/Wスタック26にプッシュしてから外部割り込みを処理し、外部割り込み処理後にH/Wスタック26からその戻りアドレスをポップしてその戻りアドレスが示す命令の処理を継続することができる。
【００１９】
本実施例の主制御部12は、特に、割り込みコントローラ18から制御バス22を介して供給されるプッシュ割り込み命令およびポップ割り込み命令に応じて、プッシュ割り込み処理およびポップ割り込み処理をそれぞれ実行する。主制御部12は、プッシュ割り込み処理では、H/Wスタック26の底からデータを取り出してS/Wスタック28にプッシュし、これを所定の退避数だけ順次繰り返し、ポップ割り込み処理では、S/Wスタック28からデータをポップしてH/Wスタック26の底に格納し、これを所定の復帰数だけ順次繰り返す。所定の退避数のデータと所定の復帰数とは、同数でよく、以下では、S/W格納数として示す。
【００２０】
本実施例において、主制御部12は、ハードウエアの内部アドレス・アクセスレジスタ30を参照して、H/Wスタック26の底にアクセスすることができる。内部アドレス・アクセスレジスタ30は、図２に示すようにスタックレジスタ16に含まれるもので、主制御部12は、内部アドレス・アクセスレジスタ30にリードを指示するとH/Wスタック26の底のデータを取りだし、ライトを指示するとH/Wスタック26の底にデータを格納することができる。
【００２１】
ROM 14は、演算命令やサブルーチン呼出命令などの複数の命令からなるプログラムを格納する機能を有し、不活性メモリなどが用いられる。本実施例のROM 14は、主制御部12で実行されるプッシュ割り込み処理およびポップ割り込み処理を示すプログラムをも格納する。
【００２２】
スタックレジスタ16は、複数のデータを格納することができるデータ記憶構造の一種で、本実施例では、プログラム命令の実行に必要なデータを高速に読み書きするためのH/Wスタック26として、たとえば、プログラムのサブルーチンや割り込み処理ルーチンなどの処理ルーチンの戻りアドレス、すなわちプログラムカウンタを格納するプログラムカウンタスタック、多重ループにおけるループ回数を格納するループカウンタスタックおよびこのループのループエンドアドレスを格納するループエンドアドレススタックなどを含んでよい。
【００２３】
H/Wスタック26は、通常、最後に書き込んだデータが最初に読み出される後入れ先出し(LIFO：Last-In First-Out)方式で動作し、このとき、スタックヘのデータの書き込みがプッシュ、またスタックからのデータの読み出しがポップと呼ばれる。
【００２４】
本実施例では、H/Wスタック26内で格納されるデータのバイト数がすべて同じであるとすれば、このバイト数でH/Wスタック26の総容量を除算してH/Wスタック26に格納可能な最大データ数が算出できる。H/Wスタック26は、この最大データ数を超えてデータをポップするとオーバーフローする。
【００２５】
また、本実施例のスタックレジスタ16は、図２に示すように、内部アドレス・アクセスレジスタ30およびステータスレジスタ32をも含む。内部アドレス・アクセスレジスタ30は、H/Wスタック26の底のデータのアドレスである読み出し内部アドレス、およびこの底のデータよりデータ１個分だけ底方向にシフトしたアドレスである書き込み内部アドレスを有し、主制御部12に制御されて、リードを指示されるとき、読み出し内部アドレスに基づいてH/Wスタック26の底のデータを取り出し、ライトを指示されるとき、書き込み内部アドレスに基づいてH/Wスタック26の底にデータを書き込むものである。
【００２６】
また、スタックレジスタ16は、これらの読み出し内部アドレスおよび書き込み内部アドレスのポインタを、リード指示に応じて自動的にデクリメントし、ライト指示に応じて自動的にインクリメントすることができる。スタックレジスタ16は、H/Wスタック26にデータが格納されていないときにリード指示があった場合や、最大データ数分格納されているときにライト指示があった場合には、ステータスレジスタ32を用いてエラーを通知することができる。
【００２７】
割り込みコントローラ18は、制御バス22を介してスタックレジスタ16のスタックポインタを制御し、また周辺機器などの外部装置からの割り込み要求に応じて発生した外部割り込みを制御バス22を介して主制御部12に通知するものである。割り込みコントローラ18は、外部割り込みを許可する場合に１を示し、禁止する場合に０を示すフラグレジスタである外部割り込み許可レジスタを備え、外部装置からの割り込み要求があったときにこのレジスタを参照して、許可である場合に限り外部割り込みを通知するとよい。外部割り込み許可レジスタは、その初期値を１とする。
【００２８】
本実施例の割り込みコントローラ18は、特に、H/Wスタック26の容量を監視し、その容量に応じて割り込みを発生させる機能を有する。たとえば、割り込みコントローラ18は、H/Wスタック26の残り容量がプッシュ対象容量であると判定する場合にプッシュ割り込みを発生し、H/Wスタック26の残り容量がポップ対象容量であると判定した場合にポップ割り込みを発生して、それぞれ主制御部12に供給する。
【００２９】
割り込みコントローラ18は、プッシュ割り込みおよびポップ割り込みを通知する直前に外部割り込み許可レジスタを０に設定し、主制御部12におけるプッシュ割り込み処理およびポップ割り込み処理から復帰したときに外部割り込み許可レジスタを１に設定するとよい。
【００３０】
割り込みコントローラ18が判定するこれらの対象容量は、たとえば、H/Wスタック26にプッシュ可能なデータ単位で示されてよく、プッシュ対象容量は、０個にまで減らないデータ数で、好ましくはデータ１個分でよい。また、ポップ対象容量は、S/W格納数＋データ１個分が最小で、H/Wスタック26の最大データ数が最大となる範囲内であればよく、SW格納数が多いほどポップ対象容量を大きくするとよい。
【００３１】
また、割り込みコントローラ18は、ポップ割り込みを許可する場合に１を示し、禁止する場合に０を示すフラグレジスタであるポップ割り込み許可レジスタを備え、H/Wスタック26の残り容量がポップ対象容量であると判定したときにこのレジスタを参照して、許可である場合に限りポップ割り込みを通知してもよい。ポップ割り込み許可レジスタは、その初期値を０とする。
【００３２】
このポップ割り込み許可レジスタは、主制御部12にも制御されて、主制御部12は、ポップ割り込み処理を終了する直前に、S/Wスタック28に格納されているデータ数を判定して、このデータ数が０である場合に限りポップ割り込み許可レジスタを０に設定するとよい。
【００３３】
RAM 20は、主に、演算の途中結果やデータなどを一時記憶する演算メモリとして用いられる。本実施例のRAM 20は、特に、退避用のデータ蓄積領域、すなわちS/Wスタック28を設けて、主制御部12によるプッシュ割り込み処理およびポップ割り込み処理に対応することができる。また、S/Wスタック28は、LIFO方式で動作するものでよい。
【００３４】
次に、本実施例におけるスタック制御装置10の動作について、プッシュ対象容量がデータ１個分で、退避数がデータ１個分であるときに、割り込みコントローラ18がプッシュ割り込みを発生する際にH/Wスタック26内のデータを退避させる動作を図３のフローチャートを参照しながら説明する。
【００３５】
本実施例のスタック制御装置10において、スタックレジスタ18におけるH/Wスタック26は、実際には多数のデータを格納することができるが、図４では複雑化を避けて説明するため、最大データ数を５個として、データを格納可能な領域H1、H2、H3、H4およびH5を含んで構成される。図４におけるH/Wスタック26は、その左側をスタックの先頭とし、右側をスタックの底側とする。このH/Wスタック26では、データがプッシュされると、常に先頭の領域H1に格納され、それまで領域H1に格納されていたデータは、領域H2にずらされて格納されるものとする。同様にして、データのプッシュに応じて、領域H2、H3、H4に格納されていたデータは、領域H3、H4、H5にずらされるものとする。図４に示すH/Wスタック26では、データがプッシュされた順番を示すインデックス番号を各領域内に表し、インデックス番号が表されていない領域にはデータがないものとする。
【００３６】
また、本実施例のRAM 20におけるS/Wスタック28も、H/Wスタック26と同様にして、図４に示すように、最大データ数を５個として、データを格納可能な領域S1、S2、S3、S4およびS5を含み、データがプッシュされて領域S1に格納されると、領域S1、S2、S3、S4に格納されていたデータは、それぞれ領域S2、S3、S4、S5にずらされるものとする。図５、図６および図７におけるH/Wスタック26およびS/Wスタック28も図４に示すものと同様に構成されるものとする。
【００３７】
本実施例では、まず、主制御部12において、H/Wスタック26へのデータのプッシュ命令が開始され（S102）、このデータは、データバス24を介してH/Wスタック26にプッシュされる。
【００３８】
ところで、H/Wスタック26では、その残り容量が割り込みコントローラ18によって監視されており、残り容量がプッシュ対象容量であるか否かが判定される（S104）。この判定の結果、H/Wスタック26の残り容量がプッシュ対象容量、すなわちデータ１個分であった場合には ステップS106に進み、それ以外の場合にはステップS114に進んでプッシュ命令が終了する。
【００３９】
本実施例において、ステップS104では、たとえば図４に示すように、H/Wスタック26の領域H1、H2、H3およびH4にデータが格納され、かつ領域H5にデータが格納されていない場合、残り容量がデータ１個分であると判定してステップS106に進む。このため、H/Wスタック26の残り容量がデータ０個分まで減少することはない。また、このとき、S/Wスタック28には、データが１つも格納されていない。
【００４０】
次に、ステップS106において、割り込みコントローラ18では、プッシュ割り込みが発生し、かつ外部割り込みが禁止されて外部割り込み許可レジスタが０に設定される。その後、プッシュ割り込みが制御バス22を介して主制御部12に通知される。
【００４１】
主制御部12では、プッシュ割り込みの通知に応じて、プッシュ割り込み処理が開始される。ここで、プッシュ割り込み処理を実行する関数へのジャンプに伴い復帰先のアドレスがH/Wスタック26にプッシュされて、図５に示すように、H/Wスタック26では、領域H1、H2、H3、H4およびH5のすべてにデータが格納され、残り容量は０となる。
【００４２】
次に、プッシュ割り込み処理では、H/Wスタック26の底に格納されているデータをS/Wスタック28に退避させ（S108）、すなわち、図６に示すように、領域H5に格納されていたデータを取り出して、領域S1にプッシュする。これを退避数だけ繰り返し、すなわちデータ１個分の回数だけ繰り返す。これにより、H/Wスタック26の残り容量は、領域H5からなるデータ１個分となる。
【００４３】
また、このようにS/Wスタック28にデータをポップした場合、その後の処理によってH/Wスタック26の残り容量がポップ対象容量になるとポップ割り込みに対応する必要があるため、主制御部12が割り込みコントローラ18を制御してポップ割り込みレジスタを１に設定しておく（S110）。
【００４４】
このようにして、主制御部12におけるプッシュ割り込み処理は終了し、復帰先のアドレスがH/Wスタック26からポップされて、図７に示すように、H/Wスタック26の残り容量は、領域H4およびH5からなるデータ２個分となる。また、割り込みコントローラ18では、プッシュ割り込み処理からの復帰に応じて、ステップS106で禁止した外部割り込みが許可され（S112）、外部割り込み許可レジスタは１に設定される。次に、ステップS114に進んで、プッシュ命令が終了する。
【００４５】
他方、本実施例におけるスタック制御装置10の動作について、ポップ対象容量がデータ３個分で、退避数がデータ１個分であるときに、割り込みコントローラ18がポップ割り込みを発生する際にS/Wスタック28に退避していたデータをH/Wスタック26へ復帰させる動作を図８のフローチャートを参照しながら説明する。
【００４６】
ここで、図９、図10、図11および図12に示すH/Wスタック26およびS/Wスタック28も、図４に示すものと同様に構成されるものとする。
【００４７】
本実施例では、まず、主制御部12において、H/Wスタック26からのデータのポップ命令が開始され（S202）、H/Wスタック26からデータが１個ポップされる。
【００４８】
このとき、割り込みコントローラ18では、監視しているH/Wスタック26の残り容量がポップ対象容量であるか否かが判定される（S204）。この判定の結果、H/Wスタック26の残り容量がポップ対象容量、すなわちデータ３個分に回復した場合には ステップS206に進み、それ以外の場合にはステップS218に進んでポップ命令が終了する。
【００４９】
本実施例において、ステップS204では、たとえば図９に示すように、H/Wスタック28の領域H1およびH2にデータが格納され、かつ領域H3、H4およびH5にデータが格納されていない場合、残り容量がデータ３個分に回復したと判定してステップS206に進む。また、このとき、S/Wスタック28には、データ１個が領域S1に格納されている。
【００５０】
次に、ステップS206において、割り込みコントローラ18では、ポップ割り込みが許可されているか否か、すなわちポップ割り込み許可レジスタが１を示すか０を示すかが判定され、１を示す場合にはステップS208に進み、０を示す場合にはステップS218に進んでポップ命令が終了する。
【００５１】
ステップS208において、割り込みコントローラ18では、ポップ割り込みが発生し、かつ外部割り込みが禁止されて外部割り込み許可レジスタが０に設定される。その後、ポップ割り込みが制御バス22を介して主制御部12に通知される。
【００５２】
主制御部12では、ポップ割り込みの通知に応じて、ポップ割り込み処理が開始される。ここで、ポップ割り込み処理を実行する関数へのジャンプに伴い復帰先のアドレスがH/Wスタック26にプッシュされて、図10に示すように、H/Wスタック26では、３個分のデータが領域H1、H2およびH3に格納され、残り容量は、領域H4およびH5からなる２個分のデータとなる。
【００５３】
次に、ポップ割り込み処理では、S/Wスタック28の先頭に格納されているデータをH/Wスタック26の底に復帰させ（S210）、すなわち、図11に示すように、領域S1に格納されていたデータをポップして、領域H4に格納する。これを退避数だけ繰り返し、すなわちデータ１個分の回数だけ繰り返す。これにより、S/Wスタック28に格納されているデータ数は０となる。
【００５４】
さらに、ポップ割り込み処理では、S/Wスタック28における残り容量が判定され（S212）、S/Wスタック28の残り容量データ５個分である場合、すなわちデータが１個も格納されていない場合にはステップS214に進み、S/Wスタック28にまだデータが格納されている場合にはステップS216に進む。
【００５５】
ステップS214では、主制御部12が割り込みコントローラ18を制御してポップ割り込みを禁止し、ポップ割り込み許可レジスタが０に設定され、その後、ステップS216に進む。このように、ポップ割り込みを禁止する理由としては、S/Wスタック28にデータが格納されていないときに、H/Wスタック28の残り容量がポップ対象容量になって主制御部12がポップ割り込み処理を実行しても、S/Wスタック28からデータを取り出せずに、ポップ割り込み自体が無駄な処理となるためである。
【００５６】
このようにして、主制御部12におけるポップ割り込み処理は終了し、復帰先のアドレスがH/Wスタック26からポップされて、図12に示すように、H/Wスタック26の残り容量は、領域H4およびH5からなるデータ２個分となる。また、割り込みコントローラ18では、ポップ割り込み処理からの復帰に応じて、ステップS208で禁止した外部割り込みが許可され（S216）、外部割り込み許可レジスタは１に設定される。次に、ステップS218に進んで、ポップ命令が終了する。
【００５７】
ところで、本実施例におけるスタック制御装置10の動作について、プッシュ対象容量がデータ１個分で、退避数がデータ２個分であるときにも、割り込みコントローラ18がプッシュ割り込みを発生する際にH/Wスタック26内のデータを退避させる動作は、図３のフローチャートを参照して説明できる。しかし、この場合におけるH/Wスタック26およびS/Wスタック28内のデータの動作は、図13、図14、図15および図16に示すように表わされる。ここで、図13、図14、図15および図16に示すH/Wスタック26およびS/Wスタック28も、図４に示すものと同様に構成されるものとする。
【００５８】
このとき、図３のS102およびS104の段階では、図13に示すように、H/Wスタック26の領域H1、H2、H3およびH4にはデータが格納され、領域H5にはデータが格納されていない。また、このとき、S/Wスタック28には、データが１つも格納されていない。
【００５９】
図３のS106の段階では、主制御部12がプッシュ割り込み処理を開始するため、プッシュ割り込み処理を実行する関数へのジャンプに伴い復帰先のアドレスがH/Wスタック26にプッシュされて、図14に示すように、H/Wスタック26の領域H1、H2、H3、H4およびH5には、すべてにデータが格納され、H/Wスタック26の残り容量は０となる。ここでも、S/Wスタック28には、データが１つも格納されていない。
【００６０】
図３のS108の段階では、H/Wスタック26の底に格納されているデータをS/Wスタック28に退避させ、これを退避数、すなわちデータ２個分の回数だけ繰り返すため、図15に示すように、H/Wスタック26の領域H1、H2およびH3にはデータが格納され、領域H4およびH5にはデータが格納されていない。
【００６１】
このとき、H/Wスタック26の底から順にデータを取り出してS/Wスタック28にポップするため、プッシュ割り込み処理前のH/Wスタック26の領域H5に格納されていたインデックス番号１のデータは、S/Wスタック28の領域S2に格納され、領域H4に格納されていたインデックス番号２のデータは、領域S1に格納されることとなる。このようにして、S/Wスタック28には、２個のデータが領域S1およびS2に退避される。
【００６２】
また、図３のS110の段階の後で、主制御部12におけるプッシュ割り込み処理が終了し、ここでプッシュ割り込み処理からの戻りアドレスがH/Wスタック26からポップされるため、図16に示すように、H/Wスタック26では、領域H1からインデックス番号５のデータがポップされて、領域H1およびH2にはデータが格納され、領域H3、H4およびH5にはデータが格納されていない。このとき、S/Wスタック28は、図３のS110の段階における状態、すなわち図15に示す状態のままである。
【００６３】
図３のS112およびS114の段階では、H/Wスタック26およびS/Wスタック28内のデータは、図16に示す状態のままである。
【００６４】
さらに、本実施例におけるスタック制御装置10の動作について、ポップ対象容量がデータ５個分で、復帰数がデータ２個分であるときにも、割り込みコントローラ18がポップ割り込みを発生する際にS/Wスタック28に退避していたデータをH/Wスタック26ヘ復帰させる動作は、図８のフローチャートを参照して説明できる。しかし、この場合におけるH/Wスタック26およびS/Wスタック28内のデータの動作は、図17、図18、図19および図20に示すように表わされる。ここで、図17、図18、図19および図20に示すH/Wスタック26およびS/Wスタック28も、図４に示すものと同様に構成されるものとする。
【００６５】
このとき、図８のS202、S204およびS206の段階では、図17に示すように、H/Wスタック26には、データが１つも格納されていない。また、このとき、S/Wスタック28の領域S1およびS2にはデータが格納され、領域H3、H4およびH5にはデータが格納されていない。
【００６６】
図８のS208の段階では、主制御部12がポップ割り込み処理を開始するため、ポップ割り込み処理を実行する関数へのジャンプに伴い復帰先のアドレスがH/Wスタック26にプッシュされて、図18に示すように、H/Wスタック26の領域H1にはデータが格納され、領域H2、H3、H4およびH5にはデータが格納されていない。ここで、S/Wスタック28は、図８のS206の段階における状態、すなわち図17に示す状態のままである。
【００６７】
図８のS210の段階では、S/Wスタック28の先頭に格納されているデータをH/Wスタック26の底に復帰させ、これを復帰数すなわちデータ２個分の回数だけ繰り返すため、図19に示すように、H/Wスタック26の領域H1、H2およびH3にはデータが格納され、領域H4およびH5にはデータが格納されていない。ここで、S/Wスタック28には、データが一つも格納されていない。
【００６８】
このとき、S/Wスタック28から順にデータをポップしてH/Wスタック26の底に格納するため、ポップ割り込み処理前のS/Wスタック28の領域S1に格納されていたインデックス番号２のデータは、H/Wスタック26の領域H2に格納され、領域S2に格納されていたインデックス番号１のデータは、領域H3に格納されることとなる。このようにして、S/Wスタック28から２個のデータが領域H2およびH3に復帰される。
【００６９】
図８のS212およびS214の段階では、H/Wスタック26およびS/Wスタック28内のデータは、図19に示す状態のままであり、このS214の段階の後で、主制御部12におけるポップ割り込み処理が終了し、ここでポップ割り込み処理からの戻りアドレスがH/Wスタック26からポップされるため、図20に示すように、H/Wスタック26では、領域H1からインデックス番号３のデータがポップされて、領域H1およびH2にはデータが格納され、領域H3、H4およびH5にはデータが格納されていない。このとき、S/Wスタック28は、図19に示す状態のままである。
【００７０】
図８のS216およびS218の段階では、H/Wスタック26およびS/Wスタック28内のデータは、図20に示す状態のままである。
【００７１】
このように、本発明におけるスタック制御回路では、様々な退避数および復帰数に応じて処理をすることができる。この退避数および復帰数は、少なくともデータ１個分必要であり、また多くとも数式［（H/Wスタックの最大データ数−１）÷２］（小数点以下は切り捨てる）で算出される最適値にするのが望ましい。また、退避数および復帰数は、この最適値を超えてもよいが、次のプッシュ割り込みおよびポップ割り込みまでの期間をより長くするために、この算出値以内にすることが望ましい。また、復帰数がこの最適値以上である場合、ポップ対象容量は、H/Wスタックの最大データ数にするとよく、すなわちH/Wスタックがポップされて格納されているデータ数が０にまで減少した場合に、ポップ割り込みを発生させるとよい。
【００７２】
ところで、スタック制御装置では、それほど頻繁にスタックの退避および復帰が行われない場合は、退避数および復帰数を少なくしてデータの移動に費やすサイクルを節約することができる。その一方で、スタック制御装置では、ネストの深部などのように、H/Wスタックがほとんど使用されてしまうとき、サブルーチンが繰り返し呼び出される場合には、退避数および復帰数を少なくすると、頻繁にプッシュ割り込みおよびポップ割り込みが発生してパフォーマンスを低下させる原因ともなるため、退避数および復帰数を多くする方がよい。
【００７３】
たとえば、最大データ数を５個とするH/Wスタック26において、残り容量がデータ２個分であるときに図21に示すようなプログラム40を実行する場合、退避数および復帰数が少ないと、サブルーチンが呼び出される度にスタックの退避と復帰が行われるが、退避数および復帰数が多ければ、最初にサブルーチンが呼び出され、一度だけ２個のデータをH/Wスタック26からS/Wスタック28に退避して、その後はH/Wスタック28のみを使用した高速処理が可能となり、パフォ一マンスを維持することができる。
【００７４】
また、本発明のスタック制御回路は、プッシュ割り込み処理およびポップ割り込み処理のそれぞれ最適な退避数および復帰数を判定する機能を有してよく、たとえば、この機能を果たす退避／復帰数判定プログラムは、主制御部12が実行可能なものでよく、ROM 14に格納されるものでよい。
【００７５】
このとき、主制御部12は、退避数および復帰数をRAM 20などのメモリに記憶して、プッシュ割り込み処理およびポップ割り込み処理を実行する際に、退避数および復帰数をそれぞれ読み出して使用する。
【００７６】
また、主制御部12は、退避／復帰数判定プログラムを常時、または一定間隔ごとに実行して、現行の処理において最適な退避数および復帰数を判定し、メモリに記憶しておく。これによって、主制御部12は、常に最適な退避数および復帰数を使用してプッシュ割り込み処理およびポップ割り込み処理をそれぞれ実行することができる。
【００７７】
退避／復帰数判定プログラムは、たとえば、スタックの退避および復帰の頻度に応じて、最適な退避数および復帰数を判定してよく、頻繁にスタックの退避および復帰が行われる場合は、退避数および復帰数を多くしてパフォーマンスを向上し、それほど頻繁にスタックの退避および復帰が行われない場合は、退避数および復帰数を少なくしてデータの移動に費やすサイクルを節約する。
【００７８】
退避／復帰数判定プログラムを用いたスタック制御装置10の動作について、退避の頻度に応じてプッシュ割り込みおよびポップ割り込みを実行する動作を、図22、図23、図24、図25、図26、図27、図28および図29に示すH/Wスタック26およびS/Wスタック28内のデータの動作を参照して説明する。ここで、図22、図23、図24、図25、図26、図27、図28および図29に示すH/Wスタック26およびS/Wスタック28も、図４に示すものと同様に構成されるものとする。
【００７９】
この動作では、初期状態としてプッシュ対象容量、ポップ対象容量、退避数および復帰数を、それぞれデータ１個分とする。
【００８０】
まず、図22に示すように、H/Wスタック26には、領域H1、H2、H3およびH4にデータが格納され、領域H5にデータが格納されてなく、S/Wスタック28には、データが１個も格納されていない。ここで、H/Wスタック26の残り容量は、データ１個分、すなわちプッシュ対象容量であるため、プッシュ割り込みが発生してH/Wスタック26の底のデータを１個退避し、図23に示すように、H/Wスタック26の領域H4のデータが取り出されてS/Wスタック28のS1にポップされる。
【００８１】
次に、図24に示すように、H/Wスタック26にデータがポップされて、領域H1、H2、H3およびH4にデータが格納され、残り容量は領域H5からなるデータ１個分となる。
【００８２】
このとき、H/Wスタック26の残り容量がプッシュ対象容量であるため、プッシュ割り込みが発生して、H/Wスタック26の底のデータを退避数、すなわち１個退避し、図25に示すように、H/Wスタック26の領域H4のデータが取り出されてS/Wスタック28のS1にポップされる。
【００８３】
ところで、退避／復帰数判定プログラムは、このようにデータ１個分のプッシュ割り込みが所定回数連続することを検出すると、退避数および復帰数を多くして、たとえばデータ２個分にし、ポップ対象容量をデータ５個分にする。
【００８４】
また、その後の処理において、図26に示すように、H/Wスタック26からデータがポップされた結果、H/Wスタック26の残り容量がデータ５個分、すなわちポップ対象容量となる。
【００８５】
このとき、H/Wスタック26の残り容量がポップ対象容量であるため、ポップ割り込みが発生して、S/Wスタック28からデータを復帰数、すなわち２個復帰し、図27に示すように、S/Wスタック28から領域S1およびS2のデータがポップされてそれぞれH/Wスタック26の領域H1およびH2に格納される。
【００８６】
また、その後の処理において、図28に示すように、H/Wスタック26にデータがプッシュされた結果、H/Wスタック26の残り容量がデータ１個分、すなわちプッシュ対象容量となる。
【００８７】
このとき、H/Wスタック26の残り容量がプッシュ対象容量であるため、プッシュ割り込みが発生して、H/Wスタック26の底のデータを退避数、すなわち２個退避し、図29に示すように、H/Wスタック26の領域H3およびH4のデータが取り出されてそれぞれS/Wスタック28のS1およびS2にポップされる。
【００８８】
このようにスタック制御回路では、退避／復帰数判定プログラムが退避および復帰の頻度に応じて、すなわちプッシュ割り込みおよびポップ割り込みの頻度に応じて、最適な退避数および復帰数に変更することができる。また、このとき、プッシュ対象容量およびポップ対象容量が変更されてもよい。
【００８９】
また、本実施例では、退避／復帰数判定プログラムは、プッシュ割り込みが、所定回数連続したことを頻度の条件としたが、次のプッシュ割り込みが発生するまでの時間、またはその間に処理したプログラムの量を頻度の条件としてもよい。また、退避／復帰数判定プログラムは、プッシュ割り込みではなく、ポップ割り込みに対して頻度の条件を設定してもよい。また、退避／復帰数判定プログラムは、プログラムの実行箇所に応じて最適な退避数および復帰数を判定してもよい。
【００９０】
本実施例では、主に、本発明のスタック制御回路をマイクロプロセッサに適用することを想定して説明したが、本発明のスタック制御回路およびその制御方法は、たとえばマイクロコントローラやデジタル信号プロセッサ(Digital Signal Processor：DSP)などのように、プログラムを内蔵して命令を逐次処理するデータ処理装置においても有効に使用することができる。
【図面の簡単な説明】
【００９１】
【図１】本発明のスタック制御装置の一実施例を示すブロック図である。
【図２】図１に示すスタック制御装置におけるスタックレジスタの一部を示すブロック図である。
【図３】図１に示すスタック制御装置のプッシュ割り込みの動作手順を説明するフローチャートである。
【図４】図３の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図５】図３の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図６】図３の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図７】図３の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図８】図１に示すスタック制御装置のポップ割り込みの動作手順を説明するフローチャートである。
【図９】図７の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図１０】図７の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図１１】図７の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図１２】図７の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図１３】図３の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図１４】図３の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図１５】図３の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図１６】図３の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図１７】図７の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図１８】図７の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図１９】図７の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図２０】図７の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図２１】図１に示すスタック制御装置で実行されるプログラムの例図である。
【図２２】図１に示すスタック制御装置の他の実施例におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図２３】図１に示すスタック制御装置の他の実施例におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図２４】図１に示すスタック制御装置の他の実施例におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図２５】図１に示すスタック制御装置の他の実施例におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図２６】図１に示すスタック制御装置の他の実施例におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図２７】図１に示すスタック制御装置の他の実施例におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図２８】図１に示すスタック制御装置の他の実施例におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【図２９】図１に示すスタック制御装置の他の実施例におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
【符号の説明】
【００９２】
10  スタック制御装置
12  主制御部
14  ROM
16  割り込みコントローラ
18  スタックレジスタ
20  RAM
22  制御バス
24  データバス
26  H/Wスタック
28  S/Wスタック
【図１】
2006309508.tif 000003
【図２】
2006309508.tif 000004
【図３】
2006309508.tif 000005
【図４】
2006309508.tif 000006
【図５】
2006309508.tif 000007
【図６】
2006309508.tif 000008
【図７】
2006309508.tif 000009
【図８】
2006309508.tif 000010
【図９】
2006309508.tif 000011
【図１０】
2006309508.tif 000012
【図１１】
2006309508.tif 000013
【図１２】
2006309508.tif 000014
【図１３】
2006309508.tif 000015
【図１４】
2006309508.tif 000016
【図１５】
2006309508.tif 000017
【図１６】
2006309508.tif 000018
【図１７】
2006309508.tif 000019
【図１８】
2006309508.tif 000020
【図１９】
2006309508.tif 000021
【図２０】
2006309508.tif 000022
【図２１】
2006309508.tif 000023
【図２２】
2006309508.tif 000024
【図２３】
2006309508.tif 000025
【図２４】
2006309508.tif 000026
【図２５】
2006309508.tif 000027
【図２６】
2006309508.tif 000028
【図２７】
2006309508.tif 000029
【図２８】
2006309508.tif 000030
【図２９】
2006309508.tif 000031