(57)【特許請求の範囲】
【請求項１】
ポインタ値を保持する複数のポインタレジスタが組にされたレジスタ組と、
上記レジスタ組における何れのポインタレジスタからポインタ値を読み出すかを選択する読み出し選択手段と、
上記レジスタ組における何れのポインタレジスタにポインタ値を書き込むかを選択する書き込み選択手段と、
上記読み出し選択手段、および上記書き込み選択手段の切り替え状態を制御する切り替え制御手段と、
上記読み出し選択手段により選択された上記ポインタレジスタから読み出されたポインタ値と所定の加算値とを加算し、加算結果を上記書き込み選択手段により選択された上記ポインタレジスタに書き込む加算手段と、
プログラム命令に応じて、そのプログラム命令の実行前にあらかじめ選択された上記ポインタレジスタに対して、ポインタレジスタ装置の外部から与えられたポインタ値の書き込みおよびポインタレジスタ装置の外部へのポインタ値の読み出しがなされるように制御するプログラム命令実行制御手段と、
を備えたポインタレジスタ装置であって、
上記切り替え制御手段の制御によって、上記読み出し選択手段と上記書き込み選択手段とが、互いに異なる上記ポインタレジスタを選択し得るように構成されていることを特徴とするポインタレジスタ装置。
【請求項２】
請求項１のポインタレジスタ装置であって、
上記読み出し選択手段および上記書き込み選択手段によって共に上記レジスタ組のうちの第１のポインタレジスタが選択された状態で、所定のプログラム命令が実行される際に、
上記読み出し選択手段が、上記レジスタ組のうちの第２のポインタレジスタを選択し、
上記加算手段が、上記第２のポインタレジスタから読み出されたポインタ値と上記所定の値とを加算して加算結果を上記第１のポインタレジスタに書き込んだ後に、
上記読み出し選択手段が、再度元の上記第１のポインタレジスタを選択するように構成されていることを特徴とするポインタレジスタ装置。
【請求項３】
請求項１のポインタレジスタ装置であって、
上記読み出し選択手段および上記書き込み選択手段によって共に上記レジスタ組のうちの第１のポインタレジスタが選択された状態で、所定のプログラム命令が実行される際に、
上記読み出し選択手段が、上記レジスタ組のうちの第２のポインタレジスタを選択し、
上記加算手段が、上記第２のポインタレジスタから読み出されたポインタ値と上記所定の値とを加算し、加算結果を上記第１のポインタレジスタに書き込んだ後に、
上記書き込み選択手段が、上記第２のポインタレジスタを選択するように構成されていることを特徴とするポインタレジスタ装置。
【請求項４】
請求項１のポインタレジスタ装置を用いたポインタ値の更新方法であって、
上記読み出し選択手段および上記書き込み選択手段によって共に上記レジスタ組のうちの第１のポインタレジスタが選択された状態から、上記読み出し選択手段によって上記レジスタ組のうちの第２のポインタレジスタを選択するステップと、
上記加算手段によって上記第２のポインタレジスタから読み出されたポインタ値と上記所定の値とを加算して加算結果を上記第１のポインタレジスタに書き込むステップと、
上記読み出し選択手段によって再度元の上記第１のポインタレジスタを選択するステップとを有することを特徴とするポインタ値の更新方法。
【請求項５】
請求項１のポインタレジスタ装置を用いたポインタ値の更新方法であって、
上記読み出し選択手段および上記書き込み選択手段によって共に上記レジスタ組のうちの第１のポインタレジスタが選択された状態から、上記読み出し選択手段によって上記レジスタ組のうちの第２のポインタレジスタを選択するステップと、
上記加算手段によって上記第２のポインタレジスタから読み出されたポインタ値と上記所定の値とを加算して加算結果を上記第１のポインタレジスタに書き込むステップと、
上記書き込み選択手段によって上記第２のポインタレジスタを選択するステップとを有することを特徴とするポインタ値の更新方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータを構成するプロセッサ等において、メモリをアクセスするためのアドレスであるポインタ値の保持、演算による更新などを行うポインタレジスタ装置に関し、特に、いわゆるシャドウレジスタ（裏レジスタ）などと称されるレジスタを有するポインタレジスタ装置およびポインタ値の更新方法に関するものである。
【０００２】
【従来の技術】
コンピュータを構成するプロセッサ等においては、メモリをアクセスするためのアドレスであるポインタ値を保持させるレジスタが設けられている。このレジスタは、メモリに比べて高速なアクセスが行えるため、頻繁にまたは連続的に参照されるポインタ値の格納等に用いられる。ところで、プロセッサの処理内容が複雑化して、レジスタに格納したいポインタ値の数が実際に備えられているレジスタ数を上回ると、レジスタとメモリ間のデータ転送を頻繁に行う必要があり、処理効率が低下しがちである。一方、レジスタ数を増やすとすると、命令（インストラクション）数や命令長が増加することになる。すなわち、増加したレジスタに対応する命令を増やす必要があるとともに、各命令においてレジスタを特定するために命令長を増加させる必要があり、ハードウェアの複雑化や規模の増大を招くことになる。
【０００３】
そこで、いわゆるシャドウレジスタや裏レジスタ等と称されるレジスタを設けて、外見上の（ソフトウェアから見た）レジスタ本数を増やすことなく、実質的なレジスタ本数を増やす手法が知られている。この手法では、基本的には、通常の独立した１本のレジスタに代えて、択一的にアクセス可能な２本のレジスタを組にして設けるとともに、そのうちの何れか一方を選択する命令を備えるほかは、選択されたレジスタしか存在しない場合と同じ命令体系を持つように構成される。すなわち、命令体系の複雑化等を招くことなく、レジスタ本数を増やした場合とほぼ同様な処理能力を得ることができる。
【０００４】
また、上記のように２本のレジスタが組にして設けられる場合、例えば、選択されていないほうのレジスタにベースとなる値を保持させておき、選択されている方のレジスタに、上記ベースとなる値に所定のオフセット値を加減算して得られた値を格納し、参照し得るようにした構成も知られている。すなわち、２本のレジスタをより有効に活用して上記のようなオフセットの演算等を効率よく行えるとともに、命令で直接アクセスできるのは選択された方のレジスタだけなので、やはり命令体系の大幅な複雑化を招くことがない。
【０００５】
以下、上記のように２本のレジスタが組にして設けられた従来のポインタレジスタ装置の具体的な構成について説明する。
【０００６】
図６は、従来のポインタレジスタ装置の構成を示す回路図である。
【０００７】
同図において、表裏レジスタ組２０１は、それぞれポインタ値を保持する第１レジスタ２０１ａと第２レジスタ２０１ｂとが組になったものである。この表裏レジスタ組２０１は、ポインタレジスタ装置の外部（プログラム命令）からは、基本的に１つのレジスタとして認識され、上記レジスタ２０１ａ・２０１ｂのうち、あらかじめプログラム命令によって選択された何れか一方がアクセスされるようになっている。すなわち、ポインタ値の読み出しや書き込みを行う際には、レジスタ２０１ａ・２０１ｂの区別をする必要がないようになっている。（なお、ここで言う「表裏レジスタ組」は、上記のようにレジスタ２０１ａ・２０１ｂが択一的に用いられるもので、いわゆるレジスタペア等と称されるような２本のレジスタが連結されて倍のビット長のレジスタとして用いられるものなどとは異なるものである。また、レジスタ２０１ａ・２０１ｂの表裏の区別は固定的なものではなく、選択されている方のレジスタと他方のレジスタとを区別するための便宜上のものである。）
転送切り替えスイッチ組２０２は、それぞれ上記レジスタ２０１ａ・２０１ｂに対応したスイッチ２０２ａ・２０２ｂを備え、後述する加算器２０５からの加算結果やポインタレジスタ装置の外部から与えられるポインタ値の書き込みを行うか、またはレジスタ２０１ａ・２０１ｂ間でのポインタ値の転送（一方のレジスタに保持されているポインタ値を他方のレジスタに書き込む）を行うかを選択するものである。
【０００８】
転送パス２０３は、上記レジスタ２０１ａ・２０１ｂ間でのポインタ値の転送を行うための信号経路である。
【０００９】
レジスタ選択スイッチ組２０４は、読み出し用選択スイッチ２０４ａ、および書き込み用選択スイッチ２０４ｂを備え、ポインタ値の書き込みおよび読み出しをレジスタ２０１ａ・２０１ｂの何れに対して行うかを選択するものである。
【００１０】
加算器２０５は、レジスタ２０１ａ・２０１ｂに保持されているポインタ値と、ポインタレジスタ装置の外部から与えられる加算値とを加算するものである。
【００１１】
加算器選択スイッチ２０６は、加算器２０５による加算結果、またはポインタレジスタ装置の外部から入力される書き込みポインタ値を選択して表裏レジスタ組２０１に入力するためのものである。
【００１２】
切り替え制御部２０７は、上記転送切り替えスイッチ組２０２、レジスタ選択スイッチ組２０４、および加算器選択スイッチ２０６の切り替え状態を制御するものである。より詳しくは、例えばポインタ値の読み出しおよび書き込みをレジスタ２０１ａ・２０１ｂの何れに対して行うかを示す情報を保持し、この情報に従って切り替え信号Ｓを出力して、レジスタ選択スイッチ組２０４を切り替えるようになっている。
【００１３】
プログラム命令実行制御部２０８は、プログラム命令に基づいて各部の動作を制御するもので、レジスタ２０１ａ・２０１ｂの切り替えを示すプログラム命令を実行する際には、切り替え制御部２０７に対してレジスタ選択スイッチ組２０４の切り替えを指示するが、ポインタ値の書き込みや読み出しの指示を含むプログラム命令を実行する際には、切り替え制御部２０７に切り替えを指示することはなく、したがって、前記のように、ポインタ値の書き込み等は、その時点で既に選択されているいずれか一方のレジスタ２０１ａ・２０１ｂに対して行われるようになっている。また、以下に説明するポインタ値の更新動作の場合には、その動作中において、適宜レジスタ選択スイッチ組２０４の切り替え等を制御するようになっている。
【００１４】
上記のようなポインタレジスタ装置における動作の代表的な例として、（Ａ）相対ポインタ指定更新、（Ｂ）ベース修飾指定更新、および（Ｃ）初期ポインタ更新について説明する。
（Ａ）相対ポインタ指定更新
相対ポインタ指定更新とは、表裏レジスタ組２０１に保持されている元のポインタ値を基準として、これにプログラム命令等によって指定された相対ポインタ値を加算し、実際にメモリをアクセスするポインタ値（実効アドレス）に更新することである。
【００１５】
この相対ポインタ指定更新の具体的な動作の例として、第１レジスタ２０１ａに保持された元のポインタ値Ａを、これに加算値Ｃを加算したＡ＋Ｃに更新する場合の動作を図７に基づいて説明する。
【００１６】
（０）  まず、更新動作の前には、図７に示すように、レジスタ選択スイッチ組２０４のスイッチ２０４ａ・２０４ｂは第１レジスタ２０１ａを選択する状態になっているとし、転送切り替えスイッチ組２０２のスイッチ２０２ａは加算器２０５からの加算値を第１レジスタ２０１ａに書き込む状態になっているとする。上記の切り替え状態では、第１レジスタ２０１ａに保持されているポインタ値は、メモリをアクセスするプログラム命令などによりポインタレジスタ装置の外部に出力されて用いられ得るようになっている。また、加算器選択スイッチ２０６を外部からの書き込みポインタ値を選択するように切り替えれば、第１レジスタ２０１ａに新たなポインタ値を書き込むこともできる。
【００１７】
（１）  この状態で、第１レジスタ２０１ａからポインタ値Ａが読み出されて加算器２０５に入力されるとともに、外部から与えられる加算値Ｃが加算器２０５に入力され、両者が加算されて、加算結果Ａ＋Ｃが第１レジスタ２０１ａに書き込まれる。
【００１８】
上記の動作を式で表すと次のようになる。ここで、第１レジスタ２０１ａを変数Ｘ、上記第１レジスタ２０１ａにポインタ値Ａが保持されている状態をＸ；Ａと表す。
【００１９】
Ｘ＝（Ｘ；Ａ）＋Ｃ  （その結果、Ｘ；（Ａ＋Ｃ）となる。）
上記更新動作は、第１レジスタ２０１ａが読み出しと書き込みとを同時に行い得るもの（例えばマスタ−スレーブ型フリップフロップを用いたものなど）である場合には、１マシンサイクルで行わせることができる。
【００２０】
なお、上記第１レジスタ２０１ａに代えて第２レジスタ２０１ｂが用いられる場合も同様である。すなわち、レジスタ２０１ａ・２０１ｂの区別は相対的なものであり、何れが選択される場合でも同じ動作を行わせることができる。この点に関しては、以下の説明においても同様である。
【００２１】
（０）  まず、更新動作の前には、図８（ａ）に示すように、レジスタ選択スイッチ組２０４のスイッチ２０４ａ・２０４ｂは第１レジスタ２０１ａを選択する状態になっているとし、転送切り替えスイッチ組２０２のスイッチ２０２ａは加算器２０５からの加算値を第１レジスタ２０１ａに書き込み得る状態になっているとする。
【００２２】
（１）  更新動作としては、まず、図８（ｂ）に示すように、スイッチ２０２ａが転送パス２０３側に切り替わり、第２レジスタ２０１ｂから読み出されたベースポインタ値Ｂが第１レジスタ２０１ａに書き込まれる（転送される）。
【００２３】
（２）  次に、スイッチ２０２ａが加算器２０５側に戻り、前記相対ポインタ指定更新の動作（１）（図７）と同様にして、第１レジスタ２０１ａから上記転送されたベースポインタ値Ｂが読み出され、加算器２０５により加算値Ｃと加算されて、加算結果Ｂ＋Ｃが第１レジスタ２０１ａに書き込まれる。
【００２４】
上記の動作を式で表すと次のようになる。
【００２５】
Ｘ＝（Ｙ；Ｂ）      （その結果、Ｘ；Ｂとなる。）
Ｘ＝（Ｘ；Ｂ）＋Ｃ  （その結果、Ｘ；（Ｂ＋Ｃ）となる。）
上記更新動作においては、転送されたベースポインタ値の読み出し、加算、および格納は、前記相対ポインタ指定更新と同様に１マシンサイクルで行わせることができるが、この読み出し、加算、および格納と、ベースポインタ値の転送とは同時に行わせることができないので、全体で少なくとも２マシンサイクルが必要となる。
（Ｃ）初期ポインタ更新
初期ポインタ更新は、配列の各要素を順次アクセスするループ処理などに用いられるもので、例えば、あらかじめ第２レジスタ２０１ｂに保持されているポインタ値Ｂを次のループ処理で前記相対ポインタ指定更新における基準のポインタ値などとするために第１レジスタ２０１ａに転送するとともに、上記第２レジスタ２０１ｂに保持されているポインタ値Ｂを、後のループ処理で基準のポインタ値とするために加算値Ｃを加算したＢ＋Ｃに更新するものである。
【００２６】
この初期ポインタ更新では、具体的には次のような動作が行われる。
【００２７】
（０）  更新動作の前の状態は、前記ベース修飾指定更新の（０）（図８（ａ））と同じである。
【００２８】
（１）  第２レジスタ２０１ｂから第１レジスタ２０１ａへのポインタ値の転送動作は、前記ベース修飾指定更新の（１）（図８（ｂ））と同じである。
【００２９】
（２）  次に、図９（ａ）に示すように、レジスタ選択スイッチ組２０４が第２レジスタ２０１ｂを選択するように切り替わり、前記相対ポインタ指定更新の動作（１）（図７）と同様にして（ただし選択されているレジスタは第２レジスタ２０１ｂ）、第２レジスタ２０１ｂからポインタ値Ｂが読み出され、加算器２０５により加算値Ｃと加算されて、加算結果Ｂ＋Ｃが第２レジスタ２０１ｂに書き込まれる。その後、図９（ｂ）に示すように、レジスタ選択スイッチ組２０４が再度第１レジスタ２０１ａを選択するように切り替わる（戻る）。これにより、以前に第２レジスタ２０１ｂに保持されていたポインタ値Ｂが第１レジスタ２０１ａに転送されて、基準ポインタ値などとして用いられるようになるとともに、ポインタ値Ｂ＋Ｃが、後に用いられるように第２レジスタ２０１ｂに保持される。
【００３０】
上記の動作を式で表すと次のようになる。
【００３１】
Ｘ＝（Ｙ；Ｂ）      （その結果、Ｘ；Ｂとなる。）
Ｙ＝（Ｙ；Ｂ）＋Ｃ  （その結果、Ｙ；（Ｂ＋Ｃ）となる。）
上記更新動作においても、ポインタ値の転送と、転送されたポインタ値の読み出し、加算、および格納とは同時に行わせることができないので、全体で少なくとも２マシンサイクルが必要となる。
【００３２】
【発明が解決しようとする課題】
しかしながら、上記従来のポインタレジスタ装置では、ベース修飾指定更新や初期ポインタ更新動作などをさせるために転送パス２０３および転送切り替えスイッチ組２０２が必要であり、回路規模が大きいという問題点を有していた。
【００３３】
また、ベース修飾指定更新や初期ポインタ更新動作などに少なくとも２マシンサイクルを要し、処理のオーバヘッドが大きいという問題点も有していた。
【００３４】
上記の問題点に鑑み、本発明は、回路規模を小さく抑え、しかも処理のオーバヘッドを軽減して処理効率を向上させ得るポインタレジスタ装置およびポインタ値の更新方法の提供を課題とする。
【００３５】
【課題を解決するための手段】
前記の課題を解決するために、請求項１の発明が講じた解決手段は、
ポインタ値を保持する複数のポインタレジスタが組にされたレジスタ組と、
上記レジスタ組における何れのポインタレジスタからポインタ値を読み出すかを選択する読み出し選択手段と、
上記レジスタ組における何れのポインタレジスタにポインタ値を書き込むかを選択する書き込み選択手段と、
上記読み出し選択手段、および上記書き込み選択手段の切り替え状態を制御する切り替え制御手段と、
上記読み出し選択手段により選択された上記ポインタレジスタから読み出されたポインタ値と所定の加算値とを加算し、加算結果を上記書き込み選択手段により選択された上記ポインタレジスタに書き込む加算手段と、
プログラム命令に応じて、そのプログラム命令の実行前にあらかじめ選択された上記ポインタレジスタに対して、ポインタレジスタ装置の外部から与えられたポインタ値の書き込みおよびポインタレジスタ装置の外部へのポインタ値の読み出しがなされるように制御するプログラム命令実行制御手段と、
を備えたポインタレジスタ装置であって、
上記切り替え制御手段の制御によって、上記読み出し選択手段と上記書き込み選択手段とが、互いに異なる上記ポインタレジスタを選択し得るように構成されていることを特徴とする。
【００３６】
上記請求項１の発明によると、上記書き込み選択手段が上記読み出し選択手段と異なる上記ポインタレジスタを選択することによって、ポインタレジスタ間でのポインタ値の転送をすることなく、読み出したポインタレジスタに保持されるポインタ値をそのままにして、別のポインタレジスタのポインタ値を上記加算手段による加算結果に更新できるので、種々のポインタ演算を高速に行うことができるとともに、ポインタレジスタ間に転送パスを設ける必要がないので回路規模を小さく抑えることもできる。
そして、請求項２の発明では、
請求項１のポインタレジスタ装置であって、
上記読み出し選択手段および上記書き込み選択手段によって共に上記レジスタ組のうちの第１のポインタレジスタが選択された状態で、所定のプログラム命令が実行される際に、
上記読み出し選択手段が、上記レジスタ組のうちの第２のポインタレジスタを選択し、
上記加算手段が、上記第２のポインタレジスタから読み出されたポインタ値と上記所定の値とを加算して加算結果を上記第１のポインタレジスタに書き込んだ後に、
上記読み出し選択手段が、再度元の上記第１のポインタレジスタを選択するように構成されているものとする。
【００３７】
上記請求項２の発明によると、例えば、第２のポインタレジスタに保持されたベースポインタ値を変更することなく、そのベースポインタ値に相対値を加算した実効アドレスを第１のポインタレジスタに格納することができるとともに、そのためにポインタレジスタ間でのポインタ値の転送をする必要がないので、上記更新動作を高速に行える。
また、請求項３の発明では、
請求項１のポインタレジスタ装置であって、
上記読み出し選択手段および上記書き込み選択手段によって共に上記レジスタ組のうちの第１のポインタレジスタが選択された状態で、所定のプログラム命令が実行される際に、
上記読み出し選択手段が、上記レジスタ組のうちの第２のポインタレジスタを選択し、
上記加算手段が、上記第２のポインタレジスタから読み出されたポインタ値と上記所定の値とを加算し、加算結果を上記第１のポインタレジスタに書き込んだ後に、
上記書き込み選択手段が、上記第２のポインタレジスタを選択するように構成されているものとする。
【００３８】
上記請求項３の発明によると、例えば、ループ処理において、第２のポインタレジスタに保持されたポインタ値に相対値を加算して第１のポインタレジスタに格納し、後のループ処理で用いられるようにするとともに、読み出し選択手段を第２のポインタレジスタに切り替えて、第２のポインタレジスタに保持されていたポインタ値を次のループ処理で用いられるようにすることができるとともに、そのためにポインタレジスタ間でのポインタ値の転送をする必要がないので、上記更新動作を高速に行える。
また、請求項４の発明が講じた解決手段は、
請求項１のポインタレジスタ装置を用いたポインタ値の更新方法であって、
上記読み出し選択手段および上記書き込み選択手段によって共に上記レジスタ組のうちの第１のポインタレジスタが選択された状態から、上記読み出し選択手段によって上記レジスタ組のうちの第２のポインタレジスタを選択するステップと、
上記加算手段によって上記第２のポインタレジスタから読み出されたポインタ値と上記所定の値とを加算して加算結果を上記第１のポインタレジスタに書き込むステップと、
上記読み出し選択手段によって再度元の上記第１のポインタレジスタを選択するステップとを有することを特徴とする
これにより、前記請求項２の場合と同様に、ポインタ値の更新動作を高速に行うことができる。
また、請求項５の発明が講じた解決手段は、
請求項１のポインタレジスタ装置を用いたポインタ値の更新方法であって、
上記読み出し選択手段および上記書き込み選択手段によって共に上記レジスタ組のうちの第１のポインタレジスタが選択された状態から、上記読み出し選択手段によって上記レジスタ組のうちの第２のポインタレジスタを選択するステップと、
上記加算手段によって上記第２のポインタレジスタから読み出されたポインタ値と上記所定の値とを加算して加算結果を上記第１のポインタレジスタに書き込むステップと、
上記書き込み選択手段によって上記第２のポインタレジスタを選択するステップとを有することを特徴とする。
【００３９】
これにより、前記請求項３の場合と同様に、ポインタ値の更新動作を高速に行うことができる。
【００４０】
【発明の実施の形態】
以下、本発明の実施形態について、図面を参照して説明する。
【００４１】
図１は、メモリアクセスのためのアドレスであるポインタ値を保持するポインタレジスタ装置の構成を示す回路図である。
【００４２】
同図において、表裏レジスタ組１０１は、それぞれポインタ値を保持する第１レジスタ１０１ａと第２レジスタ１０１ｂとが組になったものである。この表裏レジスタ組１０１は、ポインタレジスタ装置の外部（プログラム命令）からは、基本的に１つのレジスタとして認識され、上記レジスタ１０１ａ・１０１ｂのうち、あらかじめプログラム命令等によって選択された何れか一方がアクセスされるようになっている。すなわち、ポインタ値の読み出しや書き込みを行う際に、レジスタ１０１ａ・１０１ｂの区別をする必要がないようになっている。（なお、ここで言う「表裏レジスタ組」は、上記のようにレジスタ１０１ａ・１０１ｂが択一的に用いられるもので、いわゆるレジスタペア等と称されるような２本のレジスタが連結されて倍のビット長のレジスタとして用いられるものなどとは異なるものである。また、レジスタ１０１ａ・１０１ｂの表裏の区別は固定的なものではなく、選択されている方のレジスタと他方のレジスタとを区別するための便宜上のものである。）なお、一般にプロセッサ等は複数組のレジスタを備えることがあるが、ここでは説明の簡単のために、上記表裏レジスタ組１０１が１組だけ設けられているとして説明する。
【００４３】
読み出し用選択スイッチ１０２（読み出し選択手段）は、ポインタ値の読み出しをレジスタ１０１ａ・１０１ｂの何れに対して行うかを選択するものである。
【００４４】
書き込み用選択スイッチ１０３（書き込み選択手段）は、ポインタ値の書き込みをレジスタ１０１ａ・１０１ｂの何れに対して行うかを選択するものである。
【００４５】
切り替え制御部１０４（切り替え制御手段）は、上記読み出し用選択スイッチ１０２、書き込み用選択スイッチ１０３、および後述する加算器選択スイッチ１０６の切り替え状態を制御するもので、各スイッチ１０２・１０３を独立して、すなわち、各スイッチ１０２・１０３が、それぞれ互いに異なるレジスタ１０１ａ・１０１ｂを選択するように制御し得るようになっている。上記切り替え制御は、より詳しくは、例えばポインタ値の読み出しおよび書き込みをレジスタ１０１ａ・１０１ｂの何れに対して行うかを示す情報を保持し、この情報に従って切り替え信号Ｐ・Ｑを出力して、スイッチ１０２・１０３を切り替えるようになっている。
【００４６】
加算器１０５（加算手段）は、レジスタ１０１ａ・１０１ｂに保持されているポインタ値と、ポインタレジスタ装置の外部から与えられる加算値とを加算（減算等も含む）するものである。
【００４７】
加算器選択スイッチ１０６は、加算器１０５による加算結果、またはポインタレジスタ装置の外部から入力される書き込みポインタ値を選択して表裏レジスタ組１０１に入力するためのものである。
【００４８】
プログラム命令実行制御部１０７（プログラム命令実行制御手段）は、プログラム命令に基づいて各部の動作を制御するもので、レジスタ１０１ａ・１０１ｂの切り替えを示すプログラム命令を実行する際には、切り替え制御部１０４に対してスイッチ１０２・１０３の切り替えを指示するが、ポインタ値の書き込みや読み出しの指示を含むプログラム命令を実行する際には、切り替え制御部１０４に切り替えを指示することはなく、したがって、前記のように、ポインタ値の書き込み等は、その時点で既に選択されているいずれか一方のレジスタ１０１ａ・１０１ｂに対して行われるようになっている。また、以下に説明するポインタ値の更新動作の場合には、その動作中において、適宜スイッチ１０２・１０３の切り替え等を制御するようになっている。
【００４９】
上記のようなポインタレジスタ装置における動作の代表的な例として、（Ａ）相対ポインタ指定更新、（Ｂ）ベース修飾指定更新、（Ｃ）初期ポインタ更新、および（Ｄ）ポインタ値の転送について説明する。
（Ａ）相対ポインタ指定更新
相対ポインタ指定更新とは、表裏レジスタ組１０１に保持されている元のポインタ値を基準として、これにプログラム命令等によって指定された相対ポインタ値を加算し、実際にメモリをアクセスするポインタ値（実効アドレス）に更新することである。
【００５０】
上記相対ポインタ指定更新の具体的な動作の例として、第１レジスタ１０１ａに保持された元のポインタ値Ａを、これに加算値Ｃを加算したＡ＋Ｃに更新する場合の動作を図２に基づいて説明する。
【００５１】
（０）  まず、更新動作の前には、図２に示すように、読み出し用選択スイッチ１０２、および書き込み用選択スイッチ１０３は、共に第１レジスタ１０１ａを選択する状態になっているとする。上記の切り替え状態では、第１レジスタ１０１ａに保持されているポインタ値は、メモリをアクセスするプログラム命令などによりポインタレジスタ装置の外部に出力されて用いられ得るようになっている。また、加算器選択スイッチ１０６を外部からの書き込みポインタ値を選択するように切り替えれば、第１レジスタ１０１ａに新たなポインタ値を書き込むこともできる。
【００５２】
（１）  この状態で、第１レジスタ１０１ａからポインタ値Ａが読み出されて加算器１０５に入力されるとともに、外部から与えられる加算値Ｃが加算器１０５に入力され、両者が加算されて、加算結果Ａ＋Ｃが第１レジスタ１０１ａに書き込まれる。
【００５３】
上記の動作を式で表すと次のようになる。ここで、第１レジスタ１０１ａを変数Ｘ、上記第１レジスタ１０１ａにポインタ値Ａが保持されている状態をＸ；Ａと表す。
【００５４】
Ｘ＝（Ｘ；Ａ）＋Ｃ  （その結果、Ｘ；（Ａ＋Ｃ）となる。）
上記更新動作は、第１レジスタ１０１ａが読み出しと書き込みとを同時に行い得るもの（例えばマスタ−スレーブ型フリップフロップを用いたものなど）である場合には、前記従来技術で説明したポインタレジスタ装置と同様に、１マシンサイクルで行わせることができる。ただし、図６に示すような転送パス２０３や転送切り替えスイッチ組２０２を備えていないため、回路規模は小さく抑えられている。
【００５５】
なお、上記第１レジスタ１０１ａに代えて第２レジスタ１０１ｂが用いられる場合も同様である。すなわち、上記の説明ではレジスタ１０１ａ・１０１ｂの区別は相対的なものであり、何れが選択される場合でも同じ動作を行わせることができる。この点に関しては、以下の説明においても同様である。
（Ｂ）ベース修飾指定更新
ベース修飾指定更新とは、上記相対ポインタ指定更新と同様に、表裏レジスタ組１０１に保持されているポインタ値（ベースポインタ値）を基準として相対ポインタ値を加算した加算値を得るものであるが、得られた加算値はベースポインタ値が保持されていない方のレジスタに格納される点が上記相対ポインタ指定更新と異なる。すなわち、一方のレジスタ（例えば第２レジスタ１０１ｂ）にベースポインタ値Ｂが保持されているとすると、そのベースポインタ値Ｂは、後の処理で再度使用するために保存しておく必要があるため、加算値Ｃとの加算結果Ｂ＋Ｃは他方のレジスタ（第１レジスタ１０１ａ）に格納しなくてはならない。このため、具体的には次のような動作が行われる。
【００５６】
（０）  まず、更新動作の前には、図３（ａ）に示すように、読み出し用選択スイッチ１０２、および書き込み用選択スイッチ１０３は、共に第１レジスタ１０１ａを選択する状態になっているとする。また、第２レジスタ１０１ｂには、ベースポインタ値Ｂが保持されているとする。
【００５７】
（１）  更新動作としては、図３（ｂ）に示すように、読み出し用選択スイッチ１０２が第２レジスタ１０１ｂを選択するように切り替わった後、第２レジスタ１０１ｂに保持されているベースポインタ値Ｂが読み出され、加算器１０５により加算値Ｃと加算されて、加算結果Ｂ＋Ｃが第１レジスタ１０１ａに書き込まれる。また、読み出し用選択スイッチ１０２は、ベースポインタ値Ｂが読み出された後に、再び第１レジスタ１０１ａを選択する状態に戻る。
【００５８】
上記の動作を式で表すと次のようになる。
【００５９】
Ｘ＝（Ｙ；Ｂ）＋Ｃ  （その結果、Ｘ；（Ｂ＋Ｃ）となる。）
上記更新動作においては、ベースポインタ値の読み出し、加算、および格納は、前記相対ポインタ指定更新と同様に１マシンサイクルで行わせることが可能である。また、読み出し用選択スイッチ１０２の選択を第２レジスタ１０１ｂにし、または第１レジスタ１０１ａに戻す切り替えは、第２レジスタ１０１ｂからベースポインタ値を読み出す前、および第２レジスタ１０１ｂから読み出されたベースポインタ値が加算器１０５に取り込まれた後その後のプログラム命令によって第１レジスタ１０１ａのポインタ値が読み出されるまでの間に行われればよいので、これらの切り替えのためのマシンサイクルを必要としない。
【００６０】
したがって、ベース修飾指定更新動作を１マシンサイクルで行わせることができ、高速な処理が可能となる。しかも、レジスタ１０１ａ・１０１ｂ間でポインタ値の転送をすることなく上記更新動作を行わせることができるので、従来技術の図６に示すような転送パス２０３や転送切り替えスイッチ組２０２を備える必要がなく、したがって、回路規模を小さく抑えることができる。
（Ｃ）初期ポインタ更新
初期ポインタ更新は、例えば配列の各要素を順次アクセスするループ処理などに用いられる。具体的には、図４に示すような２次元の配列α［ｉ］［ｊ］の各要素に対する処理を順次行う場合には、１回目のループ処理でアドレスがＢ〜Ｂ＋Ｃ−１までのメモリ領域をアクセスし、２回目のループ処理でアドレスがＢ＋Ｃ〜Ｂ＋２Ｃ−１までのメモリ領域をアクセスというような処理を行う場合がある。このような処理は、１回目のループ処理において、一方のレジスタに、順次インクリメントされる初期値としてのポインタ値Ｂを保持させるとともに、他方のレジスタに２回目のループ処理における初期値となるポインタ値Ｂ＋Ｃを保持させておくことにより、容易に行わせることができる。
【００６１】
上記のような処理などに用いられる初期ポインタ更新では、具体的には次のような動作が行われる。
【００６２】
（０）  まず、更新動作の前には、前記ベース修飾指定更新の図３（ａ）と同様に、図５（ａ）に示すように、読み出し用選択スイッチ１０２、および書き込み用選択スイッチ１０３は、共に第１レジスタ１０１ａを選択する状態になっているとする。また、第２レジスタ１０１ｂには、次のループ処理などで初期値となるポインタ値Ｂが保持されているとする。
【００６３】
（１）  更新動作としては、前記ベース修飾指定更新の図３（ｂ）と同様に、図５（ｂ）に示すように、読み出し用選択スイッチ１０２が第２レジスタ１０１ｂを選択するように切り替わった後、第２レジスタ１０１ｂに保持されているポインタ値Ｂが読み出され、加算器１０５により加算値Ｃと加算されて、加算結果Ｂ＋Ｃが第１レジスタ１０１ａに書き込まれる。ところが、ベース修飾指定更新の場合と異なるのは、ポインタ値Ｂが読み出された後に、読み出し用選択スイッチ１０２が第１レジスタ１０１ａを選択する状態に戻るのではなく、図５（ｃ）に示すように、書き込み用選択スイッチ１０３が１０１ｂを選択する状態に切り替わる点である。すなわち、加算結果のＢ＋Ｃは次のループ処理などのために第１レジスタ１０１ａに保持され、第２レジスタ１０１ｂに保持されているポインタ値Ｂが、続くループ処理などにおいて例えば前記相対ポインタ指定更新によって順次インクリメントされるポインタ値として保持された状態となる。
【００６４】
上記の動作を式で表すと次のようになる。
【００６５】
Ｘ＝（Ｙ；Ｂ）＋Ｃ  （その結果、Ｘ；（Ｂ＋Ｃ）となる。）
ただし、第２レジスタ１０１ｂについては、Ｙ；Ｂのままであり、この第２レジスタ１０１ｂが、この更新動作の後に読み出しおよび書き込みが行われるレジスタとなる。
【００６６】
ここで、上記更新動作が行われる前には、上記のようにスイッチ１０２・１０３が第１レジスタ１０１ａの選択状態、すなわち、第１レジスタ１０１ａに対してポインタ値の読み出しおよび書き込みが行われる状態になっていたのに対し、更新動作後には、第２レジスタ１０１ｂが選択された状態になる。しかし、ポインタレジスタ装置の外部からは、実際に何れのレジスタ１０１ａ・１０１ｂが選択されているかは問題ではなく、必要なポインタ値の格納されている方のレジスタが選択されていればよい。それゆえ、上記のように、レジスタ１０１ａ・１０１ｂ間での転送を行うことなく、したがって、１マシンサイクルで初期ポインタ更新動作を行わせることができるとともに、回路規模を小さく抑えることもできる。
（Ｄ）ポインタ値の転送
図１にはレジスタ１０１ａ・１０１ｂ間の転送パスは特に示されていないが、本実施の形態のポインタレジスタ装置では、ポインタ値の転送は次のようにして行うことができる。
【００６７】
すなわち、前記ベース修飾指定更新（図３）と同じ動作で、加算値Ｃの値を０にすれば、第２レジスタ１０１ｂに保持されているポインタ値が第１レジスタ１０１ａに転送される。すなわち、加算器１０５に、転送パスとして流用したような動作をさせることができる。また、図３（ａ）の状態から、書き込み用選択スイッチ１０３の方が第２レジスタ１０１ｂを選択するように切り替えれば（読み出し用選択スイッチ１０２は第１レジスタ１０１ａを選択したまま）、第１レジスタ１０１ａに保持されているポインタ値を第２レジスタ１０１ｂに転送することができる。
（Ｅ）その他の動作例
前記（Ｂ）ベース修飾指定更新、および（Ｃ）初期ポインタ更新では、最初に読み出し用選択スイッチ１０２が切り替えられているが、例えばサブルーチンにジャンプする場合などに、最初に書き込み用選択スイッチ１０３を切り替えるような動作をさせることもできる。
【００６８】
（０）  まず、読み出し用選択スイッチ１０２、および書き込み用選択スイッチ１０３は、共に第１レジスタ１０１ａを選択する状態になっているとする。また、上記第１レジスタ１０１ａには、例えばメインルーチンで用いられるポインタ値Ａが保持されているとする。
【００６９】
（１）  サブルーチンにジャンプする場合には、最初に書き込み用選択スイッチ１０３が第２レジスタ１０１ｂを選択するように切り替わった後、第１レジスタ１０１ａに保持されている、メインルーチンで用いられるポインタ値Ａが読み出され、加算器１０５により加算値Ｃと加算されて、加算結果Ａ＋Ｃが第２レジスタ１０１ｂに書き込まれる。すなわち、メインルーチンで用いられていたポインタ値Ａは、第１レジスタ１０１ａにそのまま保存される一方、サブルーチンで用いられる、メインルーチンのポインタ値Ａから相対指定によって値Ｃだけオフセットしたポインタ値Ａ＋Ｃが、第２レジスタ１０１ｂに保持される。そこで、上記ポインタ値Ａが読み出された後に、読み出し用選択スイッチ１０２も、第２レジスタ１０１ｂを選択する状態に切り替わると、上記ポインタ値Ａ＋Ｃが、サブルーチンで読み出しや更新の対象となる。
【００７０】
また、サブルーチンからメインルーチンに復帰する場合には、読み出し用選択スイッチ１０２および書き込み用選択スイッチ１０３を第１レジスタ１０１ａが選択される状態に戻すだけで、すなわち１マシンサイクルで、元のポインタ値Ａを読み出すことなどができる。
【００７１】
なお、上記の例では、表裏レジスタ組１０１に２本のレジスタ１０１ａ・１０１ｂが設けられている例を示したが、これに限らず、複数本のレジスタが設けられている場合でも、ポインタ値の読み出しと書き込みとでレジスタの選択を独立して行い得るようにすることにより、種々のポインタ値の更新動作を高速に行うことができるとともに、回路規模を小さく抑えることもできる。
【００７２】
【発明の効果】
以上のように本発明によると、書き込み選択手段が読み出し選択手段と異なるポインタレジスタを選択することによって、ポインタレジスタ間でのポインタ値の転送をすることなく、読み出したポインタレジスタに保持されるポインタ値をそのままにして、別のポインタレジスタのポインタ値を加算手段による加算結果に更新できるので、種々のポインタ演算を高速に行うことができるとともに、ポインタレジスタ間に転送パスを設ける必要がないので回路規模を小さく抑えることもできるという効果を奏する。
【図面の簡単な説明】
【図１】本発明の実施の形態に係るポインタレジスタ装置の構成を示す回路図である。
【図２】ポインタレジスタ装置の相対ポインタ指定更新動作を示す説明図である。
【図３】ポインタレジスタ装置のベース修飾指定更新動作を示す説明図である。
【図４】ポインタレジスタ装置で初期ポインタ更新動作が行われるループ処理の例を示す説明図である。
【図５】ポインタレジスタ装置の初期ポインタ更新動作を示す説明図である。
【図６】従来のポインタレジスタ装置の構成を示す回路図である。
【図７】従来のポインタレジスタ装置の相対ポインタ指定更新動作を示す説明図である。
【図８】従来のポインタレジスタ装置のベース修飾指定更新動作を示す説明図である。
【図９】従来のポインタレジスタ装置の初期ポインタ更新動作を示す説明図である。
【符号の説明】
１０１      表裏レジスタ組
１０１ａ    第１レジスタ
１０１ｂ    第２レジスタ
１０２      読み出し用選択スイッチ
１０３      書き込み用選択スイッチ
１０４      切り替え制御部
１０５      加算器
１０６      加算器選択スイッチ
１０７      プログラム命令実行制御部
【図１】
0003571656.tif 000002
【図２】
0003571656.tif 000003
【図３】
0003571656.tif 000004
【図４】
0003571656.tif 000005
【図５】
0003571656.tif 000006
【図６】
0003571656.tif 000007
【図７】
0003571656.tif 000008
【図８】
0003571656.tif 000009
【図９】
0003571656.tif 000010