(57)【特許請求の範囲】
【請求項１】
ソース・マシンからのコンピュータ命令を目標マシンがエミュレートして、当該目標マシンの命令シーケンスを生成し実行する方法であって、前記方法は、前記目標マシンの桁上げのフラグ・ビットを用いて、前記ソース・マシンにおいて少なくとも３つの値を取り得る状態コードを計算するために、前記目標マシンの分岐命令を含まない前記目標マシンの命令シーケンスを生成するステップと、該命令シーケンスを実行するステップからなり、
前記命令シーケンスは、
ソース命令ストリーム中に存在する命令に類似した前記目標マシンの演算により、一つ以上の前記フラグ・ビットを設定し、当該演算の結果を第一記憶位置に格納する命令と、
前記演算の結果を使い、一つ以上の前記状態コードの取り得る値を区別するため、第二記憶位置に少なくとも一つのビットを設定する論理演算命令と、
前記演算の結果又は前記フラグ・ビットを使い、前記第一記憶位置を、前記状態コードの取り得る値の少なくとも一つを区別する少なくとも一つのビット構成に再設定する論理演算命令と、
前記フラグ・ビットを使い、前記第二記憶位置とは異なる前記状態コードの取り得る値の組を区別する演算結果を前記第一記憶位置に生成する算術演算命令と、
前記第一記憶位置および前記第二記憶位置中の演算結果を使い、前記状態コードの取り得る値を区別し、当該状態コードを算出する算術演算命令と、
を含む方法。
【請求項２】
前記第二記憶位置は、中間演算結果を格納するための一時記憶位置である、請求項１に記載の方法。
【請求項３】
前記目標マシンの命令シーケンスは、当該命令シーケンスが生成された後、即時に実行される、請求項１又は請求項２に記載の方法。
【請求項４】
請求項１乃至３のいずれかに記載の前記方法の全ステップを実行するように構成された手段を含むシステム。
【請求項５】
請求項１乃至３のいずれかに記載の前記方法をコンピュータ・システムに実行させるためのコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般にコンピュータ・システム・アーキテクチャのエミュレーションに関し、より詳しくは、エミュレーション処理の際必要となる状態コード設定の取扱いの方法およびシステムに関する。さらに具体的には、本発明は、目標アーキテクチャの分岐命令を用いずに、有効な状態コード設定を生成する命令のシーケンスを提供することを対象にしている。
【背景技術】
【０００２】
最新のデータ処理システムのほとんど全てにおいて、算術演算、論理演算、さらにはデータ転送オペレーションなどのさまざまなオペレーションを実行すると、命令実行の結果状態を示す数ビットのデータが生成されるようになっている。このようなビットは、通常、状態コード（コンディション・コード）と言われる。単純な例として、計算結果のため利用可能なビット数に対し、加数が大きすぎてオーバーフローが生じた加算の後で、特定の状態コードを設定することができる。状態コードの使用は、ほとんどあらゆる命令の実行に普及している。
【０００３】
実行結果により変化する状態コード（ＣＣ）を生成する典型的な命令の例として、両オペランドが等しければ「０」に、第一オペランドが第二オペランドを下回れば「１」に、第一オペランドが第二オペランドを上回れば「２」に状態コードを設定する比較命令がある。この比較命令は、状態コード設定の原型的な使用を表している。
【０００４】
いろいろな理由によって、一つのコンピュータ・アーキテクチャに対して設計された命令を、異なった実行可能命令の組を備えた別のシステムでエミュレートすることがある。例えば、システムの設計または試験においてエミュレーションを用いることがある。また、一つのデータ処理システムの能力を拡張するため、エミュレーションを用いて別のシステムのために書かれた命令を取り扱えるようにしたいことがある。本発明は、命令のエミュレーションに関連した、状態コードの設定の取扱いに関する。本発明のシステムおよび方法は、状態コードがかかわるどのようなエミュレーション方法にも広く適用できるが、特にｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＢＭ社の登録商標）のエミュレーションに適用性がある。但し、本明細書に記載する原理は、任意のソース・アーキテクチャおよび任意の目標アーキテクチャに適用可能である。
【０００５】
本発明が対象とする基本的なエミュレーション環境において、入力としてソース・アーキテクチャ命令の文字列を受け取り、これから、目標アーキテクチャ上で実行されたとき同一の結果を実現する命令文字列を生成するのは、エミュレーション・ソフトウエアの仕事である。これらの結果には、符号、桁上げ、オーバーフローおよびさまざまな他のコードなど、例外状況およびマシン状態を示す各種状態コードの設定も含まれる。なお、エミュレーション環境としては、目標アーキテクチャの中にハードウエアまたは状態コード・エレメントが設定されているのが望ましいが、本発明は、目標アーキテクチャ中の状態コード・レジスタ以外の記憶位置に状態コードが生成、格納される状況をも対象としている。
【０００６】
特に、本発明が、状態コード生成の従来式の取扱い方を意図的に避けていることに留意すべきである。この違いの例を、比較命令の簡単な考察を通して説明する。この命令は、２つのオペランドを比較し、その比較結果に基いて２ビットの状態コードを設定する。例えば、２つのオペランドを比較し、これらが等しいと判定されれば、状態コードはゼロに設定される。第一オペランドが第二オペランドを下回ると判定されれば、状態コードは１に設定される。最後に、第一オペランドが第二オペランドを上回ると判定されれば、状態コードは２に設定される。比較命令のエミュレーションへの従来式のアプローチでは、結果は、３つの分岐命令が含まれる、命令シーケンスの構成となる。次段に記載するような理由で、目標アーキテクチャの命令ストリーム中に分岐命令が存在するのは望ましくない。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
少なくとも２つの理由で分岐命令は望ましくない。具体的には、最新のほとんどのデータ処理アーキテクチャには、分岐予測として知られる機能が含まれていることに留意する必要がある。これらのアーキテクチャでは、分岐命令に遭遇した後命令ストリームがたどる２つ以上のパスについての推測が行われる。正しい推測が行われた場合、何の問題もなく、これによりマシンの処理時間がスピードアップされる。しかしながら、間違った推測がされると、マシン・ハードウエアは、選んだパスを引き返した後、別のパスを進まなければならない。この時点で、分岐命令は、全体的な処理速度の損失をもたらすことになろう。結果として、分岐命令が、それがなければ存在しなかった煩雑さを持ち込むことになる。さらに、分岐命令がない方がよい第二の理由として、これらが実際に上記の分岐予測リソースを消費し、その分を、プロセッサに実行される他の命令ストリームが使えないことに留意すべきである。しかして、分岐命令は、それ自体に潜在的に無駄が多いばかりでなく、限りのある貴重なコンピュータ・リソースを、他の命令ストリームから奪うことにもなる。
【０００８】
このため、エミュレーション・システムの設計者は、目標アーキテクチャに状態コード設定の生成をうまくエミュレートするために分岐命令を必要とする一方、同時に、分岐命令には上記の不利点があるのでこれを回避したいという矛盾した選択に直面することになろう。この問題は、目標アーキテクチャ中の状態コード生成法および機能が、ソース・マシンのアーキテクチャ中のものと全く違っている場合、特に厳しいものになる。
【０００９】
特に、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＢＭ社の登録商標）のマシン状態をエミュレートするコンピュータ・プログラムは、状態コードを変更する多くのｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ命令を取り扱う必要があることに留意すべきである。手短に言えば、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅは、状態コード設定が、他のアーキテクチャ、特に、比較的簡単なマイクロプロセッサ設計から歴史的に発展してきたアーキテクチャに見られるものとは、概して全く異なるアーキテクチャの典型である。加えて、ｚ／Ａｒｃｈｉｔｅｃｔｕｒでは、状態コード設定の変更は広範に使われている。状態コード設定の生成および使用は、算術、論理、または比較演算の実施結果として最も典型的に生じ、これら演算の後、その結果または他のファクタに基いて一つ以上の状態コード設定が変更される。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅにおける状態コード変更命令の広範性、およびこれら命令の時として任意的な意味は、目標アーキテクチャで最終的に実行される命令のストリームに複雑な制御フローを持ち込む。この制御フローは、エミュレートされた命令に、相当量の空間的および性能的オーバーヘッドを付加する。本発明は、このような状況を、もっと効率的に取り扱うことを指向している。本明細書の方法およびシステムは、本発明の譲受人が製造、販売している大型のデータ処理システム中に具備された、いわゆるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに特に適用性があるが、決して、ソース命令の供給元をこのアーキテクチャに限定するものではない。
【００１０】
なお、本発明は２つの状況（コンテクスト）ないしモードで用いられる。一つのモードにおいては、後で実行するため、ソース・コンピュータ命令が目標マシン命令に変換される。別の動作モードは、インタプリタの動作により類似しており、ソース命令は、目標の命令に変換された後直ちに実行される。本発明は、その広義の範囲において、これらの両方の動作モダリティを対象としている。
【課題を解決するための手段】
【００１１】
本発明は、ソース・マシンのコンピュータ・プログラムをエミュレートして目標マシン命令のシーケンスを生成するある方法において、目標マシンの分岐命令を使うことなく、桁上げ（carry）、符号(sign)、およびオーバーフロー(桁あふれ)のコードから直接に、目標マシンの状態コードを計算するよう一緒に作動する目標マシン命令のシーケンスを生成する。この直接の計算により、上記で述べた不利点のある分岐命令の使用を回避する。
【００１２】
本発明は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに対しエミュレートされたバイナリ変換環境において、効率的に状態コードを設定するためのまたは例外ケースを検出するための特定の誘導技法と、これら技法から導出されたいくつかのシーケンスを提供する。これら技法は、ＰｏｗｅｒＰＣ（ＩＢＭ社の登録商標）アーキテクチャおよびインテル（Ｒ）のＩＡ３２アーキテクチャを用いて、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅをエミュレートする状況を特に対象としている。本発明のシーケンスは、もっと多くのフロー制御を必要とするより直接的な方法に比べて、効率的で一般により小さなものとなる。但し、本発明の原理、技法、および方法は、いかなる特定の目標マシン・アーキテクチャにも限定されないことに留意すべきである。本明細書で説明する２つの例示的アーキテクチャは、単に、最大値と予想される最新のものである。
【００１３】
本発明の技法を使ってさらなる機能および利点が実現されよう。他の実施形態および態様も本明細書に詳細を記載しており、それらは請求された発明の一部と見なされる。
【００１４】
本明細書には、本発明の各種実施形態に適った望ましいオブジェクトのリストが記載されているが、これらのいかなるオブジェクトについても、個別的であれ集合的であれ、本発明の最も一般的な実施形態あるいはもっと特定的な実施形態のいずれにおいても、必須の機能であることを暗示したり示唆したりする意図はない。
【００１５】
発明と見なされる主題は、本明細書の結びの部分において、具体的に指摘され明確に請求される。しかしながら、本発明は、添付の図面と関連させて以下の説明を参照することによって、そのさらなる目的および利点と併せ、全体構成と実施方法との両面を最善に理解することができよう。
【図面の簡単な説明】
【００１６】
【図１】エミュレーション環境における従来方式の状態コード設定の取扱いで、最多で３つまでの分岐命令が用いられる事実を図示するフロー・チャートを示す。
【図２】コンピュータ命令のエミュレーションにおいて分岐命令が回避される本発明の処理フロー・チャートを示す。
【図３】本発明が用いられる環境の例を図示するブロック図である。
【図４】本発明の方法を実行するプログラム・コードを包含する典型的なコンピュータ可読の媒体の上面図を示し、例としてコンパクト・ディスク（ＣＤ）を示す。
【図５】本発明が作動し用いられる環境を図示するブロック図である。
【発明を実施するための形態】
【００１７】
本明細書でシーケンスを導き出すため使われる技法は、演算結果レジスタまたは一時レジスタ中に、あり得る状態コード設定の各結果を識別するためのビットまたはビット群を設定する、１つまたは２つの命令の非常に短いシーケンス・フラグメントを実行することである。これらの小さなコード・フラグメントは、典型的には、桁上げ、符号、およびオーバーフロー・ビットを操作し、ほとんどのコンピュータ・アーキテクチャで利用可能な、標準の、または通常は高速の、けた送り、回転、およびさまざまな算術またはブール命令によって、やや大きなシーケンスにつなぎ合わされる。分岐命令と、ハードウエアであまり最適化されそうにないより複雑な命令とを回避することにより、非常に効率的なシーケンスが得られる。
【００１８】
場合によっては、ＰｏｗｅｒＰＣ（ＩＢＭ社の登録商標）の状態コード・レジスタ自体を操作し、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＢＭ社の登録商標）状態コード設定を導き出すことが可能で効率的である。こういった場合には、ＰｏｗｅｒＰＣレコード形式の命令が使われ、得られたＰｏｗｅｒＰＣ状態レジスタは、回転および論理演算によって操作され、対応するｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ状態コード設定が導き出される。
【００１９】
下記の例は、アセンブラ擬似コードによるもので、キャリー(桁上げ)ビットを操作でき、通常のけた送り／回転／ネゲート命令を有するアーキテクチャのほとんどに適用することができる。使われているアセンブラ擬似コードは、含蓄された意味を明瞭にするため、意図的に冗長化されている。場合によって、特定の演算を効率的に実行するやり方が、各種のアーキテクチャ間で異なっている可能性が高い場合、非標準的な簡略記憶が使われる。これらの非標準的簡略記憶については、下記の表でさらに詳しく説明する。各例において、ｒＸおよびｒＹは、目標マシンの名前付きレジスタであり、「ｂ」は即値である。ｃａｒｒｙ＿ｂｉｔ（桁上げ＿ビット）は高位ビット位置の繰上げ実行である。
【００２０】
【表１】
0004662087.tif 000002
【００２１】
ビットは、６４ビット・レジスタに対しては０〜６３に、３２ビット・レジスタに対しては０〜３１に番号付けされる。０は、最上位であり３１または６３は最下位である。以降の説明において、以下のレジスタ命名定義を用いる。
ｒＡ、ｒＢ  −  それぞれ、レジスタ中に評価された、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ命令の第１および第２オペランド、
ｒＴ  −  レジスタ中に計算されたｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ命令の演算結果の値、
ｒＸ、ｒＹ、ｒＺ  −  中間結果を保持するため使う一時レジスタ、
ｒＣ  −  シーケンスの終了時の状態コード値を保持するためのレジスタ。
【００２２】
以下に、本技法を使って導き出された各種シーケンスをリストし説明する。前述したように、比較命令は、状態コードを設定する命令の典型的見本である。これを例として、状態コード設定をエミュレートするためのシーケンスを以下に提示する。このシーケンスは、本発明を実施する際に取られるアプローチの特色をよく示している。具体的には、対象ソース命令は、論理比較演算と呼ばれるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅの命令である。この例は、（比較命令が３２ビットのオペランドで演算されるときだけ）６４ビット環境においてｒＡおよびｒＢがゼロ拡張されることを想定している。
［１］ｓｕｂ＿ｓｅｔ＿ｃａｒｒｙ                ｒＣ，ｒＡ，ｒＢ
［２］ｓｅｔ＿ｂｉｔ＿ｏｎ＿ｚｅｒｏ            ｒＸ，ｒＣ
［３］ｓｅｔ＿ｂｉｔ＿ｏｎ＿ｎｏｔ＿ｚｅｒｏ    ｒＣ，ｒＣ
［４］ａｄｄ＿ｔｏ＿ｃａｒｒｙ＿ｉｍｍｅｄ      ｒＣ，ｒＣ，０
［５］ｓｕｂ                                    ｒＣ，ｒＣ，ｒＸ
【００２３】
【表２】
0004662087.tif 000003
【００２４】
上記の表では、「ｓｕｂ＿ｓｅｔ＿ｃａｒｒｙ」（命令［１］）実行後のレジスタｒＸの状態は非適用となっている。しかしながら、目標マシンにおける命令［１］の実行では、ＣＰＵ状態中にキャリー・ビットが設定され、後の命令でアクセスされる。これは、目標マシン中のキャリー・ビット・フラグを表す、前表中の「キャリー」列に示されている。このキャリー・ビットは、目標マシンには、目標マシン中の他の多くのフラグ・ビットと同様、ソース・マシンで行われるのと同じ仕方または同一条件下では設定されないことを留意、認識することが大切である。この点において、レジスタ位置ｒＣに対応値を設定する従来式のアプローチでは、図１に示したような複数の分岐命令を用いることになる。これら従来式のアプローチは、本発明の処理と同様、エミュレーション・ソフトウエアが使用するため、キャリー・ビットが適正な表示を提示するよう作動する。
【００２５】
命令［１］に関し、その実行により、ｒＡ＞ｒＢまたはｒＡ＝ｒＢの場合は、キャリー・ビット（すなわち、ＣＰＵキャリー・ビット）が「１」に、ｒＡ＜ｒＢの場合は「０」に設定される。さらに、ｒＣには減算の結果が含まれ、例えば「０」になる。前表中の「ｒＣ＞０」、「ｒＣ＝０」および「ｒＣ＜０」記入は、演算結果状態の表示を示すよう意図されている。命令［２］（ｓｅｔ＿ｂｉｔ＿ｏｎ＿ｚｅｒｏ）の実行後、レジスタｒＣのステータスは変わらないが、ｒＸの内容は、ｒＣの内容（この場合はゼロかゼロでないかに限定）に基づいて、２つのオペランドｒＡとｒＢとが同じ場合は「１」に等しく設定される。命令［２］実行は、ｒＣの内容には影響しない。さらに、命令［２］はＣＰＵキャリー・ビットにも影響しない。命令［３］（ｓｅｔ＿ｂｉｔ＿ｏｎ＿ｎｏｔ＿ｚｅｒｏ）に関しては、ｒＣがゼロでない場合、すなわちｒＡがｒＢと等しくない場合は、ｒＣはいつでも「１」に設定される。ＣＰＵキャリー・ビットは、命令［３］には影響されない。しかして、この点において、ｒＡ＞ｒＢまたはｒＡ＜ｒＢの場合は、ｒＣ＝１に、ｒＡ＝ｒＢの場合はｒＣ＝０に設定される。なお、この点において、ｒＸが、同等と不等と区別する識別情報を提示するよう設定されること、並びに、このことが、ｒＣおよびＣＰＵキャリー・ビット両方の外部で（すなわちそれらとは別に）行われることに留意する。
【００２６】
次いで、命令［４］（ａｄｄ＿ｔｏ＿ｃａｒｒｙ＿ｉｍｍｅｄ）が、「０」を即値オペランドとし、（ｒＣ，ｒＣ，０）で示される引数を使って実行される。該命令は、示されたオペランドを使い、演算、ｒＣ＋「ＣＰＵキャリー・ビット」＋０を実行する。これは、さらにＣＰＵキャリー・ビットも設定するが、この結果は後の処理には不要である。前表ＩＩから、ｒＡ＞ｒＢの場合、ｒＣの内容が今度は「２」になっているのが分かる。ｒＡ＝ｒＢの場合ｒＣの内容は「１」であり、ｒＡ＜ｒＢの場合もｒＣの内容は「１」である。この段階で、ｒＡ＞ｒＢの場合のｒＣ中の表示が、他の２つの場合（ｒＡ＝ｒＢおよびｒＡ＜ｒＢ）と区別して提示されていることに留意するのが肝要である。
【００２７】
命令［５］（ｓｕｂ）は、オペランド「ｒＣ、ｒＣ、ｒＸ」を使った最後のステップを実行し、該ステップでは、ｒＡ＝ｒＢの場合をｒＡ＜ｒＢの場合と区別するメカニズムとして、現在同等を表示しているｒＸの内容をｒＣから減算する。しかして、同等の場合は「１」から「１」の減算が行われ、ｒＣにはその結果の「０」が置かれることになる。かくして、上記の命令シーケンスの終了時には、以下の結果が得られる。すなわち、ｒＡ＞ｒＢの場合はｒＣ＝２、ｒＡ＜ｒＢの場合はｒＣ＝１、ｒＡ＝ｒＢの場合はｒＣ＝０。
【００２８】
このようなやり方で、分岐命令を一切実行せずに、状態コード設定に対する望ましいエミュレータ結果が得られることが分かる。上記に提示した考え方は、状態コードの変更を生成する任意のソース命令のエミュレーションに同様に適用できる。上記の例は、キャリー・ビットの設定を特に対象としているが、このやり方は、符号およびオーバーフロー・ビットなど、目標アーキテクチャの他の状態コード・ビットにも同様に適用可能である。
【００２９】
エミュレーション環境において状態コードの生成を提供する、本発明の応用の別の例として、論理加算（３２ビット）および論理加算（６４ビット）命令を以下に考察する。上記で説明した比較論理の例と同様、ｒＡおよびｒＢは、論理加算（３２ビット）のため、目標アーキテクチャ環境で６４ビットにゼロ拡張されるものと仮定する。以下は、処理の終了点で記憶位置ｒＣ中に適切な設定を提供する、擬似アセンブリ・コードのシーケンスである。下表中のｃはキャリー・ビットである。
［１］ａｄｄ＿ｓｅｔ＿ｃａｒｒｙ                  ｒＴ，ｒＡ，ｒＢ
［２］ｍｏｖｅ＿ｆｒｏｍ＿ｃａｒｒｙ              ｒＣ
［３］ｄｏｕｂｌｅ                                ｒＣ
［４］ｓｅｔ＿ｂｉｔ＿ｏｎ＿ｎｏｔ＿ｚｅｒｏ      ｒＸ，ｒＴ
［５］ｏｒ                                        ｒＣ，ｒＣ，ｒＸ
【００３０】
【表３】
0004662087.tif 000004
【００３１】
一般に、この工程は以下のステップを有し、どのステップも分岐命令の使用または実行は一切含まない。まず、目標マシンのアーキテクチャ中で、ソース命令ストリームに存在する命令を模倣(ミミック、シュミレート)した命令が、一つ以上の目標ＣＰＵフラグ・ビットを設定し、エミュレータがアクセス可能な記憶位置（上記ｒＣなどの第一記憶位置）に結果を格納する仕方で実行される（図２のステップ１００）。次に、その演算結果を使って、一つ以上の結果区分を区別するために、エミュレータが制御する別の記憶位置（上記ｒＸなどの第二記憶位置）に一つ以上のビットを設定する命令（ステップ１０５）が実行される。次いで、上記の演算結果を使って、その結果自体が、同様に一つ以上の結果区分を区別するよう機能するもっと短いビット構成（上記の例では１ビット）に再設定される（ステップ１１０）。
次に、第一記憶位置を用いて、異なる結果区分の組中のどれなのかを区別する演算結果を生成する命令が実行される（ステップ１１５）。最後に、目標マシンの命令（ステップ１２０）が実行され、第一および第二記憶位置中の演算結果を使い、該２つのエミュレータがアクセス可能な記憶位置の一つの中に、少なくとも３つの区分のどれなのかを区別する表示が生成される。
【００３２】
もっと一般的に言えば、本発明の処理は、命令を実行することにより目標マシンの状態コードの制御を実現する、目標マシンの分岐命令を用いない目標マシンの命令群を用いたエミュレーション方法を指向しており、該状態コードは、後に実行される非分岐の命令において一つ以上の結果状態を区別する用途に使われ、エミュレータが状態コードのエミュレーション位置として使える記憶位置から取り出せるようにされる。
【００３３】
なお、本明細書に記載した処理は、目標マシン上での実行対象となる適切な命令のシーケンスの生成と、目標マシン上でのそれら命令の実際の実行との両方を対象にしており、「インタプリタ的」環境に見られるように、ソース命令に対応するシーケンスが生成された後、その実行が即時におこなわれるのか、あるいは、そういう必要がある場合、実際の実行は後の時間に行われることのある「コンパイル的」環境で行われるかの如何を問わない。
【００３４】
いずれにせよ、本発明が動作する環境は図３に示されている。本発明は、図３に示されたような一つ以上のコンピュータ・エレメントを効果的に包含するデータ処理環境において動作する。具体的には、コンピュータ５００は、中央処理装置（ＣＰＵ：Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）５２０を含み、該装置は、ランダム・アクセス・メモリ５１０内に格納されたプログラムおよびデータにアクセスする。メモリ５１０は、一般に揮発的性質のものであり、このため、こういったシステムには、通常、回転式磁気記憶装置５４０の形で不揮発性記憶装置が備えられている。記憶装置５４０は、望ましくは不揮発性の磁気装置であるが、他の媒体を用いることもできる。ＣＰＵ５２０は、入力／出力・ユニット５３０を介して、端末装置５５０などのコンソールによってユーザと交信する。端末装置５５０は、典型的には、一つ以上のＩ／Ｏユニット５３０を介しコンピュータ５００と交信する、１０００台とまでは言わないが多くのコンソールの一つである。具体的には、コンソール・ユニット５５０は、図５に示されるようなＣＤ−ＲＯＭ６００などの一以上の種類の媒体を読取るための装置をその中に含む。媒体６００の一例が図４に示されており、該媒体には、以下に限らないが、磁気媒体、光学記憶デバイス、およびフラッシュ・メモリ・デバイスないしいわゆるサム・ドライブなどのチップを含め、任意の便利なデバイスが包含される。また、ディスク６００は、本明細書で説明した命令のコードを表現するデータ・ビットを送信するのに使われる電気信号の形などによる、もっと一般的な配布媒体をも表している。こういった送信信号は、性質として一過性のものかもしれないが、そうであっても、符号化された命令ビットを搬送する物理的媒体を構成しており、該信号の単複数の送信先で恒久保存することが意図されている。
【００３５】
本発明が用いられる典型的なエミュレーション環境が図５に示されている。３２０のようなエミュレータは、入力命令ストリーム３０５としての部分を除き、目標マシン３１０上で動作するよう設計されたマシンまたはアセンブリ言語命令を表している。エミュレータ３２０は、目標マシン３１０中のメモリ３１５を用い、目標マシン３１０中で実行することが可能な命令のストリームを生成する。なお、図５は、あるエミュレーション環境内における特定のオペレーションを示しているが、本発明は、エミュレータ３２０が基本的にはインタプリタとして作動し、命令が新しいアーキテクチャ向けに変換されるだけでなく、基本的にはそれが同時に実行される状況をも意図している。
【００３６】
本明細書では、特定の好適な実施形態に基いて本発明を詳細に説明してきたが、当業者は、これに多くの改修および変更を加えることができよう。従って、かかる全ての改修および変更は、本発明の実際の精神および範囲内に含まれるものとして添付の特許請求の範囲に網羅されることが意図されている。
【図１】
0004662087.tif 000005
【図２】
0004662087.tif 000006
【図３】
0004662087.tif 000007
【図４】
0004662087.tif 000008
【図５】
0004662087.tif 000009