(57)【特許請求の範囲】
【請求項１】
データが積まれるスタック領域と、複数の命令が格納されたプログラム領域とを有するメモリに接続され、命令を順次取り込んで実行するマイクロプロセッサにおいて、
前記スタック領域に戻りアドレスを積んで、前記プログラム領域上の分岐先アドレスに分岐する分岐命令を実行する分岐命令実行回路と、
前記分岐先アドレスに格納された命令が所定のスタック構築命令であるか否かを判定する判定回路とを備え、
前記分岐命令実行回路が、前記判定回路により、前記分岐先アドレスに格納された命令が所定のスタック構築命令であると判定されたか否かに応じて、前記スタック領域に、それぞれ、相対的に語長が長い戻りアドレスもしくは相対的に語長が短い戻りアドレスを積むものであることを特徴とするマイクロプロセッサ。
【請求項２】
前記メモリが、それぞれに前記プログラム領域および前記スタック領域の両方が設けられてなる２つのアドレス空間部分からなるアドレス空間を有するものであり、
前記分岐命令実行回路が、前記判定回路により、前記分岐先アドレスに格納された命令が所定のスタック構築命令であると判定されたか否かに応じて、それぞれ、相対的に語長が長い戻りアドレスを、該スタック構築命令が存在するアドレス空間部分に設けられたスタック領域に積み、あるいは相対的に語長が短い戻りアドレスを、前記分岐命令が存在するアドレス空間部分に設けられたスタック領域に積むものであることを特徴とする請求項１記載のマイクロプロセッサ。
【請求項３】
データが積まれるスタック領域と、複数の命令が格納されたプログラム領域とを有するメモリに接続され、命令を順次取り込んで実行するマイクロプロセッサにおいて、
前記スタック領域に戻りアドレスを積んで分岐先アドレスに分岐する分岐命令を実行する分岐命令実行回路と、
前記分岐命令実行回路によりスタック領域に積まれた戻りアドレスを再構築するスタック構築命令を実行するスタック構築命令実行回路とを備え、
前記分岐命令実行回路が、相対的に語長が短い戻りアドレスを前記スタック領域に積むとともに、相対的に語長が長い戻りアドレスを保存しておくものであって、
前記スタック構築命令実行回路が、前記スタック領域に積まれた相対的に語長が短い戻りアドレスを、前記分岐命令実行回路によって保存された相対的に語長が長い戻りアドレスに変更するものであることを特徴とするマイクロプロセッサ。
【請求項４】
前記メモリが、それぞれに前記プログラム領域および前記スタック領域の両方が設けられてなる２つのアドレス空間部分からなるアドレス空間を有するものであり、
前記分岐命令実行回路が、相対的に語長が短い戻りアドレスを前記分岐命令が存在するアドレス空間部分に設けられたスタック領域に積み前記分岐命令が存在するアドレス空間部分を前記２つのアドレス空間部分の中から特定する空間部分情報を保存するとともに、相対的に語長が長い戻りアドレスを保存しておくものであり、
前記スタック構築命令実行回路が、前記分岐命令実行回路によって保存された空間部分情報により特定されるアドレス空間部分に設けられたスタック領域に積まれた相対的に語長が短い戻りアドレスを読み出して、前記スタック構築命令が存在するアドレス空間部分に設けられたスタック領域に、前記分岐命令実行回路によって保存された相対的に語長が長い戻りアドレスを積むものであることを特徴とする請求項３記載のマイクロプロセッサ。
【請求項５】
前記分岐命令を受け付け、受け付けた分岐命令を前記分岐命令実行回路に優先的に実行させる割り込み受付回路を備えたことを特徴とする請求項１または３記載のマイクロプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、命令を取り込んで実行するマイクロプロセッサに関する。
【０００２】
【従来の技術】
近年のＬＳＩ技術の発達によって、メモリの大容量化が進んでおり、それに伴って、広いアドレス空間を取り扱うことができる新型マイクロプロセッサが開発されている。このような新型マイクロプロセッサは、狭いアドレス空間のみを取り扱うことができる旧型マイクロプロセッサ用に開発された、過去の資産であるソフトウェアを利用することができるように、いわゆる互換性が確保されていることが望まれている。また、当然ながら、広いアドレス空間を自由に利用することができるように、いわゆる拡張性を持つことも望まれている。
【０００３】
このような要請の下、従来の新型マイクロプロセッサには、旧型マイクロプロセッサ用のソフトウェアで使用されている、狭いアドレス空間を前提とする旧命令と、新たに、旧命令と対応するように定義された、広いアドレス空間を前提とする新命令が用意されており、コール命令やリスタート命令といった、スタックに戻りアドレスを積むとともに分岐先アドレスに分岐する分岐命令については、スタックに、狭いアドレス空間に対応する、語長が短い戻りアドレスが積まれる旧分岐命令と、スタックに、広いアドレス空間に対応する、語長が長い戻りアドレスが積まれる新分岐命令が用意されている。
【０００４】
このような旧分岐命令による分岐が行われた場合には、その分岐後に分岐先から分岐元へ戻る際には、語長が短い戻りアドレスに基づいて分岐元へ戻らなければならない。このため、旧分岐命令の実行後、正常にプログラムが進行するためには、分岐先と分岐元との位置関係が、所定の限定条件を満たしている必要があり、通常は、プログラマによって、この限定条件を満たす位置で旧分岐命令が実行されるようにプログラムが設計される。
【０００５】
【発明が解決しようとする課題】
しかし、旧分岐命令は、プログラム上の、プログラマによって予定された位置で実行されるだけでなく、旧分岐命令を前提として設計された周辺回路により、プログラム上の、プログラマが予測不可能な位置で実行される場合もある。
【０００６】
例えば、割り込み回路によって旧分岐命令が割り込まれて優先的に実行される場合や、デバッグ装置によって、プログラム上の命令が旧分岐命令に書き換えられる場合等には、割り込みが発生する位置や、命令が書き換えられる位置は、プログラマには予測ができない。このため、プログラムの正常な進行が保証されないという問題がある。
【０００７】
しかも、このような、旧分岐命令を前提として設計された周辺回路を、新分岐命令を前提として設計変更することは、困難である場合や不可能である場合がある。
【０００８】
本発明は、上記事情に鑑み、プログラム上の、プログラマが予測不可能な位置で旧分岐命令が実行される場合であっても、プログラムを正常に進行することができるマイクロプロセッサを提供することを目的とする。
【０００９】
【課題を解決するための手段】
上記目的を達成する本発明の第１のマイクロプロセッサは、データが積まれるスタック領域と、複数の命令が格納されたプログラム領域とを有するメモリに接続され、命令を順次取り込んで実行するマイクロプロセッサにおいて、
スタック領域に戻りアドレスを積んで、プログラム領域上の分岐先アドレスに分岐する分岐命令を実行する分岐命令実行回路と、
分岐先アドレスに格納された命令が所定のスタック構築命令であるか否かを判定する判定回路とを備え、
分岐命令実行回路が、判定回路により、分岐先アドレスに格納された命令が所定のスタック構築命令であると判定されたか否かに応じて、スタック領域に、それぞれ、相対的に語長が長い戻りアドレスもしくは相対的に語長が短い戻りアドレスを積むものであることを特徴とする。
【００１０】
本発明の第１のマイクロプロセッサは、上記メモリが、それぞれに上記プログラム領域および上記スタック領域の両方が設けられてなる２つのアドレス空間部分からなるアドレス空間を有するものであり、
上記分岐命令実行回路が、上記判定回路により、上記分岐先アドレスに格納された命令が所定のスタック構築命令であると判定されたか否かに応じて、それぞれ、相対的に語長が長い戻りアドレスを、スタック構築命令が存在するアドレス空間部分に設けられたスタック領域に積み、あるいは相対的に語長が短い戻りアドレスを、上記分岐命令が存在するアドレス空間部分に設けられたスタック領域に積むものであることが好適である。
【００１１】
上記目的を達成する本発明の第２のマイクロプロセッサは、データが積まれるスタック領域と、複数の命令が格納されたプログラム領域とを有するメモリに接続され、命令を順次取り込んで実行するマイクロプロセッサにおいて、
スタック領域に戻りアドレスを積んで分岐先アドレスに分岐する分岐命令を実行する分岐命令実行回路と、
分岐命令実行回路によりスタック領域に積まれた戻りアドレスを再構築するスタック構築命令を実行するスタック構築命令実行回路とを備え、
分岐命令実行回路が、相対的に語長が短い戻りアドレスを前記スタック領域に積むとともに、相対的に語長が長い戻りアドレスを保存しておくものであって、スタック構築命令実行回路が、スタック領域に積まれた相対的に語長が短い戻りアドレスを、分岐命令実行回路によって保存された相対的に語長が長い戻りアドレスに変更するものであることを特徴とする。
【００１２】
ここで、「相対的に語長が長い戻りアドレスを保存しておく」とは、保存する場所を限定するものではなく、分岐命令実行回路内部に保存しても良く、マイクロプロセッサ内にレジスタ等を設けて、このレジスタ等に保存しても良く、スタック領域に保存しても良い。また、相対的に語長が長い戻りアドレス全体を保存しても良く、相対的に語長が短い戻りアドレスを越える部分のみを保存しても良い。
【００１３】
本発明の第２のマイクロプロセッサは、上記メモリが、それぞれに上記プログラム領域および上記スタック領域の両方が設けられてなる２つのアドレス空間部分からなるアドレス空間を有するものであり、
上記分岐命令実行回路が、相対的に語長が短い戻りアドレスを上記分岐命令が存在するアドレス空間部分に設けられたスタック領域に積み上記分岐命令が存在するアドレス空間部分を２つのアドレス空間部分の中から特定する空間部分情報を保存するとともに、相対的に語長が長い戻りアドレスを保存しておくものであり、
上記スタック構築命令実行回路が、分岐命令実行回路によって保存された空間部分情報により特定されるアドレス空間部分に設けられたスタック領域に積まれた相対的に語長が短い戻りアドレスを読み出して、上記スタック構築命令が存在するアドレス空間部分に設けられたスタック領域に、分岐命令実行回路によって保存された相対的に語長が長い戻りアドレスを積むものであることが好適である。
【００１４】
本発明の第１および第２のマイクロプロセッサは、上記分岐命令を受け付け、受け付けた分岐命令を上記分岐命令実行回路に優先的に実行させる割り込み受付回路を備えたものであることが望ましい。
【００１５】
この割り込み受付回路は、戻りアドレスが適切にスタック領域に積まれるまで分岐命令の受け付けを禁止する回路が付された回路であっても良い。
【００１６】
【発明の実施の形態】
以下、本発明の実施形態について説明する。
【００１７】
図１は、本発明のマイクロプロセッサの第１実施形態を示す図である。
【００１８】
このマイクロプロセッサ１０は、２４ビットのアドレス空間を取り扱うことができ、１６ビットのアドレス空間を前提とした旧型マイクロプロセッサとの互換性を有する。また、このマイクロプロセッサ１０は、割り込み回路２０およびメモリ３０に、バス４０を介して接続されており、メモリ３０は、２４ビットのアドレス空間を有し、このアドレス空間上に、プログラムが格納されるプログラム領域３１と、データが積まれるスタック領域３２を有する。
【００１９】
このマイクロプロセッサ１０には、スタック領域３２に、１６ビットの戻りアドレスを積んで分岐アドレスに分岐する旧分岐命令と、スタック領域３２に積まれた１６ビットの戻りアドレスを、２４ビットの戻りアドレスに変更するスタック構築命令が用意されており、割り込み回路２０は、必要に応じて、マイクロプロセッサ１０に対して論理「１」の割り込み要求信号を出力すると共に、マイクロプロセッサ１０にバス４０を介して旧分岐命令を出力する。
【００２０】
また、このマイクロプロセッサ１０には、バス制御回路１１と、割り込み受付回路１２が備えられており、バス制御回路１１によって、バス４０を介したデータ入出力が制御される。割り込み受付回路１２にはＡＮＤゲート１２１が接続されており、このＡＮＤゲート１２１には、割り込み回路２０からの割り込み要求信号が入力される。また、割り込み受付回路１２は、ＡＮＤゲート１２１からの論理「１」の信号の入力を受けて、バス制御回路１１に対して、割り込み回路２０からのデータの受取りを、メモリからのデータの読込みよりも優先して行うように指示する。
【００２１】
また、このマイクロプロセッサ１０には、フェッチ・解読回路１３と、プログラムカウンタ１４が備えられており、フェッチ・解読回路１３によって、バス４０およびバス制御回路１１を介して、プログラム領域３１から命令がフェッチされ、あるいは割り込み回路２０からの命令が取り込まれる。その後、フェッチ・解読回路１３によって、命令が解読され、マイクロプロセッサの各部へ各部の動作を指示する信号が送られる。フェッチ・解読回路１３は、旧分岐命令を解読すると、その解読後、分岐先アドレスに格納されている命令をフェッチするまで、論理「０」の割り込み禁止信号をＡＮＤゲート１２１へ出力する。この結果、ＡＮＤゲート１２１の出力は、割り込み要求信号と割り込み禁止信号との論理和である論理「０」の信号となり、この出力が割り込み受付回路１２に入力されて割り込みが禁止される。プログラムカウンタ１４のカウント値は、フェッチ・解読回路１３によって命令がフェッチされる度に、プログラム領域３１上の、フェッチされた命令が格納されていたアドレスの次のアドレスを示す値に更新される。
【００２２】
また、このマイクロプロセッサ１０には、旧分岐命令実行回路１５と、レジスタ１６が備えられており、フェッチ・解読回路１３によって旧分岐命令が解読されると、旧分岐命令実行回路１５によって、プログラムカウンタ１４のカウント値に基づいて戻りアドレスが認識され、バス４０およびバス制御回路１１を介して、スタック領域３２に１６ビットの戻りアドレスが、後述する図２に示すように積まれるとともに、レジスタ１６に２４ビットの戻りアドレスが格納される。その後、旧分岐命令実行回路１５によって、プログラムカウンタ１４のカウント値が、分岐先アドレスを示すカウント値に更新され、フェッチ・解読回路１３によって、プログラムカウンタ１４のカウント値に基づいて、バス４０およびバス制御回路１１を介して、プログラム領域３１上の分岐先アドレスから命令がフェッチされる。
【００２３】
フェッチ・解読回路１３には、判定回路１３１が備えられており、判定回路１３１によって、フェッチ・解読回路１３が旧分岐命令の次にフェッチした命令がスタック構築命令であるか否かが判定される。
【００２４】
また、このマイクロプロセッサ１０には、スタック構築命令実行回路１７が備えられており、このスタック構築命令実行回路１７は、判定回路１３１による、フェッチ・解読回路１３が旧分岐命令の次にフェッチした命令がスタック構築命令であるとの判定結果を受けて、バス４０およびバス制御回路１１を介して、スタック領域３２から１６ビットの戻りアドレスを取り出し、レジスタ１６に格納されている２４ビットの戻りアドレスを取り込んで、バス４０およびバス制御回路１１を介して、スタック領域３２に、２４ビットの戻りアドレスを積む。これによって、スタック領域３２に積まれた戻りアドレスの再構築が行われることとなる。
【００２５】
図２は、第１実施形態のマイクロプロセッサによってスタック領域に構築されるデータ構造を示す図である。
【００２６】
スタック領域３２には、図の上方から下方へと向かってデータが積まれる。また、スタック領域３２には、図１に示すマイクロプロセッサ１０によって戻りアドレスが積まれる前に、分岐先で利用されるパラメータＤ１０が積まれている。
【００２７】
図２（Ａ）には、図１に示す旧分岐命令実行回路１５によって戻りアドレスが積まれる場合に構築されるデータ構造が示されており、パラメータＤ１０の次に、戻りアドレスの、第８ビットから第１５ビットまでの８ビット分Ｄ２０が積まれ、次に、戻りアドレスの、第０ビットから第７ビットまでの８ビット分Ｄ３０が積まれる。
【００２８】
図２（Ｂ）には、図１に示すスタック構築命令実行回路１７によって戻りアドレスが積み直される場合に構築されるデータ構造が示されており、パラメータＤ１０の次に、戻りアドレスの、第１６ビットから第２３ビットまでの８ビット分Ｄ４０が積まれ、次に、戻りアドレスの、第８ビットから第１５ビットまでの８ビット分Ｄ５０が積まれ、次に、戻りアドレスの、第０ビットから第７ビットまでの８ビット分Ｄ６０が積まれる。
【００２９】
これらのデータ構造は、最終的には、分岐先にスタック構築命令が存在するか否かに応じて、マイクロプロセッサによって選択されることとなるが、旧分岐命令によってプログラムが分岐される分岐先は、プログラム上の、分岐が発生する位置に関わらず、プログラマによって予め予定された位置である。従って、プログラマは、割り込み発生時等に予定されている分岐先にスタック構築命令を書き込むことによって、マイクロプロセッサに、２４ビットの戻りアドレスをスタックさせることができ、これによって、旧分岐命令の実行位置に関わらず、プログラムの正常な進行が保証される。
【００３０】
なお、第１実施形態では、レジスタに２４ビットの戻りアドレスが格納されるが、本発明のマイクロプロセッサは、相対的に語長が長い戻りアドレスのうちの、相対的に短い語長の戻りアドレスを越える部分のみを保存するものであってもよい。
【００３１】
以下、本発明のマイクロプロセッサの他の実施形態について説明するが、図１に示す回路等と同様の回路等については、同一の符号を付して重複説明を省略する。
【００３２】
図３は、本発明のマイクロプロセッサの第２実施形態を示す図である。
【００３３】
このマイクロプロセッサ５０には、スタック領域３２に戻りアドレスを積んで分岐先に分岐する旧分岐命令と、一種の標識であるスタック構築命令が用意されている。
【００３４】
また、このマイクロプロセッサ５０には、プリフェッチ回路５１が備えられており、プリフェッチ回路５１によって、フェッチ・解読回路１３で解読された命令の実行中に、その命令の次に実行される命令が、プログラムカウンタ１４のカウント値に基づいて、バス４０およびバス制御回路１１を介して取り込まれ、実行中の命令の実行が終了すると、プリフェッチ回路５１に取り込まれている命令がフェッチ・解読回路１３に送られる。
【００３５】
また、フェッチ・解読回路１３には、判定回路１３２が備えられており、判定回路１３２は、フェッチ・解読回路１３によって旧分岐命令が解読されると、プリフェッチ回路５１に取り込まれている、次に実行すべき命令がスタック構築命令であるか否かを判定する。
【００３６】
また、マイクロプロセッサ５０には、旧分岐命令実行回路５２が備えられており、旧分岐命令実行回路５２は、フェッチ・解読回路１３によって旧分岐命令が解読されると、プログラムカウンタ１４のカウント値に基づいて戻りアドレスを認識する。また、この旧分岐命令実行回路５２は、判定回路１３２によって、プリフェッチ回路５１に取り込まれている命令がスタック構築命令であると判定されると、バス４０およびバス制御回路１１を介して、スタック領域３２に、２４ビットの戻りアドレスを積み、スタック構築命令でないと判定されると、１６ビットの戻りアドレスを積む。その後、旧分岐命令実行回路５２は、プログラムカウンタ１４のカウント値を、分岐先アドレスを示す値に更新する。
【００３７】
上述した各動作の結果、第１実施形態同様に、分岐先アドレスに格納されている命令がスタック構築命令であるか否かに応じて、それぞれ、２４ビットの戻りアドレスあるいは１６ビットの戻りアドレスがスタック領域３２に積まれることとなり、プログラムの正常な進行が保証される。
【００３８】
なお、第２実施形態では、判定回路がフェッチ・解読回路内に備えられているが、本発明にいう判定回路は、フェッチ・解読回路とは独立の回路であっても良い。
【００３９】
図４は、本発明のマイクロプロセッサの第３実施形態を示す図である。
【００４０】
図１に示すマイクロプロセッサ１０同様に、図４に示すマイクロプロセッサ６０には、スタック領域３２に、１６ビットの戻りアドレスを積んで分岐アドレスに分岐する旧分岐命令と、スタック領域３２に積まれた１６ビットの戻りアドレスを、２４ビットの戻りアドレスに変更するスタック構築命令が用意されている。但し、本実施形態における、スタック領域３２に戻りアドレスを積む順序は、以下で説明するように、第１実施形態および第２実施形態における順序とは逆の順序となっている。
【００４１】
このマイクロプロセッサ６０には、スタックポインタ６１が備えられており、スタックポインタ６１は、スタック領域３２上の、スタック領域３２に積まれているデータのうちの、最後に積まれたデータが積まれているアドレスを示しており、スタックポインタ６１が示すアドレスに基づいて、バス４０およびバス制御回路１１を介した、スタック領域３２へのアクセスが行われるとともに、スタック領域３２へのアクセスが行われる度に、スタックポインタ６１が示すアドレスが更新される。
【００４２】
また、このマイクロプロセッサ６０には、旧分岐命令実行回路６２が備えられており、旧分岐命令実行回路６２は、フェッチ・解読回路１３によって旧分岐命令が解読されると、プログラムカウンタ１４のカウント値に基づいて戻りアドレスを認識し、２４ビットの戻りアドレスを、８ビット分ずつ、第１実施形態および第２実施形態とは逆に、下位側から順にスタック領域３２に積み、その後、スタックポインタ６１が示すアドレスを１アドレス戻す。これによって、後述する図５に示すように、スタック領域３２には、実質的に１６ビットの戻りアドレスが積まれることとなる。その後、この旧分岐命令実行回路６２は、プログラムカウンタ１４のカウント値を、分岐先アドレスを示す値に更新する。
【００４３】
また、このマイクロプロセッサ６０には、スタック構築命令実行回路６３が備えられており、判定回路１３１による、分岐先アドレスに格納されている命令がスタック構築命令であるとの判定結果を受けて、スタック構築命令実行回路６３によって、スタックポインタ６１が示すアドレスが１アドレス進められる。これによって、後述する図５に示すように、実質的に、スタック領域３２に積まれた１６ビットの戻りアドレスが、２４ビットの戻りアドレスに変更されることとなる。
【００４４】
図５は、第３実施形態のマイクロプロセッサによってスタック領域に積まれたデータの構造を示す図である。
【００４５】
図２に示すスタック領域同様に、図５に示すスタック領域３２には、図の上方から下方へとデータが積まれ、第１実施形態および第２実施形態とは逆順で積まれる戻りアドレスの前にはパラメータＤ１０が積まれている。
【００４６】
図５（Ａ）には、図４に示す旧分岐命令実行回路６２によって戻りアドレスが積まれた後のデータ構造が示されており、スタック領域３２には、図の上方から順に、戻りアドレスの、第０ビットから第７ビットまでの８ビット分Ｄ７０と、戻りアドレスの、第８ビットから第１５ビットまでの８ビット分Ｄ８０と、戻りアドレスの、第１６ビットから第２３ビットまでの８ビット分Ｄ９０が積まれており、スタックポインタは、図５（Ａ）に矢印で示すように、戻りアドレスの、第８ビットから第１５ビットまでの８ビット分Ｄ８０が積まれているアドレスを示す。このため、スタックポインタが示すアドレスよりも先のアドレスに積まれている、戻りアドレスの、第１６ビットから第２３ビットまでの８ビット分Ｄ９０は、いわば無視されて、スタック領域３２は、実質的に、１６ビットの戻りアドレスが積まれた状態となる。
【００４７】
図５（Ｂ）には、図４に示すスタック構築命令実行回路６３によりスタック構築命令が実行された後のデータ構造が示されている。上述したように、スタック構築命令実行回路６３は、スタックポインタを操作するだけの回路であるので、スタック領域３２に積まれているデータは、図５（Ａ）同様である。また、スタックポインタは、図５（Ｂ）に矢印で示すように、戻りアドレスの、第１６ビットから第２３ビットまでの８ビット分Ｄ９０が積まれているアドレスを示す。つまり、スタックポインタが示すアドレスが、図５（Ａ）に矢印で示された位置から、図５（Ｂ）に矢印で示された位置へと移動することとなり、実質的に、１６ビットの戻りアドレスが２４ビットの戻りアドレスに変更されることとなる。
【００４８】
結局、第１実施形態および第２実施形態同様に、第３実施形態でも、分岐先アドレスに格納されている命令がスタック構築命令であるか否かに応じて、それぞれ、２４ビットの戻りアドレスあるいは１６ビットの戻りアドレスがスタック領域３２に積まれることとなり、プログラムの正常な進行が保証される。
【００４９】
なお、第１実施形態および第３実施形態においてスタック構築命令実行回路は、分岐先アドレスにスタック構築命令が格納されていた場合にのみ、戻りアドレスの再構築を行うものであるが、本発明にいうスタック構築命令実行回路は、スタック構築命令の格納場所に関わらず、戻りアドレスの再構築が行われるものであってもよい。
【００５０】
ところで、上記では、メモリが有するアドレス空間上にスタック領域とプログラム領域が１つずつ設けられている実施形態について説明したが、狭いアドレス空間を前提とした旧型マイクロプロセッサとの互換性を有し広いアドレス空間を取り扱うことができる新型マイクロプロセッサが開発される場合には、スタック領域とプログラム領域が２つずつ設けられることが多い。つまり、新型マイクロプロセッサが取り扱うことができる広いアドレス空間のうち、旧型マイクロプロセッサが前提としている狭いアドレス空間に対応するアドレス空間部分（以下このアドレス空間部分のことを「従来空間部分」と称する）にスタック領域とプログラム領域が設けられるとともに、新型マイクロプロセッサが取り扱うことができる広いアドレス空間のうち従来空間部分を除くアドレス空間部分（以下このアドレス空間部分のことを「拡張空間部分」と称し、従来空間部分と拡張空間部分とを総称して「アドレス空間部分」と称する）にもスタック領域とプログラム領域が設けられる。
【００５１】
しかし、スタック領域が従来空間部分および拡張空間部分それぞれに設けられる場合には、スタック構築命令が用意されていても、戻りアドレスの再構築等が正常に行われずに、プログラムの進行に以上が生じる場合がある。
【００５２】
そこで、以下では、スタック領域が従来空間部分および拡張空間部分それぞれに設けられ、かつ、プログラムの正常な進行が保証されるように工夫が施された実施形態について説明する。
【００５３】
図６は、本発明のマイクロプロセッサの第４実施形態を示す図である。
【００５４】
この図６に示す回路等のうち、図１に示す回路等と同様の回路等については、同一の符号を付して重複説明を省略する。
【００５５】
この図６には、２４ビットのアドレス空間を有するメモリ３５が示されており、このメモリ３５のアドレス空間のうち、１６進数表示でアドレス「００００００」からアドレス「００ＦＦＦＦ」までが従来空間部分３６であり、１６進数表示でアドレス「０１００００」からアドレス「ＦＦＦＦＦＦ」までが拡張空間部分３７である。また、スタック領域およびプログラム領域の両方が従来空間部分３６および拡張空間部分３７それぞれに設けられている。
【００５６】
マイクロプロセッサ７０には、アドレス空間のページ（２４ビットのアドレスの上位８ビット分）を示すページレジスタ７１が備えられており、スタック領域へのアクセスを伴う命令が実行された場合には、ページレジスタ７１の値は、拡張空間部分３７に設けられたスタック領域が設けられているページを示しているものとする。
【００５７】
マイクロプロセッサ７０は、スタック領域へのアクセスを伴う従来の命令のうち旧分岐命令を除く命令が実行される場合には、原則としてその命令が格納されているアドレスが属する方のアドレス空間部分に設けられたスタック領域へのアクセスを行う。また、マイクロプロセッサ７０には、拡張空間部分３７に設けられたスタック領域へ、命令が配置されている場所にかかわらずアクセス可能な新命令が用意されている。
【００５８】
フェッチ・解読回路１３で旧分岐命令が解読されると、旧分岐命令実行回路１５によって、プログラムカウンタ１４の値が示すアドレスが属する方のアドレス空間部分に設けられているスタック領域に１６ビットの戻りアドレスが積まれ、レジスタ１６に２４ビットの戻りアドレスが保存され、プログラムカウンタ１４の値が分岐先アドレスを示す値に更新される。
【００５９】
また、マイクロプロセッサ７０には、空間選択レジスタ７２が備えられており、旧分岐命令実行回路１５によって１６ビットの戻りアドレスが積まれたスタック領域が設けられている方のアドレス空間部分が従来空間部分３６であると空間選択レジスタ７２の値が値「０」に設定され、拡張空間部分３７であると空間選択レジスタ７２の値が値「１」に設定される。
【００６０】
バス制御回路１１には、選択器１１１が備えられており、選択器１１１は、従来空間部分３６に相当するページを示す１６進数の値「００」およびページレジスタ７１が示す値のうちのいずれかの値を、空間選択レジスタ７２の値に応じて選択する。選択器１１１によって選択された値は、スタック構築命令実行回路１７が１６ビットの戻りアドレスをスタック領域から取り出す際に、バス制御回路１１によって、１６ビットの戻りアドレスが積まれている方のスタック領域が設けられているページ（アドレスの上位８ビット分）を示すものとして用いられる。
【００６１】
この結果、空間選択レジスタ７２の値が示す方のスタック領域から１６ビットの戻りアドレスが正常に取り出されて戻りアドレスの再構築が正常に行われ、これによって正常なプログラム進行が保証される。なお、本実施形態では、割込発生時の分岐先アドレスは必ず従来空間部分３６に属しており、これに対し、スタック構築命令実行回路１７は２４ビットの戻りアドレスを拡張空間部分３７に設けられているスタック領域に積む。そして、分岐先から分岐元へ戻るときには新命令が用いられて、拡張空間部分３７に設けられているスタック領域へのアクセスが行われることによってプログラムが正常に進行する。
【００６２】
図７は、本発明のマイクロプロセッサの第５実施形態を示す図である。
【００６３】
この図７に示す回路等のうち、図３および図６に示す回路等と同様の回路等については、同一の符号を付して重複説明を省略する。
【００６４】
この図７に示すマイクロプロセッサ８０には、空間判定回路８１が備えられており、フェッチ・解読回路１３で旧分岐命令が解読されると、空間判定回路８１によって、プログラムカウンタ１４が示す戻りアドレスが属しているアドレス空間部分が従来空間部分であるか拡張空間部分であるかが判定され、従来空間部分であると判定されると空間判定回路８１から値「０」が出力され、拡張空間部分であると判定されると値「１」が出力される。また、上述したように、フェッチ・解読回路１３によって旧分岐命令が解読されると、判定回路１３２は、プリフェッチ回路５１に取り込まれている、次に実行すべき命令がスタック構築命令であるか否かを判定する。スタック構築命令であると判定されると判定回路１３２から値「１」が出力され、スタック構築命令でないと判定されると値「０」が出力される。
【００６５】
フェッチ・解読回路１３で旧分岐命令が解読されると、上述したように、旧分岐命令実行回路５２によって、判定回路１３２による判定結果に応じたビット数の戻りアドレスがスタック領域に積まれる。また、旧分岐命令実行回路５２によって戻りアドレスが積まれるスタック領域は、以下説明するように、メモリ３５に設けられた２つのスタック領域の中からバス制御回路１１によって選択される。
【００６６】
バス制御回路１１には、ＮＯＲゲート１１２と、選択器１１３が備えられており、ＮＯＲゲート１１２には判定回路１３２の出力と空間判定回路８１の出力が入力される。従って、ＮＯＲゲート１１２からは、次に実行すべき命令がスタック構築命令でなく、かつ、戻りアドレスが属しているアドレス空間部分が従来空間部分である場合にだけ、値「１」が出力され、それ以外の場合には値「０」が出力される。
【００６７】
ＮＯＲゲート１１２の出力は選択器１１３に入力され、選択器１１３によって、従来空間部分３６に相当するページを示す１６進数の値「００」およびページレジスタ７１が示す値のうちのいずれかの値が、ＮＯＲゲート１１２の出力に応じて選択される。図６に示す選択器１１１によって選択された値が、戻りアドレスをスタック領域から取り出す際に用いられるのに対して、選択器１１３によって選択された値は、旧分岐命令実行回路５２によって戻りアドレスがスタック領域に積まれる際に、バス制御回路１１によるスタック領域の選択に用いられる。
【００６８】
このように、適切なビット数の戻りアドレスが適切な方のスタック領域に積まれ、これによってプログラムの正常な進行が保証されることとなる。
【００６９】
【発明の効果】
以上説明したように、本発明のマイクロプロセッサによれば、プログラム上の、プログラマが予測不可能な位置で旧分岐命令が実行される場合であっても、プログラムを正常に進行することができる。
【図面の簡単な説明】
【図１】本発明のマイクロプロセッサの第１実施形態を示す図である。
【図２】第１実施形態のマイクロプロセッサによってスタック領域に構築されるデータ構造を示す図である。
【図３】本発明のマイクロプロセッサの第２実施形態を示す図である。
【図４】本発明のマイクロプロセッサの第３実施形態を示す図である。
【図５】第３実施形態のマイクロプロセッサによってスタック領域に積まれたデータの構造を示す図である。
【図６】本発明のマイクロプロセッサの第４実施形態を示す図である。
【図７】本発明のマイクロプロセッサの第５実施形態を示す図である。
【符号の説明】
１０，５０，６０，７０，８０    マイクロプロセッサ
１１    バス制御回路
１２    割り込み受付回路
１４    プログラムカウンタ
１５，５２，６２    旧分岐命令実行回路
１６    レジスタ
１７，６３    スタック構築命令実行回路
２０    割り込み回路
３０，３５    メモリ
３１    プログラム領域
３２    スタック領域
３６    従来空間部分
３７    拡張空間部分
４０    バス
５１    プリフェッチ回路
６１    スタックポインタ
７１    ページレジスタ
７２    空間選択レジスタ
８１    空間判定回路
１１１，１１３    選択器
１１２    ＮＯＲゲート
１２１    ＡＮＤゲート
１３１，１３２    判定回路
【図１】
0003678330.tif 000002
【図２】
0003678330.tif 000003
【図３】
0003678330.tif 000004
【図４】
0003678330.tif 000005
【図５】
0003678330.tif 000006
【図６】
0003678330.tif 000007
【図７】
0003678330.tif 000008