JPH02294734A - 情報処理装置 - Google Patents
情報処理装置Info
- Publication number
- JPH02294734A JPH02294734A JP11493389A JP11493389A JPH02294734A JP H02294734 A JPH02294734 A JP H02294734A JP 11493389 A JP11493389 A JP 11493389A JP 11493389 A JP11493389 A JP 11493389A JP H02294734 A JPH02294734 A JP H02294734A
- Authority
- JP
- Japan
- Prior art keywords
- stack
- buffer
- data
- push
- information processing
- 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.)
- Pending
Links
- 239000000872 buffer Substances 0.000 claims abstract description 157
- 238000000034 method Methods 0.000 claims description 55
- 230000010365 information processing Effects 0.000 claims description 16
- 230000003139 buffering effect Effects 0.000 claims description 7
- 235000008694 Humulus lupulus Nutrition 0.000 claims 1
- 230000003213 activating effect Effects 0.000 claims 1
- 230000000694 effects Effects 0.000 abstract description 10
- 238000010586 diagram Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000006073 displacement reaction Methods 0.000 description 2
- 240000002853 Nelumbo nucifera Species 0.000 description 1
- 235000006508 Nelumbo nucifera Nutrition 0.000 description 1
- 235000006510 Nelumbo pentapetala Nutrition 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000001343 mnemonic effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 239000007858 starting material Substances 0.000 description 1
Landscapes
- Executing Machine-Instructions (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
〔産業上の利用分野〕
本発明は、情報処理装置におけるデータ格納装置に関し
、特に,主記憶上のスタックとプロセッサ内資源とのデ
ータ転送制御に関する.〔従来の技術〕 情報処理装置におけるデータの格納手段としてスタック
(橿)があり,一般によく活用されている.スタックは
、格納するデータを格納した順に保持し,取り出す際に
は最後に格納したデータを取り出すものであり、LZF
O(ラスト インファースト アウト: Last I
n First Out )とも呼ばれる。スタックに
新しいデータを書き込む(スタックに積む)操作をプッ
シュ操作、最後にプッシュしたデータをスタックから読
み込む操作をポップ操作(あるいは、プル操作とも呼ぶ
)とそれぞれ呼び、スタックに対する操作は全てこの2
つの基本操作で行われる。
、特に,主記憶上のスタックとプロセッサ内資源とのデ
ータ転送制御に関する.〔従来の技術〕 情報処理装置におけるデータの格納手段としてスタック
(橿)があり,一般によく活用されている.スタックは
、格納するデータを格納した順に保持し,取り出す際に
は最後に格納したデータを取り出すものであり、LZF
O(ラスト インファースト アウト: Last I
n First Out )とも呼ばれる。スタックに
新しいデータを書き込む(スタックに積む)操作をプッ
シュ操作、最後にプッシュしたデータをスタックから読
み込む操作をポップ操作(あるいは、プル操作とも呼ぶ
)とそれぞれ呼び、スタックに対する操作は全てこの2
つの基本操作で行われる。
スタックは、スタックトップ(最後にプッシュしたデー
タ)へのポインタを用いることでソフトウエア的に容易
に実現できる。例えば、68000系のアーキテクチャ
においては,森亮一監修、再トイ3祐三、他著r680
00マイクロコンピュータ」頁162〜164に記述さ
れているように、上位アドレスから下位アドレスに向か
ってデータを追加するスタックは、スタックポインタS
Pを用いて、 プッシュ操作:プリデクリメントr−(SP)Jボップ
操作:ボストインクリメントr(Sp)−zにより行う
ことができる。例えば、最も単純な例としてデータ転送
命令moveを用いると,move.s (e a
x> + (S P)は、第一オペランドで指定
したアドレス<eaエ>の内容を,SPのデクリメント
後のアドレスへ寝き込む操作であり、 SF←SF−d (S P)←<eal> を行うことで、スタックへのプッシュを実現している.
ここに、dはスタックに置かれるデータのデータ長で、
データサイズ指定Sによって定まる。
タ)へのポインタを用いることでソフトウエア的に容易
に実現できる。例えば、68000系のアーキテクチャ
においては,森亮一監修、再トイ3祐三、他著r680
00マイクロコンピュータ」頁162〜164に記述さ
れているように、上位アドレスから下位アドレスに向か
ってデータを追加するスタックは、スタックポインタS
Pを用いて、 プッシュ操作:プリデクリメントr−(SP)Jボップ
操作:ボストインクリメントr(Sp)−zにより行う
ことができる。例えば、最も単純な例としてデータ転送
命令moveを用いると,move.s (e a
x> + (S P)は、第一オペランドで指定
したアドレス<eaエ>の内容を,SPのデクリメント
後のアドレスへ寝き込む操作であり、 SF←SF−d (S P)←<eal> を行うことで、スタックへのプッシュを実現している.
ここに、dはスタックに置かれるデータのデータ長で、
データサイズ指定Sによって定まる。
(b二バイトのとき1バイト、W:ワードのとき2バイ
ト、1:ロングワードのとき4バイドである。)また、
(s p)はSPの指す先の内容値を表わす。
ト、1:ロングワードのとき4バイドである。)また、
(s p)はSPの指す先の内容値を表わす。
ボツブ操作も、同じ( move命令を使って、mov
e,s(SP)+, <ea2)により、 <eax>←(s p) SP4−SP+d を実行し、第二オベランドで指定したアドレス<eaz
> へスタックトップの内客値の転送後、SPをイン
クリメントすることで実現できる.以上のように,ソフ
トウエア的にスタックを構成することは容易であるが、
ハードウエア備え付きのスタックもある.例えば,前述
の68000系では、システムスタックを備えている.
このシステムスタックは、アドレスレジスタの一つであ
るA7をシステムスタックポインタとして用い、上位ア
ドレスから下位アドレスへ向けて主記憶上に実現されて
いる。このシステムスタックを操作する命令として、 pea(push effective addres
s)命令1ind(link and allocat
e)命令unlk (unlink)命令 等の直接操作する命令の他、手続き呼び畠し/復帰に用
いる、 jsr(jump to subroutine)命令
rts(return from subroutin
e)命令のように他の処理(この場合は呼び出しに伴う
プログラムカウンタPCの更新)と連動してスタックリ
を行う命令もある、これは.戻リアドレスの退避やパラ
メータの受け渡し等をシステムスタックへの積降しで行
うためのものであり,高級言語で書かれたプログラムの
実行効率の向上に寄与している。
e,s(SP)+, <ea2)により、 <eax>←(s p) SP4−SP+d を実行し、第二オベランドで指定したアドレス<eaz
> へスタックトップの内客値の転送後、SPをイン
クリメントすることで実現できる.以上のように,ソフ
トウエア的にスタックを構成することは容易であるが、
ハードウエア備え付きのスタックもある.例えば,前述
の68000系では、システムスタックを備えている.
このシステムスタックは、アドレスレジスタの一つであ
るA7をシステムスタックポインタとして用い、上位ア
ドレスから下位アドレスへ向けて主記憶上に実現されて
いる。このシステムスタックを操作する命令として、 pea(push effective addres
s)命令1ind(link and allocat
e)命令unlk (unlink)命令 等の直接操作する命令の他、手続き呼び畠し/復帰に用
いる、 jsr(jump to subroutine)命令
rts(return from subroutin
e)命令のように他の処理(この場合は呼び出しに伴う
プログラムカウンタPCの更新)と連動してスタックリ
を行う命令もある、これは.戻リアドレスの退避やパラ
メータの受け渡し等をシステムスタックへの積降しで行
うためのものであり,高級言語で書かれたプログラムの
実行効率の向上に寄与している。
このシステムスタックを活用する手続き呼び出し/復帰
の手順は,コンパイラの実行方式で決めるものであるが
、最も一般的な手順、及びその手順を伴うシステムスタ
ックの使用形態として,前能のr68000マイクロコ
ンピュータ」頁206に示されている実行方式が挙げら
れる。即ち、手続き呼出しにあたっては、 (1) move命令はpea命令を用いてパラメータ
をスタックへプッシュ (2) jsr命令で戻リアドレス(現在のプログラム
カウンタの値)をスタックプッシュして手続きへ分岐 (3) link命令により、手続き内で使用するロー
カル変数領域をスタックに確保(現在のフレームポイン
タをスタックにプッシュし、フレームポインタを更新) (4) Il+ovem命令により,手続き内で使用す
るレジスタ群をスタックにプッシュ(レジスタ退避)の
操作を行なう。
の手順は,コンパイラの実行方式で決めるものであるが
、最も一般的な手順、及びその手順を伴うシステムスタ
ックの使用形態として,前能のr68000マイクロコ
ンピュータ」頁206に示されている実行方式が挙げら
れる。即ち、手続き呼出しにあたっては、 (1) move命令はpea命令を用いてパラメータ
をスタックへプッシュ (2) jsr命令で戻リアドレス(現在のプログラム
カウンタの値)をスタックプッシュして手続きへ分岐 (3) link命令により、手続き内で使用するロー
カル変数領域をスタックに確保(現在のフレームポイン
タをスタックにプッシュし、フレームポインタを更新) (4) Il+ovem命令により,手続き内で使用す
るレジスタ群をスタックにプッシュ(レジスタ退避)の
操作を行なう。
[この(1)〜(4)の操作後、手続き本体の処理を行
なった後に、呼出し元のアドレスの次の命令アドレス(
即ち、(2)でスタックへ退避したアドレス)へと分岐
する手続き復帰の処理を行なう。
なった後に、呼出し元のアドレスの次の命令アドレス(
即ち、(2)でスタックへ退避したアドレス)へと分岐
する手続き復帰の処理を行なう。
この、手続きからの復帰では,
(5) rnovem命令により、(4)で退避したレ
ジスタ群へスタックからポップ(レジスタ回復)(6)
unlk命令により、(3)で確保したローカル変数
領域を開放(旧フレームポインタをスタックからポップ
し、フレームポインタを回復)(7) rts命令によ
り、(2)で退避した戻リアドレスをプログラムカウン
タヘポップし、呼出し元へ復帰 (8) add命令等により、(1)でプッシュしたパ
ラメータ領域を開放(スタックポインタを下げるのみで
、データの積降しは行なわない)一の処理を行なう. 以上の(1)〜(8)の処理のうち、(1)と(8)は
渡すべきパラメータが存在する場合に呼出し側が行なう
処理であるが、(2)〜(7)はすべての手続きに共通
の処理である.(3)〜(4)の処理を手続きのプロロ
ーグ、(5)〜(6)の処理を手続きのエピローグと呼
ぶ。
ジスタ群へスタックからポップ(レジスタ回復)(6)
unlk命令により、(3)で確保したローカル変数
領域を開放(旧フレームポインタをスタックからポップ
し、フレームポインタを回復)(7) rts命令によ
り、(2)で退避した戻リアドレスをプログラムカウン
タヘポップし、呼出し元へ復帰 (8) add命令等により、(1)でプッシュしたパ
ラメータ領域を開放(スタックポインタを下げるのみで
、データの積降しは行なわない)一の処理を行なう. 以上の(1)〜(8)の処理のうち、(1)と(8)は
渡すべきパラメータが存在する場合に呼出し側が行なう
処理であるが、(2)〜(7)はすべての手続きに共通
の処理である.(3)〜(4)の処理を手続きのプロロ
ーグ、(5)〜(6)の処理を手続きのエピローグと呼
ぶ。
このように、島級言語を使った一般のプログラムにおい
て、(ユーザが高級言語で明示的に作らなくとも)スタ
ック操作が頻繁に行われており、全体的な処理性能に大
きな影響を与える.〔発明が解決しようとする課題〕 上記従来技術では、システムスタックには、役割の異な
る様々なデータを1個のスタックに順にプッシュ/ポツ
プしている。特に、手続き呼出しと復帰に関しては、コ
ンパイラの実行方式により固定的に固まっているため,
従来技術の項で述べた(1)〜(8)の手順に伴うスタ
ック操作が頻繁に出現する. 前記従来技術で述べた手続き呼出しに伴うスタック操作
(1)〜(8)は、必ずしもこの順序を遵守しなければ
ならないわけではない。例えば、(2)のjsr命令で
プッシュする復帰アドレスは、動的な手続き呼出しの深
さ(これをネストレベルと呼ぶ)の順序にプッシュする
ことが保証されていれば,他の(1) , (3) ,
(4)のプッシュ操作とは、無関係に行なって良<.
(7)のrts命令の実行に際して、現在のネストレベ
ルに対応する戻リアドレスがポップできれば良い。また
、(2)のプッシュ操作はどの手続きの呼出しであって
も、1回当たり固定サイズ(アドレスを表現できるサイ
ズで、68000の場合は4バイト)であるのに対して
、(1)はパラメータのサイズや個数.(3)はローカ
ル変数の総サイズ、(4)は退避すべきレジスタ総数に
よりスタック領域の使用斌は異なる。これらの要因は、
プログラムの利用分野やプログラミング方法によっても
著しく状況が異なる。
て、(ユーザが高級言語で明示的に作らなくとも)スタ
ック操作が頻繁に行われており、全体的な処理性能に大
きな影響を与える.〔発明が解決しようとする課題〕 上記従来技術では、システムスタックには、役割の異な
る様々なデータを1個のスタックに順にプッシュ/ポツ
プしている。特に、手続き呼出しと復帰に関しては、コ
ンパイラの実行方式により固定的に固まっているため,
従来技術の項で述べた(1)〜(8)の手順に伴うスタ
ック操作が頻繁に出現する. 前記従来技術で述べた手続き呼出しに伴うスタック操作
(1)〜(8)は、必ずしもこの順序を遵守しなければ
ならないわけではない。例えば、(2)のjsr命令で
プッシュする復帰アドレスは、動的な手続き呼出しの深
さ(これをネストレベルと呼ぶ)の順序にプッシュする
ことが保証されていれば,他の(1) , (3) ,
(4)のプッシュ操作とは、無関係に行なって良<.
(7)のrts命令の実行に際して、現在のネストレベ
ルに対応する戻リアドレスがポップできれば良い。また
、(2)のプッシュ操作はどの手続きの呼出しであって
も、1回当たり固定サイズ(アドレスを表現できるサイ
ズで、68000の場合は4バイト)であるのに対して
、(1)はパラメータのサイズや個数.(3)はローカ
ル変数の総サイズ、(4)は退避すべきレジスタ総数に
よりスタック領域の使用斌は異なる。これらの要因は、
プログラムの利用分野やプログラミング方法によっても
著しく状況が異なる。
以上の様に、同じスタック操作であっても、使用目的に
よって、予測されるスタック使用量,@度には、ばらつ
きがある。しかも、それらは用途別に別々のスタックと
しても原理的には差し支えない. 一方、スタックは、最も最後にプッシュしたデータから
ポップしていくため、スタックの上方(最後にプッシュ
した側)を高速アクセス可能なバッファに置くことで処
理速度を大幅に向上させることができる.このことは、
プッシュとポップを交互に繰り返す場合に、アクセスコ
ストの大きい主記憶に全《アクセスすることなく,アク
セスコストの小さいバッファへの積降しで済むことから
容易に推測できる。スタックバッファは,高速アクセス
可能な代わりに容斌に限りがあるので、スタックバッフ
ァが保持しつるデータ量(バッファサイズ)を超えてプ
ッシュしようとする場合には、人容封な主記憶に退避さ
れる.従って、このスタックバッファの効率が特に良い
のは、バッファサイズに収まる範囲のプッシュとポップ
が反復される場合であるが、手続き呼出しに伴って固定
的に使用されるスタック領域も多いため、動的な手続き
呼び出しの深さにばらつきが大きい場合には、スタック
バッファと主記憶間のデータ転送が頻発し、スタックバ
ッファの効果が削がれてしまう。
よって、予測されるスタック使用量,@度には、ばらつ
きがある。しかも、それらは用途別に別々のスタックと
しても原理的には差し支えない. 一方、スタックは、最も最後にプッシュしたデータから
ポップしていくため、スタックの上方(最後にプッシュ
した側)を高速アクセス可能なバッファに置くことで処
理速度を大幅に向上させることができる.このことは、
プッシュとポップを交互に繰り返す場合に、アクセスコ
ストの大きい主記憶に全《アクセスすることなく,アク
セスコストの小さいバッファへの積降しで済むことから
容易に推測できる。スタックバッファは,高速アクセス
可能な代わりに容斌に限りがあるので、スタックバッフ
ァが保持しつるデータ量(バッファサイズ)を超えてプ
ッシュしようとする場合には、人容封な主記憶に退避さ
れる.従って、このスタックバッファの効率が特に良い
のは、バッファサイズに収まる範囲のプッシュとポップ
が反復される場合であるが、手続き呼出しに伴って固定
的に使用されるスタック領域も多いため、動的な手続き
呼び出しの深さにばらつきが大きい場合には、スタック
バッファと主記憶間のデータ転送が頻発し、スタックバ
ッファの効果が削がれてしまう。
しかしながら、このような状況でも、前記従来技術の(
2)〜(7)で行なっているスタック操作のように、比
較的使用量見積りが容易であり、小容量のスタックバッ
ファを持つ別スタックとすれば,八ソファ効果が高まる
場合がある,例えば.このjsr命令とrts命令によ
る戻リアドレスのプッシュポップ操作の専用スタックを
設け,それに対し比較的小容斌のスタックバッファを設
けたとする。
2)〜(7)で行なっているスタック操作のように、比
較的使用量見積りが容易であり、小容量のスタックバッ
ファを持つ別スタックとすれば,八ソファ効果が高まる
場合がある,例えば.このjsr命令とrts命令によ
る戻リアドレスのプッシュポップ操作の専用スタックを
設け,それに対し比較的小容斌のスタックバッファを設
けたとする。
これにより、すべてをシステムスタックのみで行なった
時には、手続き呼出し毎に散在していた戻リアドレスを
局所化し、戻リアドレス専用スタックのスタックバッフ
ァ内に置くことがロf能になる6これは、比較的少ない
バッファ領域を使用するだけで(大部分のプログラムで
ネストレベルの最大値は8以下であるので、高々8X4
=32バイトのバッファで十分),戻リアドレスに関し
ては、主記憶とのデータ転送は不要となる。
時には、手続き呼出し毎に散在していた戻リアドレスを
局所化し、戻リアドレス専用スタックのスタックバッフ
ァ内に置くことがロf能になる6これは、比較的少ない
バッファ領域を使用するだけで(大部分のプログラムで
ネストレベルの最大値は8以下であるので、高々8X4
=32バイトのバッファで十分),戻リアドレスに関し
ては、主記憶とのデータ転送は不要となる。
以上述べたように、前記従来技術に於いては、バッファ
付きスタックの扱いにおいて、スタック操作の役割に応
じた複数のスタックへの分割と,それによるスタックバ
ッファ効果の向上に関し配慮がなされていなかった。
付きスタックの扱いにおいて、スタック操作の役割に応
じた複数のスタックへの分割と,それによるスタックバ
ッファ効果の向上に関し配慮がなされていなかった。
本発明の目的は,スタック操作に伴うプロセッサと主記
憶j1#1のデータ転送の処理において,プッシュない
しポップ操作の種別(実際にプッシュボツブ操作を行な
う命令の命令コード種別による分類)毎にスタックと、
個々のスタックに対するバッファ(スタックバッファ)
を設けることで、主記憶とプロセッサ間のデータ転送奈
効率化すると共に、バッファ効果を高めることにある。
憶j1#1のデータ転送の処理において,プッシュない
しポップ操作の種別(実際にプッシュボツブ操作を行な
う命令の命令コード種別による分類)毎にスタックと、
個々のスタックに対するバッファ(スタックバッファ)
を設けることで、主記憶とプロセッサ間のデータ転送奈
効率化すると共に、バッファ効果を高めることにある。
上記目的は,スタックのプッシュポップ操作を予め定め
られた命令語の分類種別に応じて選択するスタックバッ
ファ制御装置を、一つないし複数備えるスタック制御装
置t!:19けることにより達成される。
られた命令語の分類種別に応じて選択するスタックバッ
ファ制御装置を、一つないし複数備えるスタック制御装
置t!:19けることにより達成される。
スタック制御装置は,複数のスタック領域及びそれに付
随するスタックバッファの組を制御するスタックバッフ
ァ制御装置を備える。このスタックバッファ制御装置は
、予め定められた命令語の分類に従う分類種別に応じて
選択されるため、役割の似通ったスタック操作をそれぞ
れ別々のバッファ付きスタックに分割管理できる6これ
により、同一のレベルでのプッシュとポップを頻カに繰
り返すようなスタック操作の機会が増えるので、スタッ
クバッファの効果が向上し、主記憶とプロセッサのデー
タ転送の削減による処理の高速化が図られる。
随するスタックバッファの組を制御するスタックバッフ
ァ制御装置を備える。このスタックバッファ制御装置は
、予め定められた命令語の分類に従う分類種別に応じて
選択されるため、役割の似通ったスタック操作をそれぞ
れ別々のバッファ付きスタックに分割管理できる6これ
により、同一のレベルでのプッシュとポップを頻カに繰
り返すようなスタック操作の機会が増えるので、スタッ
クバッファの効果が向上し、主記憶とプロセッサのデー
タ転送の削減による処理の高速化が図られる。
本発明の実施例の記述においては、スタックは全て下位
アドレスから上位アドレスへ向かうものとし、ユーザス
タック・システムスタック等の区別は行わないが,それ
ら全てを包含するものとして県にスタックと呼ぶ。又、
プッシュ操作、ポップ操作は、それぞれその操作を連動
的に引き起こす操作も含めた総称として用いる。従って
、pea命令やlink命令, unLk命令のような
明示的なスタック操作ばかりでなく、jsr命令やrt
s命令によるものも含まれる, 第1図は,本発明の第一実施例をふくむ情報処理装置を
ブロックダイアグラムで示す。この装置は、プロセッサ
(LSIチップ)1と主記憶装置2から成る.プロセッ
サ1は、概略的にいえば、内部バス10に接続された演
算部9とプログラム制御部とから成り,プログラム制御
部は,命令レジスタ5と命令デコーダ6、及び命令アド
レスレジスタ3からなる。演算部9は,汎用レジスタ等
を含み,各種演算を行なうものであるが,そのうち,シ
ステムスタック関連の演算は,スタックバッファ41と
42と、このスタックバッファを制御するバッファ制御
装置71と72を内部に持つスタック制御装置7によっ
て行なう。内部ハス10は,図において点線で略記され
るように、底当なインタフェースと外部バスを介して主
記憶装置2に接続される。
アドレスから上位アドレスへ向かうものとし、ユーザス
タック・システムスタック等の区別は行わないが,それ
ら全てを包含するものとして県にスタックと呼ぶ。又、
プッシュ操作、ポップ操作は、それぞれその操作を連動
的に引き起こす操作も含めた総称として用いる。従って
、pea命令やlink命令, unLk命令のような
明示的なスタック操作ばかりでなく、jsr命令やrt
s命令によるものも含まれる, 第1図は,本発明の第一実施例をふくむ情報処理装置を
ブロックダイアグラムで示す。この装置は、プロセッサ
(LSIチップ)1と主記憶装置2から成る.プロセッ
サ1は、概略的にいえば、内部バス10に接続された演
算部9とプログラム制御部とから成り,プログラム制御
部は,命令レジスタ5と命令デコーダ6、及び命令アド
レスレジスタ3からなる。演算部9は,汎用レジスタ等
を含み,各種演算を行なうものであるが,そのうち,シ
ステムスタック関連の演算は,スタックバッファ41と
42と、このスタックバッファを制御するバッファ制御
装置71と72を内部に持つスタック制御装置7によっ
て行なう。内部ハス10は,図において点線で略記され
るように、底当なインタフェースと外部バスを介して主
記憶装置2に接続される。
主記憶装置2には,プロセッサ1に対する命令列を格納
したユーザプログラム21と、このユ−ザプログラムが
使用するスタック領域22が存在する。スタック領域2
2は、さらに2個の領域に分割されており、そ九ぞれ、
汎用スタック領域221.戻リアドレス用スタック領域
222と呼ぶ。(以降では、この主記憶域に実在するス
タック領域を、特に、実スタックと呼ぶことがある、)
この2個のスタック領域に対応するバッファか、それぞ
れ,汎用スタックバッファ41と戻リアドレス用スタッ
クバッファ42であり,対応するスタック@域の先頭ア
ドレス(最も最後にプッシュしたアドレス)付近のデー
タのバッファとなっている。このスタックバッファの制
御を行なうのが、それぞれ、汎用スタックバッファ制御
装置71と戻リアドレススタック制御装置72であり、
スタック制御装置7が備える。
したユーザプログラム21と、このユ−ザプログラムが
使用するスタック領域22が存在する。スタック領域2
2は、さらに2個の領域に分割されており、そ九ぞれ、
汎用スタック領域221.戻リアドレス用スタック領域
222と呼ぶ。(以降では、この主記憶域に実在するス
タック領域を、特に、実スタックと呼ぶことがある、)
この2個のスタック領域に対応するバッファか、それぞ
れ,汎用スタックバッファ41と戻リアドレス用スタッ
クバッファ42であり,対応するスタック@域の先頭ア
ドレス(最も最後にプッシュしたアドレス)付近のデー
タのバッファとなっている。このスタックバッファの制
御を行なうのが、それぞれ、汎用スタックバッファ制御
装置71と戻リアドレススタック制御装置72であり、
スタック制御装置7が備える。
ユーザプログラム21内のスタック操作命令は、外部バ
ス、内部バス10を経由して命令レジスタ5へと読み出
した後、デコーダにより命令種別に分類され、それぞれ
所定の演算回路へ必要な信号を送る。このとき,手続き
分岐の戻リアドレスに関するスタック操作を行なうjs
r命令とrts命令のときには、戻リアドレススタツク
バッファ制御装置72へ、jsr命令とrts命令以外
のスタック操作命令(これを、便宜的に、汎用スタック
操作と呼び、単に、push命令+ POP命令などと
書く)の場合は、汎用スタックバッファ制御装置71へ
信号を送る。
ス、内部バス10を経由して命令レジスタ5へと読み出
した後、デコーダにより命令種別に分類され、それぞれ
所定の演算回路へ必要な信号を送る。このとき,手続き
分岐の戻リアドレスに関するスタック操作を行なうjs
r命令とrts命令のときには、戻リアドレススタツク
バッファ制御装置72へ、jsr命令とrts命令以外
のスタック操作命令(これを、便宜的に、汎用スタック
操作と呼び、単に、push命令+ POP命令などと
書く)の場合は、汎用スタックバッファ制御装置71へ
信号を送る。
バッファ制御装1[Y7 7 1はスタックバッファ4
1とスタック領域221のデータを、バッファ制御装置
72はスタックバッファ42とスタック領域222のデ
ータを、それそれ独立に制御している。
1とスタック領域221のデータを、バッファ制御装置
72はスタックバッファ42とスタック領域222のデ
ータを、それそれ独立に制御している。
従って,上記の2組のスタック領域とスタックバッファ
は、命令書の種別により選択的に使用される。
は、命令書の種別により選択的に使用される。
第2図は、スタック制御装置7と、スタックバッファ4
1〜42とスタック領域221〜222の対応関係を示
す図である。スタック制御装置7中のスタックバッファ
制御装置71〜72は、プロセッサと主記憶上のスタッ
ク22の間のデータのやり取りに介在し、プッシュデー
タ/ボツプデ一夕のバッファリングを行なう。スタック
バッファ制御装置は,上述の如くスタック操作命令の命
令種別により選択されるので、それぞれ独立したバッフ
ァ付きスタックとなっており、汎用スタックと戻リアド
レススタックが存在するが,構成は同じである。
1〜42とスタック領域221〜222の対応関係を示
す図である。スタック制御装置7中のスタックバッファ
制御装置71〜72は、プロセッサと主記憶上のスタッ
ク22の間のデータのやり取りに介在し、プッシュデー
タ/ボツプデ一夕のバッファリングを行なう。スタック
バッファ制御装置は,上述の如くスタック操作命令の命
令種別により選択されるので、それぞれ独立したバッフ
ァ付きスタックとなっており、汎用スタックと戻リアド
レススタックが存在するが,構成は同じである。
スタックバッファ制御装置は、実スタックのスタックト
ップのアドレスを指すスタックポインタgsp711,
rsp721 (肉者を総称してスタックポインタs
pと呼ぶ)、現在のスタックバッファのスタックトップ
を指すバッファポインタgbp712,rbp722
(肉者をB称してバッファポインタb p.と呼ぶ)を
有する。スタックポインタspは常に実スタックのアド
レスを保持しており,主記憶への実際のデータ転送が行
われる時点で初めて更新される。また、バッファポイン
タbpは、スタックバッファの底からのディスプレーメ
ントで表わすので、バイト単位の整数値であるが、スタ
ックバッファの先頭を指す。スタックバッファと実スタ
ック領域の間のデータ転送は、プッシュすべきデータが
スタックバッファに拵えられ、その総計がバッファサイ
ズに達したとき、又は、スタックバッファからポンプす
るデータが無くなったときに行なう。
ップのアドレスを指すスタックポインタgsp711,
rsp721 (肉者を総称してスタックポインタs
pと呼ぶ)、現在のスタックバッファのスタックトップ
を指すバッファポインタgbp712,rbp722
(肉者をB称してバッファポインタb p.と呼ぶ)を
有する。スタックポインタspは常に実スタックのアド
レスを保持しており,主記憶への実際のデータ転送が行
われる時点で初めて更新される。また、バッファポイン
タbpは、スタックバッファの底からのディスプレーメ
ントで表わすので、バイト単位の整数値であるが、スタ
ックバッファの先頭を指す。スタックバッファと実スタ
ック領域の間のデータ転送は、プッシュすべきデータが
スタックバッファに拵えられ、その総計がバッファサイ
ズに達したとき、又は、スタックバッファからポンプす
るデータが無くなったときに行なう。
第2図の汎用スタック制御装置71を例に取ると,スタ
ック領域2211が使用中の実スタック領域であり、そ
の先頭位置をg s p 7 1. 1が指している。
ック領域2211が使用中の実スタック領域であり、そ
の先頭位置をg s p 7 1. 1が指している。
また,バッファポインタgbp712は、スタックバッ
ファ41の底からの変位g dを保持することにより、
スタックバッファ41に存在するスタックトップg41
1の位置を示している。
ファ41の底からの変位g dを保持することにより、
スタックバッファ41に存在するスタックトップg41
1の位置を示している。
バッファポインタgbp712が、バッファサイズに等
しくなると(即ち、スタックバッファ41が、満杯にな
ると)、バッファの内容全てを、実スタック領域221
2に一括転送し、そのバッファサイズ分だけgsp71
1を更新、gbp712も0とする。戻リアドレススタ
ックに関しても同様である6 次に、これらスタック制御装置によるプッシュ操作、ポ
ップ操作の詳細をそれぞれ第3図,第4図のフローチャ
ート図を用いて説明する。第3図2第4図では、汎用ス
タックの例を挙げるが,戻リアドレススタックに関して
も、(命令語のアセンブラ一二一モニックが異なるのみ
で)同様である。
しくなると(即ち、スタックバッファ41が、満杯にな
ると)、バッファの内容全てを、実スタック領域221
2に一括転送し、そのバッファサイズ分だけgsp71
1を更新、gbp712も0とする。戻リアドレススタ
ックに関しても同様である6 次に、これらスタック制御装置によるプッシュ操作、ポ
ップ操作の詳細をそれぞれ第3図,第4図のフローチャ
ート図を用いて説明する。第3図2第4図では、汎用ス
タックの例を挙げるが,戻リアドレススタックに関して
も、(命令語のアセンブラ一二一モニックが異なるのみ
で)同様である。
尚、汎用スタック操作の命令は、同操作を引き起こす命
令を全て代表して、 プッシュ命令:push Al (sp)ボツブ命
令 ’ pop (s p) 十+ 8の形式で書く
。それぞれ「データAをスタックへプッシュする」、[
スタックトップの値をポップしてBへ格納する」の意味
を持つ。
令を全て代表して、 プッシュ命令:push Al (sp)ボツブ命
令 ’ pop (s p) 十+ 8の形式で書く
。それぞれ「データAをスタックへプッシュする」、[
スタックトップの値をポップしてBへ格納する」の意味
を持つ。
第3図は,現在のスタックポインタspを一m位進めた
位置にデータXを格納するプッシュ命令push X
, −(s p) に対する本実施例における処理の流れを示す。
位置にデータXを格納するプッシュ命令push X
, −(s p) に対する本実施例における処理の流れを示す。
まず、命令語の種別により,該当するスタックバッファ
制御装置(この場合は、汎用スタックバッファ制御装置
71)にプッシュすべきデータを転送することで起動さ
れる。プッシュ操作を指ボされた4zツクバッファ制御
装置71は、現在のバッファポインタbpO値がバッフ
ァサイズと等しいか否かを判定する(301)。その結
果,バッファサイズと等しい場合には、スタックバッフ
ァ41の内容を実スタックに転送した(302)後で、
データを格納し,バッファポインタbpの更新を行う
(303)。バッファサイズより)lXさい場合には、
まだスタックバッファ41に余裕があるので,所定の位
置にデータを格納しバッファポインタbpを更新するが
、実スタックへのデータ転送は行わない。
制御装置(この場合は、汎用スタックバッファ制御装置
71)にプッシュすべきデータを転送することで起動さ
れる。プッシュ操作を指ボされた4zツクバッファ制御
装置71は、現在のバッファポインタbpO値がバッフ
ァサイズと等しいか否かを判定する(301)。その結
果,バッファサイズと等しい場合には、スタックバッフ
ァ41の内容を実スタックに転送した(302)後で、
データを格納し,バッファポインタbpの更新を行う
(303)。バッファサイズより)lXさい場合には、
まだスタックバッファ41に余裕があるので,所定の位
置にデータを格納しバッファポインタbpを更新するが
、実スタックへのデータ転送は行わない。
第4図は、現在のスタックトップにあるデータをYに格
納した後に、spをインクリメントして1単位戻すスタ
ックポップ命令 pop.b(s p)+, Y に対する本実施例における処理の流れをボす。まず、プ
ッシュ命令の場合と同様にしてスタックバッファ制御装
置が選択され、ポップ操作を起動する。ところで、上記
プッシュ命令は、データを必ずスタックバッファに格納
するので、ポツプすべきデータ(=最後にプッシュした
データ)がスタツクバッファ内に存在することが保障さ
れている。
納した後に、spをインクリメントして1単位戻すスタ
ックポップ命令 pop.b(s p)+, Y に対する本実施例における処理の流れをボす。まず、プ
ッシュ命令の場合と同様にしてスタックバッファ制御装
置が選択され、ポップ操作を起動する。ところで、上記
プッシュ命令は、データを必ずスタックバッファに格納
するので、ポツプすべきデータ(=最後にプッシュした
データ)がスタツクバッファ内に存在することが保障さ
れている。
従って、まず、バッファポインタbpが示すスタックバ
ッファの所定の位置からデータを読みだし、指定された
アドレスYへと転送後、バッファポインタbpを更新す
る(401)。次に,スタックバッファ内にデータが存
在するか否かを判定する(402)。この判定は、更新
後のバッファポインタbpの値が,Oと等しいかどうか
でおこなえる。バッファポインタbpの値が0でない場
合は、まだスタックバッファ内にデータが存在し、次の
ポップ操作にも支障がないのでこのまま処理を終了する
。バッファポインタb p.値がOの場合は、次のポッ
プ操作でポップするデータが、実スタック上にある。そ
こで,実スタックのスタックトップ、即ち、spを用い
て主記憶からスタックバッファにバッファサイズ分のデ
ータを転送し、spの更新とパツファポインタbpの更
新(バッファサイズと等しくする)を行なう (403
)。
ッファの所定の位置からデータを読みだし、指定された
アドレスYへと転送後、バッファポインタbpを更新す
る(401)。次に,スタックバッファ内にデータが存
在するか否かを判定する(402)。この判定は、更新
後のバッファポインタbpの値が,Oと等しいかどうか
でおこなえる。バッファポインタbpの値が0でない場
合は、まだスタックバッファ内にデータが存在し、次の
ポップ操作にも支障がないのでこのまま処理を終了する
。バッファポインタb p.値がOの場合は、次のポッ
プ操作でポップするデータが、実スタック上にある。そ
こで,実スタックのスタックトップ、即ち、spを用い
て主記憶からスタックバッファにバッファサイズ分のデ
ータを転送し、spの更新とパツファポインタbpの更
新(バッファサイズと等しくする)を行なう (403
)。
次に、上記のように,命令種別に対応した種別スタスタ
及びスタックバッファを用いたプッシュ操作、ポップ操
作の過程を、第5図に示すプログラムを例題として、第
6図(a)〜(f)に図式的に示す。第5図のプログラ
ム例は,従来技術の項で述べた手続き呼出しの手順を表
わしているが,簡単のためjsr, rtsr pus
h, pop命令の4種類の二一モニツクで示してある
。また、スタック操作のデータサイズは4バイトとし、
スタックバッファのバッファサイズは、41.42共に
、12バイトとした。第5図のプログラムの概略の動作
を以下に述べる。
及びスタックバッファを用いたプッシュ操作、ポップ操
作の過程を、第5図に示すプログラムを例題として、第
6図(a)〜(f)に図式的に示す。第5図のプログラ
ム例は,従来技術の項で述べた手続き呼出しの手順を表
わしているが,簡単のためjsr, rtsr pus
h, pop命令の4種類の二一モニツクで示してある
。また、スタック操作のデータサイズは4バイトとし、
スタックバッファのバッファサイズは、41.42共に
、12バイトとした。第5図のプログラムの概略の動作
を以下に述べる。
push命令501でパラメータプッシュ後、jsr命
令でサブルーチンSUBへと手続き分岐する(この時、
戻リアドレスをプッシュする)。次に、push命令5
03と504でローカル変数領域の確保とレジスタの退
避を行なって、本体の処理後、pop命令505と50
6でそれぞれ回復し. rts命令50′7で呼出しも
とへ復帰する(この時、戻リアドレスをポップ)。最後
に、pOρ命令508でパラメータ領域を開放している
。
令でサブルーチンSUBへと手続き分岐する(この時、
戻リアドレスをプッシュする)。次に、push命令5
03と504でローカル変数領域の確保とレジスタの退
避を行なって、本体の処理後、pop命令505と50
6でそれぞれ回復し. rts命令50′7で呼出しも
とへ復帰する(この時、戻リアドレスをポップ)。最後
に、pOρ命令508でパラメータ領域を開放している
。
第5図に示されるように,主記憶装置2中のユ−ザプロ
グラム21は、同じく主記憶装V!2中に存在するスタ
ック22に対するプッシュ操作・ポップ操作を行ってい
る。ステツク22はさらに汎用スタック領域221、戻
リアドレス用スタック領域222が存在する。まず、ス
タック22に何も積まれていない初期状態(第6図(a
))においては、各スタックポインタg s p 7
1 1 , rsp721はそれぞれ領域の底を指して
おり、バッファポインタgbp712,rbp722は
0となっている。
グラム21は、同じく主記憶装V!2中に存在するスタ
ック22に対するプッシュ操作・ポップ操作を行ってい
る。ステツク22はさらに汎用スタック領域221、戻
リアドレス用スタック領域222が存在する。まず、ス
タック22に何も積まれていない初期状態(第6図(a
))においては、各スタックポインタg s p 7
1 1 , rsp721はそれぞれ領域の底を指して
おり、バッファポインタgbp712,rbp722は
0となっている。
次に、push命令501とrts命令502が行われ
た後のプログラム領域■における各機成要素の内容を示
すのが第6図(b)である6この時点で、プッシュした
戻リアドレスa i及び、戻リアドレス以外のプッシュ
データL)0,IJLは、各々のスタックバッファに格
納されており,実スタック221,222にはまだ格納
されていない。(従って. gsp711,rsp21
の値も初期状施のままである)また,バッファポインタ
bpは、図に袴も−り、それぞれのサイズで更新されて
いる。
た後のプログラム領域■における各機成要素の内容を示
すのが第6図(b)である6この時点で、プッシュした
戻リアドレスa i及び、戻リアドレス以外のプッシュ
データL)0,IJLは、各々のスタックバッファに格
納されており,実スタック221,222にはまだ格納
されていない。(従って. gsp711,rsp21
の値も初期状施のままである)また,バッファポインタ
bpは、図に袴も−り、それぞれのサイズで更新されて
いる。
次に、504のpush命令で通常データをプッシュし
たのが第6図(C)、さらに505のpush命令で通
常データを1回プッシュしたのが第6図(d)であり、
それぞれ第5図におけるプログラl1領域■,■の時点
の状態を表わしている。第6図(c)では、汎用スタッ
クバッファ41が満杯になり,バッファポインタgbp
.712の内容がバッファサイズと等しくなっている。
たのが第6図(C)、さらに505のpush命令で通
常データを1回プッシュしたのが第6図(d)であり、
それぞれ第5図におけるプログラl1領域■,■の時点
の状態を表わしている。第6図(c)では、汎用スタッ
クバッファ41が満杯になり,バッファポインタgbp
.712の内容がバッファサイズと等しくなっている。
従って、この状態にさらに通常データをプッシュすると
第3図の303の処理により、スタックバッファ41の
内容値が、gsp711の指す先の実スタック領域のス
タックトップアドレスへ,バッファサイズ分転送される
。
第3図の303の処理により、スタックバッファ41の
内容値が、gsp711の指す先の実スタック領域のス
タックトップアドレスへ,バッファサイズ分転送される
。
その後、D3のスタックバッファ4]への転送が行われ
、同時にgbp712の値も4となるので、(第6図(
d))のようになる。この状態で汎用スタックからのポ
ップを行ったのが、第6図(e)で、第5図におけるプ
ログラム領域■である.第4図の402の処理により、
スタックバッファ41のgbPの指す位置のデータをポ
ップ命令のオペランドであるD3へと転送が行われ,4
03の条件判断(bp=o)により404の処理,即ち
実スタックからスタックバッファ41への転送処理を行
っている6 第6図(f)は、手続きSUBの呼出しから復帰した直
後の、プログラム領域■におけるスタックの使用状況で
あり,戻リアドレスa1は、結局主記憶に転送されるこ
とでなく、スタックバッファ42とのやり取りで処理を
終了している。
、同時にgbp712の値も4となるので、(第6図(
d))のようになる。この状態で汎用スタックからのポ
ップを行ったのが、第6図(e)で、第5図におけるプ
ログラム領域■である.第4図の402の処理により、
スタックバッファ41のgbPの指す位置のデータをポ
ップ命令のオペランドであるD3へと転送が行われ,4
03の条件判断(bp=o)により404の処理,即ち
実スタックからスタックバッファ41への転送処理を行
っている6 第6図(f)は、手続きSUBの呼出しから復帰した直
後の、プログラム領域■におけるスタックの使用状況で
あり,戻リアドレスa1は、結局主記憶に転送されるこ
とでなく、スタックバッファ42とのやり取りで処理を
終了している。
本実施例によれば、スタック操作を実現する命令語の種
別によりバッファ付きスタックを複数個備えており、そ
のスタック種別毎に設けたスタックバッファ制御装置が
,スタック操作に伴うデータ転送の効率化を行っている
。これにより、一つのスタックを用いた場合には,敗在
する可能性の高い戻リアドレスを専用のスタックを設け
ることで局所化している。従って、上記戻リアドレス専
用スタックは、手続きの動的なネストレベルの最大値以
下の容量のスタックバッファを備えていれば,分岐時の
戻リアドレスの退避回復に関し、主記憶とのデータ転送
が無くなる.手続きの動的なネストレベルの最大値は、
大部分のプログラムで8レベルを超えないことが経験的
に知られているので、僅か8×4(戻リアドレスのデー
タサイズ)バイトのスタックバッファをプロセッサ内に
備えるだけで、スタック操作の処理性能が向上する効果
がある。
別によりバッファ付きスタックを複数個備えており、そ
のスタック種別毎に設けたスタックバッファ制御装置が
,スタック操作に伴うデータ転送の効率化を行っている
。これにより、一つのスタックを用いた場合には,敗在
する可能性の高い戻リアドレスを専用のスタックを設け
ることで局所化している。従って、上記戻リアドレス専
用スタックは、手続きの動的なネストレベルの最大値以
下の容量のスタックバッファを備えていれば,分岐時の
戻リアドレスの退避回復に関し、主記憶とのデータ転送
が無くなる.手続きの動的なネストレベルの最大値は、
大部分のプログラムで8レベルを超えないことが経験的
に知られているので、僅か8×4(戻リアドレスのデー
タサイズ)バイトのスタックバッファをプロセッサ内に
備えるだけで、スタック操作の処理性能が向上する効果
がある。
本発明の他の実施例としては,現在のローカル変数領域
の先頭(フレームポインタfdと呼ぶ)をスタックにプ
ッシュした後で、スタック領域の確保を行なうlink
命令及び、この領域を開放した後、フレームポインタf
bを旧値に戻すunlk命令に適用した場合が挙げられ
る.この場合も、前記実施例と同様の構成により、li
nk命令とunlk命令のデコード結果に連動して起動
されるスタックバッファ制御装置を設け、対応するスタ
ックバッファ、実スタック領域を備えることで実現でき
る。
の先頭(フレームポインタfdと呼ぶ)をスタックにプ
ッシュした後で、スタック領域の確保を行なうlink
命令及び、この領域を開放した後、フレームポインタf
bを旧値に戻すunlk命令に適用した場合が挙げられ
る.この場合も、前記実施例と同様の構成により、li
nk命令とunlk命令のデコード結果に連動して起動
されるスタックバッファ制御装置を設け、対応するスタ
ックバッファ、実スタック領域を備えることで実現でき
る。
即ち、フレームポインタのプッシュポップ操作をスタッ
クバッファ制御装置を用いて行ない、スタツク領域は実
スタック上に確保すれば、フレームポインタ専用のバッ
ファ付きスタックが構成できる。
クバッファ制御装置を用いて行ない、スタツク領域は実
スタック上に確保すれば、フレームポインタ専用のバッ
ファ付きスタックが構成できる。
このフレームポインタ専用スタックは、手続き呼出し1
回当たりにアドレスサイズ分の容量でよいので,戻リア
ドレススタックの場合と同様に、少ないバッファ資源で
効果を得られる。戻リアドレススタックとフレームポイ
ンタスタックを併設しても良い.また、戻リアドレスと
フレームポインタのスタック操作は、従来技術の項で述
べたとおり、殆どの場合、同期を取って連動しておこな
われる。従って、両者を一つのバッファ付きスタックと
して管理するのも有効である.この場合スタックバッフ
ァ制御装置等のハードウエア資源の負担は小さいが,両
者を別々のスタックとして扱う場合よりは、(t!!バ
ッファサイズが等しい場合に)局所的スタック操作の機
会が減少し、処理性能は落ちる。
回当たりにアドレスサイズ分の容量でよいので,戻リア
ドレススタックの場合と同様に、少ないバッファ資源で
効果を得られる。戻リアドレススタックとフレームポイ
ンタスタックを併設しても良い.また、戻リアドレスと
フレームポインタのスタック操作は、従来技術の項で述
べたとおり、殆どの場合、同期を取って連動しておこな
われる。従って、両者を一つのバッファ付きスタックと
して管理するのも有効である.この場合スタックバッフ
ァ制御装置等のハードウエア資源の負担は小さいが,両
者を別々のスタックとして扱う場合よりは、(t!!バ
ッファサイズが等しい場合に)局所的スタック操作の機
会が減少し、処理性能は落ちる。
また、命令語によりスタック種別を判定しているK,ユ
ーザはこれらのスタックバッファ制御装置を必ずしも意
識する必要は無い。即ち、アセンブラニーモニツクレベ
ルでは、従来技術におけるシステムスタックと同様にp
ea命令や. link/unlk命令を使用すれば、
これらの種別スタックバッファ制御装置を暗黙的に指定
できる。さらに、これらの機能を,コンパイラのコード
生成等が利用すれば、一般の高級言語で書かれたプログ
ラムの処理性能向上も期待できる。
ーザはこれらのスタックバッファ制御装置を必ずしも意
識する必要は無い。即ち、アセンブラニーモニツクレベ
ルでは、従来技術におけるシステムスタックと同様にp
ea命令や. link/unlk命令を使用すれば、
これらの種別スタックバッファ制御装置を暗黙的に指定
できる。さらに、これらの機能を,コンパイラのコード
生成等が利用すれば、一般の高級言語で書かれたプログ
ラムの処理性能向上も期待できる。
本発明によれば,バッファ付きスタックのスタック操作
を命令種別により分類し、それぞれ独立したスタックと
して制御している。これにより、一本のスタックを使う
場合に比べて、プッシュとポップの反復操作等の機会を
増やすことができる。
を命令種別により分類し、それぞれ独立したスタックと
して制御している。これにより、一本のスタックを使う
場合に比べて、プッシュとポップの反復操作等の機会を
増やすことができる。
スタックバッファを用いた場合、スタックに積まれたデ
ータのプロセッサと主記憶間のデータ転送は、スタック
バッファのバッファサイズ単位で行なわれる。従って、
バッファサイズを超えないプッシュとポップの発生する
可能性を高めれば,主記憶へのアクセス回数を減らし、
スタック操作の処理性能の向上が可能となる。
ータのプロセッサと主記憶間のデータ転送は、スタック
バッファのバッファサイズ単位で行なわれる。従って、
バッファサイズを超えないプッシュとポップの発生する
可能性を高めれば,主記憶へのアクセス回数を減らし、
スタック操作の処理性能の向上が可能となる。
特に、このような特定命令種別専用のバッファ付きスタ
ックとして、手続き分岐/復帰命令の戻リアドレスのス
タックを設けた場合には、少ないバシファ資源でも、比
較的確実に効果を挙げることができる。また、処理速度
に重点をおき.データサイズを意識したスタック操作を
行なう場合でも、主記憶領域に無,獄が生じない効果が
ある。
ックとして、手続き分岐/復帰命令の戻リアドレスのス
タックを設けた場合には、少ないバシファ資源でも、比
較的確実に効果を挙げることができる。また、処理速度
に重点をおき.データサイズを意識したスタック操作を
行なう場合でも、主記憶領域に無,獄が生じない効果が
ある。
第1図は、本発明の一実施例を含む情報処理装置のプロ
ツクダイアグラム、第2図は、本実施例の主要部分であ
るスタック制御′A置とスタックバッファ、及び主記憶
上のスタック領域の関係を示す図、第3図と第4図は,
第1図の装置に於けるプッシュ操作,ポップ操作の処理
の流れを示すフローチャート図、第5図は、実施例にお
いて実行するプログラム例を示す図、第6図(a)〜(
f)は,第5図のプログラム例に対するスタック操作の
各段階の過程を示す説明図である。
ツクダイアグラム、第2図は、本実施例の主要部分であ
るスタック制御′A置とスタックバッファ、及び主記憶
上のスタック領域の関係を示す図、第3図と第4図は,
第1図の装置に於けるプッシュ操作,ポップ操作の処理
の流れを示すフローチャート図、第5図は、実施例にお
いて実行するプログラム例を示す図、第6図(a)〜(
f)は,第5図のプログラム例に対するスタック操作の
各段階の過程を示す説明図である。
Claims (1)
- 【特許請求の範囲】 1、主記憶装置内の一定領域を占めるスタックと、スタ
ックの先頭位置を指示するスタックポインタを有し、上
記スタックに対する操作手段としてプッシュ操作ホップ
操作等のスタック操作を上記スタックポインタを用いて
行う情報処理装置において、プッシュないしホップする
データの一部、ないし全部を一時的に保持するスタック
バッファをプロセッサ内に複数個備え、主記憶上のスタ
ック領域とプロセッサ内のスタックバッファとで構成す
る複数のスタックを、スタック操作命令の命令語による
分類に従つて選択するスタック制御手段をプロセッサ内
に設けたことを特徴とする情報処理装置。 2、請求項1におけるスタックバッファと主記憶域のス
タック領域とのデータ転送制御において、プッシュデー
タないしホップデータを、予め定められているバッファ
サイズにバッファリングし、命令書の指定による論理的
なプッシュ・ホップデータやプッシュ・ホップ回数とは
無関係に、このバッファサイズでプロセサツと主記憶間
の物理的な転送を行うスタックバッファ制御手段を、上
記主記憶のスタック領域とプロセッサ内のスタックバッ
ファで構成する複数のスタックのいずれか、ないし全て
に設けたことを特徴とする情報処理装置。 3、請求項2において、上記バッファサイズへのバッフ
ァリングを行うための手段として、スタックバッファに
格納済みの一つまたは複数のデータのデータサイズの総
計を保持し、該データサイズの総計がバッファサイズに
満たない間はバッファリングを継続する既バッファリン
グサイズ保持手段を、スタックバッファ制御装置内に設
けたことを特徴とする情報処理装置。 4、請求項2において、上記バッファサイズへのバッフ
ァリングを行うための手段として、次にバッファリング
を行う位置を指定するバッファ位置指定手段を設け、初
期状態ではスタックバッファの一方の端を指し、該スタ
ックバッファへのバッファリング、即ち、バッファ位置
指定手段の指す位置への転送が行われる毎に、スタック
バッファの他の一方に向けてデータサイズ分だけ更新し
た位置を指すようにし、スタックバッファの終端に達し
ない間はバッファリングを継続することを特徴とする情
報処理装置。 5、請求項2〜4のいずれか一つにおいて、上記スタッ
クバッファの使用領域の先頭を指し示すバッファ位置指
示手段と、主記憶域のスタック領域の現在のスタックト
ップのアドレスを指すスタックポインタとから成るスタ
ックバッファ制御装置をプロセッサ内に一つないし複数
個備えたことを特徴とする情報処理装置。 6、請求項5における複数のスタックバッファ制御装置
を備える場合において、該スタックバッファ制御装置を
起動する命令を予め定めたスタック操作命令に限定した
、当該スタック操作命令の専用スタックバッファ制御装
置とし、他のスタック操作命令では使用不可とすること
で、上記命令の分類に従つて、複数のスタックバッファ
制御装置からそれぞれ排他的に選択することを特徴とす
る情報処理装置。 7、請求項6におけるスタック操作命令の分類において
、手続き呼出しと復帰を行なう命令に対して起動される
専用スタックを設け、手続き呼出し時の戻リアドレスの
プッシュ、及び、復帰時の戻リアドレスのポップを、該
専用スタックを用いて行なうことを特徴とする情報処理
装置。 8、請求項6におけるスタック操作命令の分類において
、手続き呼出しと復帰を行なう命令に対して起動される
専用スタックを設け、ローカル変数領域の先頭位置を示
すフレームポインタ値に手続き呼出しに伴うプッシュ、
及び、復帰時のフレームポインタ値のポップを、該専用
スタックを用いて行なうことを特徴とする情報処理装置
。 9、請求項6におけるスタック操作命令の分類において
、手続き呼出しと復帰を行なう命令に対して起動される
専用スタックを設け、手続き呼出し時の戻りアドレスと
フレームポインタ値のプッシュ、及び、復帰時の戻りア
ドレスとフレームポインタ値のポップを、該専用スタッ
クを用いて行なうことを特徴とする情報処理装置。 10、請求項1〜9のいずれか一つに記載の特徴を有す
る情報処理装置のプロセッサを1チップのLSIに実装
したことを特徴とするマイクロプロセッサ。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP11493389A JPH02294734A (ja) | 1989-05-10 | 1989-05-10 | 情報処理装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP11493389A JPH02294734A (ja) | 1989-05-10 | 1989-05-10 | 情報処理装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH02294734A true JPH02294734A (ja) | 1990-12-05 |
Family
ID=14650257
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP11493389A Pending JPH02294734A (ja) | 1989-05-10 | 1989-05-10 | 情報処理装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH02294734A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04278998A (ja) * | 1991-01-17 | 1992-10-05 | Yamaha Corp | 電子楽器 |
EP0632395A1 (fr) * | 1993-06-30 | 1995-01-04 | Philips Electronique Grand Public | Procédé pour exploiter un processeur numérique de signal et dispositif mettant en oeuvre le procédé |
-
1989
- 1989-05-10 JP JP11493389A patent/JPH02294734A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04278998A (ja) * | 1991-01-17 | 1992-10-05 | Yamaha Corp | 電子楽器 |
EP0632395A1 (fr) * | 1993-06-30 | 1995-01-04 | Philips Electronique Grand Public | Procédé pour exploiter un processeur numérique de signal et dispositif mettant en oeuvre le procédé |
FR2708359A1 (fr) * | 1993-06-30 | 1995-02-03 | Philips Electronics Nv | Procédé pour exploiter un processeur numérique de signal et dispositif mettant en Óoeuvre le procédé. |
US5724534A (en) * | 1993-06-30 | 1998-03-03 | U.S. Philips Corporation | Transferring instructions into DSP memory including testing instructions to determine if they are to be processed by an instruction interpreter or a first kernel |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3787167B2 (ja) | フラッシュメモリ | |
US4771380A (en) | Virtual vector registers for vector processing system | |
US6088787A (en) | Enhanced program counter stack for multi-tasking central processing unit | |
JP2000200219A (ja) | 仮想メモリ管理方式 | |
EP0138352A2 (en) | Method of operating a data processing system via depictor-linked microcode and logic circuitry | |
WO2001038970A2 (en) | Buffer memories, methods and systems for buffering having seperate buffer memories for each of a plurality of tasks | |
JP3970609B2 (ja) | プロセッサシステム | |
US20030154363A1 (en) | Stacked register aliasing in data hazard detection to reduce circuit | |
JPH02294734A (ja) | 情報処理装置 | |
JPH0916409A (ja) | マイクロコンピュータ | |
US20060095675A1 (en) | Three stage hybrid stack model | |
JPS616747A (ja) | メモリ装置 | |
US5579495A (en) | Information processing in which a simulation of parallelism is achieved | |
JP2001184259A (ja) | 演算処理装置及び該装置におけるデータ転送方法 | |
JP2000040057A (ja) | 計算機システム、バッファ制御装置及び転送方法 | |
TW200300903A (en) | Data processor | |
JP2004062449A (ja) | マイクロプロセッサおよびその処理方法 | |
JP3022848B2 (ja) | マルチタスクのタスク切り替え方法とリアルタイム・オペレーティング・システム | |
CA2233435C (en) | Enhanced program counter stack for multi-tasking central processing unit | |
JPH0756633B2 (ja) | タスク切換え方式 | |
JPS6028023B2 (ja) | 入出力命令高速化方式 | |
JPH04216159A (ja) | 計算機の高速立ち上げ方式および計算機システム | |
JPH05298098A (ja) | アクセラレータの制御プログラム変更方式及び方法 | |
WO2001044958A1 (en) | Method of processing data | |
JP2845746B2 (ja) | マイクロプログラム制御装置 |