(57)【特許請求の範囲】
【請求項１】
データ処理システム（１００）において複数のレジスタ（１５４〜１５８）をアンスタッキングする方法であって：
（Ａ）前記複数のレジスタ（１５４〜１５７）の第１部分をアンスタッキングする段階；
（Ｂ）第１割込みを受け付けるか否か決定する段階；
（Ｃ）前記第１の割込みを受け付ける場合には、スタッキングを実行せずにスタック・ポインタ値（１６１）を変更する段階；および、
（Ｄ）前記第１の割込みを受け付けない場合には、前記複数のレジスタの第２部分（１５８）をアンスタッキングする段階；
によって構成されることを特徴とする、データ処理システム（１００）において複数のレジスタ（１５４〜１５８）をアンスタッキングする方法。
【請求項２】
データ処理システム（１００）を動作する方法であって：
命令をデコードする段階；および、
前記の命令デコード段階に応答して：
１）複数のレジスタ（１５４〜１５７）の第１部分をアンスタッキングする段階；
２）第１割込みを受け付けるか否か決定する段階；
３）前記第１割込みを受け付ける場合には、スタッキングを実行せずに、スタック・ポインタ値（１６１）を変更する段階；および、
４）前記第１割込みを受け付けない場合には、前記複数のレジスタの残りの部分（１５８）をアンスタッキングする段階；
によって構成される段階を実行する段階；
によって構成されることを特徴とする、データ処理システム（１００）を動作する方法。
【請求項３】
データ処理システム（１００）において割込み処理中に複数のレジスタ（１５４〜１５８）をアンスタッキングする方法であって：
（Ａ）第１割込みを受け付ける段階；
（Ｂ）複数のレジスタ（１５４〜１５８）をスタッキングする段階；
（Ｃ）前記スタッキング段階（Ｂ）と同時に、スタック・ポインタ値（１６１）を増分調整して、前記スタック・ポインタ値（１６１）が、スタック内の次に使用可能な項目を指し示すようにし、前記スタック・ポインタ値（１６１）が、前記スタッキング段階（Ｂ）の開始前に初期スタック・ポインタ値を有し、また前記スタック・ポインタ値が、前記スタッキング段階（Ｂ）の完了後に第１スタック・ポインタ値（１６１）を有する段階；
（Ｄ）第１割込みサービス・ルーチンの実行を開始する段階；
（Ｅ）前記複数のレジスタ（１５４〜１５７）の第１部分をアンスタッキングする段階；
（Ｆ）前記アンスタッキング段階（Ｅ）と同時に、前記スタック・ポインタ値（１６１）を増分調整して、前記スタック・ポインタ値（１６１）が前記スタック内の次に使用可能な項目を指し示すようにし、前記スタック・ポインタ値（１６１）が、前記アンスタッキング段階（Ｅ）の完了後に第２スタック・ポインタを有する段階；
（Ｇ）第２割込みを受け付ける段階；
（Ｈ）スタッキングを実行せずに、前記スタック・ポインタ値（１６１）を前記第１スタック・ポインタ値に変更する段階；および、
（Ｉ）第２割込みサービス・ルーチンの実行を開始する段階；
によって構成されることを特徴とする、データ処理システム（１００）において割込み処理中に複数のレジスタ（１５４〜１５８）をアンスタッキングする方法。
【請求項４】
データ処理システム（１００）であって：
複数のレジスタ（１５４〜１５８）；
スタック・ポインタ値を有するスタック・ポインタ・レジスタ（１６１）；
前記複数のレジスタ（１５４〜１５８）および前記スタック・ポインタ（１６１）に結合されたメモリ・スタック（１１４）；
割込みを受け付けるか否か決定するための割込み決定手段（１７４）；および、
前記スタック・ポインタ値を選択的に変化させるための制御手段（１７０）であって、前記制御手段（１７０）は前記スタック・ポインタ・レジスタ（１６１）および前記割込み決定手段（１７４）に結合され、前記制御手段（１７０）は、前記割込み決定手段（１７４）が前記割込みを受け付ける場合には、スタッキングを実行せずに前記スタック・ポインタ値を変化させるところの、前記スタック・ポインタ値を選択的に変化させるための制御手段（１７０）；
によって構成されることを特徴とする、データ処理システム（１００）。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は一般にデータ処理システムに関し、具体的にはデータ処理システムにおいてレジスタをアンスタッキング(unstacking)する装置および方法に関する。
【０００２】
【従来の技術】
今日多くのデータ処理システムは割込みを利用している。割込みはデータ処理システム分野では周知のものである。
【０００３】
割込みの使用方法は多岐にわたっている。一般的な割込み使用方法の一つはマイクロプロセッサ・システムでのリアルタイム処理向けである。たとえばマイクロプロセッサ・システムでは、タイマは、特定の時間事象(time event)が発生したことを表示するために、中央演算処理装置（ＣＰＵ）に割込み要求を送ることができる。割込みを受け取り、この割込みに基づいて動作すべきだと決定した後、ＣＰＵは通常の非割込み処理(non-interrupt) を停止して、割込み処理に切り換えることができる。
【０００４】
大抵のマイクロプロセッサ・システムでは、ＣＰＵは割込みベクトルを受け取り、これをプログラム・カウンタ・レジスタにロードする。ついでＣＰＵはソフトウェア割込みサービス・ルーチンの実行を開始し、このルーチンは割込みベクトルによって指示された記憶場所から開始する。タイマを例にとれば、割込みサービス・ルーチンは、毎秒デジタル・クロックの表示を更新するソフトウェア・ルーチンくらい単純になる場合もある。或いは割込みサービス・ルーチンは、自動車のエンジンで必要なスパーク・タイミング(spark timing)を計算するソフトウェア・ルーチンくらいに複雑になる場合もある。
【０００５】
マイクロプロセッサ・システムで割込みを使用することの欠点の一つは、レジスタ値をメモリ・スタックにスタックするために必要なオーバヘッド時間である。レジスタ値が「スタックされる」すなわち「スタックにプッシュされる」場合には、レジスタ値はレジスタから転送されて記憶場所に書き込まれる。レジスタのスタッキングは通常、元のレジスタ値を保存するために必要である。割込みサービス・ルーチンは元のレジスタ値の一つまたは複数を変化させる場合があるので、元のレジスタ値は読取り可能・書き込み可能メモリに一時的に格納される。ランダム・アクセス・メモリ（ＲＡＭ）は「メモリ・スタック」または「スタック」として使用されることが多いが、他の種類の一時記憶装置も使用できる。
【０００６】
いったん割込みサービス・ルーチンが完了したなら、通常の無割込み処理が続行されて、元のレジスタ値を「アンスタックする」すなわち「スタックから押し出す」ことができる。レジスタ値が「アンスタックされる」場合には、レジスタ値がメモリ・スタックから検索されて、それぞれのレジスタへと転送されて戻される。
【０００７】
モトローラ社（テキサス州オースティン）が市販する（ＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーなどの）一部の単純なマイクロプロセッサは、スタック・ポインタ・レジスタ値を除く全部のレジスタ値を単純にスタックする。スタック・ポインタ・レジスタ内に格納された値は、スタック内の項目のどれが次に使用可能か連続して指し示すのに使用されるので、スタックされない。スタック・ポインタ・レジスタ内に格納された値も「スタック・ポインタ」と呼ばれる。
【０００８】
ＭＣ６８ＨＣ１１のマイクロプロセッサ・ファミリーのスタック・ポインタはいくつかの方法で変更できる。第１にユーザはソフトウェアにおいて、指定された値をスタック・ポインタ・レジスタにロードまたは書き込ませる命令を起動できる。通常の動作では、ユーザは普通、最初にスタック・ポインタをスタックの開始を指し示す値に設定する以外には、スタック・ポインタをこの方法で変更しない。
【０００９】
スタックの開始はスタックのメモリ・スペース内のどこからでもよいが、大抵のスタックは最下位アドレスから開始して最上位アドレスへと埋めていくか、または最上位アドレスから開始して最下位アドレスへと埋めていく。また一部のスタックは最上位アドレスから最下位アドレスへと自動的にラップアラウンドしたり、或いは最下位アドレスから最上位アドレスへとラップアラウンドする。ＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーは、最上位アドレスから最下位アドレスへと埋めていくスタックを使用する。
【００１０】
ＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーにおいてスタック・ポインタを変更できる第２の方法は、スタッキング動作またはアンスタッキング動作によるものである。レジスタ値がメモリ・スタックからスタックまたはアンスタックされるたびに、スタック・ポインタは内部マイクロプロセッサ回路によって自動的に更新されて、スタック内のどの項目が次に使用可能かを連続して指し示すようにしなければならない。
【００１１】
スタック・ポインタが、スタック内のどの項目を次に使用可能か指し示す方法は数通りある。第１に、スタック・ポインタは、スタキング動作のためにアクセスする次のスタック位置を直接指し示すことができる。たとえば、スタックが最上位アドレスから最下位アドレスへと埋めていき、スタック・ポインタが＄０６である場合には、スタッキング動作は記憶場所＄０６にアクセスするが、アンスタッキング動作は記憶場所＄０７にアクセスする。
【００１２】
これに代わる方法として、スタック・ポインタはアンスタッキング動作のためにアクセスする次のスタック位置を直接指し示すことができる。たとえば、スタックが最上位アドレスから最下位アドレスへと埋めていき、スタック・ポインタが＄０６の場合には、スタッキング動作は記憶場所＄０５にアクセスするが、アンスタッキング動作は記憶場所＄０６にアクセスする。現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーでは、スタック・ポインタは、スタッキング動作のためにアクセスする次のスタック位置が１６ビット・アドレスである。
【００１３】
現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーでは、１バイトがスタックにプッシュされるたびに、スタック・ポインタは常に内部マイクロプロセッサ回路によって自動的に減分される。同様に、スタックから１バイトが押し出されるたびに、スタック・ポインタは常に内部マイクロプロセッサ回路によって自動的に増分される。このためスタック・ポインタは現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーでは、以下の状況を除いて変化しない。すなわち、スタッキング動作、アンスタッキング動作、ユーザによる書き込みアクセス、スタック・ポインタを増分・減分する命令、およびインデックス・レジスタの内容をスタック・ポインタに転送する命令である。
【００１４】
現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーでは、スタックは割込み処理，サブルーチン呼出し，およびデータ値の一時記憶のために最も多く使用される。しかしながら理由がスタッキング動作であろうとアンスタッキング動作であろうとそれとは関係なく常に、スタック・ポインタはこれに伴って（すなわち増分または減分によって）増分調整され、スタック・ポインタ値はスタック内の次に使用可能な項目を指し示し続ける。
【００１５】
【発明が解決しようとする課題】
また、マイクロプロセッサ・システム内で割込みを使用することの欠点の一つは、レジスタ値をメモリ・スタックにスタックするために要するオーバヘッド時間である。一定のコントローラ用途など一部のマイクロプロセッサ用途では、割込みサービス・ルーチンを使用して多くの動作が実行される。このため割込みは一部の用途ではしばしば頻繁に発生する場合がある。あいにく、現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーでは、ＣＰＵが切迫する割込みを処理すべきだと決定するたびに、スタック・ポインタ・レジスタを除く全部のレジスタが自動的にスタックされる。このため、割込みが処理されるたびに、レジスタ値のスタキングまたはアンスタッキングに、非常に多くの処理時間が繰り返し消費される。
【００１６】
【課題を解決するための手段】
上記の必要性は本発明によって充足され、また他の利点も本発明によって達成される。一つの形態では、本発明はデータ処理システムにおいて複数のレジスタをアンスタッキングする装置および方法である。
【００１７】
一つの実施例では、本発明は複数のレジスタの第１部分をアンスタッキングする段階を含む。本発明はまた、第１割込みを受け付けるか否か決定する段階を含む。最初の割込みが受け付けられる場合には、スタック・ポインタ値はスタッキングを実行せずに変更される。第１の割込みが受け付けられない場合には、複数のレジスタの第２部分がアンスタックされる。
【００１８】
本発明を、当事者は添付図面と合わせて以下の詳細な説明から理解しよう。
【００１９】
【実施例】
割込み処理のためにレジスタをスタッキングおよびアンスタッキングするのに消費される時間の量を減らす方法が必要であった。またこの新しい方式は、現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーとのソフトウェア互換性を有する必要があった。
【００２０】
本発明は割込み処理のためにレジスタをスタッキングおよびアンスタッキングするのに消費される時間の量を大幅に削減する。現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーでは、「割込みからの戻り」（ＲＴＩ）命令を、プログラマはソフトウェア割込みサービス・ルーチンでの最後の命令として使用する。ＲＴＩ命令は、割込みのために以前スタックされていた全部のレジスタをアンスタッキングする機能を実行する。
【００２１】
本発明は、マイクロプロセッサが第１割込みの割込み処理を完了して、その直後に処理を開始せねばならない第２の割込みがあるときに時間を大幅に節約する。現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーでは、ＲＴＩ命令は、スタック・ポインタを除くレジスタ全部をアンスタックする。その後、マイクロプロセッサが、第２割込みが切迫していて、これを処理すべきだと決定した後に同じレジスタが再度スタックされる。本発明はこのような冗長なアンスタッキングおよびスタッキングを排除する。
【００２２】
ＲＴＩ命令の間にレジスタをアンスタッキングして、ついで第２の割込みが行われるときに単純に同じレジスタを再スタッキングする代わりに、本発明は、スタック・ポインタの値を変更することによって、冗長なアンスタッキングおよびスタッキングを排除する。このため二つの割込みが、間に無割込み処理を入れないで折り返し処理されるたびに、本発明ではレジスタをアンスタッキングおよびスタッキングする時間を節約することになる。
【００２３】
【図の説明】
「アサート」および「ニゲート」という語は、信号，状態ビットまたは同様の機構をそれぞれ論理真または論理偽状態にすることを差す場合に用いられる。論理真状態が論理レベル１の場合、論理偽状態は論理レベル０になる。また論理真状態が論理レベル０場合には、論理偽状態は論理レベル１になる。
【００２４】
数字の前に置かれる記号「＄」は、その数字が１６進または１６を基数とする形式で表されていることを示す。「バス」という語は、データ，アドレス，制御または状態など一つまたは多岐に渡る種類の情報を転送するのに使用できる複数の信号を差す。
【００２５】
図１は、現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーで割込み処理中に実施される先行技術のレジスタ・スタッキングおよびアンスタッキングの実行を流れ図で表したものである。円５は流れ図のスタート・ポイントと再入点の両方を表している。円６は割込みからの戻り（ＲＴＩ）命令が割込みサービス・ルーチンの実行を開始する直前にあたる、流れのポイントを表す。円７は、割込みサービス・ルーチンで割込みからの戻り（ＲＴＩ）命令の実行が完了した直後にあたる、流れの再入点を表す。また円８は流れにおける円７へのジャンプを表す。
【００２６】
矩形１０〜１６は流れの中のその表示されたポイントで実行される個々の動作を表す。ひし形２０，２１は、マイクロプロセッサによって行われる決定で、流れ図の中で次にたどるパスに影響を与える決定を表す。楕円２５〜２７は、マイクロプロセッサが行う決定もしくは動作を表さず、その代わり、流れ図の中のその表示されたポイントにおけるスタック・ポインタの状態を表す。
【００２７】
流れにおける破線の間の段階は、先行技術において割込みからの戻り（ＲＴＩ）命令の間に実行される段階である。
【００２８】
図２および図３はともに、本発明の一実施例に基づくデータ処理システム１００（図４参照）において割込み処理の間に実施されるレジスタのスタッキングおよびアンスタッキングの実行を、流れ図の形で表したものである。円２９は流れ図のスタート・ポイントを表す。円３０は流れにおける円３１へのジャンプを表す。円３１は、割込みサービス・ルーチンにおいて割込みからの戻り（ＲＴＩ）命令が実行を開始する直前にあたる、流れのポイントを表す。円３２は流れにおける円２９へのジャンプを表す。また円３３は流れにおける円３１へのジャンプを表す。
【００２９】
矩形３５〜４６は、流れにおけるその表示されたポイントで実行される個々の動作を表す。ひし形５０〜５３は、データ処理システム１００において回路が行う決定で、流れ図で次にたどるパスに影響を与える決定を表す。楕円６０〜６３はデータ処理システム１００において回路が行う決定もしくは動作を表さず、代わりに、流れ図内のその表示されたポイントにおけるスタック・ポインタの状態を表す。
【００３０】
図３を参照すると、破線間の段階は、本発明の一実施例に従って、割込みからの戻り（ＲＴＩ）命令の間に実行される諸段階である。
【００３１】
図４は、データ処理システム１００の一実施例を表す。データ処理システム１００は中央演算処理装置（ＣＰＵ）回路１０２，回路のシステム・インテグレーション・セクション１０４，読出し専用メモリ（ＲＯＭ）回路１０６，電気的に消去可能なプログラム可能読出しメモリ（ＥＥＰＲＯＭ）回路１０８，回路のパルス幅変調セクション１１０，アナログ・デジタル変換器回路１１２，ランダム・アクセス・メモリ（ＲＡＭ）回路１１４，回路の逐次セクション１１６，および回路のタイマ・セクション１１８を有し、それぞれバス回路１２０に双方向に結合される。ＣＰＵ１０２およびシステム・インテグレーション・セクション１０４はバス回路１２１によって互いに双方向に結合される。
【００３２】
システム・インテグレーション・セクション１０４は集積回路ピン１２２を介して、データ処理システム１００の外部に対し信号を送受信できる。パルス幅変調セクション１１０は集積回路ピン１２４を介して、データ処理システム１００の外部に対し信号を送受信できる。アナログ・デジタル変換器１１２は集積回路ピン１２６を介してデータ処理システム１００の外部に対し信号を送受信きる。逐次セクション１１６は集積回路ピン１２８を介して、データ処理システム１００の外部に対し信号を送受信できる。またタイマ・セクション１１８は集積回路ピン１３０を介して、データ処理システム１００の外部に対し信号を送受信できる。
【００３３】
図５は、本発明の一実施例に基づく図４の中央演算処理装置（ＣＰＵ）１０２をブロック図で示したものである。ＣＰＵ１０２は実行装置回路１３２，マイクロＲＯＭとその関連論理回路１３４，命令パイプ・デコード論理回路１３６，およびバス制御論理回路１３８を有し、それぞれ、バス回路１４０と双方向に結合される。バス１４０はＣＰＵ１０２内の各種の回路間で情報（例：制御，データおよびアドレス）を伝送するために使用される。また命令パイプ・デコード論理１３６は被デコード命令情報をバス回路１４１を介してマイクロＲＯＭとその関連論理１３４に転送する。バス回路１４２は、ＣＰＵ１０２との間で情報（例：制御，データおよびアドレス）をやり取りするのに使用される。図４および図５を参照すると、バス１４２はバス１２０およびバス１２１の両方に結合される。図６は、本発明の一実施例に基づく図５の実行装置１３２の一部をブロック図で示したものである。実行装置１３２は、累算器Ａレジスタ１５０および累算器Ｂレジスタ１５２を有し、これらは別個のレジスタとして見なせる。これに代わり、累算器Ａレジスタ１５０および累算器Ｂレジスタ１５２を連結して、これらを１個の累算器Ｄレジスタ回路１５４として、一つのものと見なすこともできる。累算器Ｄレジスタ１５４はバス回路１５９およびバス回路１６０と双方向に結合される。
【００３４】
実行装置１３２は、インデックス・レジスタ回路Ｘ１５５，インデックス・レジスタ回路Ｙ１５６，プログラム・カウンタ・レジスタ回路１５８，条件コード・レジスタ回路１５７，およびスタック・ポインタ・レジスタ回路１６１を有し、それぞれバス１５９およびバス１６０と双方向に結合される。条件コード・レジスタ回路１５７はモード・ビット１６２および割込みマスク・ビット（Ｉビット）１６４を有する。
【００３５】
本発明の一実施例では、累算器Ａレジスタ１５０，累算器Ｂレジスタ１５２および条件コード・レジスタ回路１５７はそれぞれ長さ１バイトである。累算器Ｄレジスタ１５４，インデックス・レジスタＸ１５５，インデックス・レジスタＹ１５６，プログラム・カウンタ・レジスタ１５８およびスタック・ポインタ・レジスタ１６１はそれぞれ長さ２バイトである。本発明の代替的実施例では、任意の数のレジスタが存在してよく、各レジスタの長さは任意の数のバイトでよい。演算論理装置（ＡＬＵ）とその関連論理回路１６６はバス１５９から入力を受け取り、バス１６０から入力を受け取って、出力を生成し、この出力はバス１６０に転送される。データ・バッファ回路１６８はバス１４０，１５９，１６０と双方向に結合され、これを用いてこれらバス間で情報を転送する。データ・バッファ１６８はまた、バス１４０，１５９，１６０間で転送中の情報を一時的に格納することもできる。
【００３６】
制御論理回路１７０はバス１５９およびバス１６０を介して、また図に示さない他の制御信号によって、実行装置１３２全体にわたり制御信号を受信し転送する。制御論理１７０は、スタッキング・アンスタッキング論理回路１７２に結合される。制御論理１７０はまた割込み論理回路１７４にも結合される。スタッキング・アンスタッキング論理１７２はバス１６０と双方向に結合される。割込み論理１７４もバス１６０と双方向に結合される。
【００３７】
本発明の別の実施例では、一つまたは複数の制御論理１７０，スタッキング・アンスタッキング論理１７２，および割込み論理回路１７４は、図５のマイクロＲＯＭとその関連論理１３４の一部として実際に実現できる。このような実施例では、マイクロＲＯＭとその関連論理１３４は、バス１４０を介して、または付加したバス（図示せず）を介して実行装置１３２に制御信号を転送する。
【００３８】
好適な実施例の説明
本発明は割込み処理のためにレジスタのスタッキングおよびアンスタッキングに消費される時間を削減する。２つの割込みがその間に無割込み処理を入れずに折り返し処理されるたびに、本発明はレジスタ１５４〜１５８をスタックするのに要する時間、およびレジスタ１５８をアンスタックするのに要する時間を節約する。
【００３９】
注意すべきことは、ポインタ・レジスタ１６１がスタックされないことである。またもう一つ注意すべきことは、累算器Ｄレジスタ１５４は、累算器Ｂレジスタ１５２と連結された累算器Ａレジスタ回路１５０と同じであることである。このため、累算器Ａレジスタ１５０と累算器Ｂレジスタ１５２の両方をスタックするスタッキング動作は、累算器Ｄレジスタ１５４をスタックするスタッキング動作に匹敵する。
【００４０】
また本発明は現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーとのソフトウェア互換性がなくてはならない。そのため、割込みからの戻り（ＲＴＩ）など以前定義された命令によって実行される段階に変化が生じても、既存のソフトウェア・ルーチンに障害を起こしてはならない。すなわち、以前定義された命令によって実行される段階に生じる変化は、ユーザに見えるものでなくてはならない。本発明は割込み中の処理時間を大幅に節約するのみならず、現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーとのソフトウェア互換性をも維持する。
【００４１】
本発明は、データ処理システム１００によって逐次割込みを処理する方法に変更を加える。また割込み処理の間および割込みからの戻り（ＲＴＩ）の間に実行される諸段階に変更を加えている。
【００４２】
図１を参照すると、現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーでは、後続の割込みが次に処理されるか否かには関係なく、ＲＴＩ命令の間常に同じ流れ経路をたどる。ＲＴＩ命令は常にレジスタ１５４〜１５８（矩形１６参照）をアンスタックし、その後円７に戻って、さらに割込みを行うかまたは無割込み処理に戻るか決定する。さらに割込みを行う場合には（すなわち、ひし形２０，２１で「はい」を選択すると）、レジスタ１５４〜１５８が再度スタックされる（矩形１１を参照）。これ以上割込みを行わない場合には（すなわち、ひし形２０またはひし形２１のいずれかで「いいえ」を選択すると）、流れは無割込み処理の続行に戻る（矩形１０参照）。
【００４３】
注意すべきことは、図１では、スタックに１バイト、プッシュされるたびにスタック・ポインタが減分し、スタックから１バイト押し出されるたびに増分されることである。このためレジスタ１５４〜１５８（合わせて９バイトで構成される）がすべてスタックにプッシュされると、その結果、スタックは９減分される。このため楕円２５，２６は、スタック・ポインタが、矩形１１のスタッキング動作の前に＄（初期値）の値で開始された場合、スタッキング動作完了後、スタック・ポインタは＄（初期値）−９の値をとることを示す。同じ様に楕円２６，２７は、スタック・ポインタが、矩形１６のアンスタッキング動作の前に＄（初期値）−９の値で開始された場合、アンスタッキング動作完了後には、スタック・ポインタは＄（初期値）をとることを示す。
【００４４】
図１では、スタック・ポインタの増分または減分は、常に対応するスタッキング動作またはアンスタッキング動作を伴う。ユーザはいつでもスタック・ポインタ・レジスタ１６１（図６参照）に書き込み、スタック・ポインタを変更することができるが、このような書き込みの結果、間違ったレジスタ値がスタックから押し出されて、間違ったレジスタに返されて格納される可能性が高い。このためユーザは一般に、スタッキング動作が発生する前にスタック・ポインタ・レジスタ１６１に＄（初期値）を書き込む以外には、スタック・ポインタ・レジスタ１６１への書き込みは行わない。図４のデータ処理システム１００では、ＲＡＭ１１４の一部がスタックとして用いられる可能性がきわめて高い。
【００４５】
図１に示す先行技術の方式の重要な欠点は、２つの割込みがその間に無割込み処理を入れずに折り返し処理されるたびに無駄なアンスタッキングおよび再スタッキングが発生することである。本発明では、割込みからの戻り（ＲＴＩ）命令に変更を加え、また割込みの処理方法に変更を加えることによって、割込み処理を改良する。
【００４６】
図２で円２９から円３０への流れは、図１の先行技術における円５から円６への流れに大体対応する。しかしながら一つの重要な違いは、図１の円７に対応する再入点が図２の流れにはないことである。
【００４７】
図１に示す円６から円８への流れ全体が図３の流れによって置き換えられている。図３を見ると、これにより本発明は、後続割込みを次に処理するか否かによって、ＲＴＩ命令の間にたどることができるパスを２つ提供することになる。ＲＴＩ命令は常にレジスタ１５４〜１５７（矩形４１を参照）をアンスタックするが、図１の流れと違って、プログラム・カウンタ・レジスタ１５８はアンスタックしても、アンスタックしなくてもよい。さらに割込みを行わない場合（すなわち、ひし形５２またはひし形５３で「いいえ」を選択すると）、流れは、スタック上に残っている一つのレジスタであるプログラム・カウンタ・レジスタ１５８をアンスタックして、無割込み処理に戻る（矩形４６，円３２および円２９参照）。
【００４８】
しかしながらさらに割込みを行う場合（すなわち、ひし形５２，５３から「はい」をたどると）、スタック・ポインタは調整されるが、スタッキングは実行されない。この点がキー・ポイントである。レジスタ値をスタックにプッシュすることによって、そのレジスタ値は、スタックとして使用中のメモリ内のその場所にあったいかなる値の上にも上書きされる。しかしながらレジスタ値をスタックから押し出しても、スタックとして使用中のメモリ内に格納されている値はいずれも変化しない。このためレジスタ１５４〜１５７（矩形４１参照）をアンスタッキングしても、レジスタ１５４〜１５７からの値は、スタックとして使用中のメモリ（例、ＲＡＭ１１４）内にそのまま格納されているという事実は変化しない。しかしながらアンスタッキング動作によって、スタック・ポインタは増分調整され、その時点でプログラム・カウンタ・レジスタ１５８を示すようになる。このレジスタはまだアンスタックされていない唯一のレジスタである。
【００４９】
スタック・ポインタを調整する量を適切にすれば（矩形４２参照）、レジスタ１５４〜１５７の値は、スタックとして使用中のメモリ内にそのまま物理的に存在するので、実際にレジスタ１５４〜１５７を再スタックする必要はない。このためレジスタ１５４〜１５７を再スタックするスタッキング動作は常に、対応するスタック場所のそれぞれに全く同じレジスタ値を上書きする効果しか持たない。しかしながらスタッキング動作にはスタック・ポインタを増分調整する効果も有する。
【００５０】
本発明は、すぐにもう一つの割込みを行う場合に、プログラム・カウンタ・レジスタ１５８をアンスタッキングする必要性、およびレジスタ１５４〜１５７を再スタッキングする必要性を回避する。レジスタ１５４〜１５７を再スタックする代わりに、スタック・ポインタは適正な量だけ調整されて、アンスタックする最初のレジスタのスタック位置を指し示す。このためスタック・ポインタ値は、全部のレジスタが実際に再スタックされた場合にスタック・ポインタがとる値に調整される。但し、スタッキングは行われない。
【００５１】
図に示す本発明の実施例では、スタック・ポインタ・レジスタ１６１は別にして、すべてのレジスタをスタックするために９バイトが必要である。このためスタック・ポインタ値は、スタッキング動作またはアンスタッキング動作が行われずに、＄（初期値）−９の値に調整される。本発明の別の実施例は、これより多くのまたは少ないレジスタをスタックするので、スタック・ポインタを調整しなければならない量は各種の実施例によって異なる。また本発明の別の実施例では複数の調整量をとることも可能である。たとえばごく少数のレジスタをスタックしなければならない状況では、スタック・ポインタは、より少ない所定量の調整を行えばよい。しかし、ほとんどのレジスタをスタックしなければらならい状況では、スタック・ポインタはより大きな所定量の調整を行わなければならない。
大抵のデータ処理システム１００では、スタック・ポインタ値を直接調整するのに要する時間の方が、複数のレジスタを実際にスタックまたはアンスタックするのに要する時間より大幅に少ない。このため本発明の結果、一部データ処理システム１００では、実行時間が大幅に節約することができる。
【００５２】
先行技術で注意すべきことは、スタック・ポインタ・レジスタ１６１の増分および減分は各スタッキング動作およびアンスタッキング動作の自然な副産物であったことである。しかしながら本発明では、スタック・ポインタ・レジスタ１６１内の値は、ユーザによる書き込みアクセスがなくても、またスタッキング動作またはアンスタッキング動作の実行がなくても、マイクロプロセッサのハードウェアによって自動的に調整できる。
【００５３】
図２および図３を参照すると、スタック・ポインタは、スタックに１バイトがプッシュされるたびに依然減分され、スタックから１バイト押し出されるたびに依然増分される。このためレジスタ１５４〜１５８（合わせて９バイトから構成される）が全部スタックにプッシュされる場合には、その結果、スタック・ポインタは９減分する。このため楕円６０，６１は、矩形３６のスタッキング動作の前にスタック・ポインタが＄（初期値）の値で開始した場合には、スタック・ポインタは、スタッキング動作完了後、＄（初期値）−９の値をとることを示す。楕円６１，６２は、矩形４１のアンスタッキング動作の前にスタック・ポインタが＄（初期値）−９の値で開始した場合には、スタック・ポインタは、プログラム・カウンタ・レジスタ１５８がアンスタックされなかったアンスタッキング動作完了後、＄（初期値）−２の値をとることを示す。
【００５４】
楕円６３は、スタッキング動作またはアンスタッキング動作なしに、スタック・ポインタ・レジスタ１６１に対して直接調整が行われた後の、スタック・ポインタ値を示す。このスタック・ポインタ値は、レジスタ１５４〜１５７が実際に再スタックされた場合にとる値に調整された。矩形４２記載のスタック・ポインタの直接調整は、ユーザが、スタック・ポインタ・レジスタ１６１に書き込みアクセスを行わなくても達成される。
【００５５】
図３を参照すると、破線の間の流れの段階は、本発明を用いて割込みからの戻り（ＲＴＩ）命令の間に実施される段階である。先行技術のＲＴＩ命令（図１参照）の実行とは明らかに異なっている。ＲＴＩ命令の実行が完了した後、矩形４２〜４５が実行される。次の割込みベクトルが取り込まれて、プログラム・カウンタ・レジスタ１５８にロードされる。ついで次の割込みサービス・ルーチンの実行が開始される。その後流れは円３１にジャンプして戻る。割込みサービス・ルーチンは、ユーザが所望するファンクションを何でも実行する一つまたは複数のソフトウェア命令（図示せず）によって構成できる。ＲＴＩ命令は、あらゆる割込みサービス・ルーチンにおいて最後の命令になることを目的とする。ＲＴＩ命令の実行が開始されると、流れは振出に戻って矩形４０に返る。
【００５６】
レジスタ１５４〜１５７（矩形４１参照）のアンスタッキングは、各割込みサービス・ルーチンが処理を開始する前に、レジスタ１５４〜１５７を同じ初期状態に常に戻す効果を有する。これは、現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーとのソフトウェア互換性を確保する上で役立つ。
【００５７】
図３のひし形５２は、次の割込みが切迫しているか否か決定するもので、多岐に渡る方法で実現できる。本発明の一つの実施例では、割込み論理１７４（図６）が、割込みが切迫しているか否かを決定する。割込み論理１７４は、バス１４０から受信中の一つまたは複数の特定の信号をモニターする。本発明の一実施例では、割込みソースは、バス１２０またはバス１２２の適切な信号をアサートすることによって、割込みを要求できる。割込みソースは、データ処理システム１００内の図に示したどの部分に置いてもよく、またはデータ処理システム１００の外部に位置してもよい。ついで割込み論理１７４はバス１４２，バス１４０およびバス１６０を介してこの信号を受信して、割込みが要求されているか否か、それが充分に高い優先順位であるかを決定する。
【００５８】
本発明の一実施例では、図２のひし形５０は、図３のひし形５２と同じ方法で実現される。
【００５９】
また本発明の一部の実施例では、ソフトウェア割込み（ＳＷＩ）などの命令が割込みを要求できる。ソフトウェア割込みの場合には、割込み論理１７４は命令パイプ・デコード論理１３６またはマイクロＲＯＭとその関連論理１３４によって、要求を受け取ることができる。注意すべきことは、本発明の一実施例では、ソフトウェア割込みは、ＳＷＩ命令が実行されるまで、切迫する割込みと見なされないので、ＳＷＩ命令はひし形５２で「いいえ」をたどることである。
【００６０】
割込みが切迫しているか否か決定するために割込み論理１７４が用いる方式は、現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーで使用されている方式と同じで、これはこの分野では周知のものである。同様に注意すべきことは、割込み優先順位を決定するために割込み論理１７４が使用する方式も、現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーと同じであって、この分野では周知のものであることである。
【００６１】
図３のひし形５３は、次の割込みがアンマスクであるか否かを決定するもので、多岐に渡る方法で実現できる。割込みが「マスク状態」の場合には、割込みは当該時間ポイントでは処理されない。しかしながら割込みはこのまま保留を続けることもできるし、「アンマスク」状態になる将来の時間ポイントで処理することもできる。割込みが「アンマスク」すなわち「マスクされていない」場合には、割込みが処理される。本発明の一実施例では、割込みがアンマスクであるか否かを決定するために、条件コード・レジスタ１５７に位置する割込みマスク・ビット（Ｉビット）１６４が使用される。現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーでもそうだが、一定の割込みだけがマスクされる。
【００６２】
本発明の一実施例では、図２のひし形５１は、図３のひし形５３と同じ方法で実現される。
【００６３】
Ｉビット１６４は、割込みのネスティングを制御する一つの方法として使用される。Ｉビット１６４がアサートされると（図に示す実施例では論理レベル１）、割込みがマスクされてつぎつぎに割込みをできなくなる。Ｉビット１６４がニゲート（図に示した実施例で論理レベル０）されると、割込みはアンマスクになり、つぎつぎに割込みをできる。本発明は、割込みがアンマスクであるか否かを決定するのにＩビット１６４を使用するが（ひし形５１，５３を参照）、Ｉビット１６４は、現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーと同じ方法でアサートされニゲートされる。
【００６４】
図に示した本発明の実施例では、Ｉビット１６４が引き続き設定される場合には、切迫している割込みが、現在の割込みに割り込むことは阻止される。このため現在の割込みが完了してから、次の割込みを受け入れて処理を開始することができる。このため各割込みサービス・ルーチンは、ＲＴＩ命令とは独立してレジスタのスタッキングおよびアンスタッキングを実行する必要はない。
【００６５】
しかしながらＩビット１６４がクリア状態を続ける場合には、切迫している割込みが現在の割込みに割り込むのは阻止されない。このため現在の割込みが完了しない内に、次の割込みが受け入れられて処理が開始されることもある。このため各割込みサービス・ルーチンは、ＲＴＩ命令とは独立してレジスタのスタッキングおよびアンスタッキングを実行する必要があるかもしれない。このためＩビット１６４がクリアされている場合には、本発明によるスタッキングおよびアンスタッキング時間の節約は達成できない。
【００６６】
割込み論理１７４は、条件コード・レジスタ１５７から割込みマスク・ビット（Ｉビット）１６４を受け取り、このＩビット１６４を使用して、割込みがアンマスクか否かを決定する。割込みがマスクされているか決定するために割込み論理１７４が用いる方式は、現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーが使用する方式と同じで、当業者には周知のものである。
【００６７】
図６のモード・ビット１６２は、データ処理システム１００が第１モードであるか第２モードであるかを決定するために使用される。データ処理システム１００が第１モードの場合には、割込み処理中のスタッキングおよびアンスタッキングは、現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーと同じように発生する。すなわち、図１に示すのと同じやり方である。データ処理システム１００が第２モードの場合には、割込み処理中のレジスタのスタッキングおよびアンスタッキングは、本発明に従って発生する。すなわち、図２および図３に示したのと同じやり方である。
【００６８】
現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーで使用されるＸビット（図示せず）もまた、条件コード・レジスタ１５７内に位置する。Ｘビットの機能性は本発明によって影響を受けない。
【００６９】
要約すれば、上記仕様はデータ処理システム１００におけるレジスタのスタッキングおよびアンスタッキングの問題に対するより時間効率の高い解決策を示したものである。本発明は、データ処理システム１００が第１の割込みの割込み処理を完了し、その直後に処理しなければならない第２割込みを有する場合に、大幅に時間を節約する。
【００７０】
現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーでは、割込みからの戻り（ＲＴＩ）命令によって、スタック・ポインタ・レジスタ１６１を除くすべてのレジスタがアンスタックされる。ついで第２割込みが切迫していてこれを処理すべきであるとマイクロプロセッサが決定した後、同じレジスタ（１５４〜１５８）が再スタックされる。本発明は、このような冗長なアンスタッキングおよびスタッキングを排除する。
【００７１】
ＲＴＩ命令中にレジスタをアンスタッキングして、次の割込みが行われる場合に単純に同じレジスタを再スタッキングする代わりに、本発明では、スタック・ポインタの値を変更することによって、プログラム・カウンタ・レジスタ１５８のアンスタッキング、およびレジスタ１５４〜１５８の再スタッキングを排除する。本発明は、スタックからレジスタ値を押し出しても、スタックとして使用中のメモリ内に格納された値がいずれも変化しないという事実を利用する。そのためレジスタ１５４〜１５７（矩形４１参照）のアンスタッキングによっても、レジスタ１５４〜１５７の値が、スタック（例：ＲＡＭ１１４）として使用中のメモリ内にそのまま格納されているという事実は変化しない。
【００７２】
このため２つの割込みがその間に無割込み処理を入れないで折り返し処理されるたびに、本発明は、スタッキングまたはアンスタッキングなしに、スタック・ポインタ値を調整することによって、大幅に時間を節約する。
【００７３】
本発明は具体的な実施例を参照して説明してきたが、当業者はこの他にも変更および改良を行おう。たとえば、本発明の別の実施例では、データ処理システム１００はどのような種類のアーキテクチャでも使用できる。図４に示すアーキテクチャは使用可能な一つのアーキテクチャに過ぎない。別の実施例では、データ処理システム１００はＣＰＵ１０２だけでもよく、または図４に示すよりも少なくても、または多くても、または異なる部分を有してもよい。同様に、図５で示すＣＰＵ１０２、および図６に示す実行装置１３２の部分は別の構造を使用してもよい。
【００７４】
対応するスタッキングまたはアンスタッキング動作なしに、またユーザによる書き込みアクセスなしに行う、スタック・ポインタの調整は、割込み以外の他の状況でも使用できる。
【００７５】
したがって、本発明は図示した個々の形態に限定されず、添付請求の範囲は、本発明の真正の意図および範囲から逸脱しないすべての変形をカバーすることを意図していることを理解されたい。
【図面の簡単な説明】
【図１】現在のＭＣ６８ＨＣ１１マイクロプロセッサ・ファミリーにおいて割込み処理中に実施される先行技術のレジスタ・スタッキングおよびアンスタッキングを流れ図で表したものである。
【図２】本発明の一実施例に基づくデータ処理システム１００において割込み処理中に実施されるレジスタ・スタッキングおよびアンスタッキングを流れ図で表したものである。
【図３】本発明の一実施例に基づくデータ処理システム１００において割込み処理中に実施されるレジスタ・スタッキングおよびアンスタッキングを流れ図で表したものである。
【図４】本発明の一実施例に基づくデータ処理システム１００をブロック図で示したものである。
【図５】本発明の一実施例に基づく図４の中央演算処理装置（ＣＰＵ）１０２をブロック図で示したものである。
【図６】本発明の一実施例に基づく図５の実行装置１３２の一部をブロック図で示したものである。
【符号の説明】
５  流れのスタート・ポイント，再入点
７  割込みサービス・ルーチンにおいて割込みからの戻り（ＲＴＩ）命令の実行が完了する直後にあたる、流れの再入点
８  Ｃに戻る
１０  無割込み処理を続ける
１１  レジスタＰＣ，Ｙ，Ｘ，Ａ，Ｂ，ＣＣＲをスタックする
１２  割込みベクトルを取り込む
１３  割込みベクトルをＰＣにロードする
１４  割込みサービス・ルーチンの実行を開始する
１５  割込みからの戻り（ＲＴＩ）命令の実行を開始する
１６  レジスタＰＣ，Ｙ，Ｘ，Ａ，Ｂ，ＣＣＲをアンスタックする
２０  割込みが切迫しているか？
２１  その割込みはアンマスクであるか？
２５  ＳＰ＝＄初期値
２６  ＳＰ＝＄初期値−９
２７  ＳＰ＝＄初期値
２９  スタート・ポイント
３０  Ｂに戻る
３１  割込みサービス・ルーチンにおいて割込みからの戻り（ＲＴＩ）命令が実行を開始する直前にあたる、流れのポイント
３２  Ａに戻る
３３  Ｂに戻る
３５  無割込み処理を続ける
３６  レジスタＰＣ，Ｙ，Ｘ，Ａ，Ｂ，ＣＣＲをスタックする
３７  第１割込みベクトルを取り込む
３８  第１割込みベクトルをＰＣにロードする
３９  第１割込みサービス・ルーチンの実行を開始する
４０  割込みからの戻り（ＲＴＩ）命令の実行を開始する
４１  レジスタＣＣＲ，Ｂ，Ａ，Ｘ，Ｙ（ＰＣを除く）をアンスタックする
４２  スタック・ポインタをＳＰ＝＄初期値−９に調整するが、スタッキングは行わない
４３  次の割込みベクトルを取り込む
４４  次の割込みベクトルをＰＣにロードする
４５  次の割込みサービス・ルーチンを開始する
４６  ＰＣをアンスタックして無割込み処理に戻る
５０  第１割込みが切迫しているか？
５１  第１割込みがアンマスクであるか？
５２  次の割込みが切迫しているか？
５３  次の割込みがアンマスクであるか？
６０  ＳＰ＝＄初期値
６１  ＳＰ＝＄初期値−９
６２  ＳＰ＝＄初期値−２
６３  ＳＰ＝＄初期値−９
１００  データ処理システム
１０２  ＣＰＵ
１０４  システム・インテグレーション・セクション
１０６  読出し専用メモリ（ＲＯＭ）
１０８  電気的に消去可能なプログラム可能読出し専用メモリ（ＥＥＰＲＯＭ）
１１０  パルス幅変調セクション
１１２  アナログ・デジタル変換器
１１４  ランダム・アクセス・メモリ（ＲＡＭ）
１１６  逐次セクション
１１８  タイマ・セクション
１２０  バス
１２２，１２４，１２６，１２８，１３０  集積回路ピン
１３２  実行装置
１３４  マイクロＲＯＭとその関連論理
１３６  命令パイプ・デコード論理
１３８  バス制御論理
１４０，１４１，１４２  バス回路
１５０  累算器Ａレジスタ
１５２  累算器Ｂレジスタ
１５４  累算器Ｄレジスタ
１５５  インデックス・レジスタＸ
１５６  インデックス・レジスタＹ
１５７  条件コード・レジスタ
１５８  プログラム・カウンタ・レジスタ
１５９，１６０  バス
１６１  スタック・ポインタ・レジスタ
１６２  モード・ビット
１６４  割込みマスク・ビット（Ｉビット）
１６６  演算論理装置（ＡＬＵ）とその関連論理回路
１６８  データ・バッファ
１７０  制御論理
１７２  スタッキングおよびアンスタッキング論理
１７４  割込み論理
【図１】
0003655930.tif 000002
【図２】
0003655930.tif 000003
【図３】
0003655930.tif 000004
【図４】
0003655930.tif 000005
【図５】
0003655930.tif 000006
【図６】
0003655930.tif 000007