JP2006309508A - スタック制御装置およびその方法 - Google Patents

スタック制御装置およびその方法 Download PDF

Info

Publication number
JP2006309508A
JP2006309508A JP2005131343A JP2005131343A JP2006309508A JP 2006309508 A JP2006309508 A JP 2006309508A JP 2005131343 A JP2005131343 A JP 2005131343A JP 2005131343 A JP2005131343 A JP 2005131343A JP 2006309508 A JP2006309508 A JP 2006309508A
Authority
JP
Japan
Prior art keywords
stack
data
interrupt
pop
predetermined
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.)
Withdrawn
Application number
JP2005131343A
Other languages
English (en)
Inventor
Yuji Honda
雄士 本田
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.)
Oki Electric Industry Co Ltd
Original Assignee
Oki Electric Industry 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 Oki Electric Industry Co Ltd filed Critical Oki Electric Industry Co Ltd
Priority to JP2005131343A priority Critical patent/JP2006309508A/ja
Priority to CN200510118895XA priority patent/CN1855030B/zh
Priority to US11/369,822 priority patent/US20060248315A1/en
Publication of JP2006309508A publication Critical patent/JP2006309508A/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer

Abstract

【課題】マイクロプロセッサなどでプログラムを実行する際に用いられるスタック制御装置およびその方法を提供。
【解決手段】スタック制御装置10は、割り込みコントローラ18が、H/Wスタック26の容量を監視して、プッシュおよびポップ対象容量になったとき、それぞれプッシュおよびポップ割り込みを発生して主制御部12に通知し、主制御部12が、プッシュ割り込みに応じて、H/Wスタック26の底からデータを取り出してS/Wスタック28にプッシュし、これを所定の退避数繰り返してプッシュ割り込み処理とし、ポップ割り込みに応じて、S/Wスタック28からデータをポップしてH/Wスタック26の底に格納し、これを所定の復帰数繰り返してポップ割り込み処理とすることにより、スタックレジスタの容量を超えるようなプログラムを実行しても、プログラムが停止および暴走することなく実行を継続することができる。
【選択図】図1

Description

本発明は、マイクロプロセッサなどでプログラムを実行する際に用いられるスタック制御装置およびその方法に関するものである。
従来から、マイクロプロセッサでは、同じプログラムを複数回実行する場合、その処理部分をサブルーチン化して効率化したプログラムを実行することができる。このようなサブルーチンの呼び出し命令が実行された場合、そのサブルーチンの次に処理するルーチンへの戻りアドレスをスタックにプッシュしてから、サブルーチンの先頭アドレスへジャンプする。このサブルーチンの処理が終了すると、サブルーチンからの復帰命令が実行され、スタックから戻りアドレスをポップしてそのアドレスにジャンプする。
このようなマイクロプロセッサは、プログラム命令を実行する際に、スタックへのプッシュおよびポップを高速に行うために、ハードウエア内部にスタックレジスタを備えて、プログラムの実行に従ってハードウエアが制御することによりプログラムカウンタやループカウンタ、ループエンドアドレスを自動的にプッシュまたはポップしている。
また、マイクロプロセッサでは、プログラムを実行してスタックの容量を超えてしまうと、意図しないプログラムの停止や、サブルーチンからの戻りアドレスが消失することによるプログラムの暴走などの問題が生じる。これらの問題は、単にスタックの容量を増やすだけでは、ハードウエアの規模が際限なく増大してしまうため、その他の解決策が知られている。
たとえば、特許文献1に記載のメモリ管理方式では、バス管理機構がスタックエリアのオーバーフローさせる割り込みを検知したときに、スタックエリアのスタックポインタにおけるアドレスを退避させて、RAMの空きエリアのアドレスをスタックポインタとして設定することにより、プロセスを継続させることができる。
また、特許文献2に記載のデータ処理システムにおけるメモリ拡張スタック装置では、ハードウエア・スタックがほぼ満杯の場合、実行中のプログラムに移動命令を挿入することによって、ハードウエア・スタックの最後部からエントリをメモリ拡張スタックに移動させ、ハードウエア・スタックがほぼ空の場合、プログラムに移動命令を挿入することによって、メモリ拡張スタックからエントリをハードウエアの最後部に移動させるもので、これによって、プログラムはハードウエアを実行させ続けることができる。
特開平8-77004号 特開平8-255476号
しかし、上記の特許文献1におけるメモリ管理方式では、スタックは主メモリ上に設けられるもので、さらに拡張スタックに割り当てられるデータは、より頻繁に使用されるスタック最前部のデータであるため、高速に処理することは難しい。
また、特許文献2におけるメモリ拡張スタック装置では、ハードウエア・スタックおよびメモリ拡張スタックなどのすべての処理を制御論理回路が管理および制御するため、制御論理回路が肥大化および複雑化してしまう。
本発明はこのような従来技術の欠点を解消し、ハードウエア規模の増大化や回路の複雑化をすることなく構成され、スタックレジスタの容量を超えるようなプログラムを実行する場合でも、プログラムが停止および暴走することなく実行を継続するスタック制御装置およびその方法を提供することを目的とする。
本発明は上述の課題を解決するために、演算命令やサブルーチン呼出命令などの複数の命令からなる所定のプログラムを実行する主制御手段と、この所定のプログラムにおけるプログラムカウンタ、ループカウンタおよびループエンドアドレスなどの第1のデータをLIFO形式で格納する第1のスタックを有するスタックレジスタと、この演算命令で処理される途中結果などの第2のデータを一時記憶する記憶手段とを含むスタック制御装置において、この記憶手段は、LIFO形式で第1のデータを格納する第2のスタックを含み、この装置は、第1のスタックの容量を監視して、その残り容量が所定のプッシュ対象容量になったときにプッシュ割り込みを発生してこの主制御手段に通知し、また所定のポップ対象容量になったときにポップ割り込みを発生してこの主制御手段に通知する割り込み制御手段を含み、この主制御手段は、このプッシュ割り込みに応じて、第1のスタックの底からデータを取り出して第2のスタックにプッシュし、これを所定の退避数繰り返すプッシュ割り込み処理手段と、このポップ割り込みに応じて、第2のスタックからデータをポップして第1のスタックの底に格納し、これを所定の復帰数繰り返すポップ割り込み処理手段とを含むことを特徴とする。
また、主制御部において演算命令やサブルーチン呼出命令などの複数の命令からなる所定のプログラムを実行する第1の工程と、この所定のプログラムにおけるプログラムカウンタ、ループカウンタおよびループエンドアドレスなどの第1のデータを、スタックレジスタにおいて第1のスタックにLIFO形式で格納する第2の工程と、この演算命令で処理される途中結果などの第2のデータをメモリに一時記憶する第3の工程とを含むスタック制御方法は、このメモリにおいて第2のスタックにLIFO形式で第1のデータを格納する第4の工程と、第1のスタックの容量を監視して、その残り容量が所定のプッシュ対象容量になったときにプッシュ割り込みを発生してこの主制御部に通知し、また所定のポップ対象容量になったときにポップ割り込みを発生してこの主制御部に通知する割り込み制御工程と、このプッシュ割り込みに応じたこの主制御部により、第1のスタックの底からデータを取り出して第2のスタックにプッシュし、これを所定の退避数繰り返すプッシュ割り込み処理工程と、このポップ割り込みに応じたこの主制御部により、第2のスタックからデータをポップして第1のスタックの底に格納し、これを所定の復帰数繰り返すポップ割り込み処理工程とを含むことを特徴とする。
本発明のスタック制御装置によれば、H/Wスタックの容量が満たされる前に、割り込みコントローラがプッシュ割り込みを発生させることにより、主制御部がH/Wスタックの底からデータを取り出してS/Wスタックにプッシュして一時的に退避させることができ、H/Wスタックの容量が空いた後で、割り込みコントローラがポップ割り込みを発生させることにより、主制御部がS/WスタックからデータをポップしてH/Wスタックの底へ格納して復帰させることができる。このように、本発明のスタック制御装置では、主制御部を増大化および複雑化することなく、H/Wスタックの容量を超えるようなプロクラムが実行されても、プログラムが停止したり暴走したりすることなく継続して実行することができる。
また、本発明のスタック制御装置によれば、H/Wスタックに対して一度に複数のデータを退避および復帰することにより、プッシュおよびポップ割り込みの発生する頻度を少なくすることができ、さらにプッシュおよびポップ割り込みの発生に伴うパフォーマンスの低下を防ぐことができる。
次に添付図面を参照して、本発明によるスタック制御装置の実施例を詳細に説明する。たとえば、本発明のスタック制御装置10は、図1に示すように、主制御部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は、図2に示すようにスタックレジスタ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は、図2に示すように、内部アドレス・アクセスレジスタ30およびステータスレジスタ32をも含む。内部アドレス・アクセスレジスタ30は、H/Wスタック26の底のデータのアドレスである読み出し内部アドレス、およびこの底のデータよりデータ1個分だけ底方向にシフトしたアドレスである書き込み内部アドレスを有し、主制御部12に制御されて、リードを指示されるとき、読み出し内部アドレスに基づいてH/Wスタック26の底のデータを取り出し、ライトを指示されるとき、書き込み内部アドレスに基づいてH/Wスタック26の底にデータを書き込むものである。
また、スタックレジスタ16は、これらの読み出し内部アドレスおよび書き込み内部アドレスのポインタを、リード指示に応じて自動的にデクリメントし、ライト指示に応じて自動的にインクリメントすることができる。スタックレジスタ16は、H/Wスタック26にデータが格納されていないときにリード指示があった場合や、最大データ数分格納されているときにライト指示があった場合には、ステータスレジスタ32を用いてエラーを通知することができる。
割り込みコントローラ18は、制御バス22を介してスタックレジスタ16のスタックポインタを制御し、また周辺機器などの外部装置からの割り込み要求に応じて発生した外部割り込みを制御バス22を介して主制御部12に通知するものである。割り込みコントローラ18は、外部割り込みを許可する場合に1を示し、禁止する場合に0を示すフラグレジスタである外部割り込み許可レジスタを備え、外部装置からの割り込み要求があったときにこのレジスタを参照して、許可である場合に限り外部割り込みを通知するとよい。外部割り込み許可レジスタは、その初期値を1とする。
本実施例の割り込みコントローラ18は、特に、H/Wスタック26の容量を監視し、その容量に応じて割り込みを発生させる機能を有する。たとえば、割り込みコントローラ18は、H/Wスタック26の残り容量がプッシュ対象容量であると判定する場合にプッシュ割り込みを発生し、H/Wスタック26の残り容量がポップ対象容量であると判定した場合にポップ割り込みを発生して、それぞれ主制御部12に供給する。
割り込みコントローラ18は、プッシュ割り込みおよびポップ割り込みを通知する直前に外部割り込み許可レジスタを0に設定し、主制御部12におけるプッシュ割り込み処理およびポップ割り込み処理から復帰したときに外部割り込み許可レジスタを1に設定するとよい。
割り込みコントローラ18が判定するこれらの対象容量は、たとえば、H/Wスタック26にプッシュ可能なデータ単位で示されてよく、プッシュ対象容量は、0個にまで減らないデータ数で、好ましくはデータ1個分でよい。また、ポップ対象容量は、S/W格納数+データ1個分が最小で、H/Wスタック26の最大データ数が最大となる範囲内であればよく、SW格納数が多いほどポップ対象容量を大きくするとよい。
また、割り込みコントローラ18は、ポップ割り込みを許可する場合に1を示し、禁止する場合に0を示すフラグレジスタであるポップ割り込み許可レジスタを備え、H/Wスタック26の残り容量がポップ対象容量であると判定したときにこのレジスタを参照して、許可である場合に限りポップ割り込みを通知してもよい。ポップ割り込み許可レジスタは、その初期値を0とする。
このポップ割り込み許可レジスタは、主制御部12にも制御されて、主制御部12は、ポップ割り込み処理を終了する直前に、S/Wスタック28に格納されているデータ数を判定して、このデータ数が0である場合に限りポップ割り込み許可レジスタを0に設定するとよい。
RAM 20は、主に、演算の途中結果やデータなどを一時記憶する演算メモリとして用いられる。本実施例のRAM 20は、特に、退避用のデータ蓄積領域、すなわちS/Wスタック28を設けて、主制御部12によるプッシュ割り込み処理およびポップ割り込み処理に対応することができる。また、S/Wスタック28は、LIFO方式で動作するものでよい。
次に、本実施例におけるスタック制御装置10の動作について、プッシュ対象容量がデータ1個分で、退避数がデータ1個分であるときに、割り込みコントローラ18がプッシュ割り込みを発生する際にH/Wスタック26内のデータを退避させる動作を図3のフローチャートを参照しながら説明する。
本実施例のスタック制御装置10において、スタックレジスタ18におけるH/Wスタック26は、実際には多数のデータを格納することができるが、図4では複雑化を避けて説明するため、最大データ数を5個として、データを格納可能な領域H1、H2、H3、H4およびH5を含んで構成される。図4におけるH/Wスタック26は、その左側をスタックの先頭とし、右側をスタックの底側とする。このH/Wスタック26では、データがプッシュされると、常に先頭の領域H1に格納され、それまで領域H1に格納されていたデータは、領域H2にずらされて格納されるものとする。同様にして、データのプッシュに応じて、領域H2、H3、H4に格納されていたデータは、領域H3、H4、H5にずらされるものとする。図4に示すH/Wスタック26では、データがプッシュされた順番を示すインデックス番号を各領域内に表し、インデックス番号が表されていない領域にはデータがないものとする。
また、本実施例のRAM 20におけるS/Wスタック28も、H/Wスタック26と同様にして、図4に示すように、最大データ数を5個として、データを格納可能な領域S1、S2、S3、S4およびS5を含み、データがプッシュされて領域S1に格納されると、領域S1、S2、S3、S4に格納されていたデータは、それぞれ領域S2、S3、S4、S5にずらされるものとする。図5、図6および図7におけるH/Wスタック26およびS/Wスタック28も図4に示すものと同様に構成されるものとする。
本実施例では、まず、主制御部12において、H/Wスタック26へのデータのプッシュ命令が開始され(S102)、このデータは、データバス24を介してH/Wスタック26にプッシュされる。
ところで、H/Wスタック26では、その残り容量が割り込みコントローラ18によって監視されており、残り容量がプッシュ対象容量であるか否かが判定される(S104)。この判定の結果、H/Wスタック26の残り容量がプッシュ対象容量、すなわちデータ1個分であった場合には ステップS106に進み、それ以外の場合にはステップS114に進んでプッシュ命令が終了する。
本実施例において、ステップS104では、たとえば図4に示すように、H/Wスタック26の領域H1、H2、H3およびH4にデータが格納され、かつ領域H5にデータが格納されていない場合、残り容量がデータ1個分であると判定してステップS106に進む。このため、H/Wスタック26の残り容量がデータ0個分まで減少することはない。また、このとき、S/Wスタック28には、データが1つも格納されていない。
次に、ステップS106において、割り込みコントローラ18では、プッシュ割り込みが発生し、かつ外部割り込みが禁止されて外部割り込み許可レジスタが0に設定される。その後、プッシュ割り込みが制御バス22を介して主制御部12に通知される。
主制御部12では、プッシュ割り込みの通知に応じて、プッシュ割り込み処理が開始される。ここで、プッシュ割り込み処理を実行する関数へのジャンプに伴い復帰先のアドレスがH/Wスタック26にプッシュされて、図5に示すように、H/Wスタック26では、領域H1、H2、H3、H4およびH5のすべてにデータが格納され、残り容量は0となる。
次に、プッシュ割り込み処理では、H/Wスタック26の底に格納されているデータをS/Wスタック28に退避させ(S108)、すなわち、図6に示すように、領域H5に格納されていたデータを取り出して、領域S1にプッシュする。これを退避数だけ繰り返し、すなわちデータ1個分の回数だけ繰り返す。これにより、H/Wスタック26の残り容量は、領域H5からなるデータ1個分となる。
また、このようにS/Wスタック28にデータをポップした場合、その後の処理によってH/Wスタック26の残り容量がポップ対象容量になるとポップ割り込みに対応する必要があるため、主制御部12が割り込みコントローラ18を制御してポップ割り込みレジスタを1に設定しておく(S110)。
このようにして、主制御部12におけるプッシュ割り込み処理は終了し、復帰先のアドレスがH/Wスタック26からポップされて、図7に示すように、H/Wスタック26の残り容量は、領域H4およびH5からなるデータ2個分となる。また、割り込みコントローラ18では、プッシュ割り込み処理からの復帰に応じて、ステップS106で禁止した外部割り込みが許可され(S112)、外部割り込み許可レジスタは1に設定される。次に、ステップS114に進んで、プッシュ命令が終了する。
他方、本実施例におけるスタック制御装置10の動作について、ポップ対象容量がデータ3個分で、退避数がデータ1個分であるときに、割り込みコントローラ18がポップ割り込みを発生する際にS/Wスタック28に退避していたデータをH/Wスタック26へ復帰させる動作を図8のフローチャートを参照しながら説明する。
ここで、図9、図10、図11および図12に示すH/Wスタック26およびS/Wスタック28も、図4に示すものと同様に構成されるものとする。
本実施例では、まず、主制御部12において、H/Wスタック26からのデータのポップ命令が開始され(S202)、H/Wスタック26からデータが1個ポップされる。
このとき、割り込みコントローラ18では、監視しているH/Wスタック26の残り容量がポップ対象容量であるか否かが判定される(S204)。この判定の結果、H/Wスタック26の残り容量がポップ対象容量、すなわちデータ3個分に回復した場合には ステップS206に進み、それ以外の場合にはステップS218に進んでポップ命令が終了する。
本実施例において、ステップS204では、たとえば図9に示すように、H/Wスタック28の領域H1およびH2にデータが格納され、かつ領域H3、H4およびH5にデータが格納されていない場合、残り容量がデータ3個分に回復したと判定してステップS206に進む。また、このとき、S/Wスタック28には、データ1個が領域S1に格納されている。
次に、ステップS206において、割り込みコントローラ18では、ポップ割り込みが許可されているか否か、すなわちポップ割り込み許可レジスタが1を示すか0を示すかが判定され、1を示す場合にはステップS208に進み、0を示す場合にはステップS218に進んでポップ命令が終了する。
ステップS208において、割り込みコントローラ18では、ポップ割り込みが発生し、かつ外部割り込みが禁止されて外部割り込み許可レジスタが0に設定される。その後、ポップ割り込みが制御バス22を介して主制御部12に通知される。
主制御部12では、ポップ割り込みの通知に応じて、ポップ割り込み処理が開始される。ここで、ポップ割り込み処理を実行する関数へのジャンプに伴い復帰先のアドレスがH/Wスタック26にプッシュされて、図10に示すように、H/Wスタック26では、3個分のデータが領域H1、H2およびH3に格納され、残り容量は、領域H4およびH5からなる2個分のデータとなる。
次に、ポップ割り込み処理では、S/Wスタック28の先頭に格納されているデータをH/Wスタック26の底に復帰させ(S210)、すなわち、図11に示すように、領域S1に格納されていたデータをポップして、領域H4に格納する。これを退避数だけ繰り返し、すなわちデータ1個分の回数だけ繰り返す。これにより、S/Wスタック28に格納されているデータ数は0となる。
さらに、ポップ割り込み処理では、S/Wスタック28における残り容量が判定され(S212)、S/Wスタック28の残り容量データ5個分である場合、すなわちデータが1個も格納されていない場合にはステップS214に進み、S/Wスタック28にまだデータが格納されている場合にはステップS216に進む。
ステップS214では、主制御部12が割り込みコントローラ18を制御してポップ割り込みを禁止し、ポップ割り込み許可レジスタが0に設定され、その後、ステップS216に進む。このように、ポップ割り込みを禁止する理由としては、S/Wスタック28にデータが格納されていないときに、H/Wスタック28の残り容量がポップ対象容量になって主制御部12がポップ割り込み処理を実行しても、S/Wスタック28からデータを取り出せずに、ポップ割り込み自体が無駄な処理となるためである。
このようにして、主制御部12におけるポップ割り込み処理は終了し、復帰先のアドレスがH/Wスタック26からポップされて、図12に示すように、H/Wスタック26の残り容量は、領域H4およびH5からなるデータ2個分となる。また、割り込みコントローラ18では、ポップ割り込み処理からの復帰に応じて、ステップS208で禁止した外部割り込みが許可され(S216)、外部割り込み許可レジスタは1に設定される。次に、ステップS218に進んで、ポップ命令が終了する。
ところで、本実施例におけるスタック制御装置10の動作について、プッシュ対象容量がデータ1個分で、退避数がデータ2個分であるときにも、割り込みコントローラ18がプッシュ割り込みを発生する際にH/Wスタック26内のデータを退避させる動作は、図3のフローチャートを参照して説明できる。しかし、この場合におけるH/Wスタック26およびS/Wスタック28内のデータの動作は、図13、図14、図15および図16に示すように表わされる。ここで、図13、図14、図15および図16に示すH/Wスタック26およびS/Wスタック28も、図4に示すものと同様に構成されるものとする。
このとき、図3のS102およびS104の段階では、図13に示すように、H/Wスタック26の領域H1、H2、H3およびH4にはデータが格納され、領域H5にはデータが格納されていない。また、このとき、S/Wスタック28には、データが1つも格納されていない。
図3のS106の段階では、主制御部12がプッシュ割り込み処理を開始するため、プッシュ割り込み処理を実行する関数へのジャンプに伴い復帰先のアドレスがH/Wスタック26にプッシュされて、図14に示すように、H/Wスタック26の領域H1、H2、H3、H4およびH5には、すべてにデータが格納され、H/Wスタック26の残り容量は0となる。ここでも、S/Wスタック28には、データが1つも格納されていない。
図3のS108の段階では、H/Wスタック26の底に格納されているデータをS/Wスタック28に退避させ、これを退避数、すなわちデータ2個分の回数だけ繰り返すため、図15に示すように、H/Wスタック26の領域H1、H2およびH3にはデータが格納され、領域H4およびH5にはデータが格納されていない。
このとき、H/Wスタック26の底から順にデータを取り出してS/Wスタック28にポップするため、プッシュ割り込み処理前のH/Wスタック26の領域H5に格納されていたインデックス番号1のデータは、S/Wスタック28の領域S2に格納され、領域H4に格納されていたインデックス番号2のデータは、領域S1に格納されることとなる。このようにして、S/Wスタック28には、2個のデータが領域S1およびS2に退避される。
また、図3のS110の段階の後で、主制御部12におけるプッシュ割り込み処理が終了し、ここでプッシュ割り込み処理からの戻りアドレスがH/Wスタック26からポップされるため、図16に示すように、H/Wスタック26では、領域H1からインデックス番号5のデータがポップされて、領域H1およびH2にはデータが格納され、領域H3、H4およびH5にはデータが格納されていない。このとき、S/Wスタック28は、図3のS110の段階における状態、すなわち図15に示す状態のままである。
図3のS112およびS114の段階では、H/Wスタック26およびS/Wスタック28内のデータは、図16に示す状態のままである。
さらに、本実施例におけるスタック制御装置10の動作について、ポップ対象容量がデータ5個分で、復帰数がデータ2個分であるときにも、割り込みコントローラ18がポップ割り込みを発生する際にS/Wスタック28に退避していたデータをH/Wスタック26ヘ復帰させる動作は、図8のフローチャートを参照して説明できる。しかし、この場合におけるH/Wスタック26およびS/Wスタック28内のデータの動作は、図17、図18、図19および図20に示すように表わされる。ここで、図17、図18、図19および図20に示すH/Wスタック26およびS/Wスタック28も、図4に示すものと同様に構成されるものとする。
このとき、図8のS202、S204およびS206の段階では、図17に示すように、H/Wスタック26には、データが1つも格納されていない。また、このとき、S/Wスタック28の領域S1およびS2にはデータが格納され、領域H3、H4およびH5にはデータが格納されていない。
図8のS208の段階では、主制御部12がポップ割り込み処理を開始するため、ポップ割り込み処理を実行する関数へのジャンプに伴い復帰先のアドレスがH/Wスタック26にプッシュされて、図18に示すように、H/Wスタック26の領域H1にはデータが格納され、領域H2、H3、H4およびH5にはデータが格納されていない。ここで、S/Wスタック28は、図8のS206の段階における状態、すなわち図17に示す状態のままである。
図8のS210の段階では、S/Wスタック28の先頭に格納されているデータをH/Wスタック26の底に復帰させ、これを復帰数すなわちデータ2個分の回数だけ繰り返すため、図19に示すように、H/Wスタック26の領域H1、H2およびH3にはデータが格納され、領域H4およびH5にはデータが格納されていない。ここで、S/Wスタック28には、データが一つも格納されていない。
このとき、S/Wスタック28から順にデータをポップしてH/Wスタック26の底に格納するため、ポップ割り込み処理前のS/Wスタック28の領域S1に格納されていたインデックス番号2のデータは、H/Wスタック26の領域H2に格納され、領域S2に格納されていたインデックス番号1のデータは、領域H3に格納されることとなる。このようにして、S/Wスタック28から2個のデータが領域H2およびH3に復帰される。
図8のS212およびS214の段階では、H/Wスタック26およびS/Wスタック28内のデータは、図19に示す状態のままであり、このS214の段階の後で、主制御部12におけるポップ割り込み処理が終了し、ここでポップ割り込み処理からの戻りアドレスがH/Wスタック26からポップされるため、図20に示すように、H/Wスタック26では、領域H1からインデックス番号3のデータがポップされて、領域H1およびH2にはデータが格納され、領域H3、H4およびH5にはデータが格納されていない。このとき、S/Wスタック28は、図19に示す状態のままである。
図8のS216およびS218の段階では、H/Wスタック26およびS/Wスタック28内のデータは、図20に示す状態のままである。
このように、本発明におけるスタック制御回路では、様々な退避数および復帰数に応じて処理をすることができる。この退避数および復帰数は、少なくともデータ1個分必要であり、また多くとも数式[(H/Wスタックの最大データ数−1)÷2](小数点以下は切り捨てる)で算出される最適値にするのが望ましい。また、退避数および復帰数は、この最適値を超えてもよいが、次のプッシュ割り込みおよびポップ割り込みまでの期間をより長くするために、この算出値以内にすることが望ましい。また、復帰数がこの最適値以上である場合、ポップ対象容量は、H/Wスタックの最大データ数にするとよく、すなわちH/Wスタックがポップされて格納されているデータ数が0にまで減少した場合に、ポップ割り込みを発生させるとよい。
ところで、スタック制御装置では、それほど頻繁にスタックの退避および復帰が行われない場合は、退避数および復帰数を少なくしてデータの移動に費やすサイクルを節約することができる。その一方で、スタック制御装置では、ネストの深部などのように、H/Wスタックがほとんど使用されてしまうとき、サブルーチンが繰り返し呼び出される場合には、退避数および復帰数を少なくすると、頻繁にプッシュ割り込みおよびポップ割り込みが発生してパフォーマンスを低下させる原因ともなるため、退避数および復帰数を多くする方がよい。
たとえば、最大データ数を5個とするH/Wスタック26において、残り容量がデータ2個分であるときに図21に示すようなプログラム40を実行する場合、退避数および復帰数が少ないと、サブルーチンが呼び出される度にスタックの退避と復帰が行われるが、退避数および復帰数が多ければ、最初にサブルーチンが呼び出され、一度だけ2個のデータを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も、図4に示すものと同様に構成されるものとする。
この動作では、初期状態としてプッシュ対象容量、ポップ対象容量、退避数および復帰数を、それぞれデータ1個分とする。
まず、図22に示すように、H/Wスタック26には、領域H1、H2、H3およびH4にデータが格納され、領域H5にデータが格納されてなく、S/Wスタック28には、データが1個も格納されていない。ここで、H/Wスタック26の残り容量は、データ1個分、すなわちプッシュ対象容量であるため、プッシュ割り込みが発生してH/Wスタック26の底のデータを1個退避し、図23に示すように、H/Wスタック26の領域H4のデータが取り出されてS/Wスタック28のS1にポップされる。
次に、図24に示すように、H/Wスタック26にデータがポップされて、領域H1、H2、H3およびH4にデータが格納され、残り容量は領域H5からなるデータ1個分となる。
このとき、H/Wスタック26の残り容量がプッシュ対象容量であるため、プッシュ割り込みが発生して、H/Wスタック26の底のデータを退避数、すなわち1個退避し、図25に示すように、H/Wスタック26の領域H4のデータが取り出されてS/Wスタック28のS1にポップされる。
ところで、退避/復帰数判定プログラムは、このようにデータ1個分のプッシュ割り込みが所定回数連続することを検出すると、退避数および復帰数を多くして、たとえばデータ2個分にし、ポップ対象容量をデータ5個分にする。
また、その後の処理において、図26に示すように、H/Wスタック26からデータがポップされた結果、H/Wスタック26の残り容量がデータ5個分、すなわちポップ対象容量となる。
このとき、H/Wスタック26の残り容量がポップ対象容量であるため、ポップ割り込みが発生して、S/Wスタック28からデータを復帰数、すなわち2個復帰し、図27に示すように、S/Wスタック28から領域S1およびS2のデータがポップされてそれぞれH/Wスタック26の領域H1およびH2に格納される。
また、その後の処理において、図28に示すように、H/Wスタック26にデータがプッシュされた結果、H/Wスタック26の残り容量がデータ1個分、すなわちプッシュ対象容量となる。
このとき、H/Wスタック26の残り容量がプッシュ対象容量であるため、プッシュ割り込みが発生して、H/Wスタック26の底のデータを退避数、すなわち2個退避し、図29に示すように、H/Wスタック26の領域H3およびH4のデータが取り出されてそれぞれS/Wスタック28のS1およびS2にポップされる。
このようにスタック制御回路では、退避/復帰数判定プログラムが退避および復帰の頻度に応じて、すなわちプッシュ割り込みおよびポップ割り込みの頻度に応じて、最適な退避数および復帰数に変更することができる。また、このとき、プッシュ対象容量およびポップ対象容量が変更されてもよい。
また、本実施例では、退避/復帰数判定プログラムは、プッシュ割り込みが、所定回数連続したことを頻度の条件としたが、次のプッシュ割り込みが発生するまでの時間、またはその間に処理したプログラムの量を頻度の条件としてもよい。また、退避/復帰数判定プログラムは、プッシュ割り込みではなく、ポップ割り込みに対して頻度の条件を設定してもよい。また、退避/復帰数判定プログラムは、プログラムの実行箇所に応じて最適な退避数および復帰数を判定してもよい。
本実施例では、主に、本発明のスタック制御回路をマイクロプロセッサに適用することを想定して説明したが、本発明のスタック制御回路およびその制御方法は、たとえばマイクロコントローラやデジタル信号プロセッサ(Digital Signal Processor:DSP)などのように、プログラムを内蔵して命令を逐次処理するデータ処理装置においても有効に使用することができる。
本発明のスタック制御装置の一実施例を示すブロック図である。 図1に示すスタック制御装置におけるスタックレジスタの一部を示すブロック図である。 図1に示すスタック制御装置のプッシュ割り込みの動作手順を説明するフローチャートである。 図3の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図3の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図3の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図3の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図1に示すスタック制御装置のポップ割り込みの動作手順を説明するフローチャートである。 図7の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図7の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図7の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図7の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図3の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図3の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図3の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図3の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図7の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図7の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図7の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図7の動作におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図1に示すスタック制御装置で実行されるプログラムの例図である。 図1に示すスタック制御装置の他の実施例におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図1に示すスタック制御装置の他の実施例におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図1に示すスタック制御装置の他の実施例におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図1に示すスタック制御装置の他の実施例におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図1に示すスタック制御装置の他の実施例におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図1に示すスタック制御装置の他の実施例におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図1に示すスタック制御装置の他の実施例におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。 図1に示すスタック制御装置の他の実施例におけるH/WスタックおよびS/Wスタックに格納されるデータを示す図である。
符号の説明
10 スタック制御装置
12 主制御部
14 ROM
16 割り込みコントローラ
18 スタックレジスタ
20 RAM
22 制御バス
24 データバス
26 H/Wスタック
28 S/Wスタック

Claims (18)

  1. 演算命令やサブルーチン呼出命令などの複数の命令からなる所定のプログラムを実行する主制御手段と、
    前記所定のプログラムにおけるプログラムカウンタ、ループカウンタおよびループエンドアドレスなどの第1のデータをLIFO形式で格納する第1のスタックを有するスタックレジスタと、
    前記演算命令で処理される途中結果などの第2のデータを一時記憶する記憶手段とを含むスタック制御装置において、
    前記記憶手段は、LIFO形式で第1のデータを格納する第2のスタックを含み、
    該装置は、第1のスタックの容量を監視して、その残り容量が所定のプッシュ対象容量になったときにプッシュ割り込みを発生して前記主制御手段に通知し、また所定のポップ対象容量になったときにポップ割り込みを発生して前記主制御手段に通知する割り込み制御手段を含み、
    前記主制御手段は、前記プッシュ割り込みに応じて、第1のスタックの底からデータを取り出して第2のスタックにプッシュし、これを所定の退避数繰り返すプッシュ割り込み処理手段と、前記ポップ割り込みに応じて、第2のスタックからデータをポップして第1のスタックの底に格納し、これを所定の復帰数繰り返すポップ割り込み処理手段とを含むことを特徴とするスタック制御装置。
  2. 請求項1に記載のスタック制御装置において、前記割り込み制御手段は、前記ポップ割り込みの許可または禁止を示し、初期状態では禁止を示す第1のフラグレジスタと、周辺機器などの外部装置からの割り込み要求に応じた外部割り込みの許可または禁止を示し、初期状態では許可を示す第2のフラグレジスタとを含み、
    前記残り容量が前記所定のプッシュ対象容量になったとき、第2のフラグレジスタを禁止に設定してからプッシュ割り込みを発生して、その後、プッシュ割り込みから復帰したときに第2のフラグレジスタを許可に設定し、
    また、前記残り容量が前記所定のポップ対象容量になったとき、第1のフラグレジスタが許可を示す場合に限り、第2のフラグレジスタを禁止に設定してからポップ割り込みを発生して、その後、ポップ割り込みから復帰したときに第2のフラグレジスタを許可に設定し、
    前記プッシュ割り込み処理手段は、第2のスタックにデータをプッシュしたときに第1のフラグレジスタを許可に設定し、
    前記ポップ割り込み処理手段は、第2のスタックからデータをポップしたときで、かつ第2のスタックに格納されているデータ数が0である場合に限り第1のフラグレジスタを禁止に設定することを特徴とするスタック制御装置。
  3. 請求項1または2に記載のスタック制御装置において、前記スタックレジスタは、第1のスタックの底のデータのアドレスである読み出し内部アドレスと、該アドレスよりデータ1個分だけ底方向にシフトした書き込み内部アドレスとを有する内部アドレス・アクセスレジスタを含み、
    前記プッシュ割り込み処理手段は、前記内部アドレス・アクセスレジスタにおける読み出し内部アドレスにアクセスして第1のスタックの底からデータを取り出し、
    ポップ割り込み処理手段は、前記内部アドレス・アクセスレジスタにおける書き込み内部アドレスにアクセスして第1のスタックの底にデータを格納することを特徴とするスタック制御装置。
  4. 請求項1ないし3のいずれかに記載のスタック制御装置において、前記所定のプッシュ対象容量は、第1のデータ1個分であり、
    前記プッシュ割り込み処理手段は、前記主制御手段で実行可能な第1のプログラムであり、
    前記ポップ割り込み処理手段は、前記主制御手段で実行可能な第2のプログラムであり、
    前記主制御手段は、前記プッシュ割り込みに応じて、第1のプログラムからの第1の戻りアドレスを第1のスタックにプッシュしてから第1のプログラムを実行し、その後、第1のプログラムを終了するときに第1の戻りアドレスを第1のスタックからポップして第1の戻りアドレスが示す命令に戻り、
    また、前記ポップ割り込みに応じて、第2のプログラムからの第2の戻りアドレスを第1のスタックにプッシュしてから第2のプログラムを実行し、その後、第2のプログラムを終了するときに第2の戻りアドレスを第1のスタックからポップして第1の戻りアドレスが示す命令に戻ることを特徴とするスタック制御装置。
  5. 請求項1ないし4のいずれかに記載のスタック制御装置において、前記所定のポップ対象容量は、第1のデータ1個分以上で、第1のスタックが第1のデータを記憶可能な最大データ数以下であり、
    前記所定の退避数および前記所定の復帰数は、第1のデータ1個分以上で、数式[(前記最大データ数−1)÷2](少数点以下は切り捨てる)で算出される値以下であることを特徴とするスタック制御装置。
  6. 請求項5に記載のスタック制御装置において、前記所定のポップ対象容量、前記所定の退避数および前記所定の復帰数は、第1のデータ1個分であることを特徴とするスタック制御装置。
  7. 請求項5に記載のスタック制御装置において、前記所定のポップ対象容量は、第1のスタックの全容量であり、
    前記所定の退避数および前記所定の復帰数は、数式[(第1のスタックが第1のデータを記憶可能な最大データ数−1)÷2](少数点以下は切り捨てる)で算出される値であることを特徴とするスタック制御装置。
  8. 請求項5に記載のスタック制御装置において、前記割り込み制御手段は、前記プッシュ割り込みまたは前記ポップ割り込みが発生する頻度を監視して、該頻度に応じて最適な前記ポップ対象容量、前記所定の退避数および前記所定の復帰数を判定して設定する頻度監視手段を含むことを特徴とするスタック制御装置。
  9. 請求項8に記載のスタック制御装置において、前記頻度監視手段は、通常、前記ポップ対象容量、前記所定の退避数および前記所定の復帰数を第1のデータ1個分に設定し、前記プッシュ割り込みまたは前記ポップ割り込みが所定回数連続して発生した場合に、前記ポップ対象容量、前記所定の退避数および前記所定の復帰数を増加して設定し、さらに、第1のスタックに格納されているデータ数が0になったときに、再度前記ポップ対象容量、前記所定の退避数および前記所定の復帰数を第1のデータ1個分に設定することを特徴とするスタック制御装置。
  10. 主制御部において演算命令やサブルーチン呼出命令などの複数の命令からなる所定のプログラムを実行する第1の工程と、
    前記所定のプログラムにおけるプログラムカウンタ、ループカウンタおよびループエンドアドレスなどの第1のデータを、スタックレジスタにおいて第1のスタックにLIFO形式で格納する第2の工程と、
    前記演算命令で処理される途中結果などの第2のデータをメモリに一時記憶する第3の工程とを含むスタック制御方法において、該方法は、
    前記メモリにおいて第2のスタックにLIFO形式で第1のデータを格納する第4の工程と、
    第1のスタックの容量を監視して、その残り容量が所定のプッシュ対象容量になったときにプッシュ割り込みを発生して前記主制御部に通知し、また所定のポップ対象容量になったときにポップ割り込みを発生して前記主制御部に通知する割り込み制御工程と、
    前記プッシュ割り込みに応じた前記主制御部により、第1のスタックの底からデータを取り出して第2のスタックにプッシュし、これを所定の退避数繰り返すプッシュ割り込み処理工程と、
    前記ポップ割り込みに応じた前記主制御部により、第2のスタックからデータをポップして第1のスタックの底に格納し、これを所定の復帰数繰り返すポップ割り込み処理工程とを含むことを特徴とするスタック制御方法。
  11. 請求項10に記載のスタック制御方法において、前記割り込み制御工程は、初期状態では禁止を示す第1のフラグレジスタで、前記ポップ割り込みの許可または禁止を示し、初期状態では許可を示す第2のフラグレジスタで、周辺機器などの外部装置からの割り込み要求に応じた外部割り込みの許可または禁止を示し、
    前記残り容量が前記所定のプッシュ対象容量になったとき、第2のフラグレジスタを禁止に設定してからプッシュ割り込みを発生して、その後、プッシュ割り込みから復帰したときに第2のフラグレジスタを許可に設定し、
    また、前記残り容量が前記所定のポップ対象容量になったとき、第1のフラグレジスタが許可を示す場合に限り、第2のフラグレジスタを禁止に設定してからポップ割り込みを発生して、その後、ポップ割り込みから復帰したときに第2のフラグレジスタを許可に設定し、
    前記プッシュ割り込み処理工程は、第2のスタックにデータをプッシュしたときに第1のフラグレジスタを許可に設定し、
    前記ポップ割り込み処理工程は、第2のスタックからデータをポップしたときで、かつ第2のスタックに格納されているデータ数が0である場合に限り第1のフラグレジスタを禁止に設定することを特徴とするスタック制御方法。
  12. 請求項10または11に記載のスタック制御方法において、前記スタックレジスタは、第1のスタックの底のデータのアドレスである読み出し内部アドレスと、該アドレスよりデータ1個分だけ底方向にシフトした書き込み内部アドレスとを有する内部アドレス・アクセスレジスタを含み、
    前記プッシュ割り込み処理手段は、前記スタックレジスタにおける内部アドレス・アクセスレジスタに格納されている、第1のスタックの底のデータのアドレスである読み出し内部アドレスにアクセスして第1のスタックの底からデータを取り出し、
    ポップ割り込み処理手段は、前記内部アドレス・アクセスレジスタに格納されている、前記読み出し内部アドレスよりデータ1個分だけ底方向にシフトした書き込み内部アドレスにアクセスして第1のスタックの底にデータを格納することを特徴とするスタック制御方法。
  13. 請求項10ないし12のいずれかに記載のスタック制御方法において、前記所定のプッシュ対象容量は、第1のデータ1個分であり、
    前記プッシュ割り込み処理工程は、第1のプログラムとして前記主制御部で実行されて、前記プッシュ割り込みに応じて、第1のプログラムからの第1の戻りアドレスを第1のスタックにプッシュしてから第1のプログラムを実行し、その後、第1のプログラムを終了するときに第1の戻りアドレスを第1のスタックからポップして第1の戻りアドレスが示す命令に戻り、
    前記ポップ割り込み処理手段は、第2のプログラムとして前記主制御部で実行されて、前記ポップ割り込みに応じて、第2のプログラムからの第2の戻りアドレスを第1のスタックにプッシュしてから第2のプログラムを実行し、その後、第2のプログラムを終了するときに第2の戻りアドレスを第1のスタックからポップして第1の戻りアドレスが示す命令に戻ることを特徴とするスタック制御方法。
  14. 請求項10ないし13のいずれかに記載のスタック制御方法において、前記所定のポップ対象容量は、第1のデータ1個分以上で、第1のスタックが第1のデータを記憶可能な最大データ数以下であり、
    前記所定の退避数および前記所定の復帰数は、第1のデータ1個分以上で、数式[(前記最大データ数−1)÷2](少数点以下は切り捨てる)で算出される値以下であることを特徴とするスタック制御方法。
  15. 請求項14に記載のスタック制御方法において、前記所定のポップ対象容量、前記所定の退避数および前記所定の復帰数は、第1のデータ1個分であることを特徴とするスタック制御方法。
  16. 請求項14に記載のスタック制御方法において、前記所定のポップ対象容量は、第1のスタックの全容量であり、
    前記所定の退避数および前記所定の復帰数は、数式[(第1のスタックが第1のデータを記憶可能な最大データ数−1)÷2](少数点以下は切り捨てる)で算出される値であることを特徴とするスタック制御方法。
  17. 請求項14に記載のスタック制御方法において、前記割り込み制御工程は、前記プッシュ割り込みまたは前記ポップ割り込みが発生する頻度を監視して、該頻度に応じて最適な前記ポップ対象容量、前記所定の退避数および前記所定の復帰数を判定して設定する頻度監視工程を含むことを特徴とするスタック制御方法。
  18. 請求項17に記載のスタック制御方法において、前記頻度監視工程は、通常、前記ポップ対象容量、前記所定の退避数および前記所定の復帰数を第1のデータ1個分に設定し、前記プッシュ割り込みまたは前記ポップ割り込みが所定回数連続して発生した場合に、前記ポップ対象容量、前記所定の退避数および前記所定の復帰数を増加して設定し、さらに、第1のスタックに格納されているデータ数が0になったときに、再度前記ポップ対象容量、前記所定の退避数および前記所定の復帰数を第1のデータ1個分に設定することを特徴とするスタック制御方法。
JP2005131343A 2005-04-28 2005-04-28 スタック制御装置およびその方法 Withdrawn JP2006309508A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2005131343A JP2006309508A (ja) 2005-04-28 2005-04-28 スタック制御装置およびその方法
CN200510118895XA CN1855030B (zh) 2005-04-28 2005-10-31 栈控制装置及其方法
US11/369,822 US20060248315A1 (en) 2005-04-28 2006-03-08 Stack controller efficiently using the storage capacity of a hardware stack and a method therefor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005131343A JP2006309508A (ja) 2005-04-28 2005-04-28 スタック制御装置およびその方法

Publications (1)

Publication Number Publication Date
JP2006309508A true JP2006309508A (ja) 2006-11-09

Family

ID=37195227

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005131343A Withdrawn JP2006309508A (ja) 2005-04-28 2005-04-28 スタック制御装置およびその方法

Country Status (3)

Country Link
US (1) US20060248315A1 (ja)
JP (1) JP2006309508A (ja)
CN (1) CN1855030B (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102193868A (zh) * 2010-03-10 2011-09-21 上海海尔集成电路有限公司 数据堆栈存储电路及微控制器
WO2015067993A1 (en) * 2013-11-08 2015-05-14 Freescale Semiconductor, Inc. Processing system with stack management and method for stack management

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2896601B1 (fr) * 2006-01-24 2008-08-15 Atmel Nantes Sa Dispositif de traitement en notation polonaise inversee, et circuit integre electronique comprenant un tel dispositif de traitement.
US20070282928A1 (en) * 2006-06-06 2007-12-06 Guofang Jiao Processor core stack extension
US20080229074A1 (en) * 2006-06-19 2008-09-18 International Business Machines Corporation Design Structure for Localized Control Caching Resulting in Power Efficient Control Logic
US20070294519A1 (en) * 2006-06-19 2007-12-20 Miller Laura F Localized Control Caching Resulting In Power Efficient Control Logic
US8055886B2 (en) * 2007-07-12 2011-11-08 Texas Instruments Incorporated Processor micro-architecture for compute, save or restore multiple registers and responsive to first instruction for repeated issue of second instruction
EP3286640A4 (en) 2015-04-24 2019-07-10 Optimum Semiconductor Technologies, Inc. COMPUTER PROCESSOR HAVING SEPARATE RECORDS FOR ADDRESSING A MEMORY
US20190163492A1 (en) * 2017-11-28 2019-05-30 International Business Machines Corporation Employing a stack accelerator for stack-type accesses
CN112925457A (zh) * 2021-02-19 2021-06-08 深圳市云基航空科技有限责任公司 应用程序的控制方法、装置、存储介质及终端
CN113743582B (zh) * 2021-08-06 2023-11-17 北京邮电大学 基于栈混洗的新型通道混洗方法和装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3810117A (en) * 1972-10-20 1974-05-07 Ibm Stack mechanism for a data processor
JPH02187825A (ja) * 1989-01-13 1990-07-24 Mitsubishi Electric Corp コンピュータ
US5473557A (en) * 1994-06-09 1995-12-05 Motorola, Inc. Complex arithmetic processor and method
US6167504A (en) * 1998-07-24 2000-12-26 Sun Microsystems, Inc. Method, apparatus and computer program product for processing stack related exception traps
US6493781B1 (en) * 1999-08-19 2002-12-10 Koninklijke Philips Electronics N.V. Servicing of interrupts with stored and restored flags
US6654871B1 (en) * 1999-11-09 2003-11-25 Motorola, Inc. Device and a method for performing stack operations in a processing system
US20060095675A1 (en) * 2004-08-23 2006-05-04 Rongzhen Yang Three stage hybrid stack model

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102193868A (zh) * 2010-03-10 2011-09-21 上海海尔集成电路有限公司 数据堆栈存储电路及微控制器
WO2015067993A1 (en) * 2013-11-08 2015-05-14 Freescale Semiconductor, Inc. Processing system with stack management and method for stack management

Also Published As

Publication number Publication date
CN1855030B (zh) 2011-09-07
US20060248315A1 (en) 2006-11-02
CN1855030A (zh) 2006-11-01

Similar Documents

Publication Publication Date Title
JP2006309508A (ja) スタック制御装置およびその方法
KR100766732B1 (ko) 고속의 낮은 오버헤드의 콘텍스트 전환을 실행하는 디바이스 및 방법
CN101529383A (zh) 任务处理装置
WO2007028807A1 (en) Managing a resource lock
US20050028159A1 (en) Memory managing system and task controller in multitask system
JP2008234320A (ja) キャッシュ制御回路
JP4381951B2 (ja) ネスト状割込みシステムの割込み優先順位制御
JP2007122527A (ja) 流量制御方法
JP2009258984A (ja) 情報処理装置およびロード制御方法
JP2007310735A (ja) ダイレクトメモリアクセスコントローラ
JPH09198257A (ja) プログラム実行方法およびこの方法を用いたプログラム実行装置
EP3428799B1 (en) Data access device and access error notification method
JP2003256277A (ja) マイクロコンピュータ、キャッシュメモリ制御方法及びクロック制御方法
JP2007299126A (ja) 制御装置及び制御装置用プログラム
JP2007172519A (ja) 情報処理装置、ソフトウェアモジュールのリンク管理方法及びプログラム
JP3056175B2 (ja) 消費電力低減装置
JP5577518B2 (ja) メモリ管理方法、計算機及びメモリ管理プログラム
JP2876791B2 (ja) 例外処理装置および例外処理方法
JP2007102399A (ja) データ処理装置
JP3664079B2 (ja) システムフリーズにおけるジョブ停止方法及び装置
JP4148854B2 (ja) リアルタイム制御システム
JPH02244345A (ja) 情報処理装置
JPS62151936A (ja) マイクロプロセツサに内蔵されるキヤツシユ回路
JP2005216015A (ja) マイクロプロセッサの暴走監視装置
JP2010205046A (ja) 情報処理装置

Legal Events

Date Code Title Description
A300 Application deemed to be withdrawn because no request for examination was validly filed

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20080701