(57)【要約】【課題】複数レジスタの退避、復帰処理を行うためのプログラムのプログラムコードサイズを小さくする。【解決手段】命令実行に利用可能な複数のレジスタを有し、命令セットに所定のデータ転送命令を含む。所定のデータ転送命令は、一群のレジスタの中から一つのレジスタの番号が明示的に指定される複数ビットのレジスタ指定フィールド（Ｒｍ、Ｒｎ）を有し、レジスタ指定フィールドで指定された番号以上又は以下の番号に対応するレジスタとメモリとの間のデータ転送を指示する。一群のレジスタから複数のレジスタを１オペランドで指定してメモリへの待避、メモリからの復帰が可能とされる。複数レジスタの退避、復帰処理を行うためのプログラムのプログラムコードサイズを小さくすることが可能である。所定の命令はオペランド数が１つだから１６ビット長に納めることが容易である。【選択図】        図１
2004151915.tif 000002
【特許請求の範囲】
【請求項１】
命令実行に利用可能な複数のレジスタを有するデータ処理装置であって、命令セットに所定のデータ転送命令を含み、
前記所定のデータ転送命令は、一群のレジスタの中から一つのレジスタの番号が明示的に指定される複数ビットのレジスタ指定フィールドを有し、レジスタ指定フィールドで指定された番号以上又は以下の番号に対応するレジスタとメモリとの間のデータ転送を指示することを特徴とするデータ処理装置。
【請求項２】
前記一群のレジスタは、汎用レジスタを含むことを特徴とする請求項１記載のデータ処理装置。
【請求項３】
前記一群のレジスタは、サブルーチンコール時に当該サブルーチンからの戻り先アドレスが格納されるプロシージャレジスタを含むことを特徴とする請求項２記載のデータ処理装置。
【請求項４】
前記所定のデータ転送命令は、レジスタ間接アドレシングモードを有し、レジスタ間接アドレシングモードで利用されるレジスタはレジスタ・メモリ間転送毎にインクリメント又はデクリメントされることを特徴とする請求項１記載のデータ処理装置。
【請求項５】
レジスタ間接アドレシングモードで利用されるレジスタはスタックポインタであることを特徴とする請求項４記載のデータ処理装置。
【請求項６】
前記所定のデータ転送命令は１６ビット長命令であることを特徴する請求項１記載のデータ処理装置。
【請求項７】
前記所定のデータ転送命令は、レジスタ指定フィールドで指定された番号を起点に当該番号以上の番号に対応するレジスタからメモリへのデータ転送を指示する第１ストア命令であることを特徴とする請求項１記載のデータ処理装置。
【請求項８】
前記所定のデータ転送命令は、レジスタ指定フィールドで指定された番号を起点に当該番号以上の番号に対応するレジスタにメモリからデータ転送を指示する第１ロード命令であることを特徴とする請求項１記載のデータ処理装置。
【請求項９】
前記所定のデータ転送命令は、レジスタ指定フィールドで指定された番号を起点に当該番号以下の番号に対応するレジスタからメモリへのデータ転送を指示する第２ストア命令であることを特徴とする請求項１記載のデータ処理装置。
【請求項１０】
前記所定のデータ転送命令は、レジスタ指定フィールドで指定された番号を起点に当該番号以下の番号に対応するレジスタにメモリからデータ転送を指示する第２ロード命令であることを特徴とする請求項１記載のデータ処理装置。
【請求項１１】
命令を解読して命令実行シーケンスを制御する命令制御部と、複数のレジスタとを有するデータ処理装置であって、
前記命令制御部は、特定のオペレーションコードと対を成す複数ビットのレジスタ指定フィールドで指定された番号を解読したとき、当該番号以上又は当該番号以下の番号に対応する一群のレジスタとメモリとの間のデータ転送を制御することを特徴とするデータ処理装置。
【請求項１２】
前記命令制御部は、レジスタ指定フィールドで指定可能とされる番号とレジスタの対応を制御レジスタの設定状態にしたがって可変可能であることを特徴とする請求項１１記載のデータ処理装置。
【請求項１３】
前記レジスタ指定フィールドの番号で指定可能にされる一群のレジスタは汎用レジスタを含むことを特徴とする請求項１１記載のデータ処理装置。
【請求項１４】
前記一群のレジスタは、データ処理装置内にある、汎用レジスタ以外の専用用途レジスタ群の中から選ばれた単数又は複数のレジスタを含むことを特徴とする請求項１３記載のデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データ処理装置におけるデータ転送技術、特にＣＰＵ（中央処理装置）内部のレジスタ等に対する退避及び復帰処理に関し、プログラム内蔵マイクロコンピュータに適用して有効な技術に関する。
【０００２】
【従来の技術】
関数コールや割り込みの際に、当該ルーチン中で用いるＣＰＵ内レジスタを、ルーチンの先頭でスタックに退避し、ルーチンの最後でスタックから復帰する。この退避・復帰を、各レジスタ１個ずつの転送命令で実施していた。このため、退避・復帰するレジスタ全本数分の転送命令が必要になり、プログラムサイズ（コードサイズ）の増大を招く。
【０００３】
特許文献１では退避命令／復帰命令において、命令コードに汎用レジスタを指定するコードを含み、指定するレジスタの組み合わせを連続するものとする技術が記載される。連続指定されるレジスタ本数はオペレーションコードで決まり、連続指定されるレジスタの組み合わせ態様はオペランドで選択可能にされる。
【０００４】
特許文献２には割込み発生時、退避する汎用レジスタを指定する手段を備え、指定された汎用レジスタをメモリに退避するようにしたデータ処理装置について記載がある。退避する汎用レジスタの指定は、ｎ本の汎用レジスタに対しｎビットのレジスタ指定フィールドを用い、ｎ本の汎用レジスタに対して任意に指定して退避・復帰を可能にする。
【０００５】
特許文献３にはスタックポインタを汎用レジスタ群の一部に割り当てると共に、一つのバンクブロックに対して退避／復帰するレジスタ個数を可変とする技術が記載される。例えば、夫々１６ビットの１６個の汎用レジスタ中で１個をスタックポインタに割当てて６４ｋバイトをアクセス可能とし、残り１５個を汎用レジスタとして利用可能にする利用形態、同じく夫々１６ビットの１６個の汎用レジスタ中で２個をスタックポインタに割当てて４Ｇバイトをアクセス可能とし、残り１４個を汎用レジスタとして利用可能にする利用形態等の選択が可能にされる。
【０００６】
【特許文献１】
特開２００２−１５７１１５号公報
【特許文献２】
特開平５−６２８１号公報
【特許文献３】
特開平５−３３４１００号公報
【０００７】
【発明が解決しようとする課題】
特許文献１に記載の技術では、退避／復帰できるレジスタ本数が、２本、３本、４本のように制限的であり、また、その組み合せも限定され、組み合わせを増やせばそれに応じてオペレーションコードの種類も増やさなくてはならない。
【０００８】
特許文献２に記載の如く、レジスタ単位で待避、復帰するか否かをビット指定すると命令フォーマット中の多くのフィールドを費やすことになり、命令長を短くすることができずプログラムサイズを削減する効果が小さくなる。また、敢えて命令長を短くしようとするとオペレーションコードのフィールドが短くなり、退避／復帰命令がオペレーションコードのコードマップ上で大きなエリアを費やすことになる。
【０００９】
特許文献３においては汎用レジスタそれ自体を退避、復帰する処理を行うためのプログラムのプログラムコードサイズ低減について考慮されていない。
【００１０】
本発明の目的は、複数レジスタの退避、復帰処理を行うためのプログラムのプログラムコードサイズを小さくすることが可能なデータ処理装置を提供することにある。
【００１１】
本発明の別の目的は、複数のレジスタを１オペランドで指定できる命令を用いて複数レジスタの待避、復帰が可能なデータ処理装置を提供することにある。
【００１２】
本発明の別の目的は、複数レジスタの待避、復帰の効率化によるデータ処理の高速化に寄与するデータ処理装置を提供することにある。
【００１３】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【００１４】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１５】
〔１〕本発明に係るデータ処理装置は、命令実行に利用可能な複数のレジスタを有し、命令セットに所定のデータ転送命令を含む。前記所定のデータ転送命令は、一群のレジスタの中から一つのレジスタの番号が明示的に指定される複数ビットのレジスタ指定フィールドを有し、レジスタ指定フィールドで指定された番号以上又は以下の番号に対応するレジスタとメモリとの間のデータ転送を指示する。前記一群のレジスタは例えば、汎用レジスタやプロシージャレジスタなどとされる。
【００１６】
例えば一群のレジスタを汎用レジスタＲ０〜Ｒｎとし、一群のレジスタの番号を０〜ｎとすれば、前記所定のデータ転送命令のレジスタ指定フィールドでレジスタ番号ｉが指定されていれば、そのオペレーションコードに応じて、Ｒｉ〜Ｒｎ又はＲｉ〜Ｒ０が退避又は復帰の対象にされて、メモリ間でのデータ転送が行われる。実際のレジスタの種類とレジスタ指定フィールドで指定された番号との対応は命令デコーダ等のロジックに従って決まる。従って、汎用レジスタＲ０〜Ｒｎにレジスタ番号０〜ｎを割り当てる義務はなく、汎用レジスタＲ０〜Ｒｎの一部のレジスタＲ０〜Ｒｊにレジスタ番号０〜ｊを、汎用レジスタＲ０〜Ｒｎ以外の所定のレジスタにｊ＋１〜ｎのレジスタ番号を割り当てるようにしてもよい。
【００１７】
上記手段によれば、一群のレジスタから複数のレジスタを１オペランドで指定してメモリへの待避、メモリからの復帰が可能とされる。したがって、複数レジスタの退避、復帰処理を行うためのプログラムのプログラムコードサイズを小さくすることが可能になる。前記所定の命令はオペランド数が１つだけなので、１６ビット長に納めることが容易である。複数レジスタの退避、復帰処理を行うためのプログラムのプログラムコードサイズを小さくすることが可能になるから、複数レジスタの待避、復帰のデータ処理効率が向上し、データ処理の高速化に寄与する。即ち、複数の転送命令で退避・復帰する場合は命令フェッチのための時間がかかったが、短いビット長の命令１つで複数レジスタの退避または復帰が可能になるため、命令フェッチに要する時間を無くすことができ、実行速度の向上を図ることができる。
【００１８】
上記した手段では、命令中の１オペランドで指定した番号に対しそれ以上、若しくはそれ以下の番号を持つレジスタを待避、復帰の対象とする命令を採用する。よって、レジスタ指定フィールドで指定可能な番号の途中の番号のレジスタだけをデータ転送の対象とすることはできない。このような制限は、待避、復帰の操作性を犠牲にするものではない。即ち、コンパイラのレジスタ管理において、待避、復帰すべき（サブルーチンや割込みサービスルーチン中で壊される）レジスタのレジスタ番号が、一般に上位若しくは下位に連続するように管理されているのが普通だからである。
【００１９】
プログラムコードサイズの削減について考察すると、レジスタ指定フィールドに４ビットを割り当ててもオペレーションコードには１２ビットを使うことができる。この場合、１６ビット長の１命令でコードマップ全体の１／４０９６しか消費しない。しかも待避、復帰に指定可能なレジスタ数は最大で１６個である。これに対し、特許文献２の技術を採用すると、レジスタ指定フィールドが１２ビットの場合には、待避、復帰に指定可能なレジスタ数は最大で１２個である上、１６ビット長の１命令でコードマップ全体の１／１６を消費することになって現実的ではない。特許文献２の技術で、１６ビット長の１命令でコードマップ全体の１／４０９６しか消費しなようにすると、逆に、指定可能なレジスタ数は最大で４個に減ってしまう。したがって、命令長の短いＣＰＵでも命令種を減らすことなく前記所定のデータ転送命令を命令セットに追加することが可能である。
【００２０】
プログラムコードサイズの削減によりオンチップのプログラムメモリの面積を削減することができる。複数レジスタの退避・復帰を１命令で処理することができるから、複数のデータ転送命令が不要になり、また、待避、復帰すべき複数のレジスタを１オペランド（４ビット）で指定できるのでオペコードは長く、命令長は短くすることができるからである。オンチップのプログラムメモリには記憶容量に対する比較的大きな制限があるので、この意味において、本発明はプログラムメモリをオンチップで有するデータ処理装置に好適である。オンチッププログラムメモリはマスクＲＯＭであっても、フラッシュメモリのような書き換え可能なＰＲＯＭであってもよい。
【００２１】
本発明の具体的な形態として、前記所定のデータ転送命令は、レジスタ間接アドレシングモードを有する。レジスタ間接アドレシングモードで利用されるレジスタはレジスタ・メモリ間転送毎にインクリメント又はデクリメントされる。レジスタ間接アドレシングモードで利用されるレジスタは例えばスタックポインタである。前記所定のデータ転送命令はサブルーチンコールや割り込みに際して実行される退避、復帰に利用される。
【００２２】
本発明の具体的な形態として、前記所定のデータ転送命令は、例えば、レジスタ指定フィールドで指定された番号を起点に当該番号以上の番号に対応するレジスタからメモリへのデータ転送を指示する第１ストア命令、レジスタ指定フィールドで指定された番号を起点に当該番号以上の番号に対応するレジスタにメモリからデータ転送を指示する第１ロード命令、レジスタ指定フィールドで指定された番号を起点に当該番号以下の番号に対応するレジスタからメモリへのデータ転送を指示する第２ストア命令、又はレジスタ指定フィールドで指定された番号を起点に当該番号以下の番号に対応するレジスタにメモリからデータ転送を指示する第２ロード命令等とされる。
【００２３】
〔２〕本発明の別の観点によるデータ処理装置は、命令を解読して命令実行シーケンスを制御する命令制御部と、複数のレジスタとを有し、前記命令制御部は、特定のオペレーションコードと対を成す複数ビットのレジスタ指定フィールドで指定された番号を解読したとき、当該番号以上又は当該番号以下の番号に対応するレジスタとメモリとの間のデータ転送を制御する。一群のレジスタから複数のレジスタを１オペランドで指定してメモリへの待避、メモリからの復帰が可能とされる、上記同様に作用する。
【００２４】
本発明の具体的な形態では、前記命令制御部は、レジスタ指定フィールドで指定可能とされる番号とレジスタの対応を制御レジスタの設定状態にしたがって可変可能である。即ち、レジスタフィールドのデコード論理が可変可能にされる。したがって、レジスタ指定フィールドで指定された番号以下又は以上の番号で特定されるレジスタの種類が可変になる。
【００２５】
前記レジスタ指定フィールドの番号で指定可能にされる一群のレジスタは、汎用レジスタ、プロシージャレジスタ、ベクタベースレジスタ、積和演算用レジスタ等の、データ処理装置内にある、汎用レジスタ以外の専用用途レジスタ群の中から選ばれた単数又は複数のレジスタ等であってもよい。
【００２６】
【発明の実施の形態】
《データプロセッサの全体》
図４には本発明の一例に係るデータプロセッサが示される。データプロセッサ１は、特に制限されないが、ＣＰＵ２、ＲＯＭ（リード・オンリ・メモリ）３、ＲＡＭ（ランダム・アクセス・メモリ）４、及び外部入出力回路６を有し、それら回路モジュールは内部バス７を共有する。内部バス７は、アドレス、データ及び制御信号の各バスによって構成される。ＣＰＵ２には浮動小数点演算ユニット（ＦＰＵ）５が接続される。
【００２７】
ＲＡＭ４はＣＰＵ２のワーク領域若しくはデータの一時記憶領域などに利用される。ＲＯＭ３はＣＰＵ２の動作プログラムを保有する。ＲＯＭ３はマスクＲＯＭ、或は電気的に書換え可能なフラッシュメモリによって構成される。外部入出力回路６はタイマカウンタ、シリアル入出力回路、入出力ポートなどによって構成される。
【００２８】
図５にはＣＰＵ２の一例が示される。ＣＰＵ２は命令制御部１０と実行部１１から成る。
【００２９】
命令制御部１０は、命令レジスタＩＲ、命令デコーダＤＥＣ、レジスタセレクタＲＥＳＬ、コントロールレジスタＣＲＧを有する。実行すべき命令は命令レジスタＩＲにフェッチされる。命令デコーダＤＥＣは命令レジスタＩＲにフェッチされた命令をデコードして、命令フェッチ・ブランチ制御等の命令実行手順を制御すると共に、実行部１１等に対する演算制御等を行う。命令に含まれるレジスタ指定フィールドで指定されたレジスタの選択はレジスタセレクタＲＥＳＬで行なわれる。レジスタセレクタＲＥＳＬによるレジスタ選択論理はその機能が固定化されているか、またはコントロールレジスタＣＲＧの設定状態に応じて可変可能にされる。
【００３０】
実行部１１は、汎用レジスタＲ０〜Ｒ１５、プログラムカウンタＰＣ、ステータスレジスタＳＲ、テンポラリレジスタＴＲ、プロシージャレジスタＰＲ、算術論理演算器ＡＬＵ、インクリメンタＩＮＣ、アドレス演算器ＡＵ、リードデータバッファＤＢＲ、ライトデータバッファＤＢＷ、アドレスバッファＡＢ、ベクタベースレジスタＶＢＲを有し、それらの回路ブロックは内部バスａｂ、ｇｂ、ｄｂ、ｗｂ１、ｗｂ２によって相互に接続されている。実行部６は前記内部バス７に含まれるデータバスＩＤＢ及びアドレスバスＩＡＢに接続される。
【００３１】
前記汎用レジスタＲ０〜Ｒ１５は、アドレスレジスタとしてもデータレジスタとしても使用することができる。汎用レジスタＲ１５には、汎用レジスタとしての機能に加えて、スタックポインタ（ＳＰ）としての機能が割り当てられる。割り込み時やサブルーチンコール時の戻り先アドレスや汎用レジスタなどに対する退避、復帰は、スタックポインタ（ＳＰ）を用いてスタック領域との間で行なわれる。退避、復帰処理の詳細は後述する。割り込み処理は例外処理も含む概念として用いる。
【００３２】
プログラムカウンタＰＣは３２ビットのカウンタで、ＣＰＵ２が実行する命令のアドレスを示す。ステータスレジスタＳＲは、ＣＰＵ２の状態を示す３２ビットのレジスタである。ベクタベースレジスタＶＢＲは例外処理ベクタテーブルのリード時に、アドレスの上位として利用される。プロシージャレジスタＰＲはサブルーチンコール時に戻り先アドレスを格納する。
【００３３】
算術論理演算器ＡＬＵは、命令によって指定される算術論理演算に用いられる。実効アドレスの計算にはアドレス演算器ＡＵが用いられる。インクリメンタＩＮＣは、プログラムカウンタＰＣの加算等に用いられる。
【００３４】
命令フェッチアドレスやオペランドアクセスアドレスはアドレスバッファＡＢから内部アドレスバスＩＡＢに出力される。命令フェッチアドレスで指定された命令はＲＯＭ３から内部データバスＩＤＢを介して命令レジスタＩＲにフェッチされる。内部アドレスバスＩＡＢに出力されたオペランドアクセスアドレスで指定されたＲＡＭや外部入出力回路のレジスタ等は内部データバスＩＤＢを介してリード、ライトされる。
【００３５】
《ロード／ストア命令による退避、復帰》
データプロセッサ１のＣＰＵ２が処理しているプログラムにおいて、サブルーチンコールが発生した場合に、ロード／ストア命令による退避、復帰動作を説明する。ここで用いるロード／ストア命令はレジスタ間接アドレシングモードを持ち、オペランドとして一つのレジスタを指定する１６ビット長のデータ転送命令とされる。
【００３６】
ここでは、サブルーチンからの戻り先アドレスは前記プロシージャレジスタＰＲに格納される。もし、サブルーチン内でさらに別のサブルーチンをコールすると、プロシージャレジスタＰＲが重ね書きされてしまうので、サブルーチンの先頭でプロシージャレジスタＰＲをスタック領域中に退避する。その時の命令は、例えば
ＭＯＶ．Ｌ  ＰＲ，  ＠−Ｒ１５
である。これは、スタックポインタＲ１５の値を４番地分引いてスタックポインタＲ１５に格納し、そのアドレス番地にプロシージャレジスタＰＲの値をストアする動作を指示する。
【００３７】
さらに、サブルーチン内でレジスタを使うと、コール側（メインルーチン側）にとってそのレジスタが破壊されることになるので、サブルーチンの先頭で、汎用レジスタの退避を行なう必要がある。例えば、
ＭＯＶ．Ｌ  Ｒ０，  ＠−Ｒ１５
ＭＯＶ．Ｌ  Ｒ１，  ＠―Ｒ１５
…
ＭＯＶ．Ｌ  Ｒ１４，  ＠−Ｒ１５
などの処理を行なう。これにより汎用レジスタＲ０〜Ｒ１４の値が、順次更新されるスタックポインタＲ１５が示すメモリアドレスに退避される。
【００３８】
サブルーチンからメインルーチンに戻る場合は、退避したレジスタの復帰処理が必要である。例えば
ＭＯＶ．Ｌ  ＠Ｒ１５＋，  Ｒ１４
…
ＭＯＶ．Ｌ  ＠Ｒ１５＋，  Ｒ１
ＭＯＶ．Ｌ  ＠Ｒ１５＋，  Ｒ０
ＭＯＶ．Ｌ  ＠Ｒ１５＋，  ＰＲ
とする。例えば最初の命令は、スタックポインタＲ１５が示す番地からのリードデータを汎用レジスタＲ１４にロードし、スタックポインタＲ１５の値を４番地分増やしてスタックポインタＲ１５に書き戻す処理を行う。
【００３９】
このような退避・復帰処理は、割込みサービスルーチンの出入口でも同様に行なわれる。尚、スタック領域として使用されるメモリは、図２の内蔵ＲＡＭ４、或は外部入出力回路６に接続される外部ＲＡＭ（図示せず）が用いられる。
【００４０】
《ロードマルチ／ストアマルチ命令による退避、復帰》
ＣＰＵ２の命令セットには、上記退避・復帰と同様な処理を、わずか４ビットだけのオペランド１つで複数レジスタを指定した１命令で実行可能とする所定のデータ転送命令として、ロードマルチ／ストアマルチ命令を含んでいる。
【００４１】
図１にはロードマルチ／ストアマルチ命令とその機能が例示される。図２には図１に示される命令の命令コードが例示される。
【００４２】
ここでは、ロードマルチ／ストアマルチ命令はＭＯＶＭＤ命令と、ＭＯＶＭＵ命令に大別される。
【００４３】
ＭＯＶＭＤ命令はソースオペランドをディスティネーションへ転送する命令であり、レジスタ指定フィールドで指定された番号以下の番号に対応するレジスタと、Ｒ１５の内容をアドレスとするメモリとの転送を行なう。メモリに対するアドレシングモードはレジスタ間接である。レジスタＲｍがソースとされる命令はレジスタに対する退避、レジスタＲｎがディスティネーションとなる命令はレジスタに対する復帰動作となる。退避動作は指定されたＲｍの番号から順次番号の小さい方のレジスタに対して行なわれる。復帰動作は番号の一番小さいレジスタＲ０から行なわれる。退避動作ではスタック領域のメモリアドレスはＲ１５の値に対して４番地づつ小さくされ（＠−Ｒ１５）、逆に復帰では４番地づつ大きくされる（＠Ｒ１５＋）。アドレス指定フィールドは図２に示されるｍｍｍｍ、ｎｎｎｎの如く４ビットであり、ＲｎとＲｍの番号は０〜１５まで採れるが、０にした場合はＲ０だけの退避・復帰であり、１にした場合はＲ０，Ｒ１の退避、復帰復帰であり、１４にした場合はＲ０〜Ｒ１４の退避、復帰である。１５を指定した場合は、Ｒ０〜Ｒ１４に加えてプロシージャレジスタＰＲを退避、復帰するように動作する。Ｒ１５はスタックポインタとして利用されるから退避、復帰対象から除外される。レジスタ指定フィールドで指定される番号とそれに応ずる退避、復帰の対象とされるレジスタとの対応は図３に示される通りである。明示的に指定された番号（ｎまたはｍ）に対して退避・復帰対象にされるレジスタに○記号を付した。
【００４４】
ＭＯＶＭＵ命令はソースオペランドをディスティネーションへ転送する命令であり、レジスタ指定フィールドで指定された番号以上の番号に対応するレジスタと、Ｒ１５の内容をアドレスとするメモリとの転送を行なう。メモリに対するアドレシングモードはレジスタ間接である。レジスタＲｍがソースとされる命令はレジスタに対する退避、レジスタＲｎがディスティネーションとなる命令はレジスタに対する復帰動作となる。退避動作は番号の一番大きなプロシージャレジスタＰＲから順次番号の小さい方のレジスタに対して行なわれる。復帰動作は指定されたＲｎの番号から順次番号の大きい方のレジスタに対して行なわれる。退避動作ではスタック領域のメモリアドレスはＲ１５の値に対して４番地づつ小さくされ（＠−Ｒ１５）、逆に復帰では４番地づつ大きくされる（＠Ｒ１５＋）。アドレス指定フィールドは図２に示されるｍｍｍｍ、ｎｎｎｎの如く４ビットであり、ＲｎとＲｍの番号は０〜１５まで採れるが、０にした場合はＲ０〜Ｒ１４とＰＲの退避・復帰であり、１にした場合はＲ１〜Ｒ１４とＰＲの退避・復帰であり、１４にした場合はＲ１４とプロシージャＰＲの退避、復帰である。１５を指定した場合は、プロシージャレジスタＰＲを退避、復帰するように動作する。Ｒ１５はスタックポインタとして利用されるから退避、復帰対象から除外される。レジスタ指定フィールドで指定される番号とそれに応ずる退避、復帰の対象とされるレジスタとの対応は図３に示される通りである。
【００４５】
この例の各命令は１６ビット長であり、各命令コードの中には、４ビットのレジスタ番号指定フィールドの１オペランドしかない。残り１２ビットは全てオペコードのみである。よって、１６ビット命令コードのコードマップ全体の１／４０９６しか消費しない命令となっている。
【００４６】
１命令も１６ビット長なので、プログラムコードサイズを抑えることが可能である。
【００４７】
一般にＣコンパイラにおいては、そのサブルーチン（関数）内では、レジスタの使用方法は限定的であり、番号の小さい方から使うケースと、大きい方から使うケースが多い。ランダムな番号のレジスタに変数を割り付けることは殆ど無い。こうしたＣコンパイラをベースにしたＣＰＵの複数レジスタの退避、復帰では、レジスタ番号の小さい方からいくつか、またはレジスタ番号の大きい方からいくつか、という指定方法で充分である。
【００４８】
図５を参照しながらロードマルチ／ストアマルチ命令の実行処理について説明する。
【００４９】
（１）ＭＯＶＭＤ．Ｌ  Ｒｍ，＠−Ｒ１５
この命令においてＲｍは番号ｍ＝０〜１５の何れか、を採る。命令デコーダＤＥＣはこの命令をデコードすることにより、内部カウンタｉにｍを初期設定する。ｉは−１ずつ０までデクリメントされることになる（ｉ＝ｍ〜０；ｉ−  −）。先ず、スタックポインタＲ１５の値をアドレス演算器ＡＵで−４し、これを、メモリアドレスとしてアドレスバッファＡＢから出力すると共に、スタックポインタＲ１５に書き戻す。ｉ＜１５であればレジスタＲｉから、そうでなければ（ｉ＝１５）プロシージャレジスタＰＲからレジスタ値を取り出して、ライトデータバッファＤＢＷ経由でＲＡＭ４に供給する。一つのレジスタの退避を行なう毎にｉをデクリメントし、ｉが０になるまで上記退避動作を繰り返す。
【００５０】
（２）ＭＯＶＭＤ．Ｌ  ＠Ｒ１５＋，Ｒｎ
この命令においてＲｎは番号ｎ＝０〜１５の何れか、を採る。命令デコーダＤＥＣはこの命令をデコードすることにより、内部カウンタｉに０を初期設定する。ｉは＋１ずつｎまでインクリメントされることになる（ｉ＝０〜ｎ；ｉ＋  ＋）。先ず、スタックポインタＲ１５の値を取り出してメモリアドレスとしてアドレスバッファＡＢから出力すると共に、取り出したスタックポインタの値にアドレス演算器ＡＵで＋４した値を、スタックポインタＲ１５に書き戻す。前記メモリアドレスによってＲＡＭ４から読み出された値をレジスタＲｉ又はプロシージャレジスタＰＲに復帰させる。即ち、ｉ＜１５であればレジスタＲｉに、そうでなければ（ｉ＝１５）プロシージャレジスタＰＲにメモリデータを格納する。一つのレジスタ復帰を行なう毎にｉをインクリメントし、ｉがｎになるまで上記復帰動作を繰り返す。
【００５１】
（３）ＭＯＶＭＵ．Ｌ  Ｒｍ，＠−Ｒ１５
この命令においてＲｍは番号ｍ＝０〜１５の何れか、を採る。命令デコーダＤＥＣはこの命令をデコードすることにより、内部カウンタｉに１５を初期設定する。ｉは−１ずつｍまでデクリメントされることになる（ｉ＝１５〜ｍ；ｉ−  −）。先ず、スタックポインタＲ１５の値をアドレス演算器ＡＵで−４し、これを、メモリアドレスとしてアドレスバッファＡＢから出力すると共に、スタックポインタＲ１５に書き戻す。ｉ＜１５であればレジスタＲｉから、そうでなければ（ｉ＝１５）プロシージャレジスタＰＲからレジスタ値を取り出して、ライトデータバッファＤＢＷ経由でＲＡＭ４に供給する。一つのレジスタの退避を行なう毎にｉをデクリメントし、ｉがｍになるまで上記退避動作を繰り返す。
【００５２】
（４）ＭＯＶＭＵ．Ｌ  ＠Ｒ１５＋，Ｒｎ
この命令においてＲｎは番号ｎ＝０〜１５の何れか、を採る。命令デコーダＤＥＣはこの命令をデコードすることにより、内部カウンタｉにｎを初期設定する。ｉは＋１ずつ１５までインクリメントされることになる（ｉ＝ｎ〜１５；ｉ＋  ＋）。先ず、スタックポインタＲ１５の値を取り出してメモリアドレスとしてアドレスバッファＡＢから出力すると共に、取り出したスタックポインタＲ１５の値にアドレス演算器ＡＵで＋４した値を、スタックポインタＲ１５に書き戻す。前記メモリアドレスによってＲＡＭ４から読み出された値をレジスタＲｉ又はプロシージャレジスタＰＲに復帰させる。即ち、ｉ＜１５であればレジスタＲｉに、そうでなければ（ｉ＝１５）プロシージャレジスタＰＲにメモリデータを格納する。一つのレジスタ復帰を行なう毎にｉをインクリメントし、ｉがｎになるまで上記復帰動作を繰り返す。
【００５３】
《退避、復帰対象とされるレジスタの変更》
図５のＣＰＵ２は制御レジスタＣＲＧを有し、レジスタセレクタＲＥＳＬによるレジスタ選択論理はコントロールレジスタＣＲＧの設定状態に応じて可変可能にされる。コントロールレジスタＣＲＧの初期状態、即ちパワーオンリセットによる初期化された状態では、ロードマルチ／ストアマルチ命令において退避、復帰の対象とされるレジスタは汎用レジスタＲ０〜Ｒ１４とプロシージャレジスタとされる。これを変更したいときは所定の規則に従ってレジスタＣＲＧの値を変更する。例えば初期状態においてレジスタ番号０〜１４をＲ０〜Ｒ１４に対応させる論理を、レジスタ番号０〜７をＲ７〜Ｒ１４に対応させ、レジスタ番号８〜１４をＲ０〜Ｒ６に対応させるように選択論理を組み替え、或は選択論理の切換えを行な事ができるようにすれば良い。このように、ＣＲＧのような専用レジスタなどによって、レジスタ番号と、実際のレジスタの対応を任意に変更できるようにすれば、連続番号指定による複数レジスタ退避・復帰命令でも、任意レジスタの組合せを退避・復帰することが可能になる。
【００５４】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００５５】
例えば、複数レジスタの退避、復帰命令は、汎用レジスタＲ０〜Ｒ１４と戻り先レジスタＰＲのみを対象としていた。実際のＣＰＵには、これ以外に専用用途を持つポインタ（グローバルベースレジスタＧＢＲ、ベクタベースレジスタＶＢＲなど）やアキュムレータ（積和演算レジスタＭＡＣ）など各種レジスタが含まれる。こうしたレジスタも退避、復帰対象にするため、前記ＣＲＧによりレジスタ番号０から１５までのいずれかに割り当てることが可能となる。また、別の方法としては、レジスタ指定フィールドで指定されるレジスタ番号を４ビット指定から５ビット指定に拡張することも可能である。この場合、レジスタ番号１６をＧＢＲ、１７をＶＢＲなどと読み替えて制御することになる。
【００５６】
浮動小数点演算用のＦＰＵをコプロセッサなどとして搭載しているデータプロセッサでは、浮動小数点データ格納レジスタの退避、復帰も必要な場合がある。本発明のような複数の浮動小数点レジスタの退避、復帰を同様な方式で、ＦＰＵ専用命令として実装する事も可能である。或は、上記ＭＯＶＭＤ命令、ＭＯＶＭＵ命令群でＣＲＧによる指定またはレジスタ指定フィールドを拡張して指定するようにすることも可能である。
【００５７】
データプロセッサが保有する回路モジュールは上述の実施形態に限定されず、適宜変更可能である。例えばデータキャッシュ、命令キャッシュなどのキャッシュメモリを備えたり、ＵＳＢ等の他の周辺回路を備えてもよい。本発明に係るデータ処理装置はプリンタなどの機器への組み込み制御用途、更には汎用プロセッサ用途にも適用可能である。
【００５８】
【発明の効果】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【００５９】
すなわち、一群のレジスタから複数のレジスタを１オペランドで指定してメモリへの待避、メモリからの復帰が可能とされる。したがって、複数レジスタの退避、復帰処理を行うためのプログラムのプログラムコードサイズを小さくすることができる。オペランド数が１つだけなので、１６ビット長に納めることが容易である。複数レジスタの退避、復帰処理を行うためのプログラムのプログラムコードサイズを小さくすることが可能になるから、複数レジスタの待避、復帰のデータ処理効率が向上し、データ処理の高速化に寄与する。
【図面の簡単な説明】
【図１】ロードマルチ／ストアマルチ命令とその機能を例示する説明図である。
【図２】図１に示される命令の命令コードを例示する説明図である。
【図３】レジスタ指定フィールドで指定される番号とそれに応ずる退避、復帰の対象とされるレジスタとの対応を例示する説明図である。
【図４】本発明の一例に係るデータプロセッサを示すブロック図である。
【図５】ＣＰＵの一例を示すブロック図である。
【符号の説明】
１  データプロセッサ
２  ＣＰＵ
３  ＲＯＭ
４  ＲＡＭ
５  ＦＰＵ
６  外部入出力回路
１０  命令制御部
１１  実行部
ＩＲ  命令レジスタ
ＣＲＧ  コントロールレジスタ
ＤＥＣ  命令デコーダ
ＲＥＳＬ  レジスタセレクタ
ＰＲ  プロシージャレジスタ
Ｒ１５  スタックポインタ
Ｒ０〜Ｒ１４  汎用レジスタ
ＰＣ  プログラムカウンタ
ＡＵ  アドレス演算器
ＡＬＵ  算術論理演算器
【図１】
2004151915.tif 000003
【図２】
2004151915.tif 000004
【図３】
2004151915.tif 000005
【図４】
2004151915.tif 000006
【図５】
2004151915.tif 000007