JP4813882B2 - Cpu - Google Patents

Cpu Download PDF

Info

Publication number
JP4813882B2
JP4813882B2 JP2005351013A JP2005351013A JP4813882B2 JP 4813882 B2 JP4813882 B2 JP 4813882B2 JP 2005351013 A JP2005351013 A JP 2005351013A JP 2005351013 A JP2005351013 A JP 2005351013A JP 4813882 B2 JP4813882 B2 JP 4813882B2
Authority
JP
Japan
Prior art keywords
stack
address
stack area
register
area
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.)
Expired - Fee Related
Application number
JP2005351013A
Other languages
English (en)
Other versions
JP2006202268A (ja
Inventor
裕 藤巻
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.)
Kawasaki Microelectronics Inc
Original Assignee
Kawasaki Microelectronics Inc
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 Kawasaki Microelectronics Inc filed Critical Kawasaki Microelectronics Inc
Priority to JP2005351013A priority Critical patent/JP4813882B2/ja
Publication of JP2006202268A publication Critical patent/JP2006202268A/ja
Application granted granted Critical
Publication of JP4813882B2 publication Critical patent/JP4813882B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Executing Machine-Instructions (AREA)

Description

本発明は、スタックポインタ制御回路を備えたCPU、およびCPUにおけるスタック領域制御方法に関する。特に、スタックポインタレジスタを有するCPUにおいて、プログラムの実行時にスタック領域が当初想定したメモリ領域を越えてデータやプログラムコードを破壊し、プログラムが予期せぬ動作をしてしまうという不具合を防止する技術に関する。
CPU(Central Processing Unit)には、外部からの割込要求信号の入力や内部での例外事象等の割込要因の発生に応じて、現在実行中の処理を中断して割込処理に移行し、割込処理の終了後に再び元の処理に復帰する割込機能が備えられている。
一般的に割込みは、その機能を実現するための処理である割込ルーチン処理と、その割込ルーチン処理に先だって元の処理の実行時の各種レジスタの値をスタック領域(後入れ先出し方式のメモリ領域)に退避する処理を行う割込入力処理と、割込ルーチン処理の終了後に割込入力処理で退避した各種レジスタの値をスタック領域から元のレジスタに復元して前の処理に復帰する割込終了処理から構成される。このように割込入力処理で各種レジスタの値をスタック領域に退避し,割込終了処理でスタック領域に退避されている値を元のレジスタに復元することで,割込ルーチンでレジスタの値を書き換えたとしても、割込前の処理に復帰する時点で、レジスタの値は割込前のレジスタの値に復元される。すなわち、割込の前後でレジスタの値が変わらないようにすることができ、元の処理を正常に継続することができる。ここで、スタック領域にデータを格納することをプッシュ動作といい、データを取り出すことをポップ動作という。
一般的にCPUには、現在のスタック領域の先頭アドレスを格納するスタックポインタレジスタ(以下、スタックポインタと記す)が備えられており、CPUの起動後にソフトウエアによりスタックポインタに初期値となるメモリアドレスを設定してスタック領域を使用する。
CPUの一例として、現在でも組込み用途に用いられることの多いZ80CPUのレジスタ構造を図8に示す(例えば、非特許文献1参照)。Z80CPUにはレジスタ群として、アキュムレータとして用いられるA,A’ やフラグレジスタF,F’ 、汎用レジスタとして用いられるBからLと、補助レジスタとして用いられるB’からL’と、専用レジスタとして用いられるスタックポインタ(SP)やプログラムカウンタ(PC)等が備わっている。
通常、スタック領域を実現するためのメモリ領域は1つであり、物理的に複数には分離されない。そのため、時として、図9に示すように、実際のプログラム実行時に、割込みやサブルーチンが重なること等によって当初想定したメモリ領域を越えてスタック領域がメモリを消費してしまうことがある。このような場合、もともと所定のメモリ領域に保持されているプログラムコード、変数などのデータが書き換わってしまうこととなり、プログラムが予期せぬ動作をしてしまうという不具合が発生することがあった。
このような不具合に対処するために、例えば、特許文献1には、スタックエリアの上限アドレスを格納するレジスタと、該レジスタに格納されたアドレスと記憶回路をアクセスするときのアドレスとを比較し、記憶回路をアクセスするアドレスの値が該レジスタの値より小さいときにCPUに割込信号を出力するコンパレータとを備え、当該割込みによって実行されるサブルーチンによって実行中のプログラムにスタックの異常使用を認識させて、プログラムの実行を停止してプログラムの破壊を未然に防ぐという技術が開示されている。
また、特許文献2には、CPUにより、割込処理を起動し、スタックポインタの値を汎用レジスタに設定する処理を実行し、主メモリ上の空きエリアのアドレスをスタックポインタに設定する処理を実行するという技術が開示されている。
「トランジスタ技術 SPECIAL No.6 特集Z80ソフト&ハードのすべて」、CQ出版社、1987年11月1日(初版)、p.18、図2−1 特開平7‐219813号公報 特開平8−77004号公報
しかしながら、上記特許文献1に記載の技術では、プログラムの実行を停止することによりプログラムの破壊を防止するだけであって、スタック領域が当初想定した領域を越えても正常に動作させるという技術内容ではない。
一方、特許文献2に記載の技術では、プロセス空間の破壊を防ぎ、システムを継続して実行することを可能としている。しかし、これを実現するためにCPUによるソフトウエア処理が必要であり、処理速度が低下するという問題があった。
本発明は,上記事情に鑑み、スタック領域が当初想定したメモリ領域を越えてメモリ領域を消費してしまう恐れのある場合であってもプログラムの実行を停止することなく、正常な動作を継続することのできるCPUおよび当該CPUを用いたスタック領域制御方法を提供することを目的とする。特に、ソフトウエアの負担増大による処理速度低下を抑制しながら、正常な動作を継続することのできるCPUおよびスタック領域制御方法を提供することを目的とする
上記目的を達成する本発明のCPUは、現在のスタック領域の先頭アドレスを格納するスタックポインタレジスタと、第1スタック領域の終端アドレスを設定するスタック終端レジスタと、第2スタック領域の開始アドレスを設定する第2スタック領域開始レジスタと、前記先頭アドレスが1つのスタック領域内で変わる場合には前記スタックポインタレジスタに格納されたアドレスに所定の値を加減算したアドレスを前記スタックポインタレジスタに出力し、前記スタックポインタレジスタのアドレスが前記スタック終端レジスタに設定されているアドレスに到達した次のプッシュ動作において、前記所定の値を加減算したアドレスに替えて前記第2スタック領域開始レジスタに設定されているアドレス、また前記スタックポインタレジスタのアドレスが前記第2スタック領域開始レジスタに設定されているアドレスに到達した次のポップ動作において、前記所定の値を加減算したアドレスに替えて前記スタック終端レジスタに設定されているアドレスを前記スタックポインタレジスタに出力する切替器を有するスタックポインタ制御回路とを備えたことを特徴とする。
スタックポインタ制御回路を備えることにより、スタック領域が当初想定した領域を越えてメモリ領域を消費し、データを破壊する恐れのある場合にも、ソフトウエアの負担増大を抑えながら、正常な動作を継続することができる。
ここで、前記スタックポインタレジスタのアドレスが、前記第1スタック領域内の、前記終端アドレスよりも所定値だけ手前のアドレスに到達した時に、内部割込要求信号を発生するスタック終端判定回路をさらに備え、前記内部割込要求信号により移行する割込ルーチンにおいて、前記第2スタック領域を動的に確保し、該確保された第2スタック領域の開始アドレスを前記第2スタック領域開始レジスタに設定することが好ましい。スタック終端判定回路を備え、第2スタック領域を動的に確保するため、メモリ領域の有効活用が可能である。
ここで、前記スタック終端判定回路は、プッシュ動作時とポップ動作時では、異なる内部割込要求信号を発生するものであることが好ましい。
また、前記スタック終端判定回路が、前記第2スタック領域が確保されているか否かを示す値を記憶する第2スタック領域イネーブルフラグを備え、該イネーブルフラグの値を参照して前記内部割込要求信号を発生することが好ましい。これにより、第2スタック領域が確保されているか否かに応じた処理を行うことが可能になる。
もしくは、該イネーブルフラグは、前記内部割込要求信号により移行した割込ルーチンから読み出し可能であることが好ましい。これにより、割込ルーチン移行後に、第2スタック領域が確保されているか否かによって異なる処理を行うことが可能になる。
さらに、前記第2スタック領域開始レジスタが、前記内部割込信号により移行した割込ルーチンにおいて書き込み可能であって、該割込ルーチンが前記第2スタック領域を動的に確保した時には該確保した第2スタック領域の開始アドレスが書き込まれ、割込ルーチンが前記第2スタック領域を解放したときには無効な値が書き込まれ、かつ、前記スタック終端判定回路が、前記第2スタック領域への書き込みを検知して前記第2スタック領域イネーブルフラグの設定を行う、イネーブルフラグ制御回路をさらに含むことが好ましい。イネーブルフラグ制御回路を備えることにより、ソフトウエアの負担を増大させることなく、第2スタック領域イネーブルフラグ値の適切な設定が可能となる。
上記目的を達成する本発明のスタック領域制御方法は、現在のスタック領域の先頭アドレスを格納するスタックポインタレジスタと、第1スタック領域の終端アドレスを設定するスタック終端レジスタと、第2スタック領域の開始アドレスを設定する第2スタック領域開始レジスタと、前記先頭アドレスが1つのスタック領域内で変わる場合には前記スタックポインタレジスタに格納されたアドレスに所定の値を加減算したアドレスを前記スタックポインタレジスタに出力し、前記スタックポインタレジスタのアドレスが前記スタック終端レジスタに設定されているアドレスに到達した次のプッシュ動作において、前記所定の値を加減算したアドレスに替えて前記第2スタック領域開始レジスタに設定されているアドレスを、また前記スタックポインタレジスタのアドレスが前記第2スタック領域開始レジスタに設定されているアドレスに到達した次のポップ動作において、前記所定の値を加減算したアドレスに替えて前記スタック終端レジスタに設定されているアドレスを前記スタックポインタレジスタに出力する切替器を有するスタックポインタ制御回路と、前記スタックポインタレジスタのアドレスが、前記第1スタック領域内の、前記終端アドレスよりも所定値だけ手前のアドレスに到達した時に、内部割込要求信号を発生するスタック終端判定回路とを備えたCPUにおけるスタック領域制御方法であって、前記内部割込要求信号により割込ルーチンに移行し、該割込ルーチンにおいて、前記第2スタック領域を動的に確保し、該確保された第2スタック領域の開始アドレスを前記第2スタック領域開始レジスタに設定することを特徴とする。
確保された第2スタック領域の開始アドレスが第2スタック領域開始レジスタに設定されることにより、CPUは、ソフトウエアの負担増大を抑えながら、第2スタック領域を利用することができる。
ここで、前記CPUのプッシュ動作時には、前記割込ルーチンにおいて、前記第2スタック領域の動的確保および前記第2スタック領域開始レジスタへの第2スタック領域開始アドレスの設定を行い、前記CPUのポップ動作時には、前記割込ルーチンにおいて、前記プッシュ時割込ルーチンで確保された第2スタック領域を解放することが好ましい。ポップ時割込ルーチンにて第2スタック領域を解放することにより、メモリ領域のさらに有効な活用が可能である。
また、前記スタック終端判定回路が、前記第2スタック領域が確保されているか否かを示す値を記憶する第2スタック領域イネーブルフラグを備え、前記割込ルーチンにおいて、前記イネーブルフラグの値を読み出し、該イネーブルフラグの値に応じて異なる処理を行うことが好ましい。
さらに、前記スタック終端判定回路が、前記第2スタック領域が確保されているか否かを示す値を記憶する第2スタック領域イネーブルフラグを備えるとともに、前記第2スタック領域開始レジスタへの書き込みを検知して該イネーブルフラグの設定を行う、イネーブルフラグ制御回路を含み、前記割込ルーチンにおいて、前記第2スタック領域を動的に確保した時には該確保した第2スタック領域の開始アドレスを前記第2スタック領域開始レジスタに書き込み、前記第2スタック領域を解放したときには前記第2スタック領域開始レジスタに無効な値を書き込むことが好ましい。これにより、スタック終端判定回路が、ソフトウエアの負担増大を抑えながら、第2スタック領域イネーブルフラグの値の管理を行うことが可能になる。
本発明によるCPUは、スタックポインタ制御回路を備えるので、スタック領域が当初想定した領域を越えてメモリ領域を消費し、データを破壊する恐れのある場合にも、ソフトウエアの負担増大を抑えながら、正常な動作を継続することができる。
以下に添付の図面に示す好適実施形態に基づいて本発明のCPUおよび当該CPUを用いたスタック領域制御方法を詳細に説明する。
図1は、本発明の一実施形態のCPUの構成を示すブロック図である。図1に示すCPU1には、割込コントロール部10、制御部20、ALU(算術論理ユニット)30、レジスタ群40、スタック終端判定回路50が備えられている。レジスタ群40は、本発明に直接には関係しない複数のレジスタを表すレジスタ群400と、スタックポインタ(以下、SPとも記す)401と、第1スタック領域(以下、当初のスタック領域を第1スタック領域という)の終端アドレスを保持するためのスタック終端レジスタ(以下、SPE1レジスタと記す)402と、第2スタック領域の開始アドレスを保持するための第2スタック領域開始レジスタ(以下、SPS2レジスタと記す)403とを備えている。
また、制御部20は、本発明のスタックポインタ制御回路22を備えている。スタックポインタ制御回路22は、スタックポインタのアドレスがSPE1レジスタに設定されているアドレスに到達したときにスタックポインタのアドレスをSPS2レジスタに設定されているアドレスに置換え、スタックポインタのアドレスがSPS2レジスタに設定されているアドレスに到達したときにスタックポインタのアドレスをSPE1レジスタに設定されているアドレスに置換えるようにスタックポインタを制御する。
さらに、スタック終端判定回路50は、第2スタック領域イネーブルフラグ52を備えている。第2スタック領域イネーブルフラグ(以下、SP2ENBフラグと記す)には、第2スタック領域が確保されているか否かを示す値が記憶される。例えば、SP2ENB=Hは第2スタック領域が確保されていることを、SP2ENB=Lは第2スタック領域が確保されていない(もしくは、いったん確保された後に解放された)ことを示す。
なお、図1に示すブロック図には本発明に直接には関係しない回路ブロックの記載は省略している。
(実施例1)
図1に示したCPUの動作の第1の例を説明する。
CPU1の起動後にソフトウエアにより、スタックポインタに第1スタック領域の開始アドレスとなる初期値が設定されて、スタック領域の使用を開始する。一例として、図3に示されるように、アドレスFFFFh(16進表示、以下同様)〜FF00hの範囲を第1スタック領域に設定し、FFFFhに近い(アドレス値の大きい)側を開始側とし、FF00hに近い(アドレス値の小さい)側を終端側とした場合を考える。すると、SP401の初期値としてはFFFEhが設定される。そして、スタック領域が成長するに従い、スタックポインタ制御回路22の制御により、SP401はFFFCh、FFFAh、…の順に値が変化する。
すなわち、ここでは、一度に2アドレス分のスタック領域を使用し、SP401の値が2つずつ変化する場合を想定する。そして、2つのアドレスの内の終端に近い(値が小さい)方をSP401の値とした。例えば、第1スタック領域の最初のFFFFh、FFFEhの2つのアドレスを使用する際には、SP401の値をFFFEhとした。
本発明のCPU1では、第1スタック領域の終端アドレスを保持するためのSPE1レジスタ402を備えている。これを利用して、スタックポインタ制御回路22は、第1スタック領域がどこで終了するのかを知り、スタック領域の利用を適切に制御することができる。
スタックポインタ制御回路22の動作機構を図2を用いて説明する。図2はスタックポインタ(SP)制御回路22の1例の回路ブロック図である。SP制御回路22は、−2/+2加減算器221と、切替器222と、比較器223とを備えている。また、プッシュ動作であるかポップ動作であるかを指示する制御信号が、制御部20により比較器223に供給される。ここで例えば、SPE1レジスタ402にはFF00hが、SPS2レジスタ403にはF0FEhが設定されているとする。
−2/+2加減算器221は、プッシュ動作時にはSPの値を2だけ減算し、ポップ動作時にはSPの値を2だけ加算するものである。比較器223は、SPの値が1つのスタック領域内で変わる場合には、−2/+2加算器221の出力が切替器222から出力されるように切替器222を選択する。
比較器223は、プッシュ動作時にはSPE1レジスタ402に設定されたアドレスとSP401のアドレスとを比較する。そして、SP401のアドレスがSPE1レジスタ402に設定された終端アドレス(即ち、FF00h)と等しい比較結果が得られたときに、切替器222へ、SPS2レジスタに設定されたアドレスを出力するように選択信号を出力する。すなわち、それ以前の動作によって第1スタック領域の終端アドレスまで利用された次のプッシュ動作においては、切替器222から第2スタック領域の開始アドレスがSP401に供給され、クロックに同期して取り込まれる。これにより、SP401のアドレスが第2スタック領域に移り、第2スタック領域が利用される。
反対に、スタックがポップされる方向では、SP401の値がF0FEhとなった後、次の値はF100hではなくFF00hとなり、第1スタック領域にSP401のアドレスが移ることになる。このために、比較器223は、SPS2レジスタ403に設定されたアドレスとSP401のアドレスを比較する。そして、両者が等しい比較結果が得られたときに、切替器222へ、SPE1レジスタのアドレスを出力するように選択信号を出力する。すなわち、それ以前の動作によって第2スタック領域の開始アドレスまで利用された次のポップ動作においては、切替器222から第1スタック領域の終端アドレスがSP401に供給され、クロックに同期して取り込まれる。
図2に示したスタックポインタ制御回路22は、CPU1内のハードウエアとして構成されるものである。そして、このスタックポインタ制御回路22が、やはりハードウエアとして構成されるSPE1レジスタ402およびSPS2レジスタ403を利用して、スタックポインタの制御を行う。従って、特許文献2の場合とは異なり、ソフトウエアによる処理を必要とせず、第1および第2スタック領域の利用を実現しながら高速処理を可能とすることができる。
次に、スタック終端判定回路50の動作について説明する。スタック終端判定回路は、SP401の値が第1スタック領域の終端に達したときに、第2スタック領域を確保し、もしくは解放するための、内部割込信号を発生する。
最も単純には、SP401の値がSPE1レジスタ402に設定された終端アドレスに到達した時に、第1スタック領域の終端に達したと判断をする。しかし現実には、終端アドレスよりも所定値だけ第1スタック領域内のアドレスに到達した時に、第1スタック領域の終端に達したと判断し、第2スタック領域の確保を行うための内部割込信号を発生することが好ましい。例えば、SP=FF04hからSP=FF02hになった時に、スタック終端判定回路50は第1スタック領域の終端に達したと判定する。そして、スタック終端判定回路50は、内部割込要求信号を発生し、割込コントロール部10に出力する。割込コントロール部10は当該内部割込要求信号に応答して、割込信号を制御部20に出力する。その結果、CPU1は割込動作を行い、現在のプログラムカウンタ(PC)の値を第1スタック領域のアドレスFF01h、FF00hに保存し、特定アドレスへジャンプする。
特定アドレスには、動的にメモリ領域を確保する命令又は関数、例えばC言語のmalloc( )に準じた命令が配置される。この命令の実行により、第2スタック領域の開始アドレスが得られる。この値をSPS2レジスタ403に設定する。
1例として、図3に示すように、メモリアドレスF0FFh〜F000hの範囲が第2スタック領域として確保できたとする。そして、前述のように、一度に使用する2つのアドレスの終端に近い(値が小さい)方のアドレスをSP401の値にすることを想定して、SPS2に設定する終端アドレスはF0FEhとする。
その後、アドレスFF01h、FF00hに保存しておいたPCの値を取り出し、実行中であった元のプログラムに戻る。戻った後、スタックがF002hからさらに成長し、FF00hとなった後のプッシュ動作では、スタックポインタ制御回路22の制御により、SP401の値はFEFEhではなく、SPS2レジスタに保存しておいたF0FEhがロードされる。その後、メモリアドレスF0FFhからF000hの第2スタック領域が使用される。
さらに、ポップ動作によって第2スタック領域から第1スタック領域に戻り、SP=FF02hからSP=FF04hになるところで、スタック終端判定回路50は第1スタック領域の終端に達したと判断する。この時、スタック終端判定回路50は、プッシュ時とは異なる内部割込要求信号を発生し、割込コントロール部10に伝達する。
今回はメモリアドレスがFF02h→FF04hのポップ動作の場合なので、先の特定アドレスとは別の特定アドレスにジャンプする。当該特定アドレスから始まる割込みルーチンには、先に動的に確保したメモリ領域を解放する命令を配置する。そうすることによって第2スタック領域として確保していたメモリ領域を、ユーザが再びスタック領域以外の目的で使用することが可能となる。その後、スタックは再び第1スタック領域においてデータの受け渡しを行うこととなる。
このように、第2スタック領域を、必要となったときに動的に確保し、かつ、不要となったときに解放することにより、メモリ領域を有効に利用することが可能になる。本実施例では、第2スタック領域の確保および解放には、ソフトウエア処理(内部割込ルーチン)を利用している。しかし、確保した第2スタック領域の開始アドレスはハードウエアとして構成されたSPS2レジスタ403に書き込まれる。従って、確保された第2スタック領域をスタックポインタ制御回路22が利用する際には、ソフトウエア処理を必要としない。
本実施例において、スタック終端判定回路50は、プッシュ動作時とポップ動作時とでは、異なる内部割込要求信号を発生する。具体的には、プッシュ動作時には第2スタック領域を確保する割込ルーチンを要求する要求信号を発生し、ポップ動作時には、確保した第2スタック領域を解放する割込ルーチンを要求する要求信号を発生する。
すなわち、本実施例においては、プッシュ動作において第1スタック領域の終端への到達を検出した場合には必ず第2スタック領域を確保し、ポップ動作時において第1スタック領域の終端への到達を検出した場合には必ず第2スタック領域を解放する。この場合には、図1に示した第2スタック領域イネーブル(SP2ENB)フラグ52は省略することができる。
(実施例2)
図1に示したCPUの動作の第2の例を説明する。本実施例においては、スタック終端判定回路50が、プッシュ動作時とポップ動作時とで異なるとともに、第2スタック領域が確保されているか否かによって異なる内部割込要求信号を発生する。それ以外の動作、例えば、スタックポインタ制御回路22の動作は、第1の実施例の場合と同様である。
図4は、第2スタック領域イネーブル(SP2ENB)フラグ52を利用して行う、本実施例におけるスタック終端判定回路50の動作の一例を示すフロー図である。
図4のフロー図において、スタック終端判定回路50は、SP401の変化を監視する(ST11)。そして、FF04h→FF02hの変化、すなわち、プッシュ動作における第1スタック領域の終端への到達を検出した時(ST12)には、さらに、SP2ENBフラグ52の値を参照する(ST13)。そして、第2スタック領域が確保されていないことを示すSP2ENB=Lの値が得られた場合には、スタック終端判定回路50は、第1の内部割込要求信号INT1を発生する(ST14)。この、第1の内部割込要求信号INT1を受けて、割込コントロール部10は、第1の内部割込ルーチンに移行するための信号を、制御部20に出力する。これによって、第2スタック領域を確保する第1の内部割込ルーチンが、CPU1において起動される(ST15)。その後、スタック終端判定回路50は、SP401の監視を継続する。一方、第2スタック領域が確保されていることを示すSP2ENB=Hの値が得られた場合には、スタック終端判定回路50は内部割込要求信号を発生しない。
これに対して、スタック終端判定回路50がFF02h→FF04hの変化、すなわち、ポップ動作における第1スタック領域の終端への到達を検出した時(ST16)にも、SP2ENBフラグ52の値を参照する(ST17)。そして、SP2ENB=Hであれば、スタック終端判定回路50は、第2の内部割込要求信号INT2を発生する(ST18)。この、第2の内部割込要求信号INT2を受けて、割込コントロール部10は、第2の内部割込ルーチンに移行するための信号を、制御部20に出力する。これによって、それ以前の動作によって確保された第2スタック領域を解放する、第2の内部割込ルーチンが、CPU1において起動される(ST19)。その後、スタック終端判定回路50は、SP401の監視を継続する。一方、SP2ENB=Lであれば、スタック終端判定回路50は内部割込要求信号を発生しない。
ここで、図4に示された処理の内、第1の内部割込ルーチンST15および第2の内部割込ルーチンST19は、ソフトウエアによって実装される。しかし、それ以外の、第1の内部割込要求信号INT1発生もしくは第2の内部割込要求信号INT2発生までの処理は、全て、スタック終端判定回路50内のハードウエアによって実行される。従って、本実施例において、ソフトウエアの負担の増大を抑えながら、高速に、第2スタック領域の確保および解放を実施することができる。
例えば、ポップ動作における第1スタック領域の終端への到達を検出し、第2の内部割込ルーチンに移行したとしても、第2の内部割込ルーチン内での判断によって、第2スタック領域の解放を行わないことも可能である。具体的には、第2のスタック領域によるメモリ資源圧迫の程度や、高い処理速度を要求される特定処理を完了した後か否か等を判断し、その判断結果によっては、第2スタック領域の解放を行わないことが考えられる。
このように、第2スタック領域の解放を行わなかった場合、次に、プッシュ動作においてSP401が第1スタック領域の端部に達したことが検出された時には、あらためて第2スタック領域の確保を行う必要が無い。このように、プッシュ動作もしくはポップ動作において第1スタック領域の終端への到達が検出されても、第2スタック領域の確保もしくは解放を行う必要があるとは限らない場合、図4に示されたようなフローにより、第2スタック領域が確保されているか否かによって異なる内部割込要求信号を発生することが必要である。ここで、図4のフローの実施のためには、スタック終端判定回路50が、SP2ENBフラグ52の値を制御するためのSP2ENBフラグ制御回路54(図6参照)を含むことが好ましい。
図5は、イネーブルフラグ制御回路がSP2ENBフラグ52の値を制御するためのフローの1例を示す。ここで、第1の内部割込ルーチンによって第2のスタック領域の確保が行われる場合には、例えばmalloc( )に準じた命令の実行によって第2のスタック領域が確保されるとともに、確保した第2スタック領域の開始アドレスをSPS2レジスタ403に書き込むものとする。さらに、第2の内部割込ルーチンによって第2のスタック領域の解放を行う場合には、例えば、free( )に準じた命令の実行によって第2のスタック領域の解放を行うとともに、SPS2レジスタ403に、それ自身は意味のない、ダミーデータを書き込むものとする。
図5に示したフローにおいて、スタック終端判定回路50は、SPS2レジスタ403への書き込みを監視する(ST21)。そして、SPS2への書き込みが検出された時(ST22)には、SP2ENBフラグ52の値を参照し(ST23)、SP2ENBフラグ52の値がHであればLを書き込み(ST24)、LであればHを書き込む(ST25)。
図6には、図5のフローによる制御を行うための、SP2ENBフラグ制御回路54の1例を示す。図6のSP2ENBフラグ制御回路54において、SP2ENBフラグ52は、フリップフロップによって実現されている。SP2ENBフラグ52のD入力端子には、XORゲート56の出力が接続され、XORゲート56の一方の入力端子には入力信号INが、他方の入力端子にはSP2ENBフラグ52のQ出力端子が接続されている。入力信号INには、SPS2レジスタ403の書き込み信号が供給されている。一方、SP2ENBフラグ52のQ出力端子からは、制御部20およびスタック終端判定回路50内の内部割込信号発生回路(図示しない)に出力信号OUTが供給されている。
図6に示されたSP2ENBフラグ制御回路54において、XORゲート56の一方の入力端子にSPS2レジスタ403書き込み信号(1クロック幅)が供給されることによって、SPS2レジスタ403への書き込みが監視される。すなわち、Hレベルの信号がXORゲート一方の入力端子に供給された時に、SPS2レジスタ403への書き込みが検出される。そして、XORゲート56の他の入力端子に、SP2ENDフラグ52のQ出力が供給されることによって、現在のSP2ENBフラグ52の値を反転した信号が、XORゲート56の出力端子からSP2ENBフラグ52のD入力端子に供給される。この信号が、クロック信号CKに同期してSP2ENBフラグ52に書き込まれる。
本実施例においては、スタック終端判定回路50が、第2スタック領域が確保されているか否かによって異なる内部割込要求信号を発生する。従って、第2スタック領域の確保および解放を、より柔軟に行うことが可能である。本実施例においてはさらに、図5のフローによるSP2ENBフラグ52の制御は、図6に例示された制御回路54のように、スタック終端判定回路50内のハードウエアによって実施される。従って、本実施例においては、ソフトウエア(内部割込ルーチン)の負担を増大させることなく、SP2ENBフラグ52の値の制御を行うことができる。
(実施例3)
スタック判定回路50の動作のさらに他の例を記す。
実施例2においては、図4に示したフローによって、スタック終端判定回路50が、SP2ENBフラグ=Lである時には第1の内部割込要求信号INT1を発生し、SP2ENBフラグ=Hである時には第2の内部割込要求信号INT2を発生した。すなわち、スタック終端判定回路50が、SP2ENBフラグの値に応じて異なる内部割込要求信号を発生した。そして、第1の内部割込要求信号INT1および第2の内部割込要求信号INT2を受けて、割込コントロール部10は、第1の内部割込ルーチンに移行するための割込信号、および、第2の内部割込ルーチンに移行するための割込信号を制御部20に出力した。
しかし、スタック終端判定回路50が発生する内部割込要求信号は同一とし、内部割込ルーチンに移行した後で、ソフトウエア処理によって、異なる処理を行うことも可能である。
図7には、この場合の処理フローの1例を示す。図7のフローにおいて、スタック終端判定回路50は、SP401の変化を監視する(ST31)。そして、FF04h→FF02hの変化、すなわち、プッシュ動作における第1スタック領域の終端への到達を検出した時(ST32)には、さらに、SP2ENBフラグ52の値を参照する(ST33)。そして、SP2ENB=Lであれば、スタック終端判定回路50は、第1の内部割込要求信号INT1を発生する(ST34)。一方、SP2ENB=Hであれば、スタック終端判定回路50は内部割込要求信号を発生しない。
また、スタック終端判定回路50がFF02h→FF04hの変化、すなわち、ポップ動作における第1スタック領域の終端への到達を検出した時(ST35)にも、さらに、SP2ENBフラグ52の値を参照する(ST36)。そして、SP2ENB=Hであれば、スタック終端判定回路50は、第2の内部割込要求信号INT2を発生する(ST37)。一方、SP2ENB=Lであれば、スタック終端判定回路50は内部割込要求信号を発生しない。
そして、INT1とINT2とのORをとり、内部割込要求信号INTを発生し(ST38)、制御部20に出力する。これによって、CPU1は、内部割込ルーチンに移行する(ST40)。この内部割込ルーチンの中で、SP2ENBフラグ52を読み出し、その値を調べる(ST41)。SP2ENB=Lである場合には、第2スタック領域を確保し(ST42)、SPS2レジスタへ第2スタック領域の開始アドレスを書き込み(ST43)。内部割込ルーチンを終える。
一方、ST41においてSP2ENB=Hであった場合には、それ以前の動作によって確保された第2スタック領域の解放が可能か否かを確認し(ST44)、否であれば、処理的には何も行わない。第2スタック領域の解放が可である場合には、第2スタック領域の解放を行い(ST45)、SPS2レジスタへダミーの書き込みを行い(ST46)、内部割込ルーチンを終える。
なお、本実施例においても、図5に示されたフローにより、SPS2レジスタへの書き込みを検知したSP2ENBフラグ52の設定が行われる。
図7に示したフローにおいては、ソフトウエア(内部割込ルーチンST40)がSP2ENBフラグ52の値を調べ、それに応じて異なる処理を行う。このため、図4に示したフローに比較して、より柔軟なスタック領域管理が可能である。しかも、内部割込要求信号INT発生まではハードウエアで処理されており、特許文献2に示された技術に比較すると、ソフトウエアの負担は小さく、高速処理が可能である。
なお、図7のフローを実現するためには、内部割込ルーチンからSP2ENBフラグが読み出し可能とすることが必要である。例えば、他の汎用レジスタと同様に、図示しないデータバスからSP2ENBフラグを読み出すことを可能とする機能が必要となる。
以上、本発明の実施形態について詳細に説明した。本発明が上記の具体例には限定されず、さまざまな変形、改良が可能であることは言うまでもない。
例えば、上記の実施形態では、スタック終端判定回路50は、レジスタSPE1に保持されているアドレス(FF00h)より2だけ大きいアドレス(FF02h)とスタックポインタSP401の値とを比較し、内部割込要求信号を発生する。すなわち、プログラムカウンタの返り値を保存するための2バイト分のアドレスを考慮して、スタックポインタのアドレスが(SPE1+4)から(SPE1+2)への遷移、または(SPE1+2)から(SPE1+4)への遷移が生じた際に割込要求信号を出力する。しかし、この際の増分するバイト数は2には限らず、CPUのサポートする命令の取り扱いデータ長に依存する。
また、上記の実施形態では、一度に2つのアドレスのスタック領域を使用し、その内の終端に近い(値が小さい)方のアドレスをSP401の値とした。これに合わせて、SPE1レジスタ402には、第1スタック領域の実際の終端のアドレスFF00hをそのまま、第1スタック領域の終端アドレスとして設定した。一方、SPS2レジスタ403には、第2スタック領域の実際の開始アドレスF0FFhから1を減じたF0FEhを、第2スタック領域の開始アドレスとして設定した。
このように、スタックポインタ制御回路22における制御において利用するための、SPE1レジスタ402への第1スタック領域の終端アドレスの設定、および、SPS2レジスタ403への第2スタック領域の開始アドレスの設定は、スタック領域の利用形態およびSP401の設定に応じて適切に行われる。その設定が、上記の実施形態の場合に限定されないことは言うまでもない。
また、上記の実施形態では、図3に示すように、スタックのプッシュ方向がアドレスの減少する方向としているが、スタックのポップ方向がアドレスの減少する方向に用いるものであっても良い。さらに上記の実施形態では動的に確保した第2スタック領域の終端アドレスについては考慮しなかったが、第2スタック領域の終端アドレスを設定するためのレジスタを設けて、スタックポインタの値が当該アドレスを超える恐れのある場合には、第3スタック領域を確保するようにすることも可能である。
また、上述の実施形態においては、内部割込ルーチンにて、メモリ領域を動的に確保する命令又は解放する命令を配置することにより、第2スタック領域として用いるメモリ領域を動的に確保し、その開始アドレスの値をSPS2レジスタ403に設定していた。しかし、動的にメモリ領域を確保する機構を前提とするのではなく、リセット後に、SPS2レジスタに第2スタック領域の開始アドレスを設定してしまうアーキテクチャも可能である。この場合は、ハードウエア構成上,実現容易という意味で有利である。
以上のように、本発明によれば、実際のプログラムの実行時に、当初想定したメモリ領域を越えてスタック領域がメモリを消費してしまう恐れのある場合にも、プログラムを停止させることなくデータ破壊を回避し、プログラムが予期せぬ動作をしてしまうという不具合を防止することができる。さらに、このようなスタック領域の管理を、ソフトウエアの負担増大を抑えながら実現し、処理速度の低下を抑えることができる。
本発明の一実施形態のCPUのブロック図を示す図である。 本発明のスタックポインタ制御回路の一例を示すブロック図である。 本発明のメモリ領域におけるスタック領域の使用例を示す図である。 本発明のスタック終端判定回路の動作の一例を示すフロー図である。 本発明の第2スタック領域イネーブルフラグの制御の一例を示すフロー図である。 本発明の第2スタック領域イネーブルフラグ制御回路の一例を示す回路図である。 本発明のスタック終端判定回路の動作の他の例を示すフロー図である。 従来のCPUであるZ80のレジスタ構造を示す図である。 従来のCPUにおけるメモリ領域の不具合を示す図である。
符号の説明
1 CPU
10 割込みコントロール部
20 制御部
22 スタックポインタ制御回路
221 −2/+2加減算器
222 切替器
223 比較器
30 ALU
40、400 レジスタ群
401 スタックポインタレジスタ
402 第1スタック領域終端アドレスレジスタ
403 第2スタック領域開始アドレスレジスタ
50 スタック終端判定回路
52 第2スタック領域イネーブルフラグ
54 イネーブルフラグ制御回路

Claims (10)

  1. 現在のスタック領域の先頭アドレスを格納するスタックポインタレジスタと、
    第1スタック領域の終端アドレスを設定するスタック終端レジスタと、
    第2スタック領域の開始アドレスを設定する第2スタック領域開始レジスタと、
    前記先頭アドレスが1つのスタック領域内で変わる場合には前記スタックポインタレジスタに格納されたアドレスに所定の値を加減算したアドレスを前記スタックポインタレジスタに出力し、前記スタックポインタレジスタのアドレスが前記スタック終端レジスタに設定されているアドレスに到達した次のプッシュ動作において、前記所定の値を加減算したアドレスに替えて前記第2スタック領域開始レジスタに設定されているアドレス、また前記スタックポインタレジスタのアドレスが前記第2スタック領域開始レジスタに設定されているアドレスに到達した次のポップ動作において、前記所定の値を加減算したアドレスに替えて前記スタック終端レジスタに設定されているアドレスを前記スタックポインタレジスタに出力する切替器を有するスタックポインタ制御回路とを備えたことを特徴とするCPU。
  2. 前記スタックポインタレジスタのアドレスが、前記第1スタック領域内の、前記終端アドレスよりも所定値だけ手前のアドレスに到達した時に、内部割込要求信号を発生するスタック終端判定回路をさらに備え、
    前記内部割込要求信号により移行する割込ルーチンにおいて、前記第2スタック領域を動的に確保し、該確保された第2スタック領域の開始アドレスを前記第2スタック領域開始レジスタに設定することを特徴とする請求項1記載のCPU。
  3. 前記スタック終端判定回路は、プッシュ動作時とポップ動作時とでは、異なる内部割込要求信号を発生することを特徴とする請求項2に記載のCPU。
  4. 前記スタック終端判定回路が、前記第2のスタック領域が確保されているか否かを示す値を記憶する第2スタック領域イネーブルフラグを備え、該イネーブルフラグの値を参照して前記内部割込要求信号を発生することを特徴とする請求項2または3記載のCPU。
  5. 前記スタック終端判定回路が、前記第2のスタック領域が確保されているか否かを示す値を記憶する第2スタック領域イネーブルフラグを備え、かつ、該イネーブルフラグは、前記内部割込要求信号により移行した割込ルーチンから読み出し可能であることを特徴とする請求項2記載のCPU。
  6. 前記第2スタック領域開始レジスタは、前記内部割込信号により移行した割込ルーチンにおいて書き込み可能であって、該割込ルーチンが前記第2スタック領域を動的に確保した時には該確保した第2スタック領域の開始アドレスが書き込まれ、該割込ルーチンが前記第2スタック領域を解放したときには無効な値が書き込まれ、
    かつ、
    前記スタック終端判定回路が、前記第2スタック領域開始レジスタへの書き込みを検知して前記イネーブルフラグの設定を行う、イネーブルフラグ制御回路をさらに含むことを特徴とする請求項4または5記載のCPU。
  7. 現在のスタック領域の先頭アドレスを格納するスタックポインタレジスタと、第1スタック領域の終端アドレスを設定するスタック終端レジスタと、第2スタック領域の開始アドレスを設定する第2スタック領域開始レジスタと、前記先頭アドレスが1つのスタック領域内で変わる場合には前記スタックポインタレジスタに格納されたアドレスに所定の値を加減算したアドレスを前記スタックポインタレジスタに出力し、前記スタックポインタレジスタのアドレスが前記スタック終端レジスタに設定されているアドレスに到達した次のプッシュ動作において、前記所定の値を加減算したアドレスに替えて前記第2スタック領域開始レジスタに設定されているアドレスを、また前記スタックポインタレジスタのアドレスが前記第2スタック領域開始レジスタに設定されているアドレスに到達した次のポップ動作において、前記所定の値を加減算したアドレスに替えて前記スタック終端レジスタに設定されているアドレスを前記スタックポインタレジスタに出力する切替器を有するスタックポインタ制御回路と、前記スタックポインタレジスタのアドレスが、前記第1スタック領域内の、前記終端アドレスよりも所定値だけ手前のアドレスに到達した時に、内部割込要求信号を発生するスタック終端判定回路とを備えたCPUにおけるスタック領域制御方法であって、
    前記内部割込要求信号により割込ルーチンに移行し、該割込ルーチンにおいて、前記第2スタック領域を動的に確保し、該確保された第2スタック領域の開始アドレスを前記第2スタック領域開始レジスタに設定することを特徴とするスタック領域制御方法。
  8. 前記CPUのプッシュ動作時には、前記割込ルーチンにおいて、前記第2スタック領域の動的確保および前記第2スタック領域開始レジスタへの第2スタック領域開始アドレスの設定を行い、
    前記CPUのポップ動作時には、前記割込ルーチンにおいて、前記プッシュ時割込ルーチンで確保された第2スタック領域を解放することを特徴とする請求項7記載のスタック領域制御方法。
  9. 前記スタック終端判定回路が、前記第2スタック領域が確保されているか否かを示す値を記憶する第2スタック領域イネーブルフラグを備え、
    前記割込ルーチンにおいて、前記イネーブルフラグの値を読み出し、該イネーブルフラグの値に応じて異なる処理を行うことを特徴とする請求項7記載のスタック領域制御方法。
  10. 前記スタック終端判定回路が、前記第2スタック領域が確保されているか否かを示す値を記憶する第2スタック領域イネーブルフラグを備えるとともに、前記第2スタック領域開始レジスタへの書き込みを検知して該イネーブルフラグの設定を行う、イネーブルフラグ制御回路を含み、
    前記割込ルーチンにおいて、前記第2スタック領域を動的に確保した時には該確保した第2スタック領域の開始アドレスを前記第2スタック領域開始レジスタに書き込み、前記第2スタック領域を解放したときには前記第2スタック領域開始レジスタに無効な値を書き込むことを特徴とする請求項7または9記載のスタック領域制御方法。
JP2005351013A 2004-12-24 2005-12-05 Cpu Expired - Fee Related JP4813882B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005351013A JP4813882B2 (ja) 2004-12-24 2005-12-05 Cpu

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2004372393 2004-12-24
JP2004372393 2004-12-24
JP2005351013A JP4813882B2 (ja) 2004-12-24 2005-12-05 Cpu

Publications (2)

Publication Number Publication Date
JP2006202268A JP2006202268A (ja) 2006-08-03
JP4813882B2 true JP4813882B2 (ja) 2011-11-09

Family

ID=36960182

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005351013A Expired - Fee Related JP4813882B2 (ja) 2004-12-24 2005-12-05 Cpu

Country Status (1)

Country Link
JP (1) JP4813882B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070282928A1 (en) * 2006-06-06 2007-12-06 Guofang Jiao Processor core stack extension
JP5262652B2 (ja) * 2008-12-05 2013-08-14 富士ゼロックス株式会社 画像処理装置
JP2010134747A (ja) * 2008-12-05 2010-06-17 Fuji Xerox Co Ltd 画像処理装置
JP5316148B2 (ja) * 2009-03-24 2013-10-16 富士通セミコンダクター株式会社 情報処理装置およびデータ修復方法
JP6149201B2 (ja) * 2016-03-18 2017-06-21 株式会社ソフイア 遊技機
JP6149199B2 (ja) * 2016-03-18 2017-06-21 株式会社ソフイア 遊技機
JP6149200B2 (ja) * 2016-03-18 2017-06-21 株式会社ソフイア 遊技機

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5933552A (ja) * 1982-08-18 1984-02-23 Toshiba Corp デ−タ処理装置
EP0334627A3 (en) * 1988-03-23 1991-06-12 Du Pont Pixel Systems Limited Multiprocessor architecture
JPH0293730A (ja) * 1988-09-29 1990-04-04 Fuji Xerox Co Ltd 情報処理装置
JPH02304624A (ja) * 1989-05-19 1990-12-18 Hitachi Ltd 情報処理装置
JPH04157530A (ja) * 1990-10-22 1992-05-29 Nec Corp マイクロプロセッサ

Also Published As

Publication number Publication date
JP2006202268A (ja) 2006-08-03

Similar Documents

Publication Publication Date Title
JP4813882B2 (ja) Cpu
JP4422136B2 (ja) 記憶装置及び起動方法
TWI436199B (zh) 電源管理控制器與方法
KR0138697B1 (ko) 마이크로컴퓨터
KR101249693B1 (ko) 서브루틴 복귀 메카니즘 선택
JP5621912B2 (ja) 情報処理装置及び情報処理装置の制御方法
JP2004520662A (ja) 共通の名前を有する複数のレジスタへの選択的なアクセス
JP2009157542A (ja) 情報処理装置及びそのスタックポインタ更新方法
US6038631A (en) Data processing system and method using virtual storage system
JP3202497B2 (ja) 情報処理装置
US6738898B1 (en) Information processor, method for saving/loading data, and information recorded
JPH1196002A (ja) データ処理装置
US4124892A (en) Data processing systems
US20080313656A1 (en) User mode stack disassociation
JP2009230479A (ja) マイクロプロセッサ
JP4334312B2 (ja) 起動時間短縮演算装置およびデータロード方法
TWI843444B (zh) 電子裝置及其操作方法
US5557772A (en) Data processing apparatus including a register storing a parameter and a microinstruction execution arrangement including a correction arrangement for causing a first value of the parameter to be change to a second, correct value
JP2006243810A (ja) マイクロコンピュータシステム
JP2005209178A (ja) メモリ保護装置、メモリ保護方法及びメモリ保護プログラム
US5151980A (en) Buffer control circuit for data processor
JP2007094497A (ja) 情報処理装置及び情報処理方法
JPH09330253A (ja) メモリダンプ方法及びそれを適用したメモリダンプシステム
JP2001051854A (ja) 情報管理システム
JPS63298654A (ja) マイクロコンピユ−タ

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20080220

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20080220

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080325

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100614

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100629

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100826

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110510

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110706

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110823

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110825

R150 Certificate of patent or registration of utility model

Ref document number: 4813882

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140902

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees