JPH0762827B2 - プログラムコードの交差像参照方法 - Google Patents
プログラムコードの交差像参照方法Info
- Publication number
- JPH0762827B2 JPH0762827B2 JP4511619A JP51161992A JPH0762827B2 JP H0762827 B2 JPH0762827 B2 JP H0762827B2 JP 4511619 A JP4511619 A JP 4511619A JP 51161992 A JP51161992 A JP 51161992A JP H0762827 B2 JPH0762827 B2 JP H0762827B2
- Authority
- JP
- Japan
- Prior art keywords
- computer program
- program
- instruction
- record
- computer
- 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.)
- Expired - Lifetime
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
- Debugging And Monitoring (AREA)
- Television Signal Processing For Recording (AREA)
Description
【発明の詳細な説明】 発明の背景 1.発明の分野 本発明は、デジタルコンピュータのためのプログラムコ
ードの変換に係り、より詳細には、変換されるべき全て
のプログラムコードの位置がそのプログラムコードを実
際に実行するまで分からない場合にそのプログラムコー
ドをある言語から別の言語に変換することに係る。
ードの変換に係り、より詳細には、変換されるべき全て
のプログラムコードの位置がそのプログラムコードを実
際に実行するまで分からない場合にそのプログラムコー
ドをある言語から別の言語に変換することに係る。
2.公知技術の説明 コンピュータ言語の変換プログラムとしては、パスカル
やフォートランやコボルやPL/I又はCのような高レベル
言語をマシン言語に変換するものが良く知られている。
これらの言語の場合、プログラムは英語のようなスタイ
ルでコード化される。コンパイラーと称する言語変換プ
ログラムは、高レベル言語のプログラム(ソースプログ
ラムと称する)を読み取って、それをマシン言語プログ
ラム(目的プログラムと称する)に変換する。
やフォートランやコボルやPL/I又はCのような高レベル
言語をマシン言語に変換するものが良く知られている。
これらの言語の場合、プログラムは英語のようなスタイ
ルでコード化される。コンパイラーと称する言語変換プ
ログラムは、高レベル言語のプログラム(ソースプログ
ラムと称する)を読み取って、それをマシン言語プログ
ラム(目的プログラムと称する)に変換する。
高レベル言語の1つの主な利点は、アルゴリズムを表現
する容易さに加えて、マシン独立なことである。それら
は、ハードウェアマシン及び命令セットの特性を秘めて
いる。しかしながら、マシン言語のプログラミングが所
望されるアプリケーションは多数ある。プログラムの実
行速度を高めるために、繰り返し実行される手順のコー
ドをマシン言語で書き込み、その手順を実行するに必要
なマシンサイクルの数を最小限に抑えることがしばしば
望まれる。又、多くのコンピュータシステムでは、特定
コンピュータの特定ハードウェア特徴を直接的に制御す
るためにマシン言語のプログラミングが必要とされる。
例えば、メモリ及び入力/出力装置を管理するオペレー
ティングシステムの部分は、しばしばマシン言語で書か
れる。
する容易さに加えて、マシン独立なことである。それら
は、ハードウェアマシン及び命令セットの特性を秘めて
いる。しかしながら、マシン言語のプログラミングが所
望されるアプリケーションは多数ある。プログラムの実
行速度を高めるために、繰り返し実行される手順のコー
ドをマシン言語で書き込み、その手順を実行するに必要
なマシンサイクルの数を最小限に抑えることがしばしば
望まれる。又、多くのコンピュータシステムでは、特定
コンピュータの特定ハードウェア特徴を直接的に制御す
るためにマシン言語のプログラミングが必要とされる。
例えば、メモリ及び入力/出力装置を管理するオペレー
ティングシステムの部分は、しばしばマシン言語で書か
れる。
マシン言語のプログラムは、通常、2進コードではなく
てアッセンブリー言語のコードで書かれている。アッセ
ンブリー言語では、プログラマーがメモリ位置及び命令
に対して記号名を用いてマシンのオペレーションを指定
することができる。アッセンブラーと称するプログラム
は、アッセンブリー言語のプログラムを2進のマシンコ
ードに変換する。アッセンブラーは、記号の値及びデー
タエレメントのアドレスを記憶する全ての作業を実行す
る。しかしながら、高レベル言語とは異なり、各アッセ
ンブリー言語命令は厳密に1つのマシン命令に対応して
いる。
てアッセンブリー言語のコードで書かれている。アッセ
ンブリー言語では、プログラマーがメモリ位置及び命令
に対して記号名を用いてマシンのオペレーションを指定
することができる。アッセンブラーと称するプログラム
は、アッセンブリー言語のプログラムを2進のマシンコ
ードに変換する。アッセンブラーは、記号の値及びデー
タエレメントのアドレスを記憶する全ての作業を実行す
る。しかしながら、高レベル言語とは異なり、各アッセ
ンブリー言語命令は厳密に1つのマシン命令に対応して
いる。
近年、ある種のコンピュータのためのマシン言語を別の
種類のコンピュータのためのマシン言語に変換する必要
性が生じている。この必要性は、コスト効率のより高い
新規なコンピュータアーキテクチャーを生み出したコン
ピュータハードウェアの急速な進歩によって生じたもの
である。特に、ここ10年間以上にわたり、最も性能の高
い汎用のコンピュータは、「コンプレックス命令セット
アーキテクチャー(complex instruction set architec
ture)」(CISC)を用いており、これは命令セット中に
非常に多数の命令を有することを特徴とするもので、複
雑なメモリアクセスモードを伴う可変長さ命令及びメモ
リ対メモリ命令をしばしば含んでいる。このCISCの主な
例が、VAX(登録商標)命令セットであり、これに用い
られる命令は、1ないし2バイトのOPコードと、0ない
し6のオペランド指定子とを有し、各々のオペランド指
定子は1バイトないし18バイトの長さである。オペラン
ド指定子のサイズは、アドレスモード、変位のサイズ
(バイト、ワード又はロングワード)等々に基づいてい
る。オペランド指定子の第1バイトはそのオペランドの
ためのアドレスモードを記述し、一方、OPコードはオペ
ランドの数0から6を指定する。しかしながら、OPコー
ド自体は常に命令の全長を決定するものではない。とい
うのは、異なった長さのオペランド指定子と共に多数の
OPコードを使用できるからである。VAX命令セットの別
の特徴は、クオドワード又はロングワードレファレンス
に加えて、バイト又はバイトストリングのメモリレファ
レンスを使用することにあり、即ちメモリレファレンス
は、非整列バイトレファレンスを含んで1バイトから多
ワードまで可変長さのものである。
種類のコンピュータのためのマシン言語に変換する必要
性が生じている。この必要性は、コスト効率のより高い
新規なコンピュータアーキテクチャーを生み出したコン
ピュータハードウェアの急速な進歩によって生じたもの
である。特に、ここ10年間以上にわたり、最も性能の高
い汎用のコンピュータは、「コンプレックス命令セット
アーキテクチャー(complex instruction set architec
ture)」(CISC)を用いており、これは命令セット中に
非常に多数の命令を有することを特徴とするもので、複
雑なメモリアクセスモードを伴う可変長さ命令及びメモ
リ対メモリ命令をしばしば含んでいる。このCISCの主な
例が、VAX(登録商標)命令セットであり、これに用い
られる命令は、1ないし2バイトのOPコードと、0ない
し6のオペランド指定子とを有し、各々のオペランド指
定子は1バイトないし18バイトの長さである。オペラン
ド指定子のサイズは、アドレスモード、変位のサイズ
(バイト、ワード又はロングワード)等々に基づいてい
る。オペランド指定子の第1バイトはそのオペランドの
ためのアドレスモードを記述し、一方、OPコードはオペ
ランドの数0から6を指定する。しかしながら、OPコー
ド自体は常に命令の全長を決定するものではない。とい
うのは、異なった長さのオペランド指定子と共に多数の
OPコードを使用できるからである。VAX命令セットの別
の特徴は、クオドワード又はロングワードレファレンス
に加えて、バイト又はバイトストリングのメモリレファ
レンスを使用することにあり、即ちメモリレファレンス
は、非整列バイトレファレンスを含んで1バイトから多
ワードまで可変長さのものである。
CISCアーキテクチャーは、コードをコンパクトにすると
共に、アッセンブリー言語のプログラミングを容易なも
のにした。中央処理ユニット(CPU)がメモリよりも非
常に高速度であった時代には、1命令当たりにより多く
の作業を行うことが効果的であった。というのは、さも
なくば、CPUはメモリが命令を送りだすのを待って著し
い時間を費やしてしまうからである。しかしながら、近
年、メモリ速度の進歩と、オン・チップキャッシュやハ
イアラーキーキャッシュのような技術により、CISCアー
キテクチャーの主たる利点がなくなってしまった。それ
故、命令アーキテクチャーの選択は、今や、合理的なコ
ストで最大の実行速度を得るためにCPUに要求される複
雑さによって決められている。これらのことから、簡易
な命令セットアーキテクチャー(RISC)が優れた性能と
コスト効率を有することが示される。
共に、アッセンブリー言語のプログラミングを容易なも
のにした。中央処理ユニット(CPU)がメモリよりも非
常に高速度であった時代には、1命令当たりにより多く
の作業を行うことが効果的であった。というのは、さも
なくば、CPUはメモリが命令を送りだすのを待って著し
い時間を費やしてしまうからである。しかしながら、近
年、メモリ速度の進歩と、オン・チップキャッシュやハ
イアラーキーキャッシュのような技術により、CISCアー
キテクチャーの主たる利点がなくなってしまった。それ
故、命令アーキテクチャーの選択は、今や、合理的なコ
ストで最大の実行速度を得るためにCPUに要求される複
雑さによって決められている。これらのことから、簡易
な命令セットアーキテクチャー(RISC)が優れた性能と
コスト効率を有することが示される。
簡易命令セット即ちRISCのプロセッサは、命令の数が少
なくて簡単にデコードできることを特徴とすると共に、
全ての演算/論理オペレーションをレジスタ対レジスタ
で行わねばならないことを特徴とする。もう1つの特徴
としては、複雑なメモリアクセスが許されず、即ち全て
のメモリアクセスはレジスタのロード/記憶オペレーシ
ョンであり、そして少数の比較的簡単なアドレスモード
しかなく、ひいてはオペランドアドレスを指定する方法
が若干しかない。命令は1つの長さしかなく、メモリア
クセスは、通常は整列された標準データ巾のものであ
る。命令の実行は、マイクロコードと異なり直接固定布
線型のものである。命令のサイクルタイムは固定で、命
令は1つの短いサイクル(平均で、というのは、パイプ
ライン動作により実際の実行は数サイクルに分散される
ので)に全て実行するように比較的簡単に定められる。
なくて簡単にデコードできることを特徴とすると共に、
全ての演算/論理オペレーションをレジスタ対レジスタ
で行わねばならないことを特徴とする。もう1つの特徴
としては、複雑なメモリアクセスが許されず、即ち全て
のメモリアクセスはレジスタのロード/記憶オペレーシ
ョンであり、そして少数の比較的簡単なアドレスモード
しかなく、ひいてはオペランドアドレスを指定する方法
が若干しかない。命令は1つの長さしかなく、メモリア
クセスは、通常は整列された標準データ巾のものであ
る。命令の実行は、マイクロコードと異なり直接固定布
線型のものである。命令のサイクルタイムは固定で、命
令は1つの短いサイクル(平均で、というのは、パイプ
ライン動作により実際の実行は数サイクルに分散される
ので)に全て実行するように比較的簡単に定められる。
不都合なことに、既に確率された命令アーキテクチャー
に対しておびただしい量のコンピュータソフトウェアが
これまでに書かれており、これらソフトウェアの多く
は、高レベル言語のコンパイラーから生じたものではな
いマシン言語のプログラムを含んでいる。これらの場
合、新たな命令アーキテクチャーに対して書かれたコン
パイラーを用いてソースコードをコンパイルし直すとい
う通常の方法によりソフトウェアをその新たなコンピュ
ータアーキテクチャーに「移行」することはできない。
に対しておびただしい量のコンピュータソフトウェアが
これまでに書かれており、これらソフトウェアの多く
は、高レベル言語のコンパイラーから生じたものではな
いマシン言語のプログラムを含んでいる。これらの場
合、新たな命令アーキテクチャーに対して書かれたコン
パイラーを用いてソースコードをコンパイルし直すとい
う通常の方法によりソフトウェアをその新たなコンピュ
ータアーキテクチャーに「移行」することはできない。
ある場合には、既存のコンピュータソフトウェアのマシ
ン言語プログラムに対してアッセンブリー言語コードが
存在する。それ故、各々のアッセンブリー言語命令を、
同じ基本機能を行う新たな命令アーキテクチャーの1つ
以上のマシン命令に変換するために変換プログラムを書
くことができねばならない。このような直接的な変換を
実施できるかどうかは、新たな命令アーキテクチャーの
コンパチビリティによって左右される。例えば、VAX命
令を含むCISCコードをRISCコードに変換する場合に、こ
の変換を実施できるかどうかは、RISC CPUハードウェア
及びRISC命令セットの革新によって著しく改善される。
これについては、参考としてここに取り上げる1990年6
月29日出願の「高性能プロセッサにおける分岐予想(Br
anch Prediction in High-Performance Processor)」
と題するリチャード・L・サイト及びリチャード・T・
ウイテク氏の米国特許出願07/547,589に開示されてい
る。
ン言語プログラムに対してアッセンブリー言語コードが
存在する。それ故、各々のアッセンブリー言語命令を、
同じ基本機能を行う新たな命令アーキテクチャーの1つ
以上のマシン命令に変換するために変換プログラムを書
くことができねばならない。このような直接的な変換を
実施できるかどうかは、新たな命令アーキテクチャーの
コンパチビリティによって左右される。例えば、VAX命
令を含むCISCコードをRISCコードに変換する場合に、こ
の変換を実施できるかどうかは、RISC CPUハードウェア
及びRISC命令セットの革新によって著しく改善される。
これについては、参考としてここに取り上げる1990年6
月29日出願の「高性能プロセッサにおける分岐予想(Br
anch Prediction in High-Performance Processor)」
と題するリチャード・L・サイト及びリチャード・T・
ウイテク氏の米国特許出願07/547,589に開示されてい
る。
多くの場合、既存のコンピュータソフトウェアは、高レ
ベル即ちアッセンブリー言語のソースコードの完全なセ
ット即ちコヒレントなセットが存在しないような2進マ
シン言語コードを含んでいる。これでは、変換すべき全
ての2進マシンコードを探索するという非常に困難な問
題が生じる。通常の場合、プログラムの中の2進マシン
コードの一部分はその実行時間までに探すことができな
い。というのは、このコードは計算された行き先アドレ
スを有する「ジャンプ」や「コール」命令のような少な
くとも1つの実行転送命令を含んでいるからである。実
行時間の際に、行き先アドレスが計算され、実行がその
命令から「欠落」コードへと転送される。
ベル即ちアッセンブリー言語のソースコードの完全なセ
ット即ちコヒレントなセットが存在しないような2進マ
シン言語コードを含んでいる。これでは、変換すべき全
ての2進マシンコードを探索するという非常に困難な問
題が生じる。通常の場合、プログラムの中の2進マシン
コードの一部分はその実行時間までに探すことができな
い。というのは、このコードは計算された行き先アドレ
スを有する「ジャンプ」や「コール」命令のような少な
くとも1つの実行転送命令を含んでいるからである。実
行時間の際に、行き先アドレスが計算され、実行がその
命令から「欠落」コードへと転送される。
例外的な場合には、プログラム中の2進マシンコードの
幾つかが実行時間まで形成されない。これらの例外的な
場合というのは一般的にプログラミング技術が不充分な
ことによるものであるが、実行時間には、例えば機密保
持の目的で「ライセンスチェック」ルーチンの一部とし
てコードがしばしば形成される。「ライセンスチェッ
ク」ルーチンでは、例えば、一連の命令がスクラッチメ
モリエリアへ書き込まれそして一連の命令が実行され
る。ライセンスルーチンを欺くためには、スクラッチエ
リアに書き込まれた一連の命令からルーチンの動作モー
ドを見分けねばならない。しかし、一連の命令は、実行
時間まで存在しないので、プログラムの通常のプリント
アウトやダンプ動作では得られない。
幾つかが実行時間まで形成されない。これらの例外的な
場合というのは一般的にプログラミング技術が不充分な
ことによるものであるが、実行時間には、例えば機密保
持の目的で「ライセンスチェック」ルーチンの一部とし
てコードがしばしば形成される。「ライセンスチェッ
ク」ルーチンでは、例えば、一連の命令がスクラッチメ
モリエリアへ書き込まれそして一連の命令が実行され
る。ライセンスルーチンを欺くためには、スクラッチエ
リアに書き込まれた一連の命令からルーチンの動作モー
ドを見分けねばならない。しかし、一連の命令は、実行
時間まで存在しないので、プログラムの通常のプリント
アウトやダンプ動作では得られない。
オリジナルプログラムの中の全てのマシンコードを探索
するという問題がある場合には、コードが実行時間に解
読される。インタープリターの変換プロセスはアッセン
ブリー言語のトランスレターと同様であるが、実行時間
の際の解読には変換されたコードの実行よりも約2桁も
時間がかかる。というのは、各々のマシン命令を解読す
るためにインタープリタープログラムの中の多数の命令
を実行しなければならないからである。不完全な変換を
使用できるようにするために、新たな命令アーキテクチ
ャーを用いたCPUにオリジナルプログラムを送るときに
は、インタープリタープログラムと、オリジナルプログ
ラムのコピーと、アドレス変換情報が、変換されたコー
ドと共に与えられる。変換されたコードの実行が、変換
されないコードに対するオリジナルプログラム中の実行
転送に対応するポイントに達したときに、CPUはその実
行をインタープリタープログラムに転送し、オリジナル
プログラムの中の変換されないコードを解読する。イン
タープリターは各々の変換されないマシン命令を新たな
アーキテクチャーに対する1つ以上のマシン命令に次々
に変換し、それを実行する。インタープリターは、アド
レス変換情報を用いてその実行を適当な時間に変換され
たプログラムへ転送して戻す。しかし、変換されないコ
ードが存在すると、実行時間までにほとんど全ての命令
を探索して変換することができない限り、性能に著しい
影響が及ぶ。
するという問題がある場合には、コードが実行時間に解
読される。インタープリターの変換プロセスはアッセン
ブリー言語のトランスレターと同様であるが、実行時間
の際の解読には変換されたコードの実行よりも約2桁も
時間がかかる。というのは、各々のマシン命令を解読す
るためにインタープリタープログラムの中の多数の命令
を実行しなければならないからである。不完全な変換を
使用できるようにするために、新たな命令アーキテクチ
ャーを用いたCPUにオリジナルプログラムを送るときに
は、インタープリタープログラムと、オリジナルプログ
ラムのコピーと、アドレス変換情報が、変換されたコー
ドと共に与えられる。変換されたコードの実行が、変換
されないコードに対するオリジナルプログラム中の実行
転送に対応するポイントに達したときに、CPUはその実
行をインタープリタープログラムに転送し、オリジナル
プログラムの中の変換されないコードを解読する。イン
タープリターは各々の変換されないマシン命令を新たな
アーキテクチャーに対する1つ以上のマシン命令に次々
に変換し、それを実行する。インタープリターは、アド
レス変換情報を用いてその実行を適当な時間に変換され
たプログラムへ転送して戻す。しかし、変換されないコ
ードが存在すると、実行時間までにほとんど全ての命令
を探索して変換することができない限り、性能に著しい
影響が及ぶ。
発明の要旨 プログラムはサブルーチンや手順を含む個別の像にしば
しば編成されるが、これらは呼び出しの規定により相互
依存性をもつことになる。この相互依存性は、プログラ
ム内の命令を探索したり変換したりするプロセスとしば
しば干渉する。特に、復帰ポイントは適切に接続しなけ
ればならず、これには、呼び出されている像に関する情
報が必要である。
しば編成されるが、これらは呼び出しの規定により相互
依存性をもつことになる。この相互依存性は、プログラ
ム内の命令を探索したり変換したりするプロセスとしば
しば干渉する。特に、復帰ポイントは適切に接続しなけ
ればならず、これには、呼び出されている像に関する情
報が必要である。
本発明の重要な特徴によれば、像内の各々の使用できる
入力ポイントを呼び出す作用に関する情報が決定され、
メモリに記録される。各像に関する情報は、像を変換す
るときに決定され、各像に割り当てられたファイルのよ
うなデータ構造体に記録されるのが好ましい。像を変換
するときには、別の像の入力ポイントへの呼び出しが、
その入力ポイントを呼び出す作用について記録された情
報を用いることにより変換される。像によってなされた
外部呼び出しに関する情報もファイルに記録され、呼び
出された像内の命令を探索するのに使用される。
入力ポイントを呼び出す作用に関する情報が決定され、
メモリに記録される。各像に関する情報は、像を変換す
るときに決定され、各像に割り当てられたファイルのよ
うなデータ構造体に記録されるのが好ましい。像を変換
するときには、別の像の入力ポイントへの呼び出しが、
その入力ポイントを呼び出す作用について記録された情
報を用いることにより変換される。像によってなされた
外部呼び出しに関する情報もファイルに記録され、呼び
出された像内の命令を探索するのに使用される。
しかしながら、相互依存性は、第2の像内の入力ポイン
トを呼び出す作用が第1の像に依存し、第1の像を変換
するまで分からないような状態を生み出す。しかし、第
1の像の変換には、第2の像内の入力ポイントを呼び出
す作用に関する情報が必要である。このような矛盾する
相互依存性は、例えば、第1の像が第2の像内の入力ポ
イントを呼び出しそして第1の像内の手順のアドレスを
識別する手順パラメータを通すが、第2の像が次いで第
1の像の手順へコールバックするような場合に生じる。
第1の像を変換するためには、第2の像の入力ポイント
を呼び出す作用に関する情報、例えば、第2の像が第1
の像をコールバックするというような情報が分からねば
ならない。しかしながら、この情報は、第1の像を検査
するだけでは決定できない。第2の像を変換するために
は、第1の像を呼び出すことに関する情報、例えば、第
1の像へのコールバック中に通される手順−パラメータ
の1組の考えられる値と、この手順パラメータの各々の
考えられる値に対するコールバックの作用とが分からね
ばならない。しかしながら、この情報は、第2の像を検
査するのでは決定できない。それ故、各々の像を、互い
に他の像が変換のために全ての必要な情報を持つ前に、
変換しなければならないような場合に、矛盾する状態を
招く。
トを呼び出す作用が第1の像に依存し、第1の像を変換
するまで分からないような状態を生み出す。しかし、第
1の像の変換には、第2の像内の入力ポイントを呼び出
す作用に関する情報が必要である。このような矛盾する
相互依存性は、例えば、第1の像が第2の像内の入力ポ
イントを呼び出しそして第1の像内の手順のアドレスを
識別する手順パラメータを通すが、第2の像が次いで第
1の像の手順へコールバックするような場合に生じる。
第1の像を変換するためには、第2の像の入力ポイント
を呼び出す作用に関する情報、例えば、第2の像が第1
の像をコールバックするというような情報が分からねば
ならない。しかしながら、この情報は、第1の像を検査
するだけでは決定できない。第2の像を変換するために
は、第1の像を呼び出すことに関する情報、例えば、第
1の像へのコールバック中に通される手順−パラメータ
の1組の考えられる値と、この手順パラメータの各々の
考えられる値に対するコールバックの作用とが分からね
ばならない。しかしながら、この情報は、第2の像を検
査するのでは決定できない。それ故、各々の像を、互い
に他の像が変換のために全ての必要な情報を持つ前に、
変換しなければならないような場合に、矛盾する状態を
招く。
本発明の別の特徴によれば、相互依存性による矛盾は、
多数の変換及びチェックされる仮定によって解決され
る。第1の像の変換中に、トランスレーターは、第2の
像がまだ変換されていないために、第2の像の入力ポイ
ントを呼び出す作用に関する情報がないことが分かる。
それ故、トランスレーターは、ノーマル復帰やコールバ
ックなしといった第2像の入力ポイントへの呼び出しに
関するデフォールト仮定をする。第2の像が変換される
とき、トランスレーターは、第2の像がこのデフォール
ト仮定に反してコールバックをもつと決定し、それ故、
このデフォールト仮定に基づいて手前の変換を発見する
ために更にチェックを行う。第1像の変換を含むこれら
手前の変換は、第2像の入力ポイントを呼び出す作用に
関して更新された情報を用いて繰り返される。例えば、
第1像の再変換により更に別のプログラムコードが探索
され、それ故、第1像を呼び出す作用に関する情報、例
えば、第2像からのコールバックの作用に関する情報が
変化する。この場合、この情報に基づく手前の変換−−
第2像の変換を含む−−が、第1像を呼び出す作用に関
する更新された情報を用いて繰り返される。
多数の変換及びチェックされる仮定によって解決され
る。第1の像の変換中に、トランスレーターは、第2の
像がまだ変換されていないために、第2の像の入力ポイ
ントを呼び出す作用に関する情報がないことが分かる。
それ故、トランスレーターは、ノーマル復帰やコールバ
ックなしといった第2像の入力ポイントへの呼び出しに
関するデフォールト仮定をする。第2の像が変換される
とき、トランスレーターは、第2の像がこのデフォール
ト仮定に反してコールバックをもつと決定し、それ故、
このデフォールト仮定に基づいて手前の変換を発見する
ために更にチェックを行う。第1像の変換を含むこれら
手前の変換は、第2像の入力ポイントを呼び出す作用に
関して更新された情報を用いて繰り返される。例えば、
第1像の再変換により更に別のプログラムコードが探索
され、それ故、第1像を呼び出す作用に関する情報、例
えば、第2像からのコールバックの作用に関する情報が
変化する。この場合、この情報に基づく手前の変換−−
第2像の変換を含む−−が、第1像を呼び出す作用に関
する更新された情報を用いて繰り返される。
多数の変換及びチェックされた仮定についてのこのプロ
セスは、何回も繰り返されるが、最終的には常にコンバ
ージェンス(収斂)状態となる。多くの場合、このプロ
セスは、各像が正確に記述されるとコンバージェンス状
態になり、それ以上の再変換は不要となる。例えば、実
行時間ライブラリーは、典型的に、とりわけ相互依存性
をもつ像の収集体を含むが、これらは、指定の入力ポイ
ントにおいてユーザプログラムによって呼び出され、ユ
ーザプログラムとの相互依存性はもたない。この場合、
多数の変換及びチェックされた仮定のプロセスは、指定
の入力ポイントにおける各像の呼び出し作用に関する完
全な情報を含む各像の正確な記述に基づいてコンバージ
ェンス状態となる。この情報を含むファイルをユーザプ
ログラムの変換に使用することができ、実行時間ライブ
ラリー像の再変換は必要とされない。
セスは、何回も繰り返されるが、最終的には常にコンバ
ージェンス(収斂)状態となる。多くの場合、このプロ
セスは、各像が正確に記述されるとコンバージェンス状
態になり、それ以上の再変換は不要となる。例えば、実
行時間ライブラリーは、典型的に、とりわけ相互依存性
をもつ像の収集体を含むが、これらは、指定の入力ポイ
ントにおいてユーザプログラムによって呼び出され、ユ
ーザプログラムとの相互依存性はもたない。この場合、
多数の変換及びチェックされた仮定のプロセスは、指定
の入力ポイントにおける各像の呼び出し作用に関する完
全な情報を含む各像の正確な記述に基づいてコンバージ
ェンス状態となる。この情報を含むファイルをユーザプ
ログラムの変換に使用することができ、実行時間ライブ
ラリー像の再変換は必要とされない。
図面の簡単な説明 本発明の他の目的及び効果は、添付図面を参照した以下
の詳細な説明から明らかとなろう。
の詳細な説明から明らかとなろう。
図1は、複雑(コンプレックス)命令を処理するように
特に構成されたパイプライン式処理ユニットを有するCI
SCデジタルコンピュータシステムのブロック図である。
特に構成されたパイプライン式処理ユニットを有するCI
SCデジタルコンピュータシステムのブロック図である。
図2は、多数の命令に対して異なったタスクを同時に実
行するときの図1のパイプライン処理ユニットの状態を
示す図である。
行するときの図1のパイプライン処理ユニットの状態を
示す図である。
図3は、複雑な命令セットからの可変長さ命令の好まし
いフォーマットを示す図である。
いフォーマットを示す図である。
図4は、ロングワード間の加算を行うための特定の可変
長さの命令を示す図である。
長さの命令を示す図である。
図5は、指定子の第1バイトに含まれたモード情報のデ
コードを示すテーブルである。
コードを示すテーブルである。
図6は、RISCデジタルコンピュータシステムのブロック
図である。
図である。
図7は、RISC命令セットの中の好ましい命令フォーマッ
トを示すブロック図である。
トを示すブロック図である。
図8は、オリジナルのCISCプログラムを、RISC命令をも
つ変換プログラムに変換するためのアナライザー及びRI
SCコードジェネレータを含むトランスレーターのブロッ
ク図である。
つ変換プログラムに変換するためのアナライザー及びRI
SCコードジェネレータを含むトランスレーターのブロッ
ク図である。
図9は、オリジナルCISCプログラムの部分RISC変換と、
そのオリジナルCISCプログラムの非変換部分を解読する
インタープリターとの間で実行が分担されるときのRISC
コンピュータからのデータ及びプログラム入力と、デー
タ出力とを示すブロック図である。
そのオリジナルCISCプログラムの非変換部分を解読する
インタープリターとの間で実行が分担されるときのRISC
コンピュータからのデータ及びプログラム入力と、デー
タ出力とを示すブロック図である。
図10は、図9に使用されたインタープリターを呼び出す
図8のRISCコードジェネレータのステップを示すフロー
チャートである。
図8のRISCコードジェネレータのステップを示すフロー
チャートである。
図11は、図9に示す部分RISC変換とで実行が分担される
ときのインタープリター及びその動作を示すフローチャ
ートである。
ときのインタープリター及びその動作を示すフローチャ
ートである。
図12は、いつ実行がインタープリターから部分RISC変換
へ移行するかを決定するアドレスチェックルーチンのフ
ローチャートである。
へ移行するかを決定するアドレスチェックルーチンのフ
ローチャートである。
図13は、図8のトランスレーターの動作を示すフローチ
ャートである。
ャートである。
図14は、図8のトランスレーターにより発生される概要
ページであって、変換されたオリジナルのCISCプログラ
ムのメモリマップを含む概要ページを示す図である。
ページであって、変換されたオリジナルのCISCプログラ
ムのメモリマップを含む概要ページを示す図である。
図15は、オリジナルのCISCプログラムのフローチャート
である。
である。
図16は、オリジナルのCISCプログラムのエラー特有の流
れ図である。
れ図である。
図17は、マシンコードから流れ図を自動的に発生するた
めにトランスレーターのアナライザーによって使用され
るデータ構造を示すブロック図である。
めにトランスレーターのアナライザーによって使用され
るデータ構造を示すブロック図である。
図18は、マシンコードから流れ図を自動的に発生するた
めにアナライザーによって使用される手順を示すフロー
チャートである。
めにアナライザーによって使用される手順を示すフロー
チャートである。
図19は、マシンコードから流れ図を自動的に発生する間
に実行転送命令からの経路を検査するためにアナライザ
ーによって使用される手順を示すフローチャートであ
る。
に実行転送命令からの経路を検査するためにアナライザ
ーによって使用される手順を示すフローチャートであ
る。
図20は、手前のプログラム実行における計算行き先アド
レスの値を見つけようとする試みにおいて後方記号実行
を行うためにアナライザーによって使用される手順のフ
ローチャートである。
レスの値を見つけようとする試みにおいて後方記号実行
を行うためにアナライザーによって使用される手順のフ
ローチャートである。
図21は、一定の変位を含む行き先アドレスと、特定の汎
用レジスタと、直接又は間接メモリアクセスの指示とに
対する記号表現において項目の固定フォーマットを示し
た図である。
用レジスタと、直接又は間接メモリアクセスの指示とに
対する記号表現において項目の固定フォーマットを示し
た図である。
図22は、一定の変位を含む行き先アドレスと、特定の汎
用「ベース」レジスタと、特定の汎用「インデックス」
レジスタと、一定のオフセットと、直接又は間接メモリ
アクセスの指示とに対する記号表現において項目の固定
フォーマットを示した図である。
用「ベース」レジスタと、特定の汎用「インデックス」
レジスタと、一定のオフセットと、直接又は間接メモリ
アクセスの指示とに対する記号表現において項目の固定
フォーマットを示した図である。
図23は、メインプログラムルーチンの流れを示す概略図
で、破線で示す実行転送経路を含んだ間接的なプログラ
ムループを示す図である。
で、破線で示す実行転送経路を含んだ間接的なプログラ
ムループを示す図である。
図24は、所与の記号表面のための値を見つける試みにお
いて基本ブロックをサーチするために後方記号実行に用
いられる手順のフローチャートである。
いて基本ブロックをサーチするために後方記号実行に用
いられる手順のフローチャートである。
図25は、所与の記号表現を命令を通して後方に押しやっ
てその記号表現を変更し、プログラムの実行中に、命令
実行の直後にその所与の記号表現で表わされるであろう
ものと同じ値を命令実行の直前にその変更した表現で表
すようにするために、後方記号実行に使用される手順を
示すフローチャートである。
てその記号表現を変更し、プログラムの実行中に、命令
実行の直後にその所与の記号表現で表わされるであろう
ものと同じ値を命令実行の直前にその変更した表現で表
すようにするために、後方記号実行に使用される手順を
示すフローチャートである。
図26は、記号表現を命令を通して後方に押しやる助けを
するために各々の命令OPコードに対して予め決定するこ
とのできるデータのフォーマットを示す図である。
するために各々の命令OPコードに対して予め決定するこ
とのできるデータのフォーマットを示す図である。
図27は、記号表現を命令を通して押しやることによりそ
の表現がコンピュータプログラムの一定アドレスを表す
フォーマットに変換されたか又はコンピュータのオペレ
ーティングシステムの一定アドレスを表すフォーマット
に変換されたかをチェックすると共に、そのアドレスが
プログラム実行転送のための許容できる行き先を表すか
どうかをチェックするためのルーチンを示すフローチャ
ートである。
の表現がコンピュータプログラムの一定アドレスを表す
フォーマットに変換されたか又はコンピュータのオペレ
ーティングシステムの一定アドレスを表すフォーマット
に変換されたかをチェックすると共に、そのアドレスが
プログラム実行転送のための許容できる行き先を表すか
どうかをチェックするためのルーチンを示すフローチャ
ートである。
図28及び29は、プログラムメモリの未知のコードエリア
において巧みなプログラムコードを見つけるための3つ
のスキャニングモードを含む手順を示すフローチャート
である。
において巧みなプログラムコードを見つけるための3つ
のスキャニングモードを含む手順を示すフローチャート
である。
図30は、プログラムの実行中に解読された非変換プログ
ラムコードの位置を識別する実行ロングファイルの利点
を取り入れてオリジナルプログラムを繰り返し変換する
ことによりプログラム変換及び維持を行う一般的な手順
をフローチャートである。
ラムコードの位置を識別する実行ロングファイルの利点
を取り入れてオリジナルプログラムを繰り返し変換する
ことによりプログラム変換及び維持を行う一般的な手順
をフローチャートである。
図31は、2つの相互に従属するプログラムを交互に変換
及び再変換しそして2つのプログラムを容易に合体でき
ないもしくは同時に変換できない状態においてコンバー
ジェンスをテストするための手順を示すフローチャート
である。
及び再変換しそして2つのプログラムを容易に合体でき
ないもしくは同時に変換できない状態においてコンバー
ジェンスをテストするための手順を示すフローチャート
である。
図32は、2つの相互に従属するプログラムの像情報ファ
イルを示すと共に、ファイル間のリンケージを示すブロ
ック図である。
イルを示すと共に、ファイル間のリンケージを示すブロ
ック図である。
図33は、2つの相互に従属するプログラムの情報ファイ
ル間のリンケージを利用して、これらプログラムが交互
に変換及び再変換されるときに迅速にコンバージェンス
を得るための手順を示すフローチャートである。
ル間のリンケージを利用して、これらプログラムが交互
に変換及び再変換されるときに迅速にコンバージェンス
を得るための手順を示すフローチャートである。
本発明は、種々の形態で実施できるが、その特定の実施
例を図示して以下に詳細に説明する。しかしながら、本
発明は、ここに開示する特定の形態に限定されるもので
はなく、請求の範囲に規定した本発明の精神及び範囲内
に入る全ての変更、修正及び等効物も包含するものとす
る。
例を図示して以下に詳細に説明する。しかしながら、本
発明は、ここに開示する特定の形態に限定されるもので
はなく、請求の範囲に規定した本発明の精神及び範囲内
に入る全ての変更、修正及び等効物も包含するものとす
る。
実施例の詳細な説明 本発明の好ましい実施例は、複雑命令セットコンピュー
タ(CISC)用のプログラムコードを簡易命令セットコン
ピュータ(RISC)用のプログラムコードに変換するため
に効果的に使用される。先ず、図1を参照すれば、そこ
に示された複雑命令セットのデジタルコンピュータ20
は、中央処理ユニット21と、入力/出力ユニット22と、
メインメモリ23とを備えている。
タ(CISC)用のプログラムコードを簡易命令セットコン
ピュータ(RISC)用のプログラムコードに変換するため
に効果的に使用される。先ず、図1を参照すれば、そこ
に示された複雑命令セットのデジタルコンピュータ20
は、中央処理ユニット21と、入力/出力ユニット22と、
メインメモリ23とを備えている。
データ及びこれを処理するための命令は、メインメモリ
23内のアドレス可能な記憶位置に記憶される。命令は、
CPUにより実行されるべきオペレーションをコードの形
態で指定するオペレーションコード(OPコード)と、オ
ペランドを探索するための情報を与えるオペランド指定
子とを含んでいる。典型的なCISC命令アーキテクチャー
においては、各命令の最初のバイトがOPコードを含み、
それに続くバイトがオペランド指定子を含む。命令は可
変長さであるのが好ましく、種々の形式の指定子を同じ
OPコードと共に使用することができる。これについて
は、参考としてここに取り上げる1980年12月23日付けの
ストレッカー氏等の米国特許第4,241,397号に開示され
ている。
23内のアドレス可能な記憶位置に記憶される。命令は、
CPUにより実行されるべきオペレーションをコードの形
態で指定するオペレーションコード(OPコード)と、オ
ペランドを探索するための情報を与えるオペランド指定
子とを含んでいる。典型的なCISC命令アーキテクチャー
においては、各命令の最初のバイトがOPコードを含み、
それに続くバイトがオペランド指定子を含む。命令は可
変長さであるのが好ましく、種々の形式の指定子を同じ
OPコードと共に使用することができる。これについて
は、参考としてここに取り上げる1980年12月23日付けの
ストレッカー氏等の米国特許第4,241,397号に開示され
ている。
メインメモリ23は、多数の記憶位置を含み、それ故、安
価ではあるが比較的低速の記憶装置、例えば、ダイナミ
ック・ランダム・アクセス(DRAM)メモリチップで構成
される。CPU21は、メインメモリのアクセスタイムより
も高速度で命令を実行するので、比較的記憶容量の小さ
い高速キャッシュメモリにデータ及び命令の一部分のコ
ピーを保持するメモリアクセスユニット24を備えてい
る。通常、CPUは、データ及び命令をメモリアクセスユ
ニット24のキャッシュメモリから得ることが必要である
が、このキャッシュメモリに必要な命令及びデータが見
つからないときには、メモリアクセスユニットがメイン
メモリユニット23をアクセスし、必要な命令又はキャッ
シュメモリに「再装填」する。
価ではあるが比較的低速の記憶装置、例えば、ダイナミ
ック・ランダム・アクセス(DRAM)メモリチップで構成
される。CPU21は、メインメモリのアクセスタイムより
も高速度で命令を実行するので、比較的記憶容量の小さ
い高速キャッシュメモリにデータ及び命令の一部分のコ
ピーを保持するメモリアクセスユニット24を備えてい
る。通常、CPUは、データ及び命令をメモリアクセスユ
ニット24のキャッシュメモリから得ることが必要である
が、このキャッシュメモリに必要な命令及びデータが見
つからないときには、メモリアクセスユニットがメイン
メモリユニット23をアクセスし、必要な命令又はキャッ
シュメモリに「再装填」する。
又、メモリアクセスユニット24は、命令に使用される
「仮想」アドレスをメインメモリ23に使用される「物
理」アドレスに変換するための変換バッファのような手
段も備えている。この技術により、プログラマーは、メ
インメモリ23に設けられる以上に多数のアドレス可能な
メモリ位置を含む「仮想アドレススペース」を参照する
ことができる。それ故、プログラマーは、メインメモリ
23の制限された記憶容量によってあまり制約を受けるこ
とがない。
「仮想」アドレスをメインメモリ23に使用される「物
理」アドレスに変換するための変換バッファのような手
段も備えている。この技術により、プログラマーは、メ
インメモリ23に設けられる以上に多数のアドレス可能な
メモリ位置を含む「仮想アドレススペース」を参照する
ことができる。それ故、プログラマーは、メインメモリ
23の制限された記憶容量によってあまり制約を受けるこ
とがない。
より速いデータアクセスを与えるために、命令は、マル
チポートレジスタファイル25に含まれた限定された数の
汎用レジスタを参照することができる。これら汎用レジ
スタの幾つかには特定のファンクションを指定すること
ができ、例えば1つの汎用レジスタは典型的に「プログ
ラムカウンタ」として使用され、ソースオペランドとし
て参照されたときにデコードされる命令のアドレスを与
えるか、或いは行き先オペランドとして参照されたとき
にデコードされるべき次の命令のアドレスを指定する。
チポートレジスタファイル25に含まれた限定された数の
汎用レジスタを参照することができる。これら汎用レジ
スタの幾つかには特定のファンクションを指定すること
ができ、例えば1つの汎用レジスタは典型的に「プログ
ラムカウンタ」として使用され、ソースオペランドとし
て参照されたときにデコードされる命令のアドレスを与
えるか、或いは行き先オペランドとして参照されたとき
にデコードされるべき次の命令のアドレスを指定する。
個々の命令の実行は、各々のパイプラインファンクショ
ンユニットによって行われる多数のサブタスクに分割さ
れる。これらのパイプラインファンクションユニット
は、メモリから命令をフェッチするための命令バッファ
26と、このフェッチされた命令をデコードするための命
令デコーダ27と、ソースオペランド指定子によって識別
されたソースオペランドをフェッチするためのオペラン
ドユニット28と、ソースオペランドに基づいて演算、論
理及び特殊なオペレーションを実行して結果を得るため
の実行ユニット29と、行き先オペランド指定子によって
識別されたメモリ位置又はレジスタに結果を記憶するた
めのリタイヤユニット30とを備えている。
ンユニットによって行われる多数のサブタスクに分割さ
れる。これらのパイプラインファンクションユニット
は、メモリから命令をフェッチするための命令バッファ
26と、このフェッチされた命令をデコードするための命
令デコーダ27と、ソースオペランド指定子によって識別
されたソースオペランドをフェッチするためのオペラン
ドユニット28と、ソースオペランドに基づいて演算、論
理及び特殊なオペレーションを実行して結果を得るため
の実行ユニット29と、行き先オペランド指定子によって
識別されたメモリ位置又はレジスタに結果を記憶するた
めのリタイヤユニット30とを備えている。
複雑命令セットのデジタルコンピュータ20の好ましい構
造に関する詳細については、参考としてここに取り上げ
る1989年2月3日出願のファイト氏等の「可変長さ命令
アーキテクチャーにおける多数の指定子のデコーディン
グ(Decoding Multiple Specifiers in a Variable Len
gth Instruction Architecture)」と題する米国特許出
願07/307,347を参照されたい。
造に関する詳細については、参考としてここに取り上げ
る1989年2月3日出願のファイト氏等の「可変長さ命令
アーキテクチャーにおける多数の指定子のデコーディン
グ(Decoding Multiple Specifiers in a Variable Len
gth Instruction Architecture)」と題する米国特許出
願07/307,347を参照されたい。
図2は、デジタルコンピュータ(図1の20)が1サイク
ル当たり1命令という平均的な速度で命令を実行するよ
うな理想的な状態に対するパイプラインファンクション
ユニット(図1の26ないし30)の状態を示す図である。
一般に、各命令の実行中にはパイプラインユニット26な
いし30の各々により次の段階が実行される。即ち、命令
フェッチ、命令デコード、オペランドフェッチ、実行及
び結果の記憶である。
ル当たり1命令という平均的な速度で命令を実行するよ
うな理想的な状態に対するパイプラインファンクション
ユニット(図1の26ないし30)の状態を示す図である。
一般に、各命令の実行中にはパイプラインユニット26な
いし30の各々により次の段階が実行される。即ち、命令
フェッチ、命令デコード、オペランドフェッチ、実行及
び結果の記憶である。
1つのサイクルは、各ファンクションユニットがそのサ
ブタスクを実行するための最小の時間である。所与のフ
ァンクションユニットは、例えば、メモリアクセスユニ
ット(図1の24)が「再装填」オペレーションを実行し
ているときには、そのメモリアクセスユニットの競合に
より1つのサイクル内にそのサブタスクを実行しないこ
とがある。更に、特に複雑な命令を実行しているときに
は、命令が複雑であるために、所与のファンクションユ
ニットがそのサブタスクを実行するのに2サイクル以上
を要することがある。いずれの場合にも、専用のハード
ウェア段を使用することにより、これらのステップをパ
イプラインオペレーションにおいてある程度オーバーラ
ップさせて、全命令スループットを高めることができ
る。
ブタスクを実行するための最小の時間である。所与のフ
ァンクションユニットは、例えば、メモリアクセスユニ
ット(図1の24)が「再装填」オペレーションを実行し
ているときには、そのメモリアクセスユニットの競合に
より1つのサイクル内にそのサブタスクを実行しないこ
とがある。更に、特に複雑な命令を実行しているときに
は、命令が複雑であるために、所与のファンクションユ
ニットがそのサブタスクを実行するのに2サイクル以上
を要することがある。いずれの場合にも、専用のハード
ウェア段を使用することにより、これらのステップをパ
イプラインオペレーションにおいてある程度オーバーラ
ップさせて、全命令スループットを高めることができ
る。
図3は、図1に示す中央処理ユニット(CPU)によって
処理することのできる典型的な命令40を示している。こ
の命令は、参考としてここに取り上げるデジタル・イク
イップメント社のレビー及びエクハウス二世著の「コン
ピュータプログラミング及びアーキテクチャー、VAX-1
1」(1980年)に記載されたVAX(登録商標)可変長さ命
令アーキテクチャーに対応する。この命令40は、1又は
2バイトのオペレーションコード41を含んでいる。第1
バイト42がFD(16進)の値を有する場合には、これがダ
ブルバイトのオペレーションコードとして認識される。
さもなくば、命令デコーダ(図1の27)がそのオペレー
ションコードを1バイトしか含まないものとして認識す
る。命令40は、更に、オペレーションコードの後に6個
までの指定子を含む。
処理することのできる典型的な命令40を示している。こ
の命令は、参考としてここに取り上げるデジタル・イク
イップメント社のレビー及びエクハウス二世著の「コン
ピュータプログラミング及びアーキテクチャー、VAX-1
1」(1980年)に記載されたVAX(登録商標)可変長さ命
令アーキテクチャーに対応する。この命令40は、1又は
2バイトのオペレーションコード41を含んでいる。第1
バイト42がFD(16進)の値を有する場合には、これがダ
ブルバイトのオペレーションコードとして認識される。
さもなくば、命令デコーダ(図1の27)がそのオペレー
ションコードを1バイトしか含まないものとして認識す
る。命令40は、更に、オペレーションコードの後に6個
までの指定子を含む。
オペレーションコードは、命令内にいかに多数の指定子
が含まれるかを指示する。所与のオペレーションコード
に関連して使用される指定子は、種々のアトリビュート
及び種々の長さをもつことができる。特定の指定子のア
トリビュートはその指定子の第1バイトのアドレスモー
ドによって少なくとも部分的に決定される。しかしなが
ら、指定子の許容できるアトリビュートは、オペレーシ
ョンコードによって制限を受けることが時々ある。更
に、「即座のアドレッシング」として知られている特定
種類のアドレスモードについては、指定子情報の長さが
その指定子によって指定された「データタイプ」により
決定される。
が含まれるかを指示する。所与のオペレーションコード
に関連して使用される指定子は、種々のアトリビュート
及び種々の長さをもつことができる。特定の指定子のア
トリビュートはその指定子の第1バイトのアドレスモー
ドによって少なくとも部分的に決定される。しかしなが
ら、指定子の許容できるアトリビュートは、オペレーシ
ョンコードによって制限を受けることが時々ある。更
に、「即座のアドレッシング」として知られている特定
種類のアドレスモードについては、指定子情報の長さが
その指定子によって指定された「データタイプ」により
決定される。
特定の可変長さの命令が図4に示されている。アッセン
ブラー表示では、この命令が「ADDL3 R0,#4,L^203(R
2)」と書き表される。マシンコードでは、命令が8バ
イトを含み、一般に45で示されている。第1のバイト
は、23(16進)のオペレーションコードであり、これは
アッセンブラーニューモニック「ADDL3」に対応する。
このオペレーションコードは、第1のロングワードオペ
ランドを第2のロングワードオペランドに加算しそして
ロングワードの結果を行き先位置に記憶すべきであるこ
とを指示する。オペレーションコードに続いて、50(16
進)の値をもつ「レジスタ指定子」がある。16進数の5
は、指定子がレジスタ指定子であることを示し、そして
16進数0は、指定されたレジスタがCPU内のR0汎用レジ
スタであることを示している。それ故、レジスタ指定子
は、第1のソースオペランドが汎用レジスタR0の内容で
あることを指定する。
ブラー表示では、この命令が「ADDL3 R0,#4,L^203(R
2)」と書き表される。マシンコードでは、命令が8バ
イトを含み、一般に45で示されている。第1のバイト
は、23(16進)のオペレーションコードであり、これは
アッセンブラーニューモニック「ADDL3」に対応する。
このオペレーションコードは、第1のロングワードオペ
ランドを第2のロングワードオペランドに加算しそして
ロングワードの結果を行き先位置に記憶すべきであるこ
とを指示する。オペレーションコードに続いて、50(16
進)の値をもつ「レジスタ指定子」がある。16進数の5
は、指定子がレジスタ指定子であることを示し、そして
16進数0は、指定されたレジスタがCPU内のR0汎用レジ
スタであることを示している。それ故、レジスタ指定子
は、第1のソースオペランドが汎用レジスタR0の内容で
あることを指定する。
レジスタ指定子に続いて、04(16進)の値を有する「短
リテラル指定子」がある。この短リテラル指定子は、第
2のソースオペランドとして値4を指定する。
リテラル指定子」がある。この短リテラル指定子は、第
2のソースオペランドとして値4を指定する。
短リテラル指定子に続いて、加算オペレーションの行き
先を指定する「複雑指定子」の第1バイトがある。16進
数のEは、「ロングワード変位」アドレスモードを指示
し、この場合、それに続く4つのバイトは、複雑指定子
により指定されたアドレスを得るためにベースレジスタ
の内容の値に加算されるべき32ビットのアドレス変位と
して解読される。16進数の2は、汎用レジスタR2をベー
スレジスタとして使用すべきであることを指示する。そ
れ故、複雑指定子は、オペランドコードによって指示さ
れたロングワード加算の和即ち結果を、汎用レジスタR2
の内容に203(16進)の値を加算することにより計算し
たメモリ内のアドレスに記憶すべきであることを指示す
る。
先を指定する「複雑指定子」の第1バイトがある。16進
数のEは、「ロングワード変位」アドレスモードを指示
し、この場合、それに続く4つのバイトは、複雑指定子
により指定されたアドレスを得るためにベースレジスタ
の内容の値に加算されるべき32ビットのアドレス変位と
して解読される。16進数の2は、汎用レジスタR2をベー
スレジスタとして使用すべきであることを指示する。そ
れ故、複雑指定子は、オペランドコードによって指示さ
れたロングワード加算の和即ち結果を、汎用レジスタR2
の内容に203(16進)の値を加算することにより計算し
たメモリ内のアドレスに記憶すべきであることを指示す
る。
図5には、分岐変位ではないオペランド指定子の第1バ
イトをデコードするためのデコードテーブルが示されて
いる。オペランド指定子の第1バイトの最上位2ビット
がどちらも0である場合には、そのオペランド指定子が
単一の第1バイトより成り、そしてこのバイトの下位6
ビットは、「短リテラル」と称する6ビット値を指定す
るものとして解読もしくはデコードされる。
イトをデコードするためのデコードテーブルが示されて
いる。オペランド指定子の第1バイトの最上位2ビット
がどちらも0である場合には、そのオペランド指定子が
単一の第1バイトより成り、そしてこのバイトの下位6
ビットは、「短リテラル」と称する6ビット値を指定す
るものとして解読もしくはデコードされる。
オペランド指定子の第1バイトの最上位2ビットが0で
ない場合には、そのバイトが分岐変位の一部分でないと
仮定すれば、そのバイトは、CPU内の16個の汎用レジス
タR0ないしR15の指定の1つに関連した12のレジスタア
ドレスモードのうちの特定の1つとしてデコードされ
る。このバイトの最上位4ビット(レジスタモードフィ
ールドを構成する)は、アドレスモードを指示するよう
にデコードされ、そして最下位4ビット(汎用レジスタ
アドレスフィールドを構成する)は、16個の汎用レジス
タのうちの特定の1つをアドレスするのに使用される。
ない場合には、そのバイトが分岐変位の一部分でないと
仮定すれば、そのバイトは、CPU内の16個の汎用レジス
タR0ないしR15の指定の1つに関連した12のレジスタア
ドレスモードのうちの特定の1つとしてデコードされ
る。このバイトの最上位4ビット(レジスタモードフィ
ールドを構成する)は、アドレスモードを指示するよう
にデコードされ、そして最下位4ビット(汎用レジスタ
アドレスフィールドを構成する)は、16個の汎用レジス
タのうちの特定の1つをアドレスするのに使用される。
レジスタモードフィールドが値4(16進)をもつ場合に
は、「インデックスモード」が指定され、レジスタアド
レスフィールドによってアドレスされた汎用レジスタの
内容の値にオペランドのバイトのサイズ(例えば、バイ
ト、ワード、ロングワード、クオドワード、又はオクタ
ワードのデータ形式に対して各々1、2、4、8又は1
6)が乗算され、その和がその直後の複雑指定子につい
て実行されるアドレス計算に項として含まれ、次のバイ
トは、6ないしF(16進)の値のレジスタモードフィー
ルドと、複雑指定子に対してベースレジスタをアドレス
するレジスタアドレスフィールドとを有していなければ
ならない。
は、「インデックスモード」が指定され、レジスタアド
レスフィールドによってアドレスされた汎用レジスタの
内容の値にオペランドのバイトのサイズ(例えば、バイ
ト、ワード、ロングワード、クオドワード、又はオクタ
ワードのデータ形式に対して各々1、2、4、8又は1
6)が乗算され、その和がその直後の複雑指定子につい
て実行されるアドレス計算に項として含まれ、次のバイ
トは、6ないしF(16進)の値のレジスタモードフィー
ルドと、複雑指定子に対してベースレジスタをアドレス
するレジスタアドレスフィールドとを有していなければ
ならない。
レジスタモードフィールドが値5(16進)をもつ場合に
は、指定子が「レジスタ指定子」であって、レジスタア
ドレスフィールドによって指示された汎用レジスタにオ
ペランドの値が見い出されるか、或いは指定子が命令の
行き先に対するものである場合には、その指定子は、レ
ジスタアドレスフィールドによって指示された汎用レジ
スタに結果を記憶すべきであることを指定する。
は、指定子が「レジスタ指定子」であって、レジスタア
ドレスフィールドによって指示された汎用レジスタにオ
ペランドの値が見い出されるか、或いは指定子が命令の
行き先に対するものである場合には、その指定子は、レ
ジスタアドレスフィールドによって指示された汎用レジ
スタに結果を記憶すべきであることを指定する。
レジスタモード6、7及び8の各々については、指示さ
れたレジスタがオペランドに対するメモリアドレスを含
んでいる。ソースオペランドについては、このメモリア
ドレスからオペランドの値が読み出され、そして行き先
オペランドについては、このメモリアドレスに結果が書
き込まれる。モード6においては、指示されたレジスタ
がオペランドのアドレスを含む。レジスタモード7にお
いては、指示された汎用レジスタの内容が、先ず、アド
レス計算の前に減少され、モード8においては、指示さ
れた汎用レジスタの内容が、このレジスタを用いてアド
レスを計算した後に増加される。レジスタモード9はレ
ジスタモード8と同様であるが、指示された汎用レジス
タの内容は、オペランド自体ではなくてオペランドアド
レスが見い出されるメモリ内のアドレスを指定する。
れたレジスタがオペランドに対するメモリアドレスを含
んでいる。ソースオペランドについては、このメモリア
ドレスからオペランドの値が読み出され、そして行き先
オペランドについては、このメモリアドレスに結果が書
き込まれる。モード6においては、指示されたレジスタ
がオペランドのアドレスを含む。レジスタモード7にお
いては、指示された汎用レジスタの内容が、先ず、アド
レス計算の前に減少され、モード8においては、指示さ
れた汎用レジスタの内容が、このレジスタを用いてアド
レスを計算した後に増加される。レジスタモード9はレ
ジスタモード8と同様であるが、指示された汎用レジス
タの内容は、オペランド自体ではなくてオペランドアド
レスが見い出されるメモリ内のアドレスを指定する。
モード10ないし15は、種々の形式の「変位」モードであ
る。変位モードにおいては、モード10、12及び14の場合
に各々バイト、ワード又はロングワードを構成する変位
置が指定の汎用レジスタの内容に加えられ、オペランド
アドレスが得られる。オペランドはモード11、13及び15
においても同様に決定されるが、変位置と汎用レジスタ
の内容との和は、オペランドのアドレスを見つけること
のできるメモリアドレスを識別する。
る。変位モードにおいては、モード10、12及び14の場合
に各々バイト、ワード又はロングワードを構成する変位
置が指定の汎用レジスタの内容に加えられ、オペランド
アドレスが得られる。オペランドはモード11、13及び15
においても同様に決定されるが、変位置と汎用レジスタ
の内容との和は、オペランドのアドレスを見つけること
のできるメモリアドレスを識別する。
モード8ないし15においては、オペランド指定子の第1
バイトのレジスタアドレスフィールドは、プログラムカ
ウンタであるレジスタR15を含む汎用レジスタのいずれ
かを指定することができる。モード8及び9の場合に、
プログラムカウンタがアドレスされたとすれば、プログ
ラムカウンタ自体の値が増加され、プログラムの実行は
命令流に置かれたオペランドデータ又はオペランドアド
レスをジャンプさせられる。モード8において、この特
殊なケースは「即時」のアドレスモードとして知られて
おり、モード9については、「絶対」アドレスモードと
して知られている。特に、汎用レジスタ0ないし14のい
ずれかについてモード8及び9がデコードされたときに
は、モード及び汎用レジスタを示すバイトの直後に次の
指定子又は次のオペランドコードが現れる。しかしなが
ら、この即座のモードについては、即時データの多数の
バイトが現れ、バイトの数は指定子のデータ形式によっ
て決定される。
バイトのレジスタアドレスフィールドは、プログラムカ
ウンタであるレジスタR15を含む汎用レジスタのいずれ
かを指定することができる。モード8及び9の場合に、
プログラムカウンタがアドレスされたとすれば、プログ
ラムカウンタ自体の値が増加され、プログラムの実行は
命令流に置かれたオペランドデータ又はオペランドアド
レスをジャンプさせられる。モード8において、この特
殊なケースは「即時」のアドレスモードとして知られて
おり、モード9については、「絶対」アドレスモードと
して知られている。特に、汎用レジスタ0ないし14のい
ずれかについてモード8及び9がデコードされたときに
は、モード及び汎用レジスタを示すバイトの直後に次の
指定子又は次のオペランドコードが現れる。しかしなが
ら、この即座のモードについては、即時データの多数の
バイトが現れ、バイトの数は指定子のデータ形式によっ
て決定される。
VAX(登録商標)可変長さ命令は種々のものがあって複
雑であるから、図1のデジタルコンピュータ20は、1サ
イクル当たり1つのVAX可変長さ命令を実行するという
理想に近い性能を得るために非常に複雑なものである。
しかしながら、半導体処理技術及びメモリアーキテクチ
ャーの近年の進歩により、単純な命令のみを実行すると
きにそれに匹敵する性能を有した単一チップの中央処理
ユニットを製造することが可能となった。それに匹敵す
る性能を得るために、いわゆる「簡易命令セットコンピ
ュータ」(RISC)が1サイクル当たり1つの命令を実質
的に越える速度で単純な命令を実行する。この性能は、
全ての演算/論理オペレーションをレジスタ対レジスタ
で実行するという条件を課することによりハードウェア
の複雑さを最小限にして得ることができる。更に、複雑
なメモリアクセスは許されず、即ち全てのメモリアクセ
スはレジスタロード/記憶オペレーションであり、少数
の比較的簡単なアドレスモードしかなく、即ち若干のオ
ペランドアドレス指定方法しかない。命令は1つの長さ
しかなく、メモリアクセスは、通常整列された標準デー
タ巾のものである。命令の実行は、マイクロコードとは
異なり直接固定布線型のものである。
雑であるから、図1のデジタルコンピュータ20は、1サ
イクル当たり1つのVAX可変長さ命令を実行するという
理想に近い性能を得るために非常に複雑なものである。
しかしながら、半導体処理技術及びメモリアーキテクチ
ャーの近年の進歩により、単純な命令のみを実行すると
きにそれに匹敵する性能を有した単一チップの中央処理
ユニットを製造することが可能となった。それに匹敵す
る性能を得るために、いわゆる「簡易命令セットコンピ
ュータ」(RISC)が1サイクル当たり1つの命令を実質
的に越える速度で単純な命令を実行する。この性能は、
全ての演算/論理オペレーションをレジスタ対レジスタ
で実行するという条件を課することによりハードウェア
の複雑さを最小限にして得ることができる。更に、複雑
なメモリアクセスは許されず、即ち全てのメモリアクセ
スはレジスタロード/記憶オペレーションであり、少数
の比較的簡単なアドレスモードしかなく、即ち若干のオ
ペランドアドレス指定方法しかない。命令は1つの長さ
しかなく、メモリアクセスは、通常整列された標準デー
タ巾のものである。命令の実行は、マイクロコードとは
異なり直接固定布線型のものである。
図6には、簡易命令セット(RISC)コンピュータ50がブ
ロック図で示されている。このRISCコンピュータ50は、
中央処理ユニット51と、入力/出力ユニット52と、メイ
ンメモリ53とを含んでいる。中央処理ユニット51は、メ
モリアクセスユニット54と、レジスタファイル55と、多
数のファンクションユニット、即ち命令ユニット56、ア
ドレスユニット57、整数・論理実行ユニット58及びフロ
ティングポイント実行ユニット59とを含んでいる。全て
の演算/論理オペレーションはレジスタ対レジスタで行
われるので、実行ユニット58、59はメモリユニット54を
直接アクセスしない。メモリからレジスタへのロードオ
ペレーション及びレジスタからメモリへの記憶オペレー
ションはアドレスユニット57によって実行される。
ロック図で示されている。このRISCコンピュータ50は、
中央処理ユニット51と、入力/出力ユニット52と、メイ
ンメモリ53とを含んでいる。中央処理ユニット51は、メ
モリアクセスユニット54と、レジスタファイル55と、多
数のファンクションユニット、即ち命令ユニット56、ア
ドレスユニット57、整数・論理実行ユニット58及びフロ
ティングポイント実行ユニット59とを含んでいる。全て
の演算/論理オペレーションはレジスタ対レジスタで行
われるので、実行ユニット58、59はメモリユニット54を
直接アクセスしない。メモリからレジスタへのロードオ
ペレーション及びレジスタからメモリへの記憶オペレー
ションはアドレスユニット57によって実行される。
1サイクル当たり1つの命令を実質的に越える速度で命
令を実行するために、命令ユニット56は、リソースを使
用できるときに少なくとも2つの命令を同時にフェッチ
してデコードすることができ、アドレスユニット57、整
数・論理実行ユニット58及びフローティングポイント実
行ユニット59は、3つの異なる命令を同時に実行するこ
とができる。好ましい実施例では、例えば、1つの命令
がカラムAからでそして第2の命令がカラムBからのも
のであるときに、2つの命令を同時にデコードし発生す
ることができる。カラムA カラムB 整数オペレーション フローティングオペレーション フローティングロード/記憶 整数ロード/記憶 フローティング分岐 整数分岐 JSR 図6のRISCコンピュータ50に関するそれ以上の詳細につ
いては、参考としてここに取り上げる1990年6月29日出
願の前記リチャード・L・サイト及びリチャード・T・
ウイテク氏の「高性能プロセッサにおける分岐予想(Br
anch Prediction in High-Performance Processor)」
と題する米国特許出願07/547,589を参照されたい。
令を実行するために、命令ユニット56は、リソースを使
用できるときに少なくとも2つの命令を同時にフェッチ
してデコードすることができ、アドレスユニット57、整
数・論理実行ユニット58及びフローティングポイント実
行ユニット59は、3つの異なる命令を同時に実行するこ
とができる。好ましい実施例では、例えば、1つの命令
がカラムAからでそして第2の命令がカラムBからのも
のであるときに、2つの命令を同時にデコードし発生す
ることができる。カラムA カラムB 整数オペレーション フローティングオペレーション フローティングロード/記憶 整数ロード/記憶 フローティング分岐 整数分岐 JSR 図6のRISCコンピュータ50に関するそれ以上の詳細につ
いては、参考としてここに取り上げる1990年6月29日出
願の前記リチャード・L・サイト及びリチャード・T・
ウイテク氏の「高性能プロセッサにおける分岐予想(Br
anch Prediction in High-Performance Processor)」
と題する米国特許出願07/547,589を参照されたい。
図7には、図6のコンピュータ50によって実行されるRI
SC命令セットの命令の種々の形式の好ましいフォーマッ
トが示されている。各命令は、32ビットの固定長さを有
する。
SC命令セットの命令の種々の形式の好ましいフォーマッ
トが示されている。各命令は、32ビットの固定長さを有
する。
メモリ命令70は、ビット〈31:26〉における6ビットOP
コードと、ビット〈25:21〉及び〈20:16〉における2つ
の5ビットレジスタアドレスフィールドRa及びRbと、ビ
ット〈15:0〉における16ビットの符号変位とを含んでい
る。この命令は、レジスタファイルとメモリとの間でデ
ータを転送し、レジスタファイル内のレジスタに有効ア
ドレスをロードし、そしてサブルーチンジャンプを行う
ように使用される。変位フィールド〈15:0〉はバイトオ
フセットであり、即ちこれは符号拡張されてレジスタRb
の内容に加えられ、仮想アドレスを形成する。仮想アド
レスは、特定の命令に基づいてメモリロード/記憶アド
レス又は結果の値として用いられる。
コードと、ビット〈25:21〉及び〈20:16〉における2つ
の5ビットレジスタアドレスフィールドRa及びRbと、ビ
ット〈15:0〉における16ビットの符号変位とを含んでい
る。この命令は、レジスタファイルとメモリとの間でデ
ータを転送し、レジスタファイル内のレジスタに有効ア
ドレスをロードし、そしてサブルーチンジャンプを行う
ように使用される。変位フィールド〈15:0〉はバイトオ
フセットであり、即ちこれは符号拡張されてレジスタRb
の内容に加えられ、仮想アドレスを形成する。仮想アド
レスは、特定の命令に基づいてメモリロード/記憶アド
レス又は結果の値として用いられる。
分岐命令71は、ビット〈31:26〉における6ビットOPコ
ードと、ビット〈25:21〉における5ビットアドレスフ
ィールドと、ビット〈20:0〉における21ビットの符号分
岐変位とを含んでいる。この変位は、ロングワードオフ
セットとして処理され、これは、左へ2ビットシフトさ
れ(ロングワードの境界をアドレスするために)、64ビ
ットに符号拡張され、PC33の更新された内容に加えられ
て、ターゲット仮想アドレスを形成する(オーバーフロ
ーは無視される)。
ードと、ビット〈25:21〉における5ビットアドレスフ
ィールドと、ビット〈20:0〉における21ビットの符号分
岐変位とを含んでいる。この変位は、ロングワードオフ
セットとして処理され、これは、左へ2ビットシフトさ
れ(ロングワードの境界をアドレスするために)、64ビ
ットに符号拡張され、PC33の更新された内容に加えられ
て、ターゲット仮想アドレスを形成する(オーバーフロ
ーは無視される)。
オペレーション命令は2つの異なるフォーマット72及び
73を有している。フォーマット72は3つのレジスタオペ
ランドを有し、そしてフォーマット73は2つのレジスタ
オペランドとリテラルとを有している。このオペレーシ
ョンフォーマットは、レジスタファイル43に2つのソー
スオペランドと1つの行き先オペランドとを許容する整
数レジスタオペレーションを実行する命令に対して使用
される。ソースオペランドの1つは、リテラル定数であ
る。ビット12は、オペレーション命令が2つのソースレ
ジスタオペレーションに対するものであるか又は1つの
ソースレジスタ及びリテラルに対するものであるかを定
める。ビット〈31:26〉の6ビットOPコードに加えて、
オペレーションフォーマットはビット〈11:5〉に7ビッ
トのファンクションフィールドを有しており、演算及び
論理オペレーションに対して広範囲の選択を行えるよう
になっている。ソースレジスタRaは、いずれの場合に
も、ビット〈25:21〉に指定されそして行き先レジスタR
cはビット〈4:0〉に指定される。ビット12が0の場合に
は、ソースレジスタRbがビット〈20:16〉に定められ、
一方、ビット12が1の場合には、8ビット0拡張のリテ
ラル定数が命令のビット〈20:13〉によって形成され
る。このリテラルは、0から255までの範囲の正の整数
として解読され、64ビットへとゼロ拡張される。
73を有している。フォーマット72は3つのレジスタオペ
ランドを有し、そしてフォーマット73は2つのレジスタ
オペランドとリテラルとを有している。このオペレーシ
ョンフォーマットは、レジスタファイル43に2つのソー
スオペランドと1つの行き先オペランドとを許容する整
数レジスタオペレーションを実行する命令に対して使用
される。ソースオペランドの1つは、リテラル定数であ
る。ビット12は、オペレーション命令が2つのソースレ
ジスタオペレーションに対するものであるか又は1つの
ソースレジスタ及びリテラルに対するものであるかを定
める。ビット〈31:26〉の6ビットOPコードに加えて、
オペレーションフォーマットはビット〈11:5〉に7ビッ
トのファンクションフィールドを有しており、演算及び
論理オペレーションに対して広範囲の選択を行えるよう
になっている。ソースレジスタRaは、いずれの場合に
も、ビット〈25:21〉に指定されそして行き先レジスタR
cはビット〈4:0〉に指定される。ビット12が0の場合に
は、ソースレジスタRbがビット〈20:16〉に定められ、
一方、ビット12が1の場合には、8ビット0拡張のリテ
ラル定数が命令のビット〈20:13〉によって形成され
る。このリテラルは、0から255までの範囲の正の整数
として解読され、64ビットへとゼロ拡張される。
又、図8には、フローティングポイントレジスタからフ
ローティングポイントレジスタへのオペレーションを実
行する命令に対して使用されるフローティングポイント
オペレーション命令フォーマット74も示されている。フ
ローティングポイントオペレーション命令は、前記した
ようにビット〈31:26〉に6ビットのOPコードを含むと
共に、ビット〈15:5〉に11ビットのファンクションフィ
ールドを含んでいる。3つのオペランドフィールドFa、
Fb及びFcがあって、その各々は、命令によって定められ
た整数又はフローティングポイントのオペランドを指定
し、レジスタ13のみはFa、Fb及びFcによって指定される
が、これらのレジスタは整数値又はフローティングポイ
ント値のいずれを含むこともできる。リテラルはサポー
トされない。フローティングポイント変換はフローティ
ングポイントオペレーションフォーマット74のサブセッ
トを使用しており、レジスタ対レジスタの変換オペレー
ションを実行する。Fbオペランドはソースを指定し、そ
してFaオペランドはreg-31(全て0)となるはずであ
る。
ローティングポイントレジスタへのオペレーションを実
行する命令に対して使用されるフローティングポイント
オペレーション命令フォーマット74も示されている。フ
ローティングポイントオペレーション命令は、前記した
ようにビット〈31:26〉に6ビットのOPコードを含むと
共に、ビット〈15:5〉に11ビットのファンクションフィ
ールドを含んでいる。3つのオペランドフィールドFa、
Fb及びFcがあって、その各々は、命令によって定められ
た整数又はフローティングポイントのオペランドを指定
し、レジスタ13のみはFa、Fb及びFcによって指定される
が、これらのレジスタは整数値又はフローティングポイ
ント値のいずれを含むこともできる。リテラルはサポー
トされない。フローティングポイント変換はフローティ
ングポイントオペレーションフォーマット74のサブセッ
トを使用しており、レジスタ対レジスタの変換オペレー
ションを実行する。Fbオペランドはソースを指定し、そ
してFaオペランドはreg-31(全て0)となるはずであ
る。
最後の命令フォーマット75は、拡張プロセッサファンク
ションを指定する特権アーキテクチャーライブラリー
(PAL又はPALcode)命令のためのものである。この命令
では、6ビットのOPコードが前記のようにビット〈31:2
6〉に存在し、そして26ビットのPALcodeファンクション
フィールド〈25:0〉がオペレーションを指定する。PALc
ode命令に対するソース及び行き先オペランドは、個々
の命令の定義において指定された固定のレジスタで供給
される。
ションを指定する特権アーキテクチャーライブラリー
(PAL又はPALcode)命令のためのものである。この命令
では、6ビットのOPコードが前記のようにビット〈31:2
6〉に存在し、そして26ビットのPALcodeファンクション
フィールド〈25:0〉がオペレーションを指定する。PALc
ode命令に対するソース及び行き先オペランドは、個々
の命令の定義において指定された固定のレジスタで供給
される。
図7の命令フォーマットの6ビットOPコードフィールド
〈31:26〉は、26即ち64個の異なった命令しかコード化
することができない。従って、命令セットは64に限定さ
れる。しかしながら、命令フォーマット72、73及び74の
「ファンクション」フィールドは、ビット〈31:26〉に
同じOPコードを有する種々の命令を許す。
〈31:26〉は、26即ち64個の異なった命令しかコード化
することができない。従って、命令セットは64に限定さ
れる。しかしながら、命令フォーマット72、73及び74の
「ファンクション」フィールドは、ビット〈31:26〉に
同じOPコードを有する種々の命令を許す。
本発明の好ましい実施例は、より詳細には、図1のCISC
コンピュータ20のプログラムを図6のRISCコンピュータ
50のプログラムに変換するためのトランスレーターに関
する。このトランスレーターによって向けられねばなら
ない主な問題は、オリジナルのCISCプログラムにおける
全ての命令を常に変換できるものではないことである。
常に変換が可能でない1つの理由は、CISCアーキテクチ
ャーではCISCプログラムを「読み取り−書き込み」メモ
リエリアから実行することができ、従って、プログラム
は実行中にそれ自身を変更することがあるからである。
しかし、RISCアーキテクチャーでは、「リードオンリ」
メモリエリアからプログラムを実行することが要求され
る。「読み取り−書き込み」メモリエリアから実行され
るべきCISCプログラム命令は、CISC命令に変換できない
が、実行時間中にRISCコンピュータで解読することはで
きる。しかし、実行速度にかなり影響が出る。好都合な
ことに、CISCプログラムは実行中にそれ自身を変更する
ことはほとんどない。例えば、「読み取り−書き込み」
メモリエリアにプログラム命令を有する多くのCISCプロ
グラムは実際にはそれ自身を変更しない。
コンピュータ20のプログラムを図6のRISCコンピュータ
50のプログラムに変換するためのトランスレーターに関
する。このトランスレーターによって向けられねばなら
ない主な問題は、オリジナルのCISCプログラムにおける
全ての命令を常に変換できるものではないことである。
常に変換が可能でない1つの理由は、CISCアーキテクチ
ャーではCISCプログラムを「読み取り−書き込み」メモ
リエリアから実行することができ、従って、プログラム
は実行中にそれ自身を変更することがあるからである。
しかし、RISCアーキテクチャーでは、「リードオンリ」
メモリエリアからプログラムを実行することが要求され
る。「読み取り−書き込み」メモリエリアから実行され
るべきCISCプログラム命令は、CISC命令に変換できない
が、実行時間中にRISCコンピュータで解読することはで
きる。しかし、実行速度にかなり影響が出る。好都合な
ことに、CISCプログラムは実行中にそれ自身を変更する
ことはほとんどない。例えば、「読み取り−書き込み」
メモリエリアにプログラム命令を有する多くのCISCプロ
グラムは実際にはそれ自身を変更しない。
全てのCISCプログラムを変換できない更に一般的な理由
は、変換すべき全てのCISC命令を見つけることが困難だ
からである。CISCプログラムを走らせるためには、プロ
グラムのスタートアドレスを知るだけでよい。スタート
アドレスで開始される命令は分かるが、CISCプログラム
は、通常、計算された行き先アドレスを有する「ジャン
プ」や「コール」命令のような少なくとも1つの実行転
送命令を含んでいる。この行き先アドレスは実行時間に
容易に計算されるが、これは、例えば、変換時間におい
ては完全に中間的なものである。というのは、行き先ア
ドレスは、プログラム入力データに基づいて計算される
からである。しかしながら、一般的な場合に、本発明
は、変換時間に計算行き先アドレスのほとんどを求める
技術を提供する。
は、変換すべき全てのCISC命令を見つけることが困難だ
からである。CISCプログラムを走らせるためには、プロ
グラムのスタートアドレスを知るだけでよい。スタート
アドレスで開始される命令は分かるが、CISCプログラム
は、通常、計算された行き先アドレスを有する「ジャン
プ」や「コール」命令のような少なくとも1つの実行転
送命令を含んでいる。この行き先アドレスは実行時間に
容易に計算されるが、これは、例えば、変換時間におい
ては完全に中間的なものである。というのは、行き先ア
ドレスは、プログラム入力データに基づいて計算される
からである。しかしながら、一般的な場合に、本発明
は、変換時間に計算行き先アドレスのほとんどを求める
技術を提供する。
図8には、CISC-RISCトランスレーター80と、それに関
連した入力・出力像及びデータ構造体がブロック図で示
されている。トランスレーター80は、CISC命令を有する
オリジナルプログラム81を受け取り、それに対応して変
換されてRISC命令を有するプログラム82を発生する。変
換されたプログラム82に関連して、トランスレーター80
は、アドレス変換情報96も発生し、これはオリジナルプ
ログラムにおけるCISC命令のアドレスを変換されたプロ
グラムにおけるRISC命令のアドレスに相関させる。
連した入力・出力像及びデータ構造体がブロック図で示
されている。トランスレーター80は、CISC命令を有する
オリジナルプログラム81を受け取り、それに対応して変
換されてRISC命令を有するプログラム82を発生する。変
換されたプログラム82に関連して、トランスレーター80
は、アドレス変換情報96も発生し、これはオリジナルプ
ログラムにおけるCISC命令のアドレスを変換されたプロ
グラムにおけるRISC命令のアドレスに相関させる。
RISCコードジェネレータ83に加えて、トランスレーター
80はプログラムアナライザー84を備えており、これは、
オリジナルプログラム81を分析して命令をデータから分
離すると共に、プログラムの流れをトレースしてRISCコ
ードを最適なものにし、そしてRISC命令アーキテクチャ
ーによって再現できない特性を指定するCISC命令を検出
する。
80はプログラムアナライザー84を備えており、これは、
オリジナルプログラム81を分析して命令をデータから分
離すると共に、プログラムの流れをトレースしてRISCコ
ードを最適なものにし、そしてRISC命令アーキテクチャ
ーによって再現できない特性を指定するCISC命令を検出
する。
プログラムアナライザー84は、補足入力85を参照して、
オリジナルプログラムにおける命令の位置を探索する。
補足入力85は、例えば、多数の像コンポーネントをリン
クすることによりオリジナルプログラム81が形成された
ときに発生されたリンカーマップファイル86を含むこと
ができる。この場合、リンカーマップは、オリジナルプ
ログラムの命令に対する入力ポイントを識別し、その入
力ポイントの名称を与える。これらの名称は、トランス
レーターのメッセージ及び他の出力を読み易くするのに
有用である。
オリジナルプログラムにおける命令の位置を探索する。
補足入力85は、例えば、多数の像コンポーネントをリン
クすることによりオリジナルプログラム81が形成された
ときに発生されたリンカーマップファイル86を含むこと
ができる。この場合、リンカーマップは、オリジナルプ
ログラムの命令に対する入力ポイントを識別し、その入
力ポイントの名称を与える。これらの名称は、トランス
レーターのメッセージ及び他の出力を読み易くするのに
有用である。
補足入力85は、プログラムカウンタ(PC)サンプリング
ヒストグラムファイル87を含み、これは、オリジナルプ
ログラムの頻繁に実行される命令を識別するために発生
されたものである。PCサンプリングヒストグラムファイ
ルを使用できる場合には、プログラムアナライザーはこ
れを使用して、0より大きいサンプリング周波数をもつ
プログラムカウンタアドレスごとに、即ちPCサンプリン
グヒストグラムファイルが発生されたときに実行されて
いた命令に対応するプログラムカウンタアドレスごと
に、CISC命令を変換する試みを確実に行うようにする。
ヒストグラムファイル87を含み、これは、オリジナルプ
ログラムの頻繁に実行される命令を識別するために発生
されたものである。PCサンプリングヒストグラムファイ
ルを使用できる場合には、プログラムアナライザーはこ
れを使用して、0より大きいサンプリング周波数をもつ
プログラムカウンタアドレスごとに、即ちPCサンプリン
グヒストグラムファイルが発生されたときに実行されて
いた命令に対応するプログラムカウンタアドレスごと
に、CISC命令を変換する試みを確実に行うようにする。
又、補足入力85は実行ログファイル88も含み、これは、
以前の変換動作で変換されなかったが以前に変換された
プログラムの実行中にインタープリターによって解読さ
れた命令のオリジナルプログラムにおけるアドレスを含
んでいる。図9及び11について以下で説明するように、
この実行ログファイルは、例えば以前に変換されなかっ
たコードの解読中に発生され、これは、変換されなかっ
たコードへ実行を転送する命令のオリジナルプログラム
におけるオリジナルアドレスと、変換されなかったコー
ドが置かれたオリジナルプログラムにおける行き先アド
レスとを対で含んでいる。トランスレーターは、オリジ
ナルアドレス及び行き先アドレスの対を識別する情報を
使用して、オリジナルプログラムの以前に変換されなか
った命令を変換する。オリジナルアドレスは、オリジナ
ルプログラムの手前の変換中に発見されなかった実行経
路を識別するのに用いられる。以下で述べるように、こ
れらの実行経路の識別により、プログラムアナライザー
84は、以前に変換されたプログラムの実行中又はオリジ
ナルプログラムの変換されなかった部分の解読中に取り
上げられなかった付加的な実行経路を発見することがで
きる。実行から再変換へこのように情報をフィードバッ
クすることは、変換されたプログラムの各実行の後に行
われて、オリジナルプログラムにおける実質上全ての命
令が最終的に探索されて変換されるのが好ましい。
以前の変換動作で変換されなかったが以前に変換された
プログラムの実行中にインタープリターによって解読さ
れた命令のオリジナルプログラムにおけるアドレスを含
んでいる。図9及び11について以下で説明するように、
この実行ログファイルは、例えば以前に変換されなかっ
たコードの解読中に発生され、これは、変換されなかっ
たコードへ実行を転送する命令のオリジナルプログラム
におけるオリジナルアドレスと、変換されなかったコー
ドが置かれたオリジナルプログラムにおける行き先アド
レスとを対で含んでいる。トランスレーターは、オリジ
ナルアドレス及び行き先アドレスの対を識別する情報を
使用して、オリジナルプログラムの以前に変換されなか
った命令を変換する。オリジナルアドレスは、オリジナ
ルプログラムの手前の変換中に発見されなかった実行経
路を識別するのに用いられる。以下で述べるように、こ
れらの実行経路の識別により、プログラムアナライザー
84は、以前に変換されたプログラムの実行中又はオリジ
ナルプログラムの変換されなかった部分の解読中に取り
上げられなかった付加的な実行経路を発見することがで
きる。実行から再変換へこのように情報をフィードバッ
クすることは、変換されたプログラムの各実行の後に行
われて、オリジナルプログラムにおける実質上全ての命
令が最終的に探索されて変換されるのが好ましい。
又、プログラムアナライザー84はオーディット出力89も
発生し、これは、エラー、警報及び情報メッセージ90
と、見い出された命令の領域及び入力ポイントの位置を
識別するオリジナルプログラム81のメモリマップを示す
概要ページ91と、オリジナルプログラム81の変換された
部分のフローチャートを定める流れ図言語ファイル92
と、オリジナルプログラムの出力像情報ファイル93とを
含んでいる。
発生し、これは、エラー、警報及び情報メッセージ90
と、見い出された命令の領域及び入力ポイントの位置を
識別するオリジナルプログラム81のメモリマップを示す
概要ページ91と、オリジナルプログラム81の変換された
部分のフローチャートを定める流れ図言語ファイル92
と、オリジナルプログラムの出力像情報ファイル93とを
含んでいる。
像情報ファイルは、像における予め定められた入力ポイ
ントのインターフェイス特性に関する情報を含んでい
る。トランスレーター80は、オリジナルプログラム81が
最初に変換されるときにそのオリジナルプログラムのた
めの出力像情報ファイル89を発生する。再変換中に、オ
リジナルプログラムの情報入力ファイルは入力ファイル
94として使用することができ、これは、再変換中に、プ
ログラムアナライザー84によって発見された付加的な命
令及び実行転送経路に基づいて更新される。
ントのインターフェイス特性に関する情報を含んでい
る。トランスレーター80は、オリジナルプログラム81が
最初に変換されるときにそのオリジナルプログラムのた
めの出力像情報ファイル89を発生する。再変換中に、オ
リジナルプログラムの情報入力ファイルは入力ファイル
94として使用することができ、これは、再変換中に、プ
ログラムアナライザー84によって発見された付加的な命
令及び実行転送経路に基づいて更新される。
像情報ファイルは、他の像に対するレファレンスを分析
し適当なリンケージを発生するようにプログラムアナラ
イザー84によって使用される。例えば、オリジナルプロ
グラム81がライブラリールーチンを呼び出すときには、
補足入力85がこれらの共有ライブラリールーチンに対す
る像情報ファイル95を含んでいなければならない。好ま
しくは、像情報ファイルは、プログラマーが情報を追加
したり修正したりするように容易に編集できるASCIIフ
ァイルである。図9には、RISCコンピュータ50で変換さ
れたプログラム82を実行するときに使用される像及びデ
ータファイルがブロック図で示されている。変換された
プログラム82及びそれに関連したアドレス変換情報96に
加えて、RISCコンピュータ50は、オリジナルプログラム
81のコピーと、CISC命令を解読するためにRISCコードで
書かれたインタープリター101と、オリジナル及び変換
されたプログラムのためのデータ入力102とを入力とし
て使用する。インタープリター101は、オリジナルプロ
グラム81における変換されない命令を解読するために呼
び出され、オリジナルプログラム81はインタープリター
のデータ入力として働く。アドレス変換情報96は、イン
タープリター101のデータ入力として働き、インタープ
リターは、実行を適当な時間に変換されたプログラムへ
戻すときにこの情報を使用する。RISCコンピュータから
のデータ出力はオリジナル及び変換されたプログラムか
らの出力データ103と、インタープリターからの出力デ
ータである実行ログファイル88とを含む。
し適当なリンケージを発生するようにプログラムアナラ
イザー84によって使用される。例えば、オリジナルプロ
グラム81がライブラリールーチンを呼び出すときには、
補足入力85がこれらの共有ライブラリールーチンに対す
る像情報ファイル95を含んでいなければならない。好ま
しくは、像情報ファイルは、プログラマーが情報を追加
したり修正したりするように容易に編集できるASCIIフ
ァイルである。図9には、RISCコンピュータ50で変換さ
れたプログラム82を実行するときに使用される像及びデ
ータファイルがブロック図で示されている。変換された
プログラム82及びそれに関連したアドレス変換情報96に
加えて、RISCコンピュータ50は、オリジナルプログラム
81のコピーと、CISC命令を解読するためにRISCコードで
書かれたインタープリター101と、オリジナル及び変換
されたプログラムのためのデータ入力102とを入力とし
て使用する。インタープリター101は、オリジナルプロ
グラム81における変換されない命令を解読するために呼
び出され、オリジナルプログラム81はインタープリター
のデータ入力として働く。アドレス変換情報96は、イン
タープリター101のデータ入力として働き、インタープ
リターは、実行を適当な時間に変換されたプログラムへ
戻すときにこの情報を使用する。RISCコンピュータから
のデータ出力はオリジナル及び変換されたプログラムか
らの出力データ103と、インタープリターからの出力デ
ータである実行ログファイル88とを含む。
図10は、CISC命令が実行時間までに変換されないときに
インタープリターへ呼び出しを発生するRISCコードジェ
ネレータ83の動作ステップを示すフローチャートであ
る。上記したように、「読み取り−書き込み」メモリエ
リアのコードは通常は変換されてはならない。というの
は、プログラムが実行中にコードを変更することがある
からである。しかしながら、ユーザは、プログラムが実
行中にコードを変更することはないと信じており、従っ
て、ユーザはコードの解読に関連した著しい性能影響を
回避するために読み取り−書き込みメモリ内のコードを
変換しようとする。それ故、ユーザはソフトウェアオー
バーライドスイッチをセットし、ステップ111におい
て、RISCコードジェネレータ83はこのオーバーライドス
イッチをテストして「読み取り−書き込み」メモリエリ
ア内のCISC命令を変換すべきかどうかを判断する。オー
バーライドスイッチがセットされていない場合には、ス
テップ112において、RISCコードジェネレータ83はそのC
ISC命令が読み取り−書き込みメモリエリアにあるかど
うかをチェックする。そのような場合には、コードジェ
ネレータがステップ113においてメッセージを発生し、C
ISC命令を解読しなければならないことをユーザに警告
し、それ故、性能上の影響が生じる。ステップ114にお
いては、コードジェネレータがRISCコードを発生してイ
ンタープリターを呼び出し、CISC命令アドレスをパラメ
ータとして通す。最後に、ステップ115では、コードジ
ェネレータが「読み取りのみ」のメモリエリアで見い出
された次のCISC命令へ進み、インタープリターへの呼び
出し中に解読されるであろうCISC命令が変換されないよ
うにする。
インタープリターへ呼び出しを発生するRISCコードジェ
ネレータ83の動作ステップを示すフローチャートであ
る。上記したように、「読み取り−書き込み」メモリエ
リアのコードは通常は変換されてはならない。というの
は、プログラムが実行中にコードを変更することがある
からである。しかしながら、ユーザは、プログラムが実
行中にコードを変更することはないと信じており、従っ
て、ユーザはコードの解読に関連した著しい性能影響を
回避するために読み取り−書き込みメモリ内のコードを
変換しようとする。それ故、ユーザはソフトウェアオー
バーライドスイッチをセットし、ステップ111におい
て、RISCコードジェネレータ83はこのオーバーライドス
イッチをテストして「読み取り−書き込み」メモリエリ
ア内のCISC命令を変換すべきかどうかを判断する。オー
バーライドスイッチがセットされていない場合には、ス
テップ112において、RISCコードジェネレータ83はそのC
ISC命令が読み取り−書き込みメモリエリアにあるかど
うかをチェックする。そのような場合には、コードジェ
ネレータがステップ113においてメッセージを発生し、C
ISC命令を解読しなければならないことをユーザに警告
し、それ故、性能上の影響が生じる。ステップ114にお
いては、コードジェネレータがRISCコードを発生してイ
ンタープリターを呼び出し、CISC命令アドレスをパラメ
ータとして通す。最後に、ステップ115では、コードジ
ェネレータが「読み取りのみ」のメモリエリアで見い出
された次のCISC命令へ進み、インタープリターへの呼び
出し中に解読されるであろうCISC命令が変換されないよ
うにする。
RISCコードジェネレータは、オリジナルプログラム内に
見つけることのできないCISC命令のコードを発生するこ
とができない。しかしながら、RISCコードジェネレータ
は、計算行き先アドレスを求めなかったオリジナルプロ
グラムの実行転送命令を認識することができ、従って、
実行時間に変換されていないCISC命令を解読するように
インタープリターを呼び出すRISCコードを発生する。ス
テップ116では、RISCコードジェネレータは、CISC命令
が非分析の計算行き先アドレスを有するかどうかをチェ
ックする。もしそうであれば、ステップ117において、
ユーザは、変換されていないCISC命令を解読するために
インタープリターを呼び出さねばならないことが警告さ
れ、ステップ118において、コードジェネレータは、行
き先アドレスを計算してインタープリターを呼び出すた
めにRISCコードを発生し、CISC実行転送命令のアドレス
と計算行き先アドレスとをパラメータとして通す。
見つけることのできないCISC命令のコードを発生するこ
とができない。しかしながら、RISCコードジェネレータ
は、計算行き先アドレスを求めなかったオリジナルプロ
グラムの実行転送命令を認識することができ、従って、
実行時間に変換されていないCISC命令を解読するように
インタープリターを呼び出すRISCコードを発生する。ス
テップ116では、RISCコードジェネレータは、CISC命令
が非分析の計算行き先アドレスを有するかどうかをチェ
ックする。もしそうであれば、ステップ117において、
ユーザは、変換されていないCISC命令を解読するために
インタープリターを呼び出さねばならないことが警告さ
れ、ステップ118において、コードジェネレータは、行
き先アドレスを計算してインタープリターを呼び出すた
めにRISCコードを発生し、CISC実行転送命令のアドレス
と計算行き先アドレスとをパラメータとして通す。
ステップ119では、コードジェネレータは、非分析の計
算行き先アドレスをもたないCISC命令のためのRISCコー
ドを発生する。これは、CISC命令を、これと同じ効果を
有する1つ以上のRISC命令に変換することにより行われ
る。このコード変換は、プログラム内の実行転送及びレ
ジスタの使用に関するプログラムアナライザー(図8の
84)からの情報を使用することによって効率的に行われ
る。例えば、RISCコンピュータ(図6の50)は、指定の
汎用レジスタにおける復帰アドレスを参照するサブルー
チン呼び出し及び復帰命令を有しており、RISCコンピュ
ータは非常に多数の汎用レジスタを備えている。それ
故、CISCサブルーチン呼び出し及び復帰命令を、レジス
タを使用できる場合にスタックオペレーションをエミュ
ーレートするRISC命令に変換することは効率的でない。
算行き先アドレスをもたないCISC命令のためのRISCコー
ドを発生する。これは、CISC命令を、これと同じ効果を
有する1つ以上のRISC命令に変換することにより行われ
る。このコード変換は、プログラム内の実行転送及びレ
ジスタの使用に関するプログラムアナライザー(図8の
84)からの情報を使用することによって効率的に行われ
る。例えば、RISCコンピュータ(図6の50)は、指定の
汎用レジスタにおける復帰アドレスを参照するサブルー
チン呼び出し及び復帰命令を有しており、RISCコンピュ
ータは非常に多数の汎用レジスタを備えている。それ
故、CISCサブルーチン呼び出し及び復帰命令を、レジス
タを使用できる場合にスタックオペレーションをエミュ
ーレートするRISC命令に変換することは効率的でない。
又、プログラムカウンタを直接ソースオペランドとして
参照するようなCISC命令の変則的なケースもある。RISC
コンピュータの好ましい構造においては、プログラムカ
ウンタをソースオペランドとして直接的に参照すること
はできないが、サブルーチン呼び出し命令によって与え
られた復帰アドレスを減少することによりプログラムカ
ウンタの値を計算することができる。しかしながら、こ
の場合のプログラムカウンタの値は、RISCコードを参照
したRISCコンピュータのプログラムカウンタであり、CI
SCコードを参照したCISCコンピュータのプログラムカウ
ンタではない。CISCプログラムカウンタに対応する一定
に変換する値を汎用レジスタに維持するには著しい量の
オーバーヘッドが必要とされる。それ故、プログラムア
ナライザー(図8の84)は、プログラム内の相対ジャン
プに関して実行転送に対するプログラムカウンタのレフ
ァレンスを分析しようとするが、他の目的でプログラム
カウンタの値を使用するコードを変換しようとはしな
い。
参照するようなCISC命令の変則的なケースもある。RISC
コンピュータの好ましい構造においては、プログラムカ
ウンタをソースオペランドとして直接的に参照すること
はできないが、サブルーチン呼び出し命令によって与え
られた復帰アドレスを減少することによりプログラムカ
ウンタの値を計算することができる。しかしながら、こ
の場合のプログラムカウンタの値は、RISCコードを参照
したRISCコンピュータのプログラムカウンタであり、CI
SCコードを参照したCISCコンピュータのプログラムカウ
ンタではない。CISCプログラムカウンタに対応する一定
に変換する値を汎用レジスタに維持するには著しい量の
オーバーヘッドが必要とされる。それ故、プログラムア
ナライザー(図8の84)は、プログラム内の相対ジャン
プに関して実行転送に対するプログラムカウンタのレフ
ァレンスを分析しようとするが、他の目的でプログラム
カウンタの値を使用するコードを変換しようとはしな
い。
図11には、インタープリターと、変換されたプログラム
の実行との対話とがフローチャートで示されている。ス
テップ131において、変換されたプログラム82の命令
(又は変換されたプログラムによって呼び出されたオペ
レーティングシステムルーチン)は、インタープリター
が呼び出されるまで実行される。図示されたように、イ
ンタープリターは、計算行き先アドレスにおけるCISC命
令を解読するために呼び出されたときには第1の入力ポ
イント132に入り、そしてメモリの「読み取り−書き込
み」エリアにおけるCISC命令を解読するために呼び出さ
れたときには第2の入力ポイント133に入る。
の実行との対話とがフローチャートで示されている。ス
テップ131において、変換されたプログラム82の命令
(又は変換されたプログラムによって呼び出されたオペ
レーティングシステムルーチン)は、インタープリター
が呼び出されるまで実行される。図示されたように、イ
ンタープリターは、計算行き先アドレスにおけるCISC命
令を解読するために呼び出されたときには第1の入力ポ
イント132に入り、そしてメモリの「読み取り−書き込
み」エリアにおけるCISC命令を解読するために呼び出さ
れたときには第2の入力ポイント133に入る。
計算行き先アドレスは、必ずしもオリジナルプログラム
の非変換部分にない。それ故、ステップ134では、計算
アドレスがチェックされ、インタープリターにおいて実
行を継続すべきであるか或いは又は変換されたプログラ
ムの入力ポイント又はその他の場所に実行を戻すべきか
を判断する。
の非変換部分にない。それ故、ステップ134では、計算
アドレスがチェックされ、インタープリターにおいて実
行を継続すべきであるか或いは又は変換されたプログラ
ムの入力ポイント又はその他の場所に実行を戻すべきか
を判断する。
計算行き先アドレスがオリジナルプログラム内にある
が、変換されたプログラムの入力ポイントに対応しない
ときには、その行き先アドレスを有する実行転送命令の
アドレスと共に、その行き先アドレスを実行ログファイ
ル(図8の88)に記録することが所望される。これは、
ステップ135において行われる。再変換の間に、プログ
ラムアナライザー(図8の84)は、計算行き先アドレス
が変換されたCISC命令に対応しない場合には実行ログフ
ァイルの情報を読み取って、変換されないコードを探索
し、或いは計算行き先アドレスが変換されたCISC命令に
対応するが変換されたプログラム内の入力ポイントには
対応しない場合には、変換されたプログラム内の新たな
実行転送経路を識別する。
が、変換されたプログラムの入力ポイントに対応しない
ときには、その行き先アドレスを有する実行転送命令の
アドレスと共に、その行き先アドレスを実行ログファイ
ル(図8の88)に記録することが所望される。これは、
ステップ135において行われる。再変換の間に、プログ
ラムアナライザー(図8の84)は、計算行き先アドレス
が変換されたCISC命令に対応しない場合には実行ログフ
ァイルの情報を読み取って、変換されないコードを探索
し、或いは計算行き先アドレスが変換されたCISC命令に
対応するが変換されたプログラム内の入力ポイントには
対応しない場合には、変換されたプログラム内の新たな
実行転送経路を識別する。
ステップ136においては、インタープリターがオリジナ
ルプログラムのアドレスにおいてCISC命令を解読する。
RISCコンピュータの汎用レジスタはCISCコンピュータの
対応するレジスタの内容を再現するように割り当てられ
る。この1組の割り当てられたレジスタは、CISCコンピ
ュータの状態のモデルを定める。インタープリタープロ
グラムは、CISC命令のOPコードを読み取り、テーブルの
ルックアップを行って、デコードすべき指定子の数と、
そのOPコードに対するプログラムルーチンのアドレスと
を決定する。次いで、インタープリターは、各指定子を
デコードする。リテラル及びレジスタソースオペランド
は、ソースオペランドレジスタとして割り当てられた汎
用レジスタへ転送される。複雑な指定子がデコードさ
れ、そして指定されたオペランドがメモリからフェッチ
されて、ソースオペランドレジスタとして割り当てられ
た汎用レジスタへ転送される。次いで、OPコードに対す
るプログラムルーチンが実行される。最後に、行き先指
定子がデコードされ、その結果が指定の行き先へ転送さ
れる。
ルプログラムのアドレスにおいてCISC命令を解読する。
RISCコンピュータの汎用レジスタはCISCコンピュータの
対応するレジスタの内容を再現するように割り当てられ
る。この1組の割り当てられたレジスタは、CISCコンピ
ュータの状態のモデルを定める。インタープリタープロ
グラムは、CISC命令のOPコードを読み取り、テーブルの
ルックアップを行って、デコードすべき指定子の数と、
そのOPコードに対するプログラムルーチンのアドレスと
を決定する。次いで、インタープリターは、各指定子を
デコードする。リテラル及びレジスタソースオペランド
は、ソースオペランドレジスタとして割り当てられた汎
用レジスタへ転送される。複雑な指定子がデコードさ
れ、そして指定されたオペランドがメモリからフェッチ
されて、ソースオペランドレジスタとして割り当てられ
た汎用レジスタへ転送される。次いで、OPコードに対す
るプログラムルーチンが実行される。最後に、行き先指
定子がデコードされ、その結果が指定の行き先へ転送さ
れる。
ステップ137では、オリジナルプログラムにおける次のC
ISC命令のアドレスが計算される。この計算は、ステッ
プ136で解読された命令に基づく。次のCISC命令は、手
前の命令が実行を転送しない限り、手前のCISC命令に続
くものであり、この場合に、次のCISC命令のアドレスは
手前の命令の行き先アドレスである。
ISC命令のアドレスが計算される。この計算は、ステッ
プ136で解読された命令に基づく。次のCISC命令は、手
前の命令が実行を転送しない限り、手前のCISC命令に続
くものであり、この場合に、次のCISC命令のアドレスは
手前の命令の行き先アドレスである。
ステップ138では、計算されたアドレスがチェックさ
れ、インタープリターにおいて実行を続けるべきか或い
は変換されたプログラムにおける入力ポイント又は他の
場所に実行を戻すべきかを判断する。インタープリター
における実行はステップ136で続けられる。更に、ステ
ップ136は入力ポイント133からの最初のステップであ
る。
れ、インタープリターにおいて実行を続けるべきか或い
は変換されたプログラムにおける入力ポイント又は他の
場所に実行を戻すべきかを判断する。インタープリター
における実行はステップ136で続けられる。更に、ステ
ップ136は入力ポイント133からの最初のステップであ
る。
図12には、図11のステップ134及び138に使用されるアド
レスチェックルーチンがフローチャートで示されてい
る。ステップ141では、計算されたアドレスがオリジナ
ルプログラムの開始及び終了アドレスと比較され、それ
がオリジナルプログラムにあるかどうかの判断がなされ
る。行き先アドレスがオリジナルプログラムにない場合
には、計算された行き先アドレスは、例えば、CISCコン
ピュータ(図1の20)のオペレーティングシステムに対
するオペレーティングシステムルーチンの入力ポイント
となる。RISCコンピュータ(図6の50)のオペレーティ
ングシステムは、対応するルーチンを有していてもよい
し有していなくてもよい。それ故、ステップ142では、
計算された行き先アドレスは、例えば、RISCオペレーテ
ィングシステムに対応入力ポイントを有するCISC行き先
アドレスのテーブルをルックアップすることにより確認
される。この計算行き先アドレスが無効である場合に
は、エラーが報告され、実行がステップ143で終わりと
なる。さもなくば、ステップ144において、計算行き先
アドレスに対応するRISCオペレーティングシステムルー
チンの入力ポイントに転送される。
レスチェックルーチンがフローチャートで示されてい
る。ステップ141では、計算されたアドレスがオリジナ
ルプログラムの開始及び終了アドレスと比較され、それ
がオリジナルプログラムにあるかどうかの判断がなされ
る。行き先アドレスがオリジナルプログラムにない場合
には、計算された行き先アドレスは、例えば、CISCコン
ピュータ(図1の20)のオペレーティングシステムに対
するオペレーティングシステムルーチンの入力ポイント
となる。RISCコンピュータ(図6の50)のオペレーティ
ングシステムは、対応するルーチンを有していてもよい
し有していなくてもよい。それ故、ステップ142では、
計算された行き先アドレスは、例えば、RISCオペレーテ
ィングシステムに対応入力ポイントを有するCISC行き先
アドレスのテーブルをルックアップすることにより確認
される。この計算行き先アドレスが無効である場合に
は、エラーが報告され、実行がステップ143で終わりと
なる。さもなくば、ステップ144において、計算行き先
アドレスに対応するRISCオペレーティングシステムルー
チンの入力ポイントに転送される。
ステップ141で計算行き先アドレスがオリジナルプログ
ラムにあると判断されたときには、その計算行き先アド
レスはオリジナルプログラムにおける変換されたCISC命
令に対応すると考えられる。しかし、この場合でさえ、
CISC命令を解読することが所望される。というのは、CI
SCプログラムはある予め定められた入力ポイントのみを
有していて、トランスレーターが個々の命令ではなくて
CISC命令のブロックを変換して最適なRISCコードを発生
できると仮定することが変換にとって望ましいからであ
る。いずれにせよ、インタープリターは、そこから変換
されたプログラムへ実行を戻し続ける場合には、CISC命
令アドレスと、変換されたプログラムにおける対応する
入力ポイントとの対応を知らねばならない。この対応
は、変換されたプログラムに関連したアドレス変換情報
(図8の96)によって与えられる。このアドレス変換情
報は、CISCアドレスの変換テーブルと、変換されたプロ
グラムにおける対応する入力ポイントとによって与えら
れるのが好ましい。それ故、ステップ145において、イ
ンタープリターは、例えば、変換テーブルをルックアッ
プすることにより、計算行き先アドレスが変換されたプ
ログラムの入力ポイントに対応するかどうかをチェック
する。計算行き先アドレスが変換されたプログラムの入
力ポイントに対応するときには、インタープリターは、
ステップ146においてアドレス変換情報を使用して、計
算されたCISCアドレスをRISC入力ポイントアドレスに変
換する。これは、例えば、変換テーブルから対応するRI
SCポイントアドレスを読み取ることによって行われる。
ステップ147では、実行が変換されたプログラムの入力
ポイントへ復帰する。さもなくば、ステップ148におい
て、実行がインタープリターへ復帰する。
ラムにあると判断されたときには、その計算行き先アド
レスはオリジナルプログラムにおける変換されたCISC命
令に対応すると考えられる。しかし、この場合でさえ、
CISC命令を解読することが所望される。というのは、CI
SCプログラムはある予め定められた入力ポイントのみを
有していて、トランスレーターが個々の命令ではなくて
CISC命令のブロックを変換して最適なRISCコードを発生
できると仮定することが変換にとって望ましいからであ
る。いずれにせよ、インタープリターは、そこから変換
されたプログラムへ実行を戻し続ける場合には、CISC命
令アドレスと、変換されたプログラムにおける対応する
入力ポイントとの対応を知らねばならない。この対応
は、変換されたプログラムに関連したアドレス変換情報
(図8の96)によって与えられる。このアドレス変換情
報は、CISCアドレスの変換テーブルと、変換されたプロ
グラムにおける対応する入力ポイントとによって与えら
れるのが好ましい。それ故、ステップ145において、イ
ンタープリターは、例えば、変換テーブルをルックアッ
プすることにより、計算行き先アドレスが変換されたプ
ログラムの入力ポイントに対応するかどうかをチェック
する。計算行き先アドレスが変換されたプログラムの入
力ポイントに対応するときには、インタープリターは、
ステップ146においてアドレス変換情報を使用して、計
算されたCISCアドレスをRISC入力ポイントアドレスに変
換する。これは、例えば、変換テーブルから対応するRI
SCポイントアドレスを読み取ることによって行われる。
ステップ147では、実行が変換されたプログラムの入力
ポイントへ復帰する。さもなくば、ステップ148におい
て、実行がインタープリターへ復帰する。
図13には、トランスレーター80によって実行されるステ
ップのフローチャートが示されている。第1ステップ16
1では、オリジナルプログラム及び補足入力ファイルが
メモリに読み込まれる。次いで、ステップ162では、ト
ランスレーターがオリジナルプログラムの入力ポイント
をサーチする。これは、図14に示すオリジナルプログラ
ム構成の特定例を参照して以下に詳細に述べる。
ップのフローチャートが示されている。第1ステップ16
1では、オリジナルプログラム及び補足入力ファイルが
メモリに読み込まれる。次いで、ステップ162では、ト
ランスレーターがオリジナルプログラムの入力ポイント
をサーチする。これは、図14に示すオリジナルプログラ
ム構成の特定例を参照して以下に詳細に述べる。
ステップ163では、トランスレーターは、入力ポイント
からの実行の流れをたどり、オリジナルプログラムにお
ける命令を探索すると共に、プログラムの流れ図を発生
する。この流れ図は、命令の「基本ブロック」と、これ
ら基本ブロックを相互に接続する実行経路とを識別す
る。各基本ブロックは、その基本ブロックの開始部に単
一の既知の入力ポイントを有する一連の連続する命令で
ある。実行は、基本ブロックの開始部のみへ転送され、
そして基本ブロックの終了部のみから転送される。流れ
図の発生につては、図18及び19を参照して以下に詳細に
述べる。
からの実行の流れをたどり、オリジナルプログラムにお
ける命令を探索すると共に、プログラムの流れ図を発生
する。この流れ図は、命令の「基本ブロック」と、これ
ら基本ブロックを相互に接続する実行経路とを識別す
る。各基本ブロックは、その基本ブロックの開始部に単
一の既知の入力ポイントを有する一連の連続する命令で
ある。実行は、基本ブロックの開始部のみへ転送され、
そして基本ブロックの終了部のみから転送される。流れ
図の発生につては、図18及び19を参照して以下に詳細に
述べる。
ステップ164では、トランスレーターは、オリジナルプ
ログラムをプラウシブルコードについてスキャンする。
このスキャンの結果は、オリジナルプログラムにおける
プラウシブル命令の数を定量化し、トランスレーターに
よって探索された命令の数と比較するのに有用である。
この比較の結果は、例えば、「見つけたコードの割合」
を推定するもので、これは、既知のコードのバイトの10
0倍を、既知のコードのバイトとプラウシブルコードの
バイトとの和で除算したものとして計算される。この推
定値は、システムの分析者がオリジナルプログラムに対
する移行戦略を選択したり、又はトランスレーターの性
能を監視又は増大するのに使用できる。トランスレータ
ーが命令の大部分を変換できない場合には、システム分
析者は、変換されたプログラムに基づいて多数のテスト
ケースを実行しそして実行から再変換への情報のフィー
ドバックを用いて、変換されていないコードの指示され
た推定値を減少した後に、変換されたプログラムを一般
使用に解放する。結局、システム分析者は、オリジナル
プログラマーによってドキュメンテーションをサーチす
るか、又はプラウシブル命令を含むものとして指示され
たアドレス位置においてコードを検査し、その推定値を
確認すると共に、変換されたプログラムを一般使用とし
て解放するか或いはトランスレーターに指示を発して変
換されていない命令を含むと考えられるプラウシブルコ
ードを変換させるかの判断を行うように試みる。プラウ
シブルコードをスキャンする好ましい方法は図29を参照
して以下に説明する。
ログラムをプラウシブルコードについてスキャンする。
このスキャンの結果は、オリジナルプログラムにおける
プラウシブル命令の数を定量化し、トランスレーターに
よって探索された命令の数と比較するのに有用である。
この比較の結果は、例えば、「見つけたコードの割合」
を推定するもので、これは、既知のコードのバイトの10
0倍を、既知のコードのバイトとプラウシブルコードの
バイトとの和で除算したものとして計算される。この推
定値は、システムの分析者がオリジナルプログラムに対
する移行戦略を選択したり、又はトランスレーターの性
能を監視又は増大するのに使用できる。トランスレータ
ーが命令の大部分を変換できない場合には、システム分
析者は、変換されたプログラムに基づいて多数のテスト
ケースを実行しそして実行から再変換への情報のフィー
ドバックを用いて、変換されていないコードの指示され
た推定値を減少した後に、変換されたプログラムを一般
使用に解放する。結局、システム分析者は、オリジナル
プログラマーによってドキュメンテーションをサーチす
るか、又はプラウシブル命令を含むものとして指示され
たアドレス位置においてコードを検査し、その推定値を
確認すると共に、変換されたプログラムを一般使用とし
て解放するか或いはトランスレーターに指示を発して変
換されていない命令を含むと考えられるプラウシブルコ
ードを変換させるかの判断を行うように試みる。プラウ
シブルコードをスキャンする好ましい方法は図29を参照
して以下に説明する。
ステップ165では、流れ図を分析し、典型的なプログラ
ミングの習慣及び標準的な規定からのずれによって指示
されるエラーが見つけられる。典型的なプログラムにお
いては、例えば、データ項目をスタックにプッシュし、
いかに多数の他のデータ項目がプッシュされるかに関わ
りなく後でポップオフできるようにすると共に、介在命
令によってスタックからポップオフできるようにする。
プッシュの回数が介在命令におけるポップの回数を打ち
消さない場合には、介在するプッシュ及びポップ命令の
プログラミングが不適当であることによりエラーが生じ
る。介在命令が介在ノードで分岐したり再接合したりす
る個々の経路を含みそしてそれらの経路の1つにおいて
不適切なプログラミングが生じた場合には、その不適切
なプログラミングにより、2つの経路が中間ノードにお
いて接合するときに計算されたスタック深さがその2つ
の経路で異なることになる。これは、ノードがRSBサブ
ルーチン復帰命令である場合に特にエラーを生じ易い。
それ故、流れ図の助けで行われるエラーチェックの1つ
は、オリジナルプログラムのメイン入力ポイントからの
全ての経路においてスタックの深さを計算し、そしてこ
れら経路が再接合するときにその計算されたスタック深
さが同じであるかどうかをチェックすることである。も
しそうでなければ、トランスレーターは、「全ての入力
経路上でVA=%Xにおいてスタックの深さが一致しな
い」ことを示す警報メッセージを発生する。ここで、VA
はオリジナルプログラムにおけるノードの仮想アドレス
である。
ミングの習慣及び標準的な規定からのずれによって指示
されるエラーが見つけられる。典型的なプログラムにお
いては、例えば、データ項目をスタックにプッシュし、
いかに多数の他のデータ項目がプッシュされるかに関わ
りなく後でポップオフできるようにすると共に、介在命
令によってスタックからポップオフできるようにする。
プッシュの回数が介在命令におけるポップの回数を打ち
消さない場合には、介在するプッシュ及びポップ命令の
プログラミングが不適当であることによりエラーが生じ
る。介在命令が介在ノードで分岐したり再接合したりす
る個々の経路を含みそしてそれらの経路の1つにおいて
不適切なプログラミングが生じた場合には、その不適切
なプログラミングにより、2つの経路が中間ノードにお
いて接合するときに計算されたスタック深さがその2つ
の経路で異なることになる。これは、ノードがRSBサブ
ルーチン復帰命令である場合に特にエラーを生じ易い。
それ故、流れ図の助けで行われるエラーチェックの1つ
は、オリジナルプログラムのメイン入力ポイントからの
全ての経路においてスタックの深さを計算し、そしてこ
れら経路が再接合するときにその計算されたスタック深
さが同じであるかどうかをチェックすることである。も
しそうでなければ、トランスレーターは、「全ての入力
経路上でVA=%Xにおいてスタックの深さが一致しな
い」ことを示す警報メッセージを発生する。ここで、VA
はオリジナルプログラムにおけるノードの仮想アドレス
である。
又、流れ図は、CISC命令アーキテクチャーの典型的なプ
ログラミング規定に合致することについても分析され
る。例えば、VAX(登録商標)アーキテクチャーの場合
に、「復帰マスク」は、復帰中にどのレジスタにロード
するかを指示するために手順呼び出し(CALLS及びCALLG
命令)に関連して使用される。復帰マスクが復帰命令に
対し経路に基づいて異なる場合には、おそらくプログラ
ミングエラーが生じている。トランスレーターは、「復
帰マスクが全ての入力経路VA=%X上で合致しない」と
いう警報を発する。更に、異なった復帰マスクで実行さ
れてもよいRET命令が見つかった場合には、その命令を
インタープリターへの呼び出しとして変換し、インター
プリターは復帰マスクを検査して、復帰中にロードすべ
き特定のレジスタを決定しなければならない。
ログラミング規定に合致することについても分析され
る。例えば、VAX(登録商標)アーキテクチャーの場合
に、「復帰マスク」は、復帰中にどのレジスタにロード
するかを指示するために手順呼び出し(CALLS及びCALLG
命令)に関連して使用される。復帰マスクが復帰命令に
対し経路に基づいて異なる場合には、おそらくプログラ
ミングエラーが生じている。トランスレーターは、「復
帰マスクが全ての入力経路VA=%X上で合致しない」と
いう警報を発する。更に、異なった復帰マスクで実行さ
れてもよいRET命令が見つかった場合には、その命令を
インタープリターへの呼び出しとして変換し、インター
プリターは復帰マスクを検査して、復帰中にロードすべ
き特定のレジスタを決定しなければならない。
手順呼び出しに関連したもう1つの呼び出し規定は、レ
ジスタ及び条件コードビットを、それらが手順に使用さ
れる前に手順によってセットすることであり、呼び出し
ルーチンによってセットされるレジスタの値又は条件コ
ードを用いるのではない。この呼び出し規定からのずれ
が見つかった場合に、トランスレーターは、「呼び出し
入力VA=%Xにおける初期化されないあり得べき変数:
%s」という警報を発する。このメッセージの「%s」
は、見つかったあり得べき非初期化変数のリストを意味
する。VAX命令アーキテクチャーのコード規定からの他
の相違には、ロングワード境界上でのスタックの整列ず
れ(RISCコードに対し著しい性能上の影響をもたらす)
と、RET命令を用いてJSBから復帰することと、RSB命令
を用いてCALLS又はCALLGから復帰することが含むまれ
る。トランスレーターは、これらの相違に対する流れ図
を分析して、特定の相違及びそれに対応するアドレスを
識別する警報メッセージを発生する。
ジスタ及び条件コードビットを、それらが手順に使用さ
れる前に手順によってセットすることであり、呼び出し
ルーチンによってセットされるレジスタの値又は条件コ
ードを用いるのではない。この呼び出し規定からのずれ
が見つかった場合に、トランスレーターは、「呼び出し
入力VA=%Xにおける初期化されないあり得べき変数:
%s」という警報を発する。このメッセージの「%s」
は、見つかったあり得べき非初期化変数のリストを意味
する。VAX命令アーキテクチャーのコード規定からの他
の相違には、ロングワード境界上でのスタックの整列ず
れ(RISCコードに対し著しい性能上の影響をもたらす)
と、RET命令を用いてJSBから復帰することと、RSB命令
を用いてCALLS又はCALLGから復帰することが含むまれ
る。トランスレーターは、これらの相違に対する流れ図
を分析して、特定の相違及びそれに対応するアドレスを
識別する警報メッセージを発生する。
流れ図を通しての必要なサーチの量を減少するために、
あり得るエラーに対する流れ図の分析では、各基本ブロ
ックに使用されるリソースの伝播も実行する。各基本ブ
ロックは、スタック、汎用レジスタ及び条件コードとい
った種々のリソースを使用している。サブルーチンの特
性を推定するため、これらリソースの使用がそれらの呼
び出しルーチンへ伝播して戻される。この情報を用い
て、CALLS又はCALLG命令により呼び出されたサブルーチ
ンに使用されたレジスタをセットするためのサーチが終
了されると共に、この情報を後でRISCマシンコード発生
中に(ステップ168)使用して、決して使用されること
のない条件コード又はレジスタ値の不必要な発生が回避
される。更に、基本ブロックのリソースを比較すること
により一貫性のチェックを実行することができる。例え
ば、基本ブロックが2つ以上の基本ブロックを手前に有
していてこれら先行基本ブロックの復帰マスクが異なる
ときには「復帰マスク」警報が発生され、そして基本ブ
ロックが2つ以上の基本ブロックを手前に有していてそ
のスタック深さ変更が異なる場合には「スタック深さ」
警報が発せられる。全ての基本ブロックに対する最終的
なスキャンを用いて、ロングワード境界上でのスタック
の整列し損ない(即ち、4バイトで分割できない基本ブ
ロックのスタック変更)と、RET命令を用いてJSBから復
帰することと、RSB命令を用いてCALLS又はCALLGから復
帰することとが明らかにされる。
あり得るエラーに対する流れ図の分析では、各基本ブロ
ックに使用されるリソースの伝播も実行する。各基本ブ
ロックは、スタック、汎用レジスタ及び条件コードとい
った種々のリソースを使用している。サブルーチンの特
性を推定するため、これらリソースの使用がそれらの呼
び出しルーチンへ伝播して戻される。この情報を用い
て、CALLS又はCALLG命令により呼び出されたサブルーチ
ンに使用されたレジスタをセットするためのサーチが終
了されると共に、この情報を後でRISCマシンコード発生
中に(ステップ168)使用して、決して使用されること
のない条件コード又はレジスタ値の不必要な発生が回避
される。更に、基本ブロックのリソースを比較すること
により一貫性のチェックを実行することができる。例え
ば、基本ブロックが2つ以上の基本ブロックを手前に有
していてこれら先行基本ブロックの復帰マスクが異なる
ときには「復帰マスク」警報が発生され、そして基本ブ
ロックが2つ以上の基本ブロックを手前に有していてそ
のスタック深さ変更が異なる場合には「スタック深さ」
警報が発せられる。全ての基本ブロックに対する最終的
なスキャンを用いて、ロングワード境界上でのスタック
の整列し損ない(即ち、4バイトで分割できない基本ブ
ロックのスタック変更)と、RET命令を用いてJSBから復
帰することと、RSB命令を用いてCALLS又はCALLGから復
帰することとが明らかにされる。
ステップ166では、各基本ブロックに使用されたリソー
スについての情報を使用して、オリジナルプログラムに
対する像情報ファイルが形成される。この像情報ファイ
ルは、例えば、記述される像の名称及びそのバージョン
を識別する像ヘッダと、それに続く一連の像特性記録
(ライン当たりに1つ)であってその各々がその像にお
けるオフセットに対する特定の特性を付随しているよう
な記録とで構成される。各特性記録は、像オフセット及
びそれに続く特性名と、それに続くオプションであるア
トリビュート値についてのコンマで境界を定めたリスト
とで構成される。これらのアトリビュート値は、特定の
特性にとって独特のものである。像オフセットは、その
特性を適用する像におけるオフセットを表すものであ
る。これは、記号(他の像情報ファイル記録によって定
めることのできる)±の16進オフセット値で構成され
る。記号名又はオフセット値のいずれを省略してもよい
(両方ではない)。
スについての情報を使用して、オリジナルプログラムに
対する像情報ファイルが形成される。この像情報ファイ
ルは、例えば、記述される像の名称及びそのバージョン
を識別する像ヘッダと、それに続く一連の像特性記録
(ライン当たりに1つ)であってその各々がその像にお
けるオフセットに対する特定の特性を付随しているよう
な記録とで構成される。各特性記録は、像オフセット及
びそれに続く特性名と、それに続くオプションであるア
トリビュート値についてのコンマで境界を定めたリスト
とで構成される。これらのアトリビュート値は、特定の
特性にとって独特のものである。像オフセットは、その
特性を適用する像におけるオフセットを表すものであ
る。これは、記号(他の像情報ファイル記録によって定
めることのできる)±の16進オフセット値で構成され
る。記号名又はオフセット値のいずれを省略してもよい
(両方ではない)。
これらの特性及びそれらの定められたアトリビュート
は、好ましくは、次のものを含む。
は、好ましくは、次のものを含む。
像情報ファイルのシンタックスの情報表示は、以下に示
す通りである。
す通りである。
〈WHITESPACE〉 :==タブ及びスペースの非ゼロシーケンス 〈COMMA〉 :==[〈WHITESPACE〉]′,′[〈WHITESPACE〉] 〈NL〉 :==ニューライン 〈comment line〉 :==′;′いずれかのテキスト〈NL〉 〈IIF file〉 :==〈IMAGE_ID〉〈IMAGE_PROPERTIES〉 〈IMAGE_ID〉 :==〈WHITESPACE〉′image′〈IMAGE_NAME〉 〈COMMA〉 〈VERSION〉〈NL〉 〈IMAGE_PROPERTIES〉 :== 〈IMAGE_OFFSET〉〈PROPERTY〉 [〈ATTRIBUTE〉, ...]〈NL〉 〈IMAGE_OFFSET〉 :==[〈SYMBOL〉](′+′|′−′)[〈OFFSET〉] 〈IMAGE_OFFSET〉 :==[〈SYMBOL〉](′+′|′−′)[〈OFFSET〉] コメント記録(′;′で始まるライン)はファイル内の
どこで生じてもよく、トランスレーターによって無視さ
れる。
どこで生じてもよく、トランスレーターによって無視さ
れる。
像情報ファイルの一例を、“VAXCRTL"と称する像につい
て以下に示す。
て以下に示す。
;comments image VAXCRTL,“V05-001" +000000 jsbentry“C$MAIN" +000000は“AP FP SP RSB"を使用 +000000は“R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 AP S
P N Z V C"をセット この像情報ファイルは、“VAXCRTL"について以下の情報
をトランスレーターに与える。
P N Z V C"をセット この像情報ファイルは、“VAXCRTL"について以下の情報
をトランスレーターに与える。
VAXCRTL+0(即ち像の開始からゼロのオフセットにあ
る像の第1メモリ位置)は、“C$MAIN"という名称のJ
SB入力としてマークされる。この情報から、トランスレ
ーターはJSBが適切であることを確認し、VAXCRTL:C$MA
INという名称を流れ図に挿入することができる。又、VA
XCRTL+0は、VAX(登録商標)レジスタAP、FP及びSP
と、VAX命令RSBとを用いてマークされる。この最後の情
報部分から、トランスレーターは、呼び出し像における
呼び出し命令の直後に復帰ポイントにおいてVAX命令の
説明を正当に続けることができる。
る像の第1メモリ位置)は、“C$MAIN"という名称のJ
SB入力としてマークされる。この情報から、トランスレ
ーターはJSBが適切であることを確認し、VAXCRTL:C$MA
INという名称を流れ図に挿入することができる。又、VA
XCRTL+0は、VAX(登録商標)レジスタAP、FP及びSP
と、VAX命令RSBとを用いてマークされる。この最後の情
報部分から、トランスレーターは、呼び出し像における
呼び出し命令の直後に復帰ポイントにおいてVAX命令の
説明を正当に続けることができる。
又、VAXCRTL+0は、VAX(登録商標)レジスタR0...R1
0、AP及びSPと、VAX条件コードビットNZVCとをセットす
るものとしてもマークされる。この情報から、トランス
レーターは、例えば、呼び出し命令後のR0のテストがC
$MAINによりR0に残されている値を参照するのであっ
て、呼び出し像自体によってR0に入れられた手前の値を
参照するのではないことを推定することができる。
0、AP及びSPと、VAX条件コードビットNZVCとをセットす
るものとしてもマークされる。この情報から、トランス
レーターは、例えば、呼び出し命令後のR0のテストがC
$MAINによりR0に残されている値を参照するのであっ
て、呼び出し像自体によってR0に入れられた手前の値を
参照するのではないことを推定することができる。
次の例は、多数の入力ポイントを有するライブラリーフ
ァイルLIBRTLに対する像情報ファイルを示している。
ァイルLIBRTLに対する像情報ファイルを示している。
;comments image LIBRTL,V05-000 +000000 jsbentry LIB$AB_ASC_EBC +000000 jsbentry LIB$AB_EBC_ASC +000200 jsbentry LIB$AB_UPCASE +000300 callentry LIB$ANALYZE_SDES +000400 callentry LIB$SIGNAL +0004F8 callentry LIB$STOP LIB$STOP no_standard_return +000500 callentry LIB$SIG_TO_RET +000508 callentry LIB$SKPC 図13のステップ167では、変換されたプログラムに対し
て流れ図の言語ファイルが形成される。この流れ図の言
語ファイルは、変換されたプログラムの流れ図を描くた
めにレーザープリンターへコマンドを発生する流れ図プ
ログラムの入力として使用することができる。又、流れ
図のプログラムは、例えば、プリントされる流れ図のサ
イズを制御するオプションのスケールパラメータと、接
続される他のブロックと共にページにプリントされるべ
き特定コードブロックのアドレスを指定するオプション
の「コードブロック」パラメータも受け取ることができ
る。流れ図は、異なった種類又は形状のブロックと、こ
れらブロックを相互接続する弧と、各ブロックにアッセ
ンブラー表示でプリントされた命令とで構成される。ト
ランスレーターによって見い出された命令の各基本ブロ
ックは、フローチャートに対応するブロックを有してい
る。
て流れ図の言語ファイルが形成される。この流れ図の言
語ファイルは、変換されたプログラムの流れ図を描くた
めにレーザープリンターへコマンドを発生する流れ図プ
ログラムの入力として使用することができる。又、流れ
図のプログラムは、例えば、プリントされる流れ図のサ
イズを制御するオプションのスケールパラメータと、接
続される他のブロックと共にページにプリントされるべ
き特定コードブロックのアドレスを指定するオプション
の「コードブロック」パラメータも受け取ることができ
る。流れ図は、異なった種類又は形状のブロックと、こ
れらブロックを相互接続する弧と、各ブロックにアッセ
ンブラー表示でプリントされた命令とで構成される。ト
ランスレーターによって見い出された命令の各基本ブロ
ックは、フローチャートに対応するブロックを有してい
る。
流れ図言語ファイルは、流れ図におけるブロックの種類
の定義と、ブロック間の相互接続と、各ブロックへ進む
命令(ASCIIのアッセンブラー表示で)とを含んでい
る。流れ図言語ファイルは、トランスレーターによって
見い出された命令の各基本ブロックを定めるデータブロ
ック又は記録を含む内部2進データ構造体から形成され
る。各データブロック又は記録は、命令の基本ブロック
のスタートアドレス(オリジナルプログラムにおける)
と、基本ブロックの長さ(バイト)と、ブロックの種類
と、ブロックが特定のサーチに含まれているかどうかを
指示するのに用いる「エポック番号」とアトリビュート
と、「後続」データブロックのアドレスのリストと、
「先行」データブロックのアドレスのリストとを含んで
いる。データブロックはダイナミックに形成することが
でき、そしてその後続及び先行ブロックにデータブロッ
クのレファレンスを挿入したり削除したりすることによ
りデータ構造体に容易に挿入したり除去したりすること
ができ、データ構造体は、その後続又は先行ブロックに
対する次々のレファレンスにより前方又は後方に容易に
サーチ又はスキャンされる。
の定義と、ブロック間の相互接続と、各ブロックへ進む
命令(ASCIIのアッセンブラー表示で)とを含んでい
る。流れ図言語ファイルは、トランスレーターによって
見い出された命令の各基本ブロックを定めるデータブロ
ック又は記録を含む内部2進データ構造体から形成され
る。各データブロック又は記録は、命令の基本ブロック
のスタートアドレス(オリジナルプログラムにおける)
と、基本ブロックの長さ(バイト)と、ブロックの種類
と、ブロックが特定のサーチに含まれているかどうかを
指示するのに用いる「エポック番号」とアトリビュート
と、「後続」データブロックのアドレスのリストと、
「先行」データブロックのアドレスのリストとを含んで
いる。データブロックはダイナミックに形成することが
でき、そしてその後続及び先行ブロックにデータブロッ
クのレファレンスを挿入したり削除したりすることによ
りデータ構造体に容易に挿入したり除去したりすること
ができ、データ構造体は、その後続又は先行ブロックに
対する次々のレファレンスにより前方又は後方に容易に
サーチ又はスキャンされる。
流れ図に使用されるブロックには5種類があり、各種類
のブロックは別々の形状を有している。ブロックの種類
は、CALLx入力と、JSB入力と、「ノーマル」ブロック
と、CALLxプレースホルダーと、JSBプレースホルダーと
を備えている。「CALLx」は、VAX命令アーキテクチャー
においてCALLS又はCALLG命令によって行われる手順呼び
出しを参照する。
のブロックは別々の形状を有している。ブロックの種類
は、CALLx入力と、JSB入力と、「ノーマル」ブロック
と、CALLxプレースホルダーと、JSBプレースホルダーと
を備えている。「CALLx」は、VAX命令アーキテクチャー
においてCALLS又はCALLG命令によって行われる手順呼び
出しを参照する。
プリントされた流れ図において、CALLx入力ブロックは
六角形であり、ブロックの名称と、もし分かれれば手順
の名称と、呼び出しマスク(16進)とを含んでいる。ブ
ロックの名称は、16進でのブロックの第1バイトのアド
レス(オリジナルプログラムにおける)と、それに続く
「_CALL」とで構成される。CALLx入力ブロックにはCALL
S又はCALLG命令を介して到達する。VAX命令アーキテク
チャーにおいては、オリジナルプログラムのメイン入力
ポイントがCALLx入力ブロックであり、このメイン入力
ポイントはプログラムを走らせるためにオペレーティン
グシステムによって呼び出される。
六角形であり、ブロックの名称と、もし分かれれば手順
の名称と、呼び出しマスク(16進)とを含んでいる。ブ
ロックの名称は、16進でのブロックの第1バイトのアド
レス(オリジナルプログラムにおける)と、それに続く
「_CALL」とで構成される。CALLx入力ブロックにはCALL
S又はCALLG命令を介して到達する。VAX命令アーキテク
チャーにおいては、オリジナルプログラムのメイン入力
ポイントがCALLx入力ブロックであり、このメイン入力
ポイントはプログラムを走らせるためにオペレーティン
グシステムによって呼び出される。
プリントされた流れ図において、JSB入力ブロックは楕
円であり、ブロックの名称と、もし分かればサブルーチ
ンの名称とを含んでいる。ブロックの名称は16進でのブ
ロックの第1バイトのアドレス(オリジナルプログラム
における)と、それに続く「_JSB」とで構成される。JS
B入力ポイントにはJSB、BSBB又はBSBW命令を介して到達
する。JSB入力は典型的にマクロコードに使用されるも
のである。
円であり、ブロックの名称と、もし分かればサブルーチ
ンの名称とを含んでいる。ブロックの名称は16進でのブ
ロックの第1バイトのアドレス(オリジナルプログラム
における)と、それに続く「_JSB」とで構成される。JS
B入力ポイントにはJSB、BSBB又はBSBW命令を介して到達
する。JSB入力は典型的にマクロコードに使用されるも
のである。
プリントされた流れ図において、ノーマルブロックは長
方形であり、ブロックの名称と、ブロック内の全ての命
令とを含んでいる。ブロックの名称は16進でのブロック
の第1バイトのアドレス(オリジナルプログラムにおけ
る)である。ノーマルブロックには、ノーマルな実行の
流れを介して到達するか、又は分岐、ケース、ジャンプ
又は復帰命令からの実行転送を介して到達する。
方形であり、ブロックの名称と、ブロック内の全ての命
令とを含んでいる。ブロックの名称は16進でのブロック
の第1バイトのアドレス(オリジナルプログラムにおけ
る)である。ノーマルブロックには、ノーマルな実行の
流れを介して到達するか、又は分岐、ケース、ジャンプ
又は復帰命令からの実行転送を介して到達する。
プリントされた流れ図において、CALLxプレースホルダ
ーブロックは、破線の六角形であり、ブロックの名称
と、もし分かれば呼び出された手順の名称とを含んでい
る。ブロックの名称は、16進での呼び出された手順の第
1バイトのアドレス(オリジナルプログラムにおける)
(もし分かれば変換時間における、さもなくばゼロ)
と、これに続く“_"と、呼び出された手順に対するプレ
ースホルダーの“呼び出し番号”とで構成される。CALL
xプレースホルダーブロックは、手順に入ったり出たり
する流れと、その手順の名呼び出しに対して記録された
副次的な作用とを表す。5つの異なる場所から手順が呼
び出された場合には、これらの呼び出しに対し5つの異
なる呼び出し番号をもつ5つの異なるプレースホルダー
ブロックがある(その手順に対するCALLx入力ブロック
に加えて)。
ーブロックは、破線の六角形であり、ブロックの名称
と、もし分かれば呼び出された手順の名称とを含んでい
る。ブロックの名称は、16進での呼び出された手順の第
1バイトのアドレス(オリジナルプログラムにおける)
(もし分かれば変換時間における、さもなくばゼロ)
と、これに続く“_"と、呼び出された手順に対するプレ
ースホルダーの“呼び出し番号”とで構成される。CALL
xプレースホルダーブロックは、手順に入ったり出たり
する流れと、その手順の名呼び出しに対して記録された
副次的な作用とを表す。5つの異なる場所から手順が呼
び出された場合には、これらの呼び出しに対し5つの異
なる呼び出し番号をもつ5つの異なるプレースホルダー
ブロックがある(その手順に対するCALLx入力ブロック
に加えて)。
プリントされた流れ図において、JSBプレースホルダー
ブロックは、破線の楕円であり、ブロックの名称と、も
し分かればサブルーチンの名称とを含む。ブロックの名
称は、16進でのサブルーチンの第1バイトのアドレス
(オリジナルプログラムにおける)(もし分かれば変換
時間における、さもなくばゼロ)と、それに続く“_"
と、呼び出されたサブルーチンに対するプレースホルダ
ーの独特の“呼び出し番号”とで構成される。JSBプレ
ースホルダーブロックは、サブルーチンに入ったり出た
りする流れと、そのサブルーチンの各呼び出しに対して
記録された副次的な作用とを表す。
ブロックは、破線の楕円であり、ブロックの名称と、も
し分かればサブルーチンの名称とを含む。ブロックの名
称は、16進でのサブルーチンの第1バイトのアドレス
(オリジナルプログラムにおける)(もし分かれば変換
時間における、さもなくばゼロ)と、それに続く“_"
と、呼び出されたサブルーチンに対するプレースホルダ
ーの独特の“呼び出し番号”とで構成される。JSBプレ
ースホルダーブロックは、サブルーチンに入ったり出た
りする流れと、そのサブルーチンの各呼び出しに対して
記録された副次的な作用とを表す。
流れ図言語の好ましい形態においては、3つの基本的な
オペレータ、即ちグラフ(G)と、ブロック(B)と、
弧(A)とがある。流れ図言語ファイルの各ラインは、
次のオペレータのうちの1つでスタートする。即ち、ラ
インにコメントが含まれることを指示するセミコロン
と、ブロックオペレータを有する手前のラインにより定
められたブロックにラインのアルファニューメリックデ
ータが含まれることを指示するブランクと、H及びこれ
に続くブロック名であって、その名前の付いたブロック
が強調されるべきであることを示すものと、C及びこれ
に続く2つのブロックの名称であって、その2つのブロ
ックを巾の拾い破線に接続して例えばエラーを含む経路
を強調すべきであることを指示するものとである。
オペレータ、即ちグラフ(G)と、ブロック(B)と、
弧(A)とがある。流れ図言語ファイルの各ラインは、
次のオペレータのうちの1つでスタートする。即ち、ラ
インにコメントが含まれることを指示するセミコロン
と、ブロックオペレータを有する手前のラインにより定
められたブロックにラインのアルファニューメリックデ
ータが含まれることを指示するブランクと、H及びこれ
に続くブロック名であって、その名前の付いたブロック
が強調されるべきであることを示すものと、C及びこれ
に続く2つのブロックの名称であって、その2つのブロ
ックを巾の拾い破線に接続して例えばエラーを含む経路
を強調すべきであることを指示するものとである。
オペレータGで始まるラインは新たなグラフの境界を定
め、そのグラフのヘッダとしてプリントされるアルファ
ニューメリックテキストを含んでいる。
め、そのグラフのヘッダとしてプリントされるアルファ
ニューメリックテキストを含んでいる。
又、オペレータBで始まるラインは、コードのブロック
に対する名称(16進アドレスのような)を含む(D=CA
LLxプレースホルダー、E=JSBプレースホルダー)。オ
ペレータBの直後にオプションの倍率数字が続く。
に対する名称(16進アドレスのような)を含む(D=CA
LLxプレースホルダー、E=JSBプレースホルダー)。オ
ペレータBの直後にオプションの倍率数字が続く。
オペレータAで始まるラインは、第1の名称のブロック
から第2の名称のブロックへ向けられた弧を指定し、2
つのブロック名称の後に、レターコードがその弧のスタ
イル(例えば、A=実線で描かれた通常の分岐、B=破
線で描かれた真の分岐)を指示する。
から第2の名称のブロックへ向けられた弧を指定し、2
つのブロック名称の後に、レターコードがその弧のスタ
イル(例えば、A=実線で描かれた通常の分岐、B=破
線で描かれた真の分岐)を指示する。
図15の流れ図をプリントするための流れ図言語ファイル
を一例として以下に示す。
を一例として以下に示す。
図13のステップ168では、トランスレーターは、オリジ
ナルプログラムから命令の基本ブロックを受け取り、そ
れに対応するRISCマシンコードを発生する。CISC命令は
一度に1つづつRISC命令に変換され、このRISC命令は同
じ結果及び条件コードを再現するものである。各CISC命
令は、4つの命令グループを順次に含むRISC命令の対応
するシーケンスに変換される。第1のグループは、ソー
スオペランドをフェッチして一時的な記憶位置に入れる
命令を有している。第2グループの命令は、ソースオペ
ランドに基づいて動作して一時的な記憶位置に結果を入
れる。第3グループの命令は、メモリ又はレジスタの内
容を変更し、考えられる例外を受ける。最後に、第4グ
ループの命令は、メモリ又はレジスタの内容を更新する
もので、考えられる例外はない。CISC命令をRISC命令に
変換することに関連したこれ以上の詳細については、
「変換されたプログラムコードに対する命令グラニュラ
リティを保持する改良されたシステム及び方法(Improv
ed System and Method of Preserving Instruction Gra
nularity for Translated Program Code)」と題するス
コット・ロビンソン及びリチャード・サイト氏の前期関
連特許出願を参照されたい。
ナルプログラムから命令の基本ブロックを受け取り、そ
れに対応するRISCマシンコードを発生する。CISC命令は
一度に1つづつRISC命令に変換され、このRISC命令は同
じ結果及び条件コードを再現するものである。各CISC命
令は、4つの命令グループを順次に含むRISC命令の対応
するシーケンスに変換される。第1のグループは、ソー
スオペランドをフェッチして一時的な記憶位置に入れる
命令を有している。第2グループの命令は、ソースオペ
ランドに基づいて動作して一時的な記憶位置に結果を入
れる。第3グループの命令は、メモリ又はレジスタの内
容を変更し、考えられる例外を受ける。最後に、第4グ
ループの命令は、メモリ又はレジスタの内容を更新する
もので、考えられる例外はない。CISC命令をRISC命令に
変換することに関連したこれ以上の詳細については、
「変換されたプログラムコードに対する命令グラニュラ
リティを保持する改良されたシステム及び方法(Improv
ed System and Method of Preserving Instruction Gra
nularity for Translated Program Code)」と題するス
コット・ロビンソン及びリチャード・サイト氏の前期関
連特許出願を参照されたい。
図13のステップ169では、トランスレーターは、RISCマ
シンコードをRISCコンピュータのオペレーティングシス
テムが認識するプログラム像フォーマットに入れること
により変換されたプログラムを形成する。この変換され
たプログラム像に関連して、トランスレーターは、オリ
ジナルプログラムにおけるCISC命令の各基本ブロックの
アドレスと、変換されたプログラムにおけるRISC命令の
対応基本ブロックのアドレスとの間のマッピングも発生
する。
シンコードをRISCコンピュータのオペレーティングシス
テムが認識するプログラム像フォーマットに入れること
により変換されたプログラムを形成する。この変換され
たプログラム像に関連して、トランスレーターは、オリ
ジナルプログラムにおけるCISC命令の各基本ブロックの
アドレスと、変換されたプログラムにおけるRISC命令の
対応基本ブロックのアドレスとの間のマッピングも発生
する。
図13のステップ170において、トランスレーターは、変
換されたコードがプログラム像に配置された場所をグラ
フで示す概要ページを発生する。この概要ページは図14
を参照して以下で詳細に述べる。
換されたコードがプログラム像に配置された場所をグラ
フで示す概要ページを発生する。この概要ページは図14
を参照して以下で詳細に述べる。
最後に、図13のステップ171において、トランスレータ
ーは、プログラム流れ図の分析中にステップ165で見つ
かったエラーをもつサブルーチンの流れ図をプリントす
るために流れ図言語ファイルを形成する。エラー向け流
れ図の一例が図16に示されている。エラー向けの流れ図
は、エラーがトレースされる経路に沿って大きなブロッ
ク210、211及び212を有し、そしてエラーがトレースさ
れた経路に対する弧に沿って太い破線214を有する。図1
6に示されたエラーは、手順に使用される非初期化変数
(汎用レジスタR3)である。太い破線214は、手順の始
めのブロック210を、その非初期化変数が最初に使用さ
れるブロック213へ接続する。このエラーは、トランス
レーターによって明らかになるまで発見されない。とい
うのは、オリジナルプログラムの実行中には実行があき
らかにブロック215のまわりに指示されたエラー経路を
たどらないからである。
ーは、プログラム流れ図の分析中にステップ165で見つ
かったエラーをもつサブルーチンの流れ図をプリントす
るために流れ図言語ファイルを形成する。エラー向け流
れ図の一例が図16に示されている。エラー向けの流れ図
は、エラーがトレースされる経路に沿って大きなブロッ
ク210、211及び212を有し、そしてエラーがトレースさ
れた経路に対する弧に沿って太い破線214を有する。図1
6に示されたエラーは、手順に使用される非初期化変数
(汎用レジスタR3)である。太い破線214は、手順の始
めのブロック210を、その非初期化変数が最初に使用さ
れるブロック213へ接続する。このエラーは、トランス
レーターによって明らかになるまで発見されない。とい
うのは、オリジナルプログラムの実行中には実行があき
らかにブロック215のまわりに指示されたエラー経路を
たどらないからである。
図14を参照すれば、図13のステップ170で発生された種
類の概要ページが示されている。図14に示されたよう
に、この概要ページは、オリジナルプログラムのメモリ
マップ181を含んでいる。メモリマップの上部には、プ
ログラム名182と、オリジナルプログラムが形成された
ときのデータ183と、変換中に見つかったコードの割合1
84とを含む表示がある。
類の概要ページが示されている。図14に示されたよう
に、この概要ページは、オリジナルプログラムのメモリ
マップ181を含んでいる。メモリマップの上部には、プ
ログラム名182と、オリジナルプログラムが形成された
ときのデータ183と、変換中に見つかったコードの割合1
84とを含む表示がある。
メモリマップ181は、VAX命令アーキテクチャー及びVMS
(登録商標)オペレーティングシステムを用いた典型的
なプログラムの編成を示している。このプログラムは、
ヘッダ185と、読み取り/書き込み像セクション186と、
多数のリードオンリセクション187と、固定のベクター
セクション188と、デバッグ記号テーブル(DST)189
と、デバッグモジュールテーブル(DMT)190と、グロー
バル記号テーブル(GST)191とを含んでいる。メモリマ
ップのライン当たり192個のディスクブロックがメモリ
マップの左上にプリントされ、そしてメモリマップ内の
全部で193個のディスクブロックがメモリマップの右下
にプリントされる。この例では、ライン当たり1つのデ
ィスクブロックがあり、全部で12のディスクブロックが
ある。変換されたコードは、リードオンリセクション18
7内の狭いバンド194、195及び196によって指示される。
これらの狭いバンドは、変換されたコードの各バイトご
とに短い垂直の線で形成される。プラウシブルコードは
広いバンド197で指示される。
(登録商標)オペレーティングシステムを用いた典型的
なプログラムの編成を示している。このプログラムは、
ヘッダ185と、読み取り/書き込み像セクション186と、
多数のリードオンリセクション187と、固定のベクター
セクション188と、デバッグ記号テーブル(DST)189
と、デバッグモジュールテーブル(DMT)190と、グロー
バル記号テーブル(GST)191とを含んでいる。メモリマ
ップのライン当たり192個のディスクブロックがメモリ
マップの左上にプリントされ、そしてメモリマップ内の
全部で193個のディスクブロックがメモリマップの右下
にプリントされる。この例では、ライン当たり1つのデ
ィスクブロックがあり、全部で12のディスクブロックが
ある。変換されたコードは、リードオンリセクション18
7内の狭いバンド194、195及び196によって指示される。
これらの狭いバンドは、変換されたコードの各バイトご
とに短い垂直の線で形成される。プラウシブルコードは
広いバンド197で指示される。
メモリマップ181の右では、概要ページがオリジナルプ
ログラムの像フォーマットによって定められた100まで
の入力ポイントをリストする。図13のステップ161の間
に、トランスレーターは、スイッチのコマンドライン
と、オリジナルプログラムの開始にあるファイル名とを
説明し、オリジナルプログラムをメモリに読み込む。図
13のステップ162では、トランスレーターはオリジナル
プログラムの像フォーマットにより定められた入力ポイ
ントをサーチする。トランスレーターは、第1のディス
クブロックの最初の若干のバイト及び最後の若干のバイ
トを探し、それが変換可能なVAX/VMSプログラム像のヘ
ッダであるかどうかを調べる。もしそうであれば、トラ
ンスレーターは、ヘッダの残り部分を説明し、像セクシ
ョン記述子(ISD)を探し、ディスクブロックを図14の
メモリマップ181に示された像セクション185-191のよう
な所望の像セクションへと編成する。VAX/VMS固定ベク
トルが存在する場合には、トランスレーターは、他の像
に対する間接的なレファレンスであるオリジナルプログ
ラムのアドレスを決定するようにそれを説明する。
ログラムの像フォーマットによって定められた100まで
の入力ポイントをリストする。図13のステップ161の間
に、トランスレーターは、スイッチのコマンドライン
と、オリジナルプログラムの開始にあるファイル名とを
説明し、オリジナルプログラムをメモリに読み込む。図
13のステップ162では、トランスレーターはオリジナル
プログラムの像フォーマットにより定められた入力ポイ
ントをサーチする。トランスレーターは、第1のディス
クブロックの最初の若干のバイト及び最後の若干のバイ
トを探し、それが変換可能なVAX/VMSプログラム像のヘ
ッダであるかどうかを調べる。もしそうであれば、トラ
ンスレーターは、ヘッダの残り部分を説明し、像セクシ
ョン記述子(ISD)を探し、ディスクブロックを図14の
メモリマップ181に示された像セクション185-191のよう
な所望の像セクションへと編成する。VAX/VMS固定ベク
トルが存在する場合には、トランスレーターは、他の像
に対する間接的なレファレンスであるオリジナルプログ
ラムのアドレスを決定するようにそれを説明する。
オリジナルプログラムの像フォーマットによって定めら
れた入力ポイントを見つけるために、トランスレーター
は入力ポイントに対する像ヘッダ185をスキャンする
が、デバッガ入力ポイントは無視する。次いで、トラン
スレーターは、デバッグ記号テーブル(DST)189が存在
するときにこれをスキャンし、そしてグローバル記号テ
ーブル(GST)191が存在するときにこれをスキャンし
て、CALL入力及びSYMBOL入力を見つける。CALLマスクが
有効であり、マスクの後に法律コードがありそしてその
コードが特権命令を含んでいないことを確かめることに
より、各々の考えられるCALL入力ポイントに対して有効
性のチェックが行われる。法律コードチェックは、呼び
出しマスクから3層の基本ブロックを通してコードをデ
コードする。SYMBOL入力は、記号がリンカーにより絶対
レファレンスとしてフラッグ付けされたときには絶対レ
ファレンスは典型的に定数であるから、無視される。さ
もなくば、SYMBOL入力はJSB入力ポイントであるか、又
は誤って表示されたCALL入力ポイントである。入力ポイ
ントからのコードはデコードされ、そして上記した法律
コードチェックは入力ポイントがCALL入力であるとして
実行され、この法律コードチェックにパスした場合に
は、その入力ポイントがCALL入力であると思われる。法
律コードチェックにパスしない場合には、同様の法律コ
ードチェックを行って入力ポイントがJSB入力であるか
どうかテストする。
れた入力ポイントを見つけるために、トランスレーター
は入力ポイントに対する像ヘッダ185をスキャンする
が、デバッガ入力ポイントは無視する。次いで、トラン
スレーターは、デバッグ記号テーブル(DST)189が存在
するときにこれをスキャンし、そしてグローバル記号テ
ーブル(GST)191が存在するときにこれをスキャンし
て、CALL入力及びSYMBOL入力を見つける。CALLマスクが
有効であり、マスクの後に法律コードがありそしてその
コードが特権命令を含んでいないことを確かめることに
より、各々の考えられるCALL入力ポイントに対して有効
性のチェックが行われる。法律コードチェックは、呼び
出しマスクから3層の基本ブロックを通してコードをデ
コードする。SYMBOL入力は、記号がリンカーにより絶対
レファレンスとしてフラッグ付けされたときには絶対レ
ファレンスは典型的に定数であるから、無視される。さ
もなくば、SYMBOL入力はJSB入力ポイントであるか、又
は誤って表示されたCALL入力ポイントである。入力ポイ
ントからのコードはデコードされ、そして上記した法律
コードチェックは入力ポイントがCALL入力であるとして
実行され、この法律コードチェックにパスした場合に
は、その入力ポイントがCALL入力であると思われる。法
律コードチェックにパスしない場合には、同様の法律コ
ードチェックを行って入力ポイントがJSB入力であるか
どうかテストする。
図14の概要ページには、オリジナルプログラムの像フォ
ーマットによって定められた100までの入力ポイント198
がリストされる。プログラムコード内の入力ポイントの
位置を示すために、入力ポイント194の各々からメモリ
マップ181内の対応する位置へと弧201が描かれる。入力
ポイントのリストの下では、概要ページは、トランスレ
ーターからのメッセージの概要199を致命的から情報的
まで過酷さが減少する順序でリストして含んでいる。各
メッセージが与えられる回数はかっこ内に示されてい
る。更に、概要ページの右上の角では、トランスレータ
ーがAからFまでの変換のレターグレードを与え、これ
は、完全変換から、警報付き変換、部分変換、おそらく
甚だしいエラーを伴う部分変換、ランタイム機能を失っ
た部分変換、そして全く不首尾な変換までの質を示す。
ーマットによって定められた100までの入力ポイント198
がリストされる。プログラムコード内の入力ポイントの
位置を示すために、入力ポイント194の各々からメモリ
マップ181内の対応する位置へと弧201が描かれる。入力
ポイントのリストの下では、概要ページは、トランスレ
ーターからのメッセージの概要199を致命的から情報的
まで過酷さが減少する順序でリストして含んでいる。各
メッセージが与えられる回数はかっこ内に示されてい
る。更に、概要ページの右上の角では、トランスレータ
ーがAからFまでの変換のレターグレードを与え、これ
は、完全変換から、警報付き変換、部分変換、おそらく
甚だしいエラーを伴う部分変換、ランタイム機能を失っ
た部分変換、そして全く不首尾な変換までの質を示す。
オリジナルプログラム内のほとんどの命令を探索するた
めには、オリジナルプログラムの像フォーマットによっ
て定められた入力ポイントからの実行の経過をたどるこ
とが必要である。実行の経過に続いて、各入力ポイント
で始まる命令シーケンスのデコードが行われ、命令がデ
コードされるにつれて流れ図が形成される。流れ図を形
成するために、各命令がデコードされてその長さを決定
すると共に、シーケンス内の次の命令が決定される。命
令の長さは、各OPコードに対する指定子の数を与えるテ
ーブルを参照しそして指定子を検査して長さを決めるこ
とによって決定される。
めには、オリジナルプログラムの像フォーマットによっ
て定められた入力ポイントからの実行の経過をたどるこ
とが必要である。実行の経過に続いて、各入力ポイント
で始まる命令シーケンスのデコードが行われ、命令がデ
コードされるにつれて流れ図が形成される。流れ図を形
成するために、各命令がデコードされてその長さを決定
すると共に、シーケンス内の次の命令が決定される。命
令の長さは、各OPコードに対する指定子の数を与えるテ
ーブルを参照しそして指定子を検査して長さを決めるこ
とによって決定される。
RISCコードを発生するためにもCISC命令をデコードしな
ければならないので、トランスレーターは、流れ図を形
成するためにデコードの結果をセーブする。これらの結
果は中間コードフォーマットであり、これは、流れ図の
助けによりエラーチェック中に命令の分析を簡単にする
と共に、RISCコードの発生を簡単にする。この中間コー
ドフォーマットは、オペランド指定子が容易にアクセス
できるメモリ位置に入るように同様の命令に対して一定
のデータフォーマットを与える。又、一定のデータフォ
ーマットは、効率的なRISCコードの発生を助けるアトリ
ビュートを与えると共に、必要に応じて、インタープリ
ターへの呼び出しを与える。使用することのできる1種
の中間コードフォーマットを添付資料Aについて述べ
る。しかしながら、メモリスペースに限界があるため
に、長いプログラム用の中間コード表示の使用は除外す
る。
ければならないので、トランスレーターは、流れ図を形
成するためにデコードの結果をセーブする。これらの結
果は中間コードフォーマットであり、これは、流れ図の
助けによりエラーチェック中に命令の分析を簡単にする
と共に、RISCコードの発生を簡単にする。この中間コー
ドフォーマットは、オペランド指定子が容易にアクセス
できるメモリ位置に入るように同様の命令に対して一定
のデータフォーマットを与える。又、一定のデータフォ
ーマットは、効率的なRISCコードの発生を助けるアトリ
ビュートを与えると共に、必要に応じて、インタープリ
ターへの呼び出しを与える。使用することのできる1種
の中間コードフォーマットを添付資料Aについて述べ
る。しかしながら、メモリスペースに限界があるため
に、長いプログラム用の中間コード表示の使用は除外す
る。
図17には、流れ図を形成するのに使用されるデータ構造
体が示されている。流れ図のデータ構造体221について
は上記したが、これは、その全ての後続及び先行ブロッ
クへ各々リンクされる基本ブロック記述子のリストであ
る。
体が示されている。流れ図のデータ構造体221について
は上記したが、これは、その全ての後続及び先行ブロッ
クへ各々リンクされる基本ブロック記述子のリストであ
る。
流れ図の発生及び分析の助けとなるようにするため、多
数の補助データ構造体223を参照しそして維持すること
が望ましい。例えば、流れ図データ構造体221の形成中
及びその後のプラウシブルコードのスキャン中には、所
与のアドレスが(1)デコードされた命令のアドレスで
もブロックの開始のアドレスでもないか、(2)基本ブ
ロックの開始のアドレス(以下、「ブロック入力ポイン
ト」と称する)であるか、(3)ブロックの中間にある
デコードされた命令のアドレスであるか、或いは(4)
デコードされた命令の中間にあるバイトのアドレスであ
るかを素早く知ることが望まれる。このため、補助デー
タ構造体223は、CISC命令アドレスによって指示された
テーブル224を含んでいる。
数の補助データ構造体223を参照しそして維持すること
が望ましい。例えば、流れ図データ構造体221の形成中
及びその後のプラウシブルコードのスキャン中には、所
与のアドレスが(1)デコードされた命令のアドレスで
もブロックの開始のアドレスでもないか、(2)基本ブ
ロックの開始のアドレス(以下、「ブロック入力ポイン
ト」と称する)であるか、(3)ブロックの中間にある
デコードされた命令のアドレスであるか、或いは(4)
デコードされた命令の中間にあるバイトのアドレスであ
るかを素早く知ることが望まれる。このため、補助デー
タ構造体223は、CISC命令アドレスによって指示された
テーブル224を含んでいる。
例えば、テーブル224の入力は、上記の各CISCアドレス
の相互に排他的な4つの状態をエンコードする16対のビ
ットがパックされたロングワードである。第1レジスタ
の所与のCISCアドレスに対して、最下位4ビットがセッ
トされたマスクが第2レジスタにロードされ、アドレス
の最下位4ビットが第1及び第2レジスタの論理アンド
によって第2レジスタへ転送され、そして第2レジスタ
が1ビット位置だけ左へシフトされ、シフトカウントを
与える。第1レジスタは、4ビット位置だけ右へシフト
されてテーブル224にインデックスが与えられると共
に、テーブルからの入力が第2レジスタにロードされ
る。次いで、第1レジスタは、シフトカウントによって
指示されたビット位置数だけ回転され、所与のCISCアド
レスに対してビット対が正しいと判断される。次いで、
このビット対は、最下位2ビットがセットされたマスク
により第2レジスタとの論理アンドによりマスクされ
る。
の相互に排他的な4つの状態をエンコードする16対のビ
ットがパックされたロングワードである。第1レジスタ
の所与のCISCアドレスに対して、最下位4ビットがセッ
トされたマスクが第2レジスタにロードされ、アドレス
の最下位4ビットが第1及び第2レジスタの論理アンド
によって第2レジスタへ転送され、そして第2レジスタ
が1ビット位置だけ左へシフトされ、シフトカウントを
与える。第1レジスタは、4ビット位置だけ右へシフト
されてテーブル224にインデックスが与えられると共
に、テーブルからの入力が第2レジスタにロードされ
る。次いで、第1レジスタは、シフトカウントによって
指示されたビット位置数だけ回転され、所与のCISCアド
レスに対してビット対が正しいと判断される。次いで、
このビット対は、最下位2ビットがセットされたマスク
により第2レジスタとの論理アンドによりマスクされ
る。
流れ図を形成するときには、最後の命令へたどりついて
いない他の経路があることが分かっていても、一度に1
つの経路をたどることが必要である。更に、あるときに
は、たどっている経路が部分的にたどった経路に合流す
ることがある。それ故、補助データ構造体223は、デコ
ードされないブロックの基本ブロック記述子に対しポイ
ンタのリスト225を含むことが望ましい。例えば、流れ
図の形成を開始するときには、デコードされないブロッ
クの基本ブロック記述子がオリジナルプログラムの既知
の各入力ポイントごとに形成される。これらの既知の入
力ポイントは、流れ図を形成する前にリスト226に集め
られる。
いない他の経路があることが分かっていても、一度に1
つの経路をたどることが必要である。更に、あるときに
は、たどっている経路が部分的にたどった経路に合流す
ることがある。それ故、補助データ構造体223は、デコ
ードされないブロックの基本ブロック記述子に対しポイ
ンタのリスト225を含むことが望ましい。例えば、流れ
図の形成を開始するときには、デコードされないブロッ
クの基本ブロック記述子がオリジナルプログラムの既知
の各入力ポイントごとに形成される。これらの既知の入
力ポイントは、流れ図を形成する前にリスト226に集め
られる。
VAX/VMSプログラムの場合には、既知のプログラム入力
ポイントがCALLx手順呼び出しの入力ポイントであり、
従って、流れ図においてCALLx基本ブロック記述子によ
って表される。LALLx基本ブロック記述子は、各プログ
ラム入力ポイントに対して形成される。リスト225に
は、プログラム入力ポイントのCALLx基本ブロック記述
子に対するポインタが最初にロードされる。更に、プロ
グラム入力ポイントに対するテーブル224の入力は、基
本ブロックの開始を指示するように最初にセットされ
る。
ポイントがCALLx手順呼び出しの入力ポイントであり、
従って、流れ図においてCALLx基本ブロック記述子によ
って表される。LALLx基本ブロック記述子は、各プログ
ラム入力ポイントに対して形成される。リスト225に
は、プログラム入力ポイントのCALLx基本ブロック記述
子に対するポインタが最初にロードされる。更に、プロ
グラム入力ポイントに対するテーブル224の入力は、基
本ブロックの開始を指示するように最初にセットされ
る。
テーブルのルックアップにより所与のCISCアドレスがブ
ロック又はブロック内のデコードされた命令のスタート
点であることが指示されたときには、そのブロックの基
本ブロック記述子を速やかに見つけることがしばしば所
望される。メモリスペースに制限がない場合には、CISC
アドレスにより指示された基本ブロック記述子に対する
ポインタのテーブルによりこれを行うことができる。し
かしながら、メモリスペースには制限があるので、流れ
図のデータ構造体221内の基本ブロック記述子に対する
ポインタの簡易リスト228としてハッシュテーブル227を
使用するのが好ましい。更に、例えば、ブロック内の第
1命令のアドレスの最下位16ビットにより、このハッシ
ュテーブルをインデックスするのが望ましい。例えば、
所与のCISCアドレスでスタートする基本ブロックに対す
る基本ブロック記述子を見つけるために、所与のCISCア
ドレスの最下位16ビットによってハッシュテーブル227
をインデックスし、基本ブロック記述子に対するポイン
タの簡易リスト228の1つとしてポインタが得られる。
この簡易リスト内の各ポインタごとに、そのポインタを
用いて基本ブロック記述子のスタートアドレスアトリビ
ュートをフェッチし、このスタートアドレスが所与のCI
SCアドレスと比較される。アドレス間の一致が得られる
と、所望の基本ブロック記述子が見つかる。所与のアド
レス(基本ブロックの中間にある命令のアドレスのよう
な)を見つけるために、ブロックの開始アドレスが見つ
かるまでテーブル224がアドレス数字が減少する方向に
スキャンされ、そしてこのブロック開始アドレスを用
い、ハッシュテーブル227と、基本ブロック記述子に対
するポインタの簡易リスト228とを参照して、基本ブロ
ック記述子が見つけられる。
ロック又はブロック内のデコードされた命令のスタート
点であることが指示されたときには、そのブロックの基
本ブロック記述子を速やかに見つけることがしばしば所
望される。メモリスペースに制限がない場合には、CISC
アドレスにより指示された基本ブロック記述子に対する
ポインタのテーブルによりこれを行うことができる。し
かしながら、メモリスペースには制限があるので、流れ
図のデータ構造体221内の基本ブロック記述子に対する
ポインタの簡易リスト228としてハッシュテーブル227を
使用するのが好ましい。更に、例えば、ブロック内の第
1命令のアドレスの最下位16ビットにより、このハッシ
ュテーブルをインデックスするのが望ましい。例えば、
所与のCISCアドレスでスタートする基本ブロックに対す
る基本ブロック記述子を見つけるために、所与のCISCア
ドレスの最下位16ビットによってハッシュテーブル227
をインデックスし、基本ブロック記述子に対するポイン
タの簡易リスト228の1つとしてポインタが得られる。
この簡易リスト内の各ポインタごとに、そのポインタを
用いて基本ブロック記述子のスタートアドレスアトリビ
ュートをフェッチし、このスタートアドレスが所与のCI
SCアドレスと比較される。アドレス間の一致が得られる
と、所望の基本ブロック記述子が見つかる。所与のアド
レス(基本ブロックの中間にある命令のアドレスのよう
な)を見つけるために、ブロックの開始アドレスが見つ
かるまでテーブル224がアドレス数字が減少する方向に
スキャンされ、そしてこのブロック開始アドレスを用
い、ハッシュテーブル227と、基本ブロック記述子に対
するポインタの簡易リスト228とを参照して、基本ブロ
ック記述子が見つけられる。
新たに形成された基本ブロックに対し基本ブロック記述
子が割り当てられるたびに、アドレステーブル224、ハ
ッシュテーブル227及び簡易リスト118の1つが更新され
る。例えば、ロングワードを得るようにテーブルをイン
デックスしそしてそのロングワードの2ビット入力をマ
スク動作によってセットすることにより、ブロックのス
タートを指示する2ビット入力がテーブル224に書き込
まれる。マスク動作のためのマスクは、例えば、基本ブ
ロックのスタートのCISCアドレスの最下位4ビットでマ
スクのテーブルをインデックスすることにより得られ
る。次いで、基本ブロックのスタートのCISCアドレスの
最下位16ビットでハッシュテーブル227をインデックス
することにより、ポインタの簡易リスト228の1つに対
するポインタが得られる。最後に、新たなブロックの基
本ブロック記述子に対するポインタが、ハッシュテーブ
ル227をインデックスすることにより得たポインタで指
示された簡易リストに加えられる。
子が割り当てられるたびに、アドレステーブル224、ハ
ッシュテーブル227及び簡易リスト118の1つが更新され
る。例えば、ロングワードを得るようにテーブルをイン
デックスしそしてそのロングワードの2ビット入力をマ
スク動作によってセットすることにより、ブロックのス
タートを指示する2ビット入力がテーブル224に書き込
まれる。マスク動作のためのマスクは、例えば、基本ブ
ロックのスタートのCISCアドレスの最下位4ビットでマ
スクのテーブルをインデックスすることにより得られ
る。次いで、基本ブロックのスタートのCISCアドレスの
最下位16ビットでハッシュテーブル227をインデックス
することにより、ポインタの簡易リスト228の1つに対
するポインタが得られる。最後に、新たなブロックの基
本ブロック記述子に対するポインタが、ハッシュテーブ
ル227をインデックスすることにより得たポインタで指
示された簡易リストに加えられる。
図18には、流れ図データ構造体を形成するための手順の
フローチャートが示されている。第1ステップ229で
は、リストの頭部にあるデコードされない基本ブロック
(図17の225)がリストから除去され、流れ図データ構
造体の基本ブロック記述子(図17の224)が割り当てら
れ、そしてまだ求められていない入力ポイントに等しい
ブロック入力ポイントと、まだ求められていない入力ポ
イントの先行点に等しい先行点とを指示するように基本
ブロック記述子がセットされる。次いで、ステップ230
において、ブロック入力ポイントで開始する基本ブロッ
ク内の次の命令がデコードされ、そしてアドレステーブ
ル(図17の224)が更新される。次いで、ステップ231に
おいて、命令デコード中に、アドレステーブル(図17の
224)がインデックスされ、デコードされている命令が
既にデコードされた命令にオーバーラップするかどうか
決定される。もしそうであれば、次いで、ステップ232
において、エラーメッセージが発生されそして経路が放
棄され、ステップ238のテストで、デコードされていな
い基本ブロックのリスト(図17の225)が空でないこと
分かった場合には、別の経路がサーチされる。又、ステ
ップ233において、アドレステーブル(図17の224)をル
ックアップすることにより、デコードされた命令がデコ
ードされない基本ブロックにオーバーラップするかどう
か指示される。もしそうならば、デコードされない基本
ブロックのブロック入力ポイントが命令の中間にあるこ
とになるので、エラーとなる。この場合、ステップ234
でエラーが報告され、求められなかったブロック入力が
エラーであるという仮定のもとで、デコードされていな
い基本ブロックに対するポインタのリスト(図17の22
5)からデコードされていない基本ブロックが取り除か
れる。この点において、流れ図に1つの命令が加えられ
ている。
フローチャートが示されている。第1ステップ229で
は、リストの頭部にあるデコードされない基本ブロック
(図17の225)がリストから除去され、流れ図データ構
造体の基本ブロック記述子(図17の224)が割り当てら
れ、そしてまだ求められていない入力ポイントに等しい
ブロック入力ポイントと、まだ求められていない入力ポ
イントの先行点に等しい先行点とを指示するように基本
ブロック記述子がセットされる。次いで、ステップ230
において、ブロック入力ポイントで開始する基本ブロッ
ク内の次の命令がデコードされ、そしてアドレステーブ
ル(図17の224)が更新される。次いで、ステップ231に
おいて、命令デコード中に、アドレステーブル(図17の
224)がインデックスされ、デコードされている命令が
既にデコードされた命令にオーバーラップするかどうか
決定される。もしそうであれば、次いで、ステップ232
において、エラーメッセージが発生されそして経路が放
棄され、ステップ238のテストで、デコードされていな
い基本ブロックのリスト(図17の225)が空でないこと
分かった場合には、別の経路がサーチされる。又、ステ
ップ233において、アドレステーブル(図17の224)をル
ックアップすることにより、デコードされた命令がデコ
ードされない基本ブロックにオーバーラップするかどう
か指示される。もしそうならば、デコードされない基本
ブロックのブロック入力ポイントが命令の中間にあるこ
とになるので、エラーとなる。この場合、ステップ234
でエラーが報告され、求められなかったブロック入力が
エラーであるという仮定のもとで、デコードされていな
い基本ブロックに対するポインタのリスト(図17の22
5)からデコードされていない基本ブロックが取り除か
れる。この点において、流れ図に1つの命令が加えられ
ている。
実行転送命令は、常に、基本ブロックを終わらせる。こ
の状態はステップ235においてチェックされる。実行転
送命令が見つかったときには、命令のあり得べき実行経
路の各々に対する次の命令がステップ236で検査され
る。既にデコードされている命令へ戻る経路は既存ブロ
ックの入力ポイントへリンクされ、或いは経路が既存ブ
ロックの中間に向けられたときには、既存ブロックが2
つのブロックに分割され、経路が常にブロック入力ポイ
ントで終わるようにされる。さもなくば、検査の結果、
経路を終了させるか経路をたどるべきであるという結論
になる。2つ以上の経路をたどるべきである場合には、
最も優先順位の高い経路が「継続経路」として選択さ
れ、他の経路をたどるべきアドレスはデコードされない
基本ブロックとして待ち行列に入れられ、実行転送命令
に対する基本ブロック記述子が、デコードされていない
基本ブロックの各基本ブロック記述子における先行点の
リストに加えられる。例えば、条件分岐命令の場合に
は、アドレスシーケンスの実行経路(即ち、まっすぐな
経路)が最も優先順位の高い「継続」経路となり、実行
転送の行き先アドレス、即ち「真の分岐」が待ち行列に
入れられる。考えられる各々の実行経路をステップ236
において検査する方法を図19について以下に詳細に述べ
る。ステップ237でチェックして継続すべき実行経路が
全くない場合には、ステップ238において、デコードさ
れていない基本ブロックのリストがチェックされ、たど
るべき他の経路があるかどうかの判断がなされる。もし
なければ、流れ図は終了となる。さもなくば、実行ルー
プがステップ229へ戻され、デコードされていない基本
ブロックのリスト(図17の225)における次のデコード
されていない基本ブロックのブロック入力ポイントから
の経路をたどり始める。ステップ237において継続経路
があると判断された場合には、ステップ239において実
行の分岐が行われ、その経路がデコードされていない基
本ブロック内で続いている場合にはステップ246へ分岐
され、さもなくば、ステップ240へ分岐される。(図19
のステップ263では、以下で述べるように、デコードさ
れた基本ブロック内で経路が継続するかどうか既にチェ
ックされており、ステップ240に到達するのは、経路が
デコードされない命令へ続くときだけである。)ステッ
プ240では、次の命令に対して新たな基本ブロックが形
成され、新たな基本ブロックに対する先行ブロックのリ
ストは、実行転送命令を含む基本ブロックに対するポイ
ンタを最初に含むようにセットされ、新たな基本ブロッ
クに対するポインタは、実行転送命令を含む基本ブロッ
クの基本ブロック記述子内の継続ブロックのリストに加
えられる。ステップ246では、実行転送命令を含む基本
ブロックに対するポインタが、デコードされていない基
本ブロックに対する先行ブロックのリストに加えられ、
デコードされていない基本ブロックに対するポインタが
実行転送命令を含む基本ブロックに対する後続ブロック
のリストに加えられ、デコードされていない基本ブロッ
クに対するポインタがデコードされていない基本ブロッ
クのリストから取り去られ、デコードされていない基本
ブロックに対しステップ230でデコードが開始され、次
の命令のデコードが首尾良く行われた場合には、デコー
ドされていない基本ブロックの基本ブロック記述子が更
新され、それがデコードされたことを指示する。
の状態はステップ235においてチェックされる。実行転
送命令が見つかったときには、命令のあり得べき実行経
路の各々に対する次の命令がステップ236で検査され
る。既にデコードされている命令へ戻る経路は既存ブロ
ックの入力ポイントへリンクされ、或いは経路が既存ブ
ロックの中間に向けられたときには、既存ブロックが2
つのブロックに分割され、経路が常にブロック入力ポイ
ントで終わるようにされる。さもなくば、検査の結果、
経路を終了させるか経路をたどるべきであるという結論
になる。2つ以上の経路をたどるべきである場合には、
最も優先順位の高い経路が「継続経路」として選択さ
れ、他の経路をたどるべきアドレスはデコードされない
基本ブロックとして待ち行列に入れられ、実行転送命令
に対する基本ブロック記述子が、デコードされていない
基本ブロックの各基本ブロック記述子における先行点の
リストに加えられる。例えば、条件分岐命令の場合に
は、アドレスシーケンスの実行経路(即ち、まっすぐな
経路)が最も優先順位の高い「継続」経路となり、実行
転送の行き先アドレス、即ち「真の分岐」が待ち行列に
入れられる。考えられる各々の実行経路をステップ236
において検査する方法を図19について以下に詳細に述べ
る。ステップ237でチェックして継続すべき実行経路が
全くない場合には、ステップ238において、デコードさ
れていない基本ブロックのリストがチェックされ、たど
るべき他の経路があるかどうかの判断がなされる。もし
なければ、流れ図は終了となる。さもなくば、実行ルー
プがステップ229へ戻され、デコードされていない基本
ブロックのリスト(図17の225)における次のデコード
されていない基本ブロックのブロック入力ポイントから
の経路をたどり始める。ステップ237において継続経路
があると判断された場合には、ステップ239において実
行の分岐が行われ、その経路がデコードされていない基
本ブロック内で続いている場合にはステップ246へ分岐
され、さもなくば、ステップ240へ分岐される。(図19
のステップ263では、以下で述べるように、デコードさ
れた基本ブロック内で経路が継続するかどうか既にチェ
ックされており、ステップ240に到達するのは、経路が
デコードされない命令へ続くときだけである。)ステッ
プ240では、次の命令に対して新たな基本ブロックが形
成され、新たな基本ブロックに対する先行ブロックのリ
ストは、実行転送命令を含む基本ブロックに対するポイ
ンタを最初に含むようにセットされ、新たな基本ブロッ
クに対するポインタは、実行転送命令を含む基本ブロッ
クの基本ブロック記述子内の継続ブロックのリストに加
えられる。ステップ246では、実行転送命令を含む基本
ブロックに対するポインタが、デコードされていない基
本ブロックに対する先行ブロックのリストに加えられ、
デコードされていない基本ブロックに対するポインタが
実行転送命令を含む基本ブロックに対する後続ブロック
のリストに加えられ、デコードされていない基本ブロッ
クに対するポインタがデコードされていない基本ブロッ
クのリストから取り去られ、デコードされていない基本
ブロックに対しステップ230でデコードが開始され、次
の命令のデコードが首尾良く行われた場合には、デコー
ドされていない基本ブロックの基本ブロック記述子が更
新され、それがデコードされたことを指示する。
ステップ235でブロック内の命令が実行転送命令でない
ことが分かった場合には、アドレスシーケンスの次の命
令へ至る経路をたどるようにする。この経路は、予め定
められた命令メモリエリアから外れているので、終了す
べきであることが考えられる。ユーザの選択により、予
め定められた命令メモリエリアはリードオンリメモリエ
リアとして定められてもよいし、場合によっては、全オ
リジナル変換プログラムに対して割り当てられたメモリ
エリアに限定されてもよい。それ故、ステップ241で
は、実行がステップ242へ分岐し、そこでエラーが報告
され、経路が切断される。次いで、ステップ238におい
て実行が継続され、たどるべき新たな経路が見つけられ
る。
ことが分かった場合には、アドレスシーケンスの次の命
令へ至る経路をたどるようにする。この経路は、予め定
められた命令メモリエリアから外れているので、終了す
べきであることが考えられる。ユーザの選択により、予
め定められた命令メモリエリアはリードオンリメモリエ
リアとして定められてもよいし、場合によっては、全オ
リジナル変換プログラムに対して割り当てられたメモリ
エリアに限定されてもよい。それ故、ステップ241で
は、実行がステップ242へ分岐し、そこでエラーが報告
され、経路が切断される。次いで、ステップ238におい
て実行が継続され、たどるべき新たな経路が見つけられ
る。
又、基本ブロックは、アドレスシーケンスにおける次の
命令が後続ブロックである別の基本ブロックへと延びる
ときに終了となる。この状態は、アドレステーブル(図
17の224)を次の命令のアドレスでインデックスするこ
とによりステップ243においてチェックされる。ステッ
プ244では、後続ブロックの基本ブロック記述子がアク
セスされ、その後続ブロックがデコードされている基本
ブロックであるかデコードされていない基本ブロックで
あるか判断される。デコードされていない後続ブロック
の場合には、ステップ246において、デコードされてい
る最後の命令を含む基本ブロックに対するポインタがデ
コードされていない基本ブロックに対する先行ブロック
のリストに加えられ、デコードされていない基本ブロッ
クに対するポインタがデコードされている最後の命令を
含む基本ブロックに対する先行ブロックのリストに加え
られ、デコードされていない基本ブロックに対するポイ
ンタがデコードされていない基本ブロックのリストから
取り去られ、デコードされていない基本ブロックに対し
てステップ230でデコードが開始される。次の命令に対
するデコードが首尾良く行われた場合には、デコードさ
れていない基本ブロックの基本ブロック記述子が更新さ
れ、デコードされたことを指示する。さもなくば、後続
ブロックがデコードされたブロックである場合には、ス
テップ246において、後続ブロックに対するポインタ
が、デコードされた最後の命令を含むブロックの基本ブ
ロック記述子における後続ブロックのリストに加えら
れ、デコードされた最後の命令を含むブロックに対する
ポインタが後続ブロックの基本ブロック記述子における
先行ブロックのリストに加えられる。次いで、ステップ
238において実行が継続され、たどるべき新たな経路が
見つけられる。
命令が後続ブロックである別の基本ブロックへと延びる
ときに終了となる。この状態は、アドレステーブル(図
17の224)を次の命令のアドレスでインデックスするこ
とによりステップ243においてチェックされる。ステッ
プ244では、後続ブロックの基本ブロック記述子がアク
セスされ、その後続ブロックがデコードされている基本
ブロックであるかデコードされていない基本ブロックで
あるか判断される。デコードされていない後続ブロック
の場合には、ステップ246において、デコードされてい
る最後の命令を含む基本ブロックに対するポインタがデ
コードされていない基本ブロックに対する先行ブロック
のリストに加えられ、デコードされていない基本ブロッ
クに対するポインタがデコードされている最後の命令を
含む基本ブロックに対する先行ブロックのリストに加え
られ、デコードされていない基本ブロックに対するポイ
ンタがデコードされていない基本ブロックのリストから
取り去られ、デコードされていない基本ブロックに対し
てステップ230でデコードが開始される。次の命令に対
するデコードが首尾良く行われた場合には、デコードさ
れていない基本ブロックの基本ブロック記述子が更新さ
れ、デコードされたことを指示する。さもなくば、後続
ブロックがデコードされたブロックである場合には、ス
テップ246において、後続ブロックに対するポインタ
が、デコードされた最後の命令を含むブロックの基本ブ
ロック記述子における後続ブロックのリストに加えら
れ、デコードされた最後の命令を含むブロックに対する
ポインタが後続ブロックの基本ブロック記述子における
先行ブロックのリストに加えられる。次いで、ステップ
238において実行が継続され、たどるべき新たな経路が
見つけられる。
図19には、実行転送命令からの1つの経路で次の命令を
検査するために図18のステップ236においてたどる手順
のフローチャートが示されている。図19の第1ステップ
251では、実行転送命令が検査されて、計算された行き
先アドレスを有するかどうかの判断がなされる。もしそ
うであれば、ステップ252において、後方記号実行のプ
ロセスが行われて、行き先が求められる。このプロセス
は、手順及びサブルーチン呼び出しを求めるのに特に有
用である。ステップ253でチェックして行き先が求めら
れていない場合には、経路の検査が終了となる。という
のは、実行時間にインタープリターが呼び出されるまで
その経路の次の命令が分からず決定されないからであ
る。後方記号実行のプロセスでは、実行転送命令から流
れ図を通して後方サーチを行うことにより計算行き先ア
ドレスが求められ、プログラムの命令のアドレスに関し
て固定であるアドレス値に対し計算行き先アドレスを求
めるのに使用した少なくとも1つの手前の命令が見い出
される。後方記号実行のプロセスは図20について以下で
詳細に説明する。
検査するために図18のステップ236においてたどる手順
のフローチャートが示されている。図19の第1ステップ
251では、実行転送命令が検査されて、計算された行き
先アドレスを有するかどうかの判断がなされる。もしそ
うであれば、ステップ252において、後方記号実行のプ
ロセスが行われて、行き先が求められる。このプロセス
は、手順及びサブルーチン呼び出しを求めるのに特に有
用である。ステップ253でチェックして行き先が求めら
れていない場合には、経路の検査が終了となる。という
のは、実行時間にインタープリターが呼び出されるまで
その経路の次の命令が分からず決定されないからであ
る。後方記号実行のプロセスでは、実行転送命令から流
れ図を通して後方サーチを行うことにより計算行き先ア
ドレスが求められ、プログラムの命令のアドレスに関し
て固定であるアドレス値に対し計算行き先アドレスを求
めるのに使用した少なくとも1つの手前の命令が見い出
される。後方記号実行のプロセスは図20について以下で
詳細に説明する。
ステップ254に続き、検査されている経路は既知の行き
先アドレスをもつ。この行き先アドレスは、オリジナル
プログラムに割り当てられたメモリの限界と比較され、
この限界を外れている場合には、その行き先がオペレー
ティングシステムのような外部レファレンスであると考
えられる。ステップ255において、外部レファレンスに
ついての情報を含む像情報ファイルに対してサーチが行
われる。このような像情報ファイルが使用できる場合に
は、ステップ256でその外部レファレンスから経路が続
く行き先を決定するために検査が行われる。外部レファ
レンスが手順又はサブルーチンである場合には、サブル
ーチン又は手順呼び出しの特性に関する情報を保持する
ために「プレースホルダー」ブロックを形成することが
所望される。サブルーチン又は手順は、復帰しなかった
り、4(SP)へ復帰したり、又は発呼者のレジスタを変
更したりというアブノーマルな特性を有することがあ
る。このアブノーマルな特性は、像情報ファイルに指示
されねばならず、そしてもし可能であれば、外部プログ
ラムからの復帰経路を決定するために使用しなければな
らない。これに加えて、オリジナルプログラムに対する
像情報に、呼び出しに関する情報、例えば、外部行き先
アドレス、呼び出しの形式、パラメータの個数及びパラ
メータとしての一定数値を記録することが所望される。
パラメータとしての一定数値は、例えば、呼び出し命令
からの後方記号実行によって見つけられる。呼び出しに
ついてのこの情報は、図31ないし33を参照して以下に述
べるように、多数のプログラムの反復変換のプロセスに
使用することができる。
先アドレスをもつ。この行き先アドレスは、オリジナル
プログラムに割り当てられたメモリの限界と比較され、
この限界を外れている場合には、その行き先がオペレー
ティングシステムのような外部レファレンスであると考
えられる。ステップ255において、外部レファレンスに
ついての情報を含む像情報ファイルに対してサーチが行
われる。このような像情報ファイルが使用できる場合に
は、ステップ256でその外部レファレンスから経路が続
く行き先を決定するために検査が行われる。外部レファ
レンスが手順又はサブルーチンである場合には、サブル
ーチン又は手順呼び出しの特性に関する情報を保持する
ために「プレースホルダー」ブロックを形成することが
所望される。サブルーチン又は手順は、復帰しなかった
り、4(SP)へ復帰したり、又は発呼者のレジスタを変
更したりというアブノーマルな特性を有することがあ
る。このアブノーマルな特性は、像情報ファイルに指示
されねばならず、そしてもし可能であれば、外部プログ
ラムからの復帰経路を決定するために使用しなければな
らない。これに加えて、オリジナルプログラムに対する
像情報に、呼び出しに関する情報、例えば、外部行き先
アドレス、呼び出しの形式、パラメータの個数及びパラ
メータとしての一定数値を記録することが所望される。
パラメータとしての一定数値は、例えば、呼び出し命令
からの後方記号実行によって見つけられる。呼び出しに
ついてのこの情報は、図31ないし33を参照して以下に述
べるように、多数のプログラムの反復変換のプロセスに
使用することができる。
外部レファレンスに対して像情報ファイルが見つからな
い場合には、ステップ257において、実行転送命令のOP
コードが検査され、外部レファレンスがサブルーチンで
あるか手順であるかの判断がなされる。外部転送命令が
サブルーチンでも手順の呼び出してもない場合には、ス
テップ258において、外部レファレンスに対して復帰が
とられないことを指示する警報が発せられ、呼び出しに
対する情報がオリジナルプログラムに対する像情報ファ
イルに記録されそして経路をたどれないという結論で経
路の検査が終わりとなる。実行転送命令がサブルーチン
又は手順の呼び出しである場合には、ステップ259にお
いて、外部レファレンスに対して標準復帰がとられるこ
とを指示する警報が発せられ、呼び出しに対する情報が
オリジナルプログラムに対する像情報ファイルに記録さ
れる。又、サブルーチン呼び出しの作用に対してとられ
る情報を保持するためにこの時点で流れ図に「プレース
ホルダー」ブロックを形成することが所望される。経路
の行き先が実行転送命令に続くアドレスシーケンスの次
の命令であることを仮定して経路の検査が続けられる。
い場合には、ステップ257において、実行転送命令のOP
コードが検査され、外部レファレンスがサブルーチンで
あるか手順であるかの判断がなされる。外部転送命令が
サブルーチンでも手順の呼び出してもない場合には、ス
テップ258において、外部レファレンスに対して復帰が
とられないことを指示する警報が発せられ、呼び出しに
対する情報がオリジナルプログラムに対する像情報ファ
イルに記録されそして経路をたどれないという結論で経
路の検査が終わりとなる。実行転送命令がサブルーチン
又は手順の呼び出しである場合には、ステップ259にお
いて、外部レファレンスに対して標準復帰がとられるこ
とを指示する警報が発せられ、呼び出しに対する情報が
オリジナルプログラムに対する像情報ファイルに記録さ
れる。又、サブルーチン呼び出しの作用に対してとられ
る情報を保持するためにこの時点で流れ図に「プレース
ホルダー」ブロックを形成することが所望される。経路
の行き先が実行転送命令に続くアドレスシーケンスの次
の命令であることを仮定して経路の検査が続けられる。
ステップ260では、検査されている経路の行き先が、オ
リジナルプログラムに割り当てられたメモリエリア内の
行き先であると分析されている。ステップ260では、行
き先が、オリジナルプログラムの命令に対して割り当て
られたメモリエリアの限界と比較される。通常の場合に
は、オリジナルプログラムの命令に割り当てられたメモ
リエリアは、図14のメモリマップ181に示されたエリア1
87のようなリードオンリメモリエリアである。行き先が
このメモリエリア以外である場合には、ステップ261に
おいてエラーメッセージが発生され、経路が放棄され
る。
リジナルプログラムに割り当てられたメモリエリア内の
行き先であると分析されている。ステップ260では、行
き先が、オリジナルプログラムの命令に対して割り当て
られたメモリエリアの限界と比較される。通常の場合に
は、オリジナルプログラムの命令に割り当てられたメモ
リエリアは、図14のメモリマップ181に示されたエリア1
87のようなリードオンリメモリエリアである。行き先が
このメモリエリア以外である場合には、ステップ261に
おいてエラーメッセージが発生され、経路が放棄され
る。
ステップ262では、行き先が既にデコードされている命
令内であって終了できるところかもしれない。この状態
をチェックするために、テーブル(図17の224)が行き
先でインデックスされ、テーブル入力が検査されて、ア
ドレスが既にデコードされた命令の中間にあるか、或い
はアドレスが既にデコードされた命令のアドレスである
か基本ブロックの開始部の命令のアドレスであるかが調
べられ、もしそうでなければ、行き先は既存ブロックの
中間にある。これらのオペレーションは、図19のステッ
プ262、263及び264のテストを行う。
令内であって終了できるところかもしれない。この状態
をチェックするために、テーブル(図17の224)が行き
先でインデックスされ、テーブル入力が検査されて、ア
ドレスが既にデコードされた命令の中間にあるか、或い
はアドレスが既にデコードされた命令のアドレスである
か基本ブロックの開始部の命令のアドレスであるかが調
べられ、もしそうでなければ、行き先は既存ブロックの
中間にある。これらのオペレーションは、図19のステッ
プ262、263及び264のテストを行う。
ステップ262で行き先が既存ブロックの中間にあると判
断された場合には、ステップ265において、既存のブロ
ックを先行ブロックとして有する新たなブロックと、実
行転送命令を含むブロックとを形成することにより、既
存のブロックが2つのブロックに分割される。更に、既
存のブロックの全ての後続ブロックは新たなブロックに
転送され、既存ブロックの基本ブロック記述子は短いブ
ロック長さを表すように更新され、新たなブロックに対
するポインタが、実行転送命令を含むブロックの基本ブ
ロック記述子における後続ブロックのリストに加えら
れ、そして命令アドレスのテーブルが、既存ブロックの
変更を表すように更新される。次いで、ステップ266に
おいて、新たなブロック及びその後続ブロックのライン
内のブロックにおける計算行き先アドレスに対して後方
記号実行が再び繰り返され、検査されている経路を通し
ての後方記号実行によって更に別の行き先を求める試み
がなされる。これにより、経路の検査が完了する。
断された場合には、ステップ265において、既存のブロ
ックを先行ブロックとして有する新たなブロックと、実
行転送命令を含むブロックとを形成することにより、既
存のブロックが2つのブロックに分割される。更に、既
存のブロックの全ての後続ブロックは新たなブロックに
転送され、既存ブロックの基本ブロック記述子は短いブ
ロック長さを表すように更新され、新たなブロックに対
するポインタが、実行転送命令を含むブロックの基本ブ
ロック記述子における後続ブロックのリストに加えら
れ、そして命令アドレスのテーブルが、既存ブロックの
変更を表すように更新される。次いで、ステップ266に
おいて、新たなブロック及びその後続ブロックのライン
内のブロックにおける計算行き先アドレスに対して後方
記号実行が再び繰り返され、検査されている経路を通し
ての後方記号実行によって更に別の行き先を求める試み
がなされる。これにより、経路の検査が完了する。
ステップ263で行き先がデコードされたブロックの開始
部であると判断された場合には、ステップ267におい
て、実行転送命令を含むブロックに対するポインタが既
存ブロックの基本ブロック記述子における先行ブロック
のリストに加えられ、そして既存ブロックに対するポイ
ンタが、実行転送命令を含むブロックの基本ブロック記
述子における後続ブロックのリストに加えられる。ステ
ップ266において、検査されている経路を通しての後方
記号実行が、既存ブロック及びそこからの後続ブロック
のラインにおける計算行き先アドレスに対して再び繰り
返される。これで経路の検査は終了である。
部であると判断された場合には、ステップ267におい
て、実行転送命令を含むブロックに対するポインタが既
存ブロックの基本ブロック記述子における先行ブロック
のリストに加えられ、そして既存ブロックに対するポイ
ンタが、実行転送命令を含むブロックの基本ブロック記
述子における後続ブロックのリストに加えられる。ステ
ップ266において、検査されている経路を通しての後方
記号実行が、既存ブロック及びそこからの後続ブロック
のラインにおける計算行き先アドレスに対して再び繰り
返される。これで経路の検査は終了である。
ステップ264で行き先が既存の命令の中間にあると判断
された場合には、ステップ268でエラーメッセージが発
生され、経路の検査が終わりとなる。
された場合には、ステップ268でエラーメッセージが発
生され、経路の検査が終わりとなる。
ステップ264で行き先が既存の命令の中間にないと決定
された場合には、ステップ269において、実行転送命令
のOPコードが検査され、それが手順であるかサブルーチ
ン呼び出しであるかが決定される。もしそうであれば、
ステップ270において、手順又はサブルーチンへの経路
をたどることになる。サブルーチンがまだ変換されてい
ない場合には、変換される。いずれの場合にも、特定の
手順又はサブルーチン呼び出しの作用についての情報を
記憶するために「プレースホルダー」ブロックが流れ図
に形成される。サブルーチンがまだ変換されていない場
合には、スタック上の復帰アドレス又はセーブレジスタ
を変更しないようにするためその手順又はサブルーチン
が分析される。図24のステップ372及び373について以下
で詳細に述べるように、この分析により「コールバッ
ク」の存在が明らかになる。ステップ269で見つかった
サブルーチン呼び出しが、コールバックを注目すべき入
力ポイントに対して生じる場合には、後方記号実行(図
24のステップ374について以下で説明する)を試みて、
ルーチンのアドレスを発見し、それを変換しなければな
らない。
された場合には、ステップ269において、実行転送命令
のOPコードが検査され、それが手順であるかサブルーチ
ン呼び出しであるかが決定される。もしそうであれば、
ステップ270において、手順又はサブルーチンへの経路
をたどることになる。サブルーチンがまだ変換されてい
ない場合には、変換される。いずれの場合にも、特定の
手順又はサブルーチン呼び出しの作用についての情報を
記憶するために「プレースホルダー」ブロックが流れ図
に形成される。サブルーチンがまだ変換されていない場
合には、スタック上の復帰アドレス又はセーブレジスタ
を変更しないようにするためその手順又はサブルーチン
が分析される。図24のステップ372及び373について以下
で詳細に述べるように、この分析により「コールバッ
ク」の存在が明らかになる。ステップ269で見つかった
サブルーチン呼び出しが、コールバックを注目すべき入
力ポイントに対して生じる場合には、後方記号実行(図
24のステップ374について以下で説明する)を試みて、
ルーチンのアドレスを発見し、それを変換しなければな
らない。
ステップ271において、実行転送命令のOPコードが再び
検査されて、検査されている経路が条件分岐であるかど
うか判断される。もしそうでなければ、その経路をたど
る。さもなくば、ステップ272において、条件分岐命令
の実行転送の行き先アドレスに対してデコードされない
ブロックが形成され、この新たなブロックの基本ブロッ
ク記述子に対するポインタがデコードされないブロック
のリストに入れられる。
検査されて、検査されている経路が条件分岐であるかど
うか判断される。もしそうでなければ、その経路をたど
る。さもなくば、ステップ272において、条件分岐命令
の実行転送の行き先アドレスに対してデコードされない
ブロックが形成され、この新たなブロックの基本ブロッ
ク記述子に対するポインタがデコードされないブロック
のリストに入れられる。
VAX命令セットは、条件分岐命令よりも複雑な特別の「C
ASE」命令を含んでいる。理論的には、行き先の数が実
行時間にしか分からないようなCASE命令をもつことがで
きるが、このような命令は変換不能であり、それ故、ア
ナライザーはこれを「変換不能」とマークし、コードジ
ェネレーターがこのCASE命令を解読するようにインター
プリターへの呼び出しを発生するようにしなければなら
ない。通常の状態においては、CASE命令に対する行き先
の数は変換時間に分かる。これら行き先の1つを除く全
てを図18のステップ236で待ち行列に入れることがで
き、一方、経路は残りの行き先から続けることができ
る。しかしながら、CASE命令に対して指定された多数の
行き先の1つが、実行中に取り上げられることがないの
で、不適切であるという問題がときどき発生する。この
状態においては、その不適切な行き先に対する変位が通
常はゼロである。それ故、図18のステップ236において
は、CASEのOPコード及びゼロ変位経路に対して特殊なテ
ストを行わねばならない。この状態が見つかった場合
は、そのCASEターゲットが「変換不能」とマークされ、
これが実行時間に解読される。CASE命令で発生するもう
1つの問題は、不適切な経路がアドレスシーケンスの次
の命令へ至る「フォール・スルー」経路になることがと
きどきあることである。この状態では、この「フォール
・スルー」経路は変換可能なコードを含まないことがあ
り、図18のステップ230において説明及び変換エラーを
招くことになる。説明及び変換エラーが生じると、トラ
ンスレーターはエラーメッセージを発生し、経路をたど
らないよう切断しなければならない(ステップ238にお
いて実行を続けることにより)。エラーメッセージを公
式に表すために、トランスレーターは、その説明又は変
換エラーが生じた命令に先行するCASEステートメントを
探索し、それが見つかったときに、そのエラーがおそら
くCASEステートメントによるものであると診断する。更
に、CASEステートメントに伴うこれらの問題は、見つか
った時点で、オリジナルプログラムに対してトランスレ
ーターによって発生された像情報ファイルに記録され
る。
ASE」命令を含んでいる。理論的には、行き先の数が実
行時間にしか分からないようなCASE命令をもつことがで
きるが、このような命令は変換不能であり、それ故、ア
ナライザーはこれを「変換不能」とマークし、コードジ
ェネレーターがこのCASE命令を解読するようにインター
プリターへの呼び出しを発生するようにしなければなら
ない。通常の状態においては、CASE命令に対する行き先
の数は変換時間に分かる。これら行き先の1つを除く全
てを図18のステップ236で待ち行列に入れることがで
き、一方、経路は残りの行き先から続けることができ
る。しかしながら、CASE命令に対して指定された多数の
行き先の1つが、実行中に取り上げられることがないの
で、不適切であるという問題がときどき発生する。この
状態においては、その不適切な行き先に対する変位が通
常はゼロである。それ故、図18のステップ236において
は、CASEのOPコード及びゼロ変位経路に対して特殊なテ
ストを行わねばならない。この状態が見つかった場合
は、そのCASEターゲットが「変換不能」とマークされ、
これが実行時間に解読される。CASE命令で発生するもう
1つの問題は、不適切な経路がアドレスシーケンスの次
の命令へ至る「フォール・スルー」経路になることがと
きどきあることである。この状態では、この「フォール
・スルー」経路は変換可能なコードを含まないことがあ
り、図18のステップ230において説明及び変換エラーを
招くことになる。説明及び変換エラーが生じると、トラ
ンスレーターはエラーメッセージを発生し、経路をたど
らないよう切断しなければならない(ステップ238にお
いて実行を続けることにより)。エラーメッセージを公
式に表すために、トランスレーターは、その説明又は変
換エラーが生じた命令に先行するCASEステートメントを
探索し、それが見つかったときに、そのエラーがおそら
くCASEステートメントによるものであると診断する。更
に、CASEステートメントに伴うこれらの問題は、見つか
った時点で、オリジナルプログラムに対してトランスレ
ーターによって発生された像情報ファイルに記録され
る。
図18ないし19の手順によって発生された流れ図が図15に
示されている。“DHRYSTONE"という名称のプログラムで
は、初期入力ポイントが〈main〉であり、これはオリジ
ナルプログラムに2E00のアドレスを有している。最初の
2つのバイトはVAX呼び出しマスク0000であり、"DHRYST
ONE"が呼び出されたときにセーブすべき余分なレジスタ
がないことを指定すると共に、例外イネーブルビットIV
及びDV(整数および10進オーバーフロー)がオフになる
べきである(Cプログラムに対するデフィート)ことを
指定している。図15では、手順呼び出しのための六角形
記号301によって表された最初の基本ブロックにこの情
報が含まれる。
示されている。“DHRYSTONE"という名称のプログラムで
は、初期入力ポイントが〈main〉であり、これはオリジ
ナルプログラムに2E00のアドレスを有している。最初の
2つのバイトはVAX呼び出しマスク0000であり、"DHRYST
ONE"が呼び出されたときにセーブすべき余分なレジスタ
がないことを指定すると共に、例外イネーブルビットIV
及びDV(整数および10進オーバーフロー)がオフになる
べきである(Cプログラムに対するデフィート)ことを
指定している。図15では、手順呼び出しのための六角形
記号301によって表された最初の基本ブロックにこの情
報が含まれる。
次の9バイトが、2つの命令、即ちSUBL2(ロングワー
ド減算)とそれに続くJSB(サブルーチンへのジャン
プ)とで構成された単一の基本ブロックである。図15で
は、「ノーマル」ブロックのための長方形302で表され
た第2の基本ブロックにこの情報が示されている。
ド減算)とそれに続くJSB(サブルーチンへのジャン
プ)とで構成された単一の基本ブロックである。図15で
は、「ノーマル」ブロックのための長方形302で表され
た第2の基本ブロックにこの情報が示されている。
JSB命令に遭遇すると、トランスレーターは、像情報フ
ァイルのルックアップを行い、レファレンスを像VAXCRT
Lのオフセット0にし、そしてオフセット0に関連した
情報をファイル内で探す。トランスレーターは、ノーマ
ルな復帰と、レジスタの使用及びセッティングとを見つ
ける。この情報に基づいて、トランスレーターは、JSB
プレースホルダーについて破線の楕円303で示されたプ
レースホルダーブロックを確立しそして(使用JSB特性
により)そのプレースホルダーを、アドレス2E0Bにおい
てJSB命令の直後にスタートする新たな基本ブロックに
接続する。この基本ブロックは、単一のCALLS命令より
成り、長方形304によって表される。トランスレーター
は、行き先アドレスを2E18と計算し、それが"DHRYSTON
E"像内の手順(Proc0)であるがまだ検査されていない
ことを見つける。トランスレーターは、流れ図に破線の
六角形305でしめされた手順呼び出しのためのプレース
ホルダーを形成する。この手順はまだ検査されていない
ので、トランスレーターは、アドレス2E18で開始して手
順内の命令の説明を続ける。最終的に、トランスレータ
ーは、手順内のRETをデコードし、これはメインルーチ
ンのアドレス2E12へのノーマル復帰であることを指示す
る。
ァイルのルックアップを行い、レファレンスを像VAXCRT
Lのオフセット0にし、そしてオフセット0に関連した
情報をファイル内で探す。トランスレーターは、ノーマ
ルな復帰と、レジスタの使用及びセッティングとを見つ
ける。この情報に基づいて、トランスレーターは、JSB
プレースホルダーについて破線の楕円303で示されたプ
レースホルダーブロックを確立しそして(使用JSB特性
により)そのプレースホルダーを、アドレス2E0Bにおい
てJSB命令の直後にスタートする新たな基本ブロックに
接続する。この基本ブロックは、単一のCALLS命令より
成り、長方形304によって表される。トランスレーター
は、行き先アドレスを2E18と計算し、それが"DHRYSTON
E"像内の手順(Proc0)であるがまだ検査されていない
ことを見つける。トランスレーターは、流れ図に破線の
六角形305でしめされた手順呼び出しのためのプレース
ホルダーを形成する。この手順はまだ検査されていない
ので、トランスレーターは、アドレス2E18で開始して手
順内の命令の説明を続ける。最終的に、トランスレータ
ーは、手順内のRETをデコードし、これはメインルーチ
ンのアドレス2E12へのノーマル復帰であることを指示す
る。
トランスレーターは、2E12で始まる説明を続け、CVTWL
(ワードをロングワードに変換する)命令と、RET(復
帰)命令とを見つける。これらは、流れ図において長方
形306で示された基本ブロックに含まれるものである。R
ET命令はメインルーチンを終了し、従って、トランスレ
ーターは、DHRYSTONEプログラムの他の何らかの入力ポ
イントで続けねばならない。
(ワードをロングワードに変換する)命令と、RET(復
帰)命令とを見つける。これらは、流れ図において長方
形306で示された基本ブロックに含まれるものである。R
ET命令はメインルーチンを終了し、従って、トランスレ
ーターは、DHRYSTONEプログラムの他の何らかの入力ポ
イントで続けねばならない。
図20を参照すれば、後方記号実行を行う手順のフローチ
ャートが示されている。後方記号実行のプロセスにおい
ては、実行転送命令の行き先アドレスが記号実行によっ
て表され、各々の手前の命令の作用を表すように式が次
々に変更される。例えば、実行転送命令が"JMP R6+4"
であるとする。これは、汎用レジスタR6の内容に4を加
えることにより計算した絶対アドレスに実行を転送する
ものである。計算された行き先アドレスは、例えば、"R
6+4"という記号で表される。プログラムを通して後方
にR6を参照する次の命令は、"MOVAB 4(R5),R6"であ
り、これは、汎用レジスタR5の内容に4を加えそしてそ
の和をR6に入れるものである。従って、記号式"R6+4"
は、その手前の"MOVAB 4(R5),R6"命令を通して押し戻
され、変更された式"R5+8"を得る。この変更された式
は、その記号式が手前の命令の後に有するものと同じ値
をその手前の命令の前に有している。
ャートが示されている。後方記号実行のプロセスにおい
ては、実行転送命令の行き先アドレスが記号実行によっ
て表され、各々の手前の命令の作用を表すように式が次
々に変更される。例えば、実行転送命令が"JMP R6+4"
であるとする。これは、汎用レジスタR6の内容に4を加
えることにより計算した絶対アドレスに実行を転送する
ものである。計算された行き先アドレスは、例えば、"R
6+4"という記号で表される。プログラムを通して後方
にR6を参照する次の命令は、"MOVAB 4(R5),R6"であ
り、これは、汎用レジスタR5の内容に4を加えそしてそ
の和をR6に入れるものである。従って、記号式"R6+4"
は、その手前の"MOVAB 4(R5),R6"命令を通して押し戻
され、変更された式"R5+8"を得る。この変更された式
は、その記号式が手前の命令の後に有するものと同じ値
をその手前の命令の前に有している。
後方記号実行のプロセスは、計算行き先アドレスが絶対
アドレス又は像関連アドレスとして求められるか、或い
は計算行き先アドレスの値に影響するが後方記号実行を
許さないような手前の命令に到達するまで、続けられ
る。例えば、後方記号実行で計算行き先アドレスを求め
ることが不可能であるか求められないような幾つかの命
令(XORB2 R1,R2のような)の場合に、後方記号実行は
許されない。この場合には、計算行き先アドレスを「未
知」の記号値へ減少し、欠落コードのおそれを指示する
のが便利である。しかしながら、限定された組の命令
(例えば、汎用レジスタを伴う加算、減算、ロード及び
記憶)のみに対して記号実行を許すことにより、典型的
なプログラムで見い出される計算行き先実行の大部分を
求めることができる。
アドレス又は像関連アドレスとして求められるか、或い
は計算行き先アドレスの値に影響するが後方記号実行を
許さないような手前の命令に到達するまで、続けられ
る。例えば、後方記号実行で計算行き先アドレスを求め
ることが不可能であるか求められないような幾つかの命
令(XORB2 R1,R2のような)の場合に、後方記号実行は
許されない。この場合には、計算行き先アドレスを「未
知」の記号値へ減少し、欠落コードのおそれを指示する
のが便利である。しかしながら、限定された組の命令
(例えば、汎用レジスタを伴う加算、減算、ロード及び
記憶)のみに対して記号実行を許すことにより、典型的
なプログラムで見い出される計算行き先実行の大部分を
求めることができる。
図19のステップ252で呼び出されると、後方記号実行は
図20のステップ321で開始される。このステップ321で
は、実行転送命令の計算された行き先(図18のステップ
235で確認された)を行き先アドレスの記号表示の所定
のフォーマットに変換する試みがなされる。例えば、実
行転送命令の計算された行き先オペランドは、アッセン
ブラー表示により、対応するアドレッシングモードの名
称と共に以下のテーブルに示された次の形態を少なくと
も有することができる。
図20のステップ321で開始される。このステップ321で
は、実行転送命令の計算された行き先(図18のステップ
235で確認された)を行き先アドレスの記号表示の所定
のフォーマットに変換する試みがなされる。例えば、実
行転送命令の計算された行き先オペランドは、アッセン
ブラー表示により、対応するアドレッシングモードの名
称と共に以下のテーブルに示された次の形態を少なくと
も有することができる。
計算行き先アドレスに対する行き先オペランド 1.(Rn) デファーしたレジスタ 2.-(Rn) 自動減少 3.(Rn)+ 自動増加 4.@(Rn)+ デファーした自動増加 5.disp(Rn) バイト/ワード/ロングワード変位 6.disp(PC) バイト/ワード/ロングワード相対的 7.@disp(Rn) デファーしたバイト/ワード/ロングワード変位 8.@disp(PC) デファーしたバイト/ワード/ロングワード相対 9.(Rn)[Rx] デファーし、指示されたレジスタ 10.-(Rn)[Rx] 指示された自動減少 11.(Rn)+[Rx] 指示された自動増加 12.@(Rn)+[Rx] デファーし、指示された自動増加 13.disp(Rn)+[Rx] 指示されたバイト/ワード/ロングワード変位 14.@disp(Rn)+[Rx] デファーし、指示されたバイト/ワード/ロングワ
ード変位 指示されたアドレス方法は、テーブル及びアレイをアド
レスするのに一般に使用されるものであるが、実行転送
の行き先アドレスを指定するのに一般に使用されるもの
ではない。それ故、記号表現のための1つの好ましいフ
ォーマットは、指示されたアドレッシングモード以外の
全てのものを表すことのできるフォーマットで行き先ア
ドレスを表示する。このようなフォーマットが図21に示
されている。これは、デファーしたアドレッシングを指
示するメモリアクセスフラグ326と、レジスタ番号327
と、ロングワード変位328とを含む。又、このフォーマ
ットは、レジスタ番号327が有効であることを指示する
ようにセットすることができるレジスタフラグ329を含
み、従って、このフォーマットはロングワード定数を表
すこともできる。レジスタフラグは、例えば、図20のス
テップ321の間にセットされ、そして後方記号実行のプ
ロセスでレジスタ番号により指示されたレジスタの内容
の値が見つかってその値がロングワード変位に加えられ
た場合及びそのようなときにリセットされる。図21のフ
ォーマットで指示されるアドレス値は、レジスタフラグ
がセットされたときにレジスタの内容に変位を加えるこ
とによって得た値であるか、或いはレジスタフラグがセ
ットされないときの変位の値であり、そしてメモリアク
セスフラグがセットされたときは、その和の値がアドレ
スとして使用されて、メモリからアドレス値がフェッチ
される。
ード変位 指示されたアドレス方法は、テーブル及びアレイをアド
レスするのに一般に使用されるものであるが、実行転送
の行き先アドレスを指定するのに一般に使用されるもの
ではない。それ故、記号表現のための1つの好ましいフ
ォーマットは、指示されたアドレッシングモード以外の
全てのものを表すことのできるフォーマットで行き先ア
ドレスを表示する。このようなフォーマットが図21に示
されている。これは、デファーしたアドレッシングを指
示するメモリアクセスフラグ326と、レジスタ番号327
と、ロングワード変位328とを含む。又、このフォーマ
ットは、レジスタ番号327が有効であることを指示する
ようにセットすることができるレジスタフラグ329を含
み、従って、このフォーマットはロングワード定数を表
すこともできる。レジスタフラグは、例えば、図20のス
テップ321の間にセットされ、そして後方記号実行のプ
ロセスでレジスタ番号により指示されたレジスタの内容
の値が見つかってその値がロングワード変位に加えられ
た場合及びそのようなときにリセットされる。図21のフ
ォーマットで指示されるアドレス値は、レジスタフラグ
がセットされたときにレジスタの内容に変位を加えるこ
とによって得た値であるか、或いはレジスタフラグがセ
ットされないときの変位の値であり、そしてメモリアク
セスフラグがセットされたときは、その和の値がアドレ
スとして使用されて、メモリからアドレス値がフェッチ
される。
図22には、計算行き先アドレスに関連した全てのアドレ
スモードを表すことのできる記号表示のための更に複雑
なフォーマットが示されている。このフォーマットは、
メモリアクセスフラグ331と、インデックスレジスタフ
ラグ332と、インデックスレジスタ番号333と、倍率定数
334と、ベースレジスタフラグ335と、ベースレジスタ番
号336と、ロングワード変位337とを含んでいる。この複
雑なフォーマットにより指示されたアドレス値は、変位
の値に、ベースレジスタフラグがセットされたときには
ベースレジスタの値を加え、インデックスレジスタフラ
グがセットされたときにはインデックスレジスタの値に
倍率定数を掛けた値を加えたものであり、メモリアクセ
スフラグがセットされたときには、その和がアドレスと
して使用されてメモリからアドレス値がフェッチされ
る。図22のより複雑なフォーマットは、指示されたアド
レッシングモードを使用しない実行転送命令のための行
き先アドレスを見つける場合に後方記号実行を改善する
ものである。というのは、命令セットにおけるより多く
のOPコードの作用を考慮するように記号実行のプロセス
を行えるからである。例えば、図21のフォーマットは、
レジスタ番号によって指定されたレジスタに基づいて補
数命令の作用を表すことはできない。しかし、図21のフ
ォーマットは、符号付きのオフセット番号を使用するこ
とができ、インデックスレジスタ番号で指定されたイン
デックスレジスタに基づく補数命令の作用を、そのオフ
セット番号の補数をとることにより考慮することができ
る。
スモードを表すことのできる記号表示のための更に複雑
なフォーマットが示されている。このフォーマットは、
メモリアクセスフラグ331と、インデックスレジスタフ
ラグ332と、インデックスレジスタ番号333と、倍率定数
334と、ベースレジスタフラグ335と、ベースレジスタ番
号336と、ロングワード変位337とを含んでいる。この複
雑なフォーマットにより指示されたアドレス値は、変位
の値に、ベースレジスタフラグがセットされたときには
ベースレジスタの値を加え、インデックスレジスタフラ
グがセットされたときにはインデックスレジスタの値に
倍率定数を掛けた値を加えたものであり、メモリアクセ
スフラグがセットされたときには、その和がアドレスと
して使用されてメモリからアドレス値がフェッチされ
る。図22のより複雑なフォーマットは、指示されたアド
レッシングモードを使用しない実行転送命令のための行
き先アドレスを見つける場合に後方記号実行を改善する
ものである。というのは、命令セットにおけるより多く
のOPコードの作用を考慮するように記号実行のプロセス
を行えるからである。例えば、図21のフォーマットは、
レジスタ番号によって指定されたレジスタに基づいて補
数命令の作用を表すことはできない。しかし、図21のフ
ォーマットは、符号付きのオフセット番号を使用するこ
とができ、インデックスレジスタ番号で指定されたイン
デックスレジスタに基づく補数命令の作用を、そのオフ
セット番号の補数をとることにより考慮することができ
る。
非常に多数の命令オペレーションの作用を考慮するため
に、記号表示は、1つ以上の定数を含むアルファニュメ
リック文字列、R1、R2、R3...R15といった各汎用レジス
タの内容を指示するための1つ以上のレジスタ指示体、
+及び*といった演算オペレーション、及びアドレスx
におけるメモリの内容を表すメモリアクセスファンクシ
ョン@(x)のような可変長さフォーマットを使用する
ことができ、これにより、記号表示の値は、代数の法則
を適用することにより表される値となる。
に、記号表示は、1つ以上の定数を含むアルファニュメ
リック文字列、R1、R2、R3...R15といった各汎用レジス
タの内容を指示するための1つ以上のレジスタ指示体、
+及び*といった演算オペレーション、及びアドレスx
におけるメモリの内容を表すメモリアクセスファンクシ
ョン@(x)のような可変長さフォーマットを使用する
ことができ、これにより、記号表示の値は、代数の法則
を適用することにより表される値となる。
それ故、@7(R1)〔R4〕のようなデファーしたロング
ワード変位の指定子は、@(4*R4+R1+7)と表され
る。インデックスレジスタR4に対するオフセット定数4
は、指定子のロングワードモードによって決定され、オ
フセット定数は、ワードモードの場合2であり、バイト
モードの場合1である。しかしながら、オフセット定数
1は、文字列に含ませる必要はない。簡単化のための他
の代数法則が次のように適用される。即ち、x+A+B
(但し、A及びBは定数である)は、x+C(但し、C
=A+B)と簡単化され、x+Ry+Ryは、x+2*Ryと
簡単化され、そして@(z)+@(z)+xは、2*@
(z)+xと簡単化される。
ワード変位の指定子は、@(4*R4+R1+7)と表され
る。インデックスレジスタR4に対するオフセット定数4
は、指定子のロングワードモードによって決定され、オ
フセット定数は、ワードモードの場合2であり、バイト
モードの場合1である。しかしながら、オフセット定数
1は、文字列に含ませる必要はない。簡単化のための他
の代数法則が次のように適用される。即ち、x+A+B
(但し、A及びBは定数である)は、x+C(但し、C
=A+B)と簡単化され、x+Ry+Ryは、x+2*Ryと
簡単化され、そして@(z)+@(z)+xは、2*@
(z)+xと簡単化される。
ステップ321においては、行き先指定子を検査すること
により実行転送命令のための行き先アドレスを求める試
みがなされる。これは、相対的なアドレッシングモード
及び相対的なデファーしたアドレッシングモードに対し
て行うことができる。相対的なアドレッシングモードに
おいては、次の命令のアドレス(即ちプログラムカウン
タの更新した値)が変位に加えられて、所望の行き先ア
ドレスが与えられる。相対的なデファーしたアドレッシ
ングモードにおいては、次の命令のアドレスが変位に加
えられて絶対アドレスが得られ、そしてこの絶対アドレ
スにあるメモリの内容(これは図14の固定メモリエリア
188になければならない)がフェッチされて、所望の行
き先アドレスが与えられる。ステップ322において、行
き先アドレスを求めたときには、図18のステップ237に
おいて経路をたどるように実行分岐が続けられる。
により実行転送命令のための行き先アドレスを求める試
みがなされる。これは、相対的なアドレッシングモード
及び相対的なデファーしたアドレッシングモードに対し
て行うことができる。相対的なアドレッシングモードに
おいては、次の命令のアドレス(即ちプログラムカウン
タの更新した値)が変位に加えられて、所望の行き先ア
ドレスが与えられる。相対的なデファーしたアドレッシ
ングモードにおいては、次の命令のアドレスが変位に加
えられて絶対アドレスが得られ、そしてこの絶対アドレ
スにあるメモリの内容(これは図14の固定メモリエリア
188になければならない)がフェッチされて、所望の行
き先アドレスが与えられる。ステップ322において、行
き先アドレスを求めたときには、図18のステップ237に
おいて経路をたどるように実行分岐が続けられる。
ステップ321において行き先アドレスが求められないと
きには、ステップ323において、実行転送命令に対する
行き先指定子を、命令の開始に評価したときに行き先ア
ドレスの値を表す記号表示へと変換するための試みがな
される。これは、命令の終わりに生じる行き先指定子自
体の評価と対照的である。
きには、ステップ323において、実行転送命令に対する
行き先指定子を、命令の開始に評価したときに行き先ア
ドレスの値を表す記号表示へと変換するための試みがな
される。これは、命令の終わりに生じる行き先指定子自
体の評価と対照的である。
自動減少モードを除く全ての場合に、行き先指定子に対
するアッセンブリ言語表示は、記号表示の項目に一致す
ることによって直接変換をする。自動減少モードの場合
には、ベースレジスタの内容が行き先指定子の評価に使
用される前に、ベースレジスタの内容が命令OPコードの
データ形式に基づいて1、2、4、8又は16だけ減少さ
れる。それ故、自動減少行き先指定子が変換されるとき
は、記号表示における変位定数が実行転送命令のOPコー
ドのデータ形式に基づいて−1、−2、−4、−8又は
−16となる。更に、命令アーキテクチャーが実行転送命
令において自動減少ソース指定子を許す場合には、行き
先指定子に含まれたレジスタと同じベースレジスタを用
いた各々の自動減少ソース指定子に対し、記号表示の変
位定数は、各々のこのような自動減少指定子の作用を考
慮するために、実行転送命令のOPコードのデータ形式に
基づいて、−1、−2、−4、−8又は−16だけ減少す
る必要がある。
するアッセンブリ言語表示は、記号表示の項目に一致す
ることによって直接変換をする。自動減少モードの場合
には、ベースレジスタの内容が行き先指定子の評価に使
用される前に、ベースレジスタの内容が命令OPコードの
データ形式に基づいて1、2、4、8又は16だけ減少さ
れる。それ故、自動減少行き先指定子が変換されるとき
は、記号表示における変位定数が実行転送命令のOPコー
ドのデータ形式に基づいて−1、−2、−4、−8又は
−16となる。更に、命令アーキテクチャーが実行転送命
令において自動減少ソース指定子を許す場合には、行き
先指定子に含まれたレジスタと同じベースレジスタを用
いた各々の自動減少ソース指定子に対し、記号表示の変
位定数は、各々のこのような自動減少指定子の作用を考
慮するために、実行転送命令のOPコードのデータ形式に
基づいて、−1、−2、−4、−8又は−16だけ減少す
る必要がある。
ステップ324において、行き先指定子を記号表示に変換
できないときには実行がステップ325へと分岐する。こ
れは、例えば、図21の固定フォーマットが記号表示に使
用されそして行き先指定子が指示されたアドレッシング
モードを有するときに生じる。ステップ325では、実行
転送命令が未知の行き先を有することを指示する警報が
発せられる。
できないときには実行がステップ325へと分岐する。こ
れは、例えば、図21の固定フォーマットが記号表示に使
用されそして行き先指定子が指示されたアドレッシング
モードを有するときに生じる。ステップ325では、実行
転送命令が未知の行き先を有することを指示する警報が
発せられる。
行き先指定子が記号表示に変換されるときには、ステッ
プ341においてある変数が初期化され、後方記号実行を
行って、記号表示に対して考えられる行き先値がサーチ
される。一定の値を受け入れるためのリストがクリアさ
れ、少なくとも1つの未知の値の存在を指示するフラグ
がクリアされる。更に、「エポック」番号が増加され
る。
プ341においてある変数が初期化され、後方記号実行を
行って、記号表示に対して考えられる行き先値がサーチ
される。一定の値を受け入れるためのリストがクリアさ
れ、少なくとも1つの未知の値の存在を指示するフラグ
がクリアされる。更に、「エポック」番号が増加され
る。
このエポック番号は、記号実行がパスした各ブロックを
マークして流れ図を通る無限ループができるのを防止す
るのに用いられる。無限ループの可能性は、図23に示さ
れた流れ図によって示されている。この流れ図はハイア
ラーキデータ構造体として描かれたものである。この流
れ図は、例えば、メイン入力ポイント342を有し、そし
て実行はターミナルブロック343、344の復帰命令で終了
する。いずれのブロックについてもその終了部から開始
部へ直接的に延びるループはないが、経路345及び346が
中間ブロック347及び348を相互接続しており、ハイアラ
ーキ式のサーチ中に無限ループを生じさせることがあ
る。例えば、前方のハイアラーキサーチは、ブロックの
サーチをその開始部において開始するルーチンを呼び出
すことにより典型的に実行され、ブロックの終了部に到
達した場合及びそのときに、ルーチンはそのブロックの
各後続ブロックに対してそれ自身を繰り返し呼び出し、
これに対して、後方のハイアラーキ式サーチはブロック
のサーチをその終了部から開始するルーチンを呼び出す
ことによって典型的に実行され、ブロックの開始部に到
達した場合及びそのときに、ルーチンはそのブロックの
各先行ブロックに対してそれ自身を呼び出す。経路345
及び346の存在によりこれらのサーチルーチンのいずれ
かが無限ループに捕まることになる。というのは、中間
ブロック347、348が交互に且つ繰り返しサーチされるか
らである。
マークして流れ図を通る無限ループができるのを防止す
るのに用いられる。無限ループの可能性は、図23に示さ
れた流れ図によって示されている。この流れ図はハイア
ラーキデータ構造体として描かれたものである。この流
れ図は、例えば、メイン入力ポイント342を有し、そし
て実行はターミナルブロック343、344の復帰命令で終了
する。いずれのブロックについてもその終了部から開始
部へ直接的に延びるループはないが、経路345及び346が
中間ブロック347及び348を相互接続しており、ハイアラ
ーキ式のサーチ中に無限ループを生じさせることがあ
る。例えば、前方のハイアラーキサーチは、ブロックの
サーチをその開始部において開始するルーチンを呼び出
すことにより典型的に実行され、ブロックの終了部に到
達した場合及びそのときに、ルーチンはそのブロックの
各後続ブロックに対してそれ自身を繰り返し呼び出し、
これに対して、後方のハイアラーキ式サーチはブロック
のサーチをその終了部から開始するルーチンを呼び出す
ことによって典型的に実行され、ブロックの開始部に到
達した場合及びそのときに、ルーチンはそのブロックの
各先行ブロックに対してそれ自身を呼び出す。経路345
及び346の存在によりこれらのサーチルーチンのいずれ
かが無限ループに捕まることになる。というのは、中間
ブロック347、348が交互に且つ繰り返しサーチされるか
らである。
前方又は後方のサーチ中に無限のループができるのを防
止するために「エポック番号」がサーチの前に増加さ
れ、ブロックに対してサーチルーチンに入るたびに、
「エポック番号」がそのブロックに対する「エポック番
号アトリビュート」と比較される。「エポック番号」と
「エポック番号アトリビュート」とが一致することは、
そのサーチ中にそのブロックに既に到達しており、従っ
て、繰り返してはならないことを指示する。
止するために「エポック番号」がサーチの前に増加さ
れ、ブロックに対してサーチルーチンに入るたびに、
「エポック番号」がそのブロックに対する「エポック番
号アトリビュート」と比較される。「エポック番号」と
「エポック番号アトリビュート」とが一致することは、
そのサーチ中にそのブロックに既に到達しており、従っ
て、繰り返してはならないことを指示する。
図20に戻ると、ステップ351において、記号表示の考え
られる値に対し、以下で述べるように図24のサーチルー
チンを呼び出すことにより、後方サーチが開始される。
次いで、ステップ352において、「未知」のフラグが検
査されそしてもしこれがセットされていれば、その記号
表示に対し未知の値が考えられることを警告するために
ステップ353で警報メッセージが発生される。ステップ3
54において、一定値のリストが検査され、それが空であ
る場合には、実行転送命令からの経路の終了部に達して
おり、図18のステップ237及び238において実行が続けら
れて、別の経路をたどる試みがなされる。さもなくば、
ステップ355において、リスト内の各一定値がステップ2
54ないし264について既に述べたようにテストされ、有
効な行き先であることが確かめられる。しかしながら、
図27について上記したように、これらテストの幾つか
は、一定値をリストに入れる前に行うことができ、従っ
て、テストの際に一定値を得た特定の方法を考慮に入れ
ることができる。次いで、ステップ356において、リス
ト内の一定値が有効であるかどうかチェックされる。も
し有効でなければ、実行転送命令からの経路の終端に到
達しており、図18のステップ237及び238において実行が
継続され、別の経路をたどる試みがなされる。さもなく
ば、ステップ357において、2つ以上の有効な行き先を
リストが含むかどうかのチェックが行われる。もしそう
であれば、1つを除く全てがデコードされていないブロ
ックのリスト(図17の225)に入れられ、図18のステッ
プ237及び239において残りの有効行き先で始まる経路が
続けられる。
られる値に対し、以下で述べるように図24のサーチルー
チンを呼び出すことにより、後方サーチが開始される。
次いで、ステップ352において、「未知」のフラグが検
査されそしてもしこれがセットされていれば、その記号
表示に対し未知の値が考えられることを警告するために
ステップ353で警報メッセージが発生される。ステップ3
54において、一定値のリストが検査され、それが空であ
る場合には、実行転送命令からの経路の終了部に達して
おり、図18のステップ237及び238において実行が続けら
れて、別の経路をたどる試みがなされる。さもなくば、
ステップ355において、リスト内の各一定値がステップ2
54ないし264について既に述べたようにテストされ、有
効な行き先であることが確かめられる。しかしながら、
図27について上記したように、これらテストの幾つか
は、一定値をリストに入れる前に行うことができ、従っ
て、テストの際に一定値を得た特定の方法を考慮に入れ
ることができる。次いで、ステップ356において、リス
ト内の一定値が有効であるかどうかチェックされる。も
し有効でなければ、実行転送命令からの経路の終端に到
達しており、図18のステップ237及び238において実行が
継続され、別の経路をたどる試みがなされる。さもなく
ば、ステップ357において、2つ以上の有効な行き先を
リストが含むかどうかのチェックが行われる。もしそう
であれば、1つを除く全てがデコードされていないブロ
ックのリスト(図17の225)に入れられ、図18のステッ
プ237及び239において残りの有効行き先で始まる経路が
続けられる。
図24には、図20のステップ351で呼び出された後方サー
チルーチンのフローチャートが示されている。このルー
チンは2つの入力ポイントを有する。第1の入力ポイン
ト361は、指定のブロックにおける指定の命令アドレス
で新たな後方サーチを開始するために呼び出される。第
2の入力ポイント362は、指定のブロックの終了部で始
まる後方サーチを続けるために呼び出される。
チルーチンのフローチャートが示されている。このルー
チンは2つの入力ポイントを有する。第1の入力ポイン
ト361は、指定のブロックにおける指定の命令アドレス
で新たな後方サーチを開始するために呼び出される。第
2の入力ポイント362は、指定のブロックの終了部で始
まる後方サーチを続けるために呼び出される。
第1の入力ポイント361は、図20のステップ351で呼び出
されて、実行転送命令の命令アドレスで新たな後方サー
チを開始し、この場合、第1のステップ363は、新たな
サーチに対するエポック番号に等しい実行転送命令を含
む現在ブロックのエポック番号アトリビュートをセット
する。次いで、ステップ364において、現在ブロックの
サーチは、現在命令アドレスがブロック内の第1命令の
アドレスである場合に終了となり、これはブロックが実
行転送命令のみで構成される場合に生じる。さもなく
ば、ステップ365において、現在命令アドレスが手前の
命令の命令アドレスに変更される。これら最後の2つの
ステップ364、365が、テーブル(図17の224)をインデ
ックスすることにより容易に行われる。
されて、実行転送命令の命令アドレスで新たな後方サー
チを開始し、この場合、第1のステップ363は、新たな
サーチに対するエポック番号に等しい実行転送命令を含
む現在ブロックのエポック番号アトリビュートをセット
する。次いで、ステップ364において、現在ブロックの
サーチは、現在命令アドレスがブロック内の第1命令の
アドレスである場合に終了となり、これはブロックが実
行転送命令のみで構成される場合に生じる。さもなく
ば、ステップ365において、現在命令アドレスが手前の
命令の命令アドレスに変更される。これら最後の2つの
ステップ364、365が、テーブル(図17の224)をインデ
ックスすることにより容易に行われる。
指定されたブロックの終了部でサーチを続けるように第
2の入力ポイント362が呼び出されたときには、ステッ
プ366において、エポック番号がブロックのエポック番
号アトリビュートと比較される。新たなブロックを形成
するときには、新たなブロックのエポック番号アトリビ
ュートが、新たなサーチの始めに増加されたエポック番
号の現在値に等しくなるようセットされる。更に、エポ
ック番号は、例えばロングワードであって、これが増加
されるたびに、所与のプログラムの変換中に各サーチに
対して独特の値を与える。それ故、ステップ366では、
現在ブロックが現在サーチに既に含まれている場合にの
み、現在サーチのエポック番号が現在ブロックのエポッ
ク番号アトリビュートに等しくなる。サーチプロセスに
無限ループができるのを防止するために、そして何らか
の付加的な値を見つけるおそれが減少することから、現
在ブロックが現在サーチに既に含まれている場合には、
現在ブロックのサーチが終了となる。
2の入力ポイント362が呼び出されたときには、ステッ
プ366において、エポック番号がブロックのエポック番
号アトリビュートと比較される。新たなブロックを形成
するときには、新たなブロックのエポック番号アトリビ
ュートが、新たなサーチの始めに増加されたエポック番
号の現在値に等しくなるようセットされる。更に、エポ
ック番号は、例えばロングワードであって、これが増加
されるたびに、所与のプログラムの変換中に各サーチに
対して独特の値を与える。それ故、ステップ366では、
現在ブロックが現在サーチに既に含まれている場合にの
み、現在サーチのエポック番号が現在ブロックのエポッ
ク番号アトリビュートに等しくなる。サーチプロセスに
無限ループができるのを防止するために、そして何らか
の付加的な値を見つけるおそれが減少することから、現
在ブロックが現在サーチに既に含まれている場合には、
現在ブロックのサーチが終了となる。
ステップ366からサーチを続けるべき場合には、現在ブ
ロックのエポック番号アトリビュートがステップ368に
おいてエポック番号に等しくなるようにセットされる。
次いで、ステップ369において、現在命令のアドレスが
そのブロック内の最後の命令のアドレスに等しくなるよ
うにセットされる。この点において、図24のサーチプロ
セスは、サーチルーチンが第1入力ポイント361から呼
び出されたものであるか第2入力ポイント362から呼び
出されたものであるかに関わりなく同じとなる。
ロックのエポック番号アトリビュートがステップ368に
おいてエポック番号に等しくなるようにセットされる。
次いで、ステップ369において、現在命令のアドレスが
そのブロック内の最後の命令のアドレスに等しくなるよ
うにセットされる。この点において、図24のサーチプロ
セスは、サーチルーチンが第1入力ポイント361から呼
び出されたものであるか第2入力ポイント362から呼び
出されたものであるかに関わりなく同じとなる。
ステップ370において、表示が現在命令を通して後方に
「プッシュ」され、図25について以下で詳細に述べるよ
うに、その表示が求められる。ステップ371でテストし
て、その表示が求められた場合には、後方サーチルーチ
ンから復帰することにより現在ブロックのサーチが終わ
りとなる。その表示が求められなかった場合には、ステ
ップ364、365、370及び371を繰り返し、表示が求められ
るまで又はブロックの開始部に到達するまで、ブロック
内の命令を通して後方に表示を次々にプッシュする。
「プッシュ」され、図25について以下で詳細に述べるよ
うに、その表示が求められる。ステップ371でテストし
て、その表示が求められた場合には、後方サーチルーチ
ンから復帰することにより現在ブロックのサーチが終わ
りとなる。その表示が求められなかった場合には、ステ
ップ364、365、370及び371を繰り返し、表示が求められ
るまで又はブロックの開始部に到達するまで、ブロック
内の命令を通して後方に表示を次々にプッシュする。
ステップ364において、表示がブロックの開始部までプ
ッシュされたと分かった場合には、ステップ372でその
表示がサブルーチンアーギュメントを表しているかどう
かチェックされる。VAXアーキテクチャーの場合には、
定数をCとして、式”@(R12+C)”であるときに、
表示がサブルーチンアーギュメントを表す。サブルーチ
ンのアーギュメントによって指定されたアドレスに対す
る呼び出しは、一般に、手順又はファンクションパラメ
ータに対する呼び出しである「コールバック」として知
られている。この「コールバック」は、より詳細には、
実行転送命令のOPコードに基づいて、コールバックjsbb
ack又はjmpbackと称される。「コールバック」が見つか
ったときには、ステップ373においてその特性がオリジ
ナルプログラムの像情報ファイルに記入され、これは、
図31ないし33を参照して以下で述べるように、異なった
プログラム間の相互依存性による矛盾を解決するために
後で使用される。例えば、VMSシステムサービスルーチ
ン及びコンパイルされたBASICプログラムでは著しい数
のコールバックが見つけられている。
ッシュされたと分かった場合には、ステップ372でその
表示がサブルーチンアーギュメントを表しているかどう
かチェックされる。VAXアーキテクチャーの場合には、
定数をCとして、式”@(R12+C)”であるときに、
表示がサブルーチンアーギュメントを表す。サブルーチ
ンのアーギュメントによって指定されたアドレスに対す
る呼び出しは、一般に、手順又はファンクションパラメ
ータに対する呼び出しである「コールバック」として知
られている。この「コールバック」は、より詳細には、
実行転送命令のOPコードに基づいて、コールバックjsbb
ack又はjmpbackと称される。「コールバック」が見つか
ったときには、ステップ373においてその特性がオリジ
ナルプログラムの像情報ファイルに記入され、これは、
図31ないし33を参照して以下で述べるように、異なった
プログラム間の相互依存性による矛盾を解決するために
後で使用される。例えば、VMSシステムサービスルーチ
ン及びコンパイルされたBASICプログラムでは著しい数
のコールバックが見つけられている。
更に、ステップ374では、記号表示に対して考えられる
値のサーチが、現在ブロックの先行ブロックをサーチす
ることによって続けられる。先行ブロックがプログラム
入力ポイント(即ち、外部像からの呼び出し)として定
められる場合には、記号表示に対する値が発呼プログラ
ムによって決定されるかどうかを検査するために、少な
くとも1つの発呼プログラム像からのパラメータ値に関
する情報が必要とされる。それ故、トランスレーターに
使用できる像情報ファイルは、プログラム入力ポイント
へ通されるパラメータ値に関する情報に対してサーチさ
れる。
値のサーチが、現在ブロックの先行ブロックをサーチす
ることによって続けられる。先行ブロックがプログラム
入力ポイント(即ち、外部像からの呼び出し)として定
められる場合には、記号表示に対する値が発呼プログラ
ムによって決定されるかどうかを検査するために、少な
くとも1つの発呼プログラム像からのパラメータ値に関
する情報が必要とされる。それ故、トランスレーターに
使用できる像情報ファイルは、プログラム入力ポイント
へ通されるパラメータ値に関する情報に対してサーチさ
れる。
先行ブロックがプレースホルダーである場合には、手順
又はサブルーチン呼び出しの作用に関するプレースホル
ダー情報を参照し、これらの作用によって記号表示が求
められるかどうかを判断し−−この場合には、先行ブロ
ックのそれ以上のサーチは不要である−−或いは手順又
はサブルーチン呼び出しが記号表示に対して何の作用も
しないか又は既知の作用を及ぼすかを判断する−−この
場合は、プレースホルダーの先行ブロックまで後方記号
実行を続けることができる。しかしながら、プレースホ
ルダー情報は、サブルーチンが未知の方法で記号表示に
作用することを指示する。この場合に、後方記号表示
は、プレースホルダーにより定められた入力ポイントか
ら続くライン内にあるサブルーチンの各々の考えられる
復帰点から始めて実行することができる。
又はサブルーチン呼び出しの作用に関するプレースホル
ダー情報を参照し、これらの作用によって記号表示が求
められるかどうかを判断し−−この場合には、先行ブロ
ックのそれ以上のサーチは不要である−−或いは手順又
はサブルーチン呼び出しが記号表示に対して何の作用も
しないか又は既知の作用を及ぼすかを判断する−−この
場合は、プレースホルダーの先行ブロックまで後方記号
実行を続けることができる。しかしながら、プレースホ
ルダー情報は、サブルーチンが未知の方法で記号表示に
作用することを指示する。この場合に、後方記号表示
は、プレースホルダーにより定められた入力ポイントか
ら続くライン内にあるサブルーチンの各々の考えられる
復帰点から始めて実行することができる。
先行ブロックが像内の呼び出しステートメントからのサ
ブルーチン呼び出しであるときには、ステップ373にお
いて「コールバック」特性が記入されたときだけ発呼ル
ーチンにおいてサーチがなされる。VAX/VMSプログラム
の場合には、CALLS手順の呼び出しに対してこのサーチ
を行うのが特に望ましい。というのは、このような場合
には、スタックにコールバックパラメータをプッシュす
る命令から記号表示が容易に求められるからである。
又、発呼ルーチンに対するサーチの有効性は、記号表示
がアッセンブラ表示法で”@(R12+N)”又は@N(A
P)である場合のコールバックパラメータ番号Nを、CAL
LSステートメントによってスタックに実際に入れられた
パラメータ番号Mと比較することによりチェックでき、
この番号Mは、CALLS命令の短リテラル指定子である。C
ALLSステートメントの直前に、手順パラメータは、スタ
ック上でメモリ位置(N−4)SPにある。それ故、表示
がCALLS命令を通してプッシュされたとき、SPをAPと取
り替え、表示変位から4を減算することにより、記号表
示に対するCALLSオペレーションの作用が考慮される。C
ALLS命令のアドレスにおいて、求めるべき記号表示
は、”@(R14+(N−4))”である。サーチは、図2
4の後方サーチルーチンの第2入力ポイント362に対する
繰り返し呼び出しによって開始されるが、これは、実行
復帰の際に他の先行ブロックのサーチを続けるために後
方サーチによって必要とされる情報をセーブした後であ
る。呼び出し及び復帰は、次のようにコード化される。
ブルーチン呼び出しであるときには、ステップ373にお
いて「コールバック」特性が記入されたときだけ発呼ル
ーチンにおいてサーチがなされる。VAX/VMSプログラム
の場合には、CALLS手順の呼び出しに対してこのサーチ
を行うのが特に望ましい。というのは、このような場合
には、スタックにコールバックパラメータをプッシュす
る命令から記号表示が容易に求められるからである。
又、発呼ルーチンに対するサーチの有効性は、記号表示
がアッセンブラ表示法で”@(R12+N)”又は@N(A
P)である場合のコールバックパラメータ番号Nを、CAL
LSステートメントによってスタックに実際に入れられた
パラメータ番号Mと比較することによりチェックでき、
この番号Mは、CALLS命令の短リテラル指定子である。C
ALLSステートメントの直前に、手順パラメータは、スタ
ック上でメモリ位置(N−4)SPにある。それ故、表示
がCALLS命令を通してプッシュされたとき、SPをAPと取
り替え、表示変位から4を減算することにより、記号表
示に対するCALLSオペレーションの作用が考慮される。C
ALLS命令のアドレスにおいて、求めるべき記号表示
は、”@(R14+(N−4))”である。サーチは、図2
4の後方サーチルーチンの第2入力ポイント362に対する
繰り返し呼び出しによって開始されるが、これは、実行
復帰の際に他の先行ブロックのサーチを続けるために後
方サーチによって必要とされる情報をセーブした後であ
る。呼び出し及び復帰は、次のようにコード化される。
PRED_BLOCK←PREDECESSORS(BLOCK,PTR1) ・・・・ IF PRED_BLOCK(TYPE)=CALLX THEN (IF CALLBACK THEN (FOR EACH PREDECESSOR OF PRED BLOCK: CALLING_BLOCK←PREDECESSORS(PRED_BLOCK, PTR2) IF CALLING_BLOCK(LAST_INSTR)=CALLS THEN (PUSH(BLOCK,EXPR,PTR1,PRED_BLOCK, PTR2) BLOCK←CALLING_BLOCK CALL BACKWARD_SEARCH POP(BLOCK,EXPR,PTR1,PRED_BLOCK, PTR2)) ELSE SET UNKNOWN_FLAG) ELSE SET UNKNOWN_FLAG ELSE SET UNKNOWN FLAG 先行ブロックがノーマルなブロックである場合には、次
のように繰り返しサーチすることができる。
のように繰り返しサーチすることができる。
IF PRED_BLOCK(TYPE)=NORMAL THEN PUSH(BLOCK,EXPR,PTR1) CALL BACKWARD SEARCH POP(BLOCK,EXPR,PTR1) 全ての先行ブロックが検査又はサーチされた後に、後方
サーチルーチンが終了となり、実行復帰する。
サーチルーチンが終了となり、実行復帰する。
図25には、記号表示を手前の命令を通して後方に「プッ
シュ」して、手前の命令の後に記号表示が有していたも
のと同じ値をその命令の前に有するような変更した表示
を得るためのルーチンのフローチャートが示されてい
る。このルーチンは、例えば、図24のステップ370で呼
び出される。このプロセスは、命令OPコードに大きく依
存している。プログラムカウンタ以外のメモリ又は汎用
レジスタの内容に直接作用しないような命令OPコード
は、定数、レジスタ指定子及びメモリアクセスファンク
ションのみを含む記号表示の値に影響しない。通常の場
合にプログラムカウンタの変化する値は、記号表示の値
に影響しない。というのは、表示をプッシュする前に
は、表示がプログラムカウンタを指定するレジスタ指定
子を有しておらず、表示を通して命令をプッシュするプ
ロセスがプログラムカウンタを指定するレジスタ指定子
を表示を加えようとする場合には、一定のアドレス値に
置き換えることによりそれが除去されるからである。汎
用レジスタ又はメモリの内容に直接影響しないが不定の
仕方で影響すると分かっている命令OPコードは、「未
知」の記号値を見つけてプロセスを終了させる。
シュ」して、手前の命令の後に記号表示が有していたも
のと同じ値をその命令の前に有するような変更した表示
を得るためのルーチンのフローチャートが示されてい
る。このルーチンは、例えば、図24のステップ370で呼
び出される。このプロセスは、命令OPコードに大きく依
存している。プログラムカウンタ以外のメモリ又は汎用
レジスタの内容に直接作用しないような命令OPコード
は、定数、レジスタ指定子及びメモリアクセスファンク
ションのみを含む記号表示の値に影響しない。通常の場
合にプログラムカウンタの変化する値は、記号表示の値
に影響しない。というのは、表示をプッシュする前に
は、表示がプログラムカウンタを指定するレジスタ指定
子を有しておらず、表示を通して命令をプッシュするプ
ロセスがプログラムカウンタを指定するレジスタ指定子
を表示を加えようとする場合には、一定のアドレス値に
置き換えることによりそれが除去されるからである。汎
用レジスタ又はメモリの内容に直接影響しないが不定の
仕方で影響すると分かっている命令OPコードは、「未
知」の記号値を見つけてプロセスを終了させる。
OPコードは汎用レジスタ及びメモリの内容に複雑な仕方
で影響するので、各OPコードの作用に関する情報を、OP
コードによってアドレスされたデコードテーブルに予め
記憶することが所望される。このデコードテーブルは、
各OPコードに対して書かれた別々のルーチンのスタート
アドレスを含むことができる。しかしながら、説明上、
以下では同様の機能を実行するOPコードのルーチンの共
通の特徴について述べることにする。それ故、図26のデ
コードテーブル構成は、種々の経路に沿って分岐して各
OPコードに対して特定の動作を実行するようにより一般
的な手順によって使用することのできる多数のルーチン
及びOPコード情報を備えている。このような一般的な手
順は、各OPコードに対する一般的なルーチンに取り入れ
られる経路を考慮することにより各OPコードに対する別
々なルーチンへと拡張できることを理解されたい。
で影響するので、各OPコードの作用に関する情報を、OP
コードによってアドレスされたデコードテーブルに予め
記憶することが所望される。このデコードテーブルは、
各OPコードに対して書かれた別々のルーチンのスタート
アドレスを含むことができる。しかしながら、説明上、
以下では同様の機能を実行するOPコードのルーチンの共
通の特徴について述べることにする。それ故、図26のデ
コードテーブル構成は、種々の経路に沿って分岐して各
OPコードに対して特定の動作を実行するようにより一般
的な手順によって使用することのできる多数のルーチン
及びOPコード情報を備えている。このような一般的な手
順は、各OPコードに対する一般的なルーチンに取り入れ
られる経路を考慮することにより各OPコードに対する別
々なルーチンへと拡張できることを理解されたい。
図25のフローチャートの第1ステップ381では、テーブ
ルの入力を得るようにデコードテーブルがアドレスされ
る。ステップ382では、その入力がゼロと比較され、命
令が、そのOPコードのみにより、許容できる記号表示の
値に対して何らかのあり得べき作用をもつことができな
いかどうか判断する。もしできなければ、その実行は表
示が分析されないまま復帰となる。
ルの入力を得るようにデコードテーブルがアドレスされ
る。ステップ382では、その入力がゼロと比較され、命
令が、そのOPコードのみにより、許容できる記号表示の
値に対して何らかのあり得べき作用をもつことができな
いかどうか判断する。もしできなければ、その実行は表
示が分析されないまま復帰となる。
デコードテーブルに対して考えられるフォーマットが図
26に示されている。ロングワードテーブル入力386にエ
ンコードされるのは、通常ないような作用を有するOPコ
ードのための特殊な分析ルーチンに対する変位と、OPコ
ードのためのメモリレファレンス分析ルーチンに対する
変位387と、OPコードのためのレジスタ分析ルーチンに
対する変位388と、OPコードが意味するデータ形式及び
オペランドに関するエンコードされた情報389とであ
る。OPコードのためのエンコードされたデータは、例え
ば、含意レジスタ行き先コード391と、データ形式コー
ド392と、スタックポインタの含意自動減少を指示する
フラグ393と、含意メモリオペレーションを指示するフ
ラグ394と、スタックポインタの含意自動増加を指示す
るフラグ395とを含む。含意レジスタコードは、例え
ば、通常の場合には値0を有し、R0及びR1が影響を受け
ることを指示するために値1を有し、R0ないしR3が影響
を受けることを指示するために値2を有し、そしてR0な
いしR5が影響を受けることを指示するために値3を有す
る。データ形式コードは、バイト、ワード、ロングワー
ド、クオドワード又はオクトワードのいずれかを指示す
る。
26に示されている。ロングワードテーブル入力386にエ
ンコードされるのは、通常ないような作用を有するOPコ
ードのための特殊な分析ルーチンに対する変位と、OPコ
ードのためのメモリレファレンス分析ルーチンに対する
変位387と、OPコードのためのレジスタ分析ルーチンに
対する変位388と、OPコードが意味するデータ形式及び
オペランドに関するエンコードされた情報389とであ
る。OPコードのためのエンコードされたデータは、例え
ば、含意レジスタ行き先コード391と、データ形式コー
ド392と、スタックポインタの含意自動減少を指示する
フラグ393と、含意メモリオペレーションを指示するフ
ラグ394と、スタックポインタの含意自動増加を指示す
るフラグ395とを含む。含意レジスタコードは、例え
ば、通常の場合には値0を有し、R0及びR1が影響を受け
ることを指示するために値1を有し、R0ないしR3が影響
を受けることを指示するために値2を有し、そしてR0な
いしR5が影響を受けることを指示するために値3を有す
る。データ形式コードは、バイト、ワード、ロングワー
ド、クオドワード又はオクトワードのいずれかを指示す
る。
図25のフローチャートに戻ると、命令に対する一連の中
間オペレーションを通して後方に表示がプッシュされ
る。これらの中間オペレーションは、逆の順序で、自動
増加、OPコードオペレーション及び自動減少である。ス
テップ382において、自動増加指定子に対して命令がス
キャンされる。表示において指示されたレジスタRxを使
用する各々の表現及び含意自動増加指定子に対し、その
表示におけるレジスタ指定子Rxは、Rx+Cと置き換えら
れ、ここでCは、OPコードデータ形式がバイトであるか
ワードであるかロングワードであるかクオドワードであ
るか又はオクトワードであるかに基づいて各々1、2、
4、8又は16となり、そしてもし可能であれば、定数の
乗算及び加算によって表示が簡単化される。例えば、表
示が”@(R1+R7+4)+@(R3+3)+R1+R6+7"で
あり、命令が自動増加指定子”(R1)+”を含み、そし
てOPコードデータ形式がクオドワードである場合には、
表示が”@(R1+R7+12)+@(R3+3)+R1+R6+1
5"に変更される。
間オペレーションを通して後方に表示がプッシュされ
る。これらの中間オペレーションは、逆の順序で、自動
増加、OPコードオペレーション及び自動減少である。ス
テップ382において、自動増加指定子に対して命令がス
キャンされる。表示において指示されたレジスタRxを使
用する各々の表現及び含意自動増加指定子に対し、その
表示におけるレジスタ指定子Rxは、Rx+Cと置き換えら
れ、ここでCは、OPコードデータ形式がバイトであるか
ワードであるかロングワードであるかクオドワードであ
るか又はオクトワードであるかに基づいて各々1、2、
4、8又は16となり、そしてもし可能であれば、定数の
乗算及び加算によって表示が簡単化される。例えば、表
示が”@(R1+R7+4)+@(R3+3)+R1+R6+7"で
あり、命令が自動増加指定子”(R1)+”を含み、そし
てOPコードデータ形式がクオドワードである場合には、
表示が”@(R1+R7+12)+@(R3+3)+R1+R6+1
5"に変更される。
ステップ402において、デコードテーブルからのデータ
の値が負でないときに、実行はステップ403の特殊なレ
ジスタ分析ルーチンへ分岐する。この特殊な分析ルーチ
ンへジャンプするために、例えば、次のコードを使用す
ることができる。
の値が負でないときに、実行はステップ403の特殊なレ
ジスタ分析ルーチンへ分岐する。この特殊な分析ルーチ
ンへジャンプするために、例えば、次のコードを使用す
ることができる。
MOVE 3(R1),R2 ;R1 contains TABLE+4*OPCODE ADDL PC,R2,R2 JMP R2 特殊なレジスタ分析ルーチンの例は、ステップ374につ
いて上記したCALLSに対するルーチンであり、N≦M*
4の場合(ここで、MはCALLS命令によって指定された
パラメータの数である)、"R14-4"が表示”@(R12+
N)”におけるR12の発生に置き換えられ、そして表示
が簡単化されて、”@(R14+(N−4))”が得ら
れ、さもなくば、「未知」の値に復帰される。
いて上記したCALLSに対するルーチンであり、N≦M*
4の場合(ここで、MはCALLS命令によって指定された
パラメータの数である)、"R14-4"が表示”@(R12+
N)”におけるR12の発生に置き換えられ、そして表示
が簡単化されて、”@(R14+(N−4))”が得ら
れ、さもなくば、「未知」の値に復帰される。
ステップ404において、表示がメモリアクセスオペレー
ションであるときに実行はステップ405へ分岐する。ス
テップ405において、各メモリアクセスファンクション
のアーギュメントを命令に対する表現又は含意メモリ行
き先指定子のアドレスに合致させる試みがなされる。合
致を生じさせてメモリアクセスオペレーションの値に影
響を与えることができる場合には、実行がステップ406
へ分岐する。ステップ406において、実行は命令OPコー
ドに対するメモリ分析ルーチンへジャンプし、特定のOP
コードのためのメモリ分析ルーチンに対する変位は、例
えば、デコードテーブルにおける「メモリ分析ルーチン
のための変位」(図26の387)となる。
ションであるときに実行はステップ405へ分岐する。ス
テップ405において、各メモリアクセスファンクション
のアーギュメントを命令に対する表現又は含意メモリ行
き先指定子のアドレスに合致させる試みがなされる。合
致を生じさせてメモリアクセスオペレーションの値に影
響を与えることができる場合には、実行がステップ406
へ分岐する。ステップ406において、実行は命令OPコー
ドに対するメモリ分析ルーチンへジャンプし、特定のOP
コードのためのメモリ分析ルーチンに対する変位は、例
えば、デコードテーブルにおける「メモリ分析ルーチン
のための変位」(図26の387)となる。
メモリ分析ルーチンは、含意メモリ行き先を伴うOPコー
ドのためのルーチンと、表現メモリ行き先結果指定子を
使用するOPコードのためのルーチンとを含んでいる。含
意メモリ行き先を伴うOPコードは、例えば、PUSHAB及び
PUSHLを含み、これは各々アドレス又はロングワードを
スタックに対してプッシュする。PUSHABx又はPUSHLxに
対する含意メモリ行き先指定子は0(SP)であり、これ
は、式"R14"のメモリレファレンスアーギュメントに確
実に合致する行き先アドレスを指定する。合致が確実な
場合には、記号表示において次のような置き換えが行わ
れる。即ち、合致する”@(R14)”項にxを置き換
え、そして全てのR14レジスタ指定子に"R14-4"を置き換
える。
ドのためのルーチンと、表現メモリ行き先結果指定子を
使用するOPコードのためのルーチンとを含んでいる。含
意メモリ行き先を伴うOPコードは、例えば、PUSHAB及び
PUSHLを含み、これは各々アドレス又はロングワードを
スタックに対してプッシュする。PUSHABx又はPUSHLxに
対する含意メモリ行き先指定子は0(SP)であり、これ
は、式"R14"のメモリレファレンスアーギュメントに確
実に合致する行き先アドレスを指定する。合致が確実な
場合には、記号表示において次のような置き換えが行わ
れる。即ち、合致する”@(R14)”項にxを置き換
え、そして全てのR14レジスタ指定子に"R14-4"を置き換
える。
表現メモリ行き先指定子を有する命令に見い出されるOP
コードの例は、MOVEL x,yのようなデータ転送命令であ
り、ここでyはメモリ行き先指定子である。この場合
に、命令の結果xは、表示の各合致するメモリレファレ
ンスアーギュメントにおいてyと置き換えられる。例え
ば、命令がMOVE R1,8(R2)でありそして表示が”@(R
2+8)+R1+7である場合には、表示が2*R1+7に
変更される。
コードの例は、MOVEL x,yのようなデータ転送命令であ
り、ここでyはメモリ行き先指定子である。この場合
に、命令の結果xは、表示の各合致するメモリレファレ
ンスアーギュメントにおいてyと置き換えられる。例え
ば、命令がMOVE R1,8(R2)でありそして表示が”@(R
2+8)+R1+7である場合には、表示が2*R1+7に
変更される。
表現メモリ行き先指定子とメモリファンクションアーギ
ュメントとの合致は、OPコードのデータ形式によっても
左右される。例えば、クオドワード又はオクトワードデ
ータ形式を有する命令は、2つ以上のロングワードに合
致する。例えば、命令CLRQ(Rx)は、クオドワードデー
タ形式であり、そのメモリ行き先指定子は、”@(R
x)”及び”@(Rx+4)”に合致し、各々の場合にメ
モリファンクションはゼロに減少される。又、ロングワ
ードアドレス境界からのアドレス不整列があるときにあ
り得る合致も重要であり、この状態は、例えば、命令CL
RL(Rx)と”@(Rx+1)”との合致であり、この場合
は、所望のロングワードアドレスの1バイトのみが一定
値0に分析される。
ュメントとの合致は、OPコードのデータ形式によっても
左右される。例えば、クオドワード又はオクトワードデ
ータ形式を有する命令は、2つ以上のロングワードに合
致する。例えば、命令CLRQ(Rx)は、クオドワードデー
タ形式であり、そのメモリ行き先指定子は、”@(R
x)”及び”@(Rx+4)”に合致し、各々の場合にメ
モリファンクションはゼロに減少される。又、ロングワ
ードアドレス境界からのアドレス不整列があるときにあ
り得る合致も重要であり、この状態は、例えば、命令CL
RL(Rx)と”@(Rx+1)”との合致であり、この場合
は、所望のロングワードアドレスの1バイトのみが一定
値0に分析される。
表示内のメモリオペレーションのアーギュメントに合致
するようにメモリ行き先指定子によって指定されたアド
レスについて考えられはするが確かではないときにステ
ップ406において設計の選択が生じる。この状態は、例
えば、メモリ行き先指定子が(R1)であって、表示がメ
モリアクセスファンクション@(R2)を有する場合であ
り、即ち、手前の命令がMOVE R1,R2の場合に合致が生じ
る。メモリ行き先指定子は、メモリ行き先指定子によっ
て指定されたメモリ行き先アドレスを表す別の記号表示
に変換することができ、後方記号実行を行って、上記他
の記号表示を、表示内のメモリオペレーションのアーギ
ュメントに確実に合致するか又は合致しない形態に変換
するよう試みることができる。しかしながら、異なった
行き先アドレスを表す多数の表示に対して後方記号実行
を同時に行うと、異なった行き先アドレスの各々に対し
て付加的なエポック番号とエポック番号アトリビュート
とが必要となるので、サーチが複雑なものになる。それ
故、多数の記号表示に対するサーチの程度を制限するこ
とが所望される。これは、例えば、サーチを1つの付加
的な記号表示に制限するか、又は現在ブロック及びこれ
とは異なる行先ブロックにおける1つの付加的な記号表
示に制限することによって行われる。いずれにせよ、合
致が考えられるが合致が確実ではないという結論に達す
る場合には、図25のステップ406の結果は、それを分析
するが、一定の値に分析するのではない。それ故、実行
はステップ407においてステップ408に分岐し、そこで
「未知」のフラグがセットされ、実行が復帰する。
するようにメモリ行き先指定子によって指定されたアド
レスについて考えられはするが確かではないときにステ
ップ406において設計の選択が生じる。この状態は、例
えば、メモリ行き先指定子が(R1)であって、表示がメ
モリアクセスファンクション@(R2)を有する場合であ
り、即ち、手前の命令がMOVE R1,R2の場合に合致が生じ
る。メモリ行き先指定子は、メモリ行き先指定子によっ
て指定されたメモリ行き先アドレスを表す別の記号表示
に変換することができ、後方記号実行を行って、上記他
の記号表示を、表示内のメモリオペレーションのアーギ
ュメントに確実に合致するか又は合致しない形態に変換
するよう試みることができる。しかしながら、異なった
行き先アドレスを表す多数の表示に対して後方記号実行
を同時に行うと、異なった行き先アドレスの各々に対し
て付加的なエポック番号とエポック番号アトリビュート
とが必要となるので、サーチが複雑なものになる。それ
故、多数の記号表示に対するサーチの程度を制限するこ
とが所望される。これは、例えば、サーチを1つの付加
的な記号表示に制限するか、又は現在ブロック及びこれ
とは異なる行先ブロックにおける1つの付加的な記号表
示に制限することによって行われる。いずれにせよ、合
致が考えられるが合致が確実ではないという結論に達す
る場合には、図25のステップ406の結果は、それを分析
するが、一定の値に分析するのではない。それ故、実行
はステップ407においてステップ408に分岐し、そこで
「未知」のフラグがセットされ、実行が復帰する。
又、記号表示は「未知」の結果にも分析され、この場合
には、記号表示のフォーマットで命令の作用を表すこと
が困難又は不可能である。この状態の一例は、排他的オ
アオペレーションである。手前の命令が2つのレジスタ
の内容をスワップするものでない限り、排他的オペレー
ションの作用は不定となる。例えば、レジスタR1とR2と
のスワップは次のようにコード化することができる。
には、記号表示のフォーマットで命令の作用を表すこと
が困難又は不可能である。この状態の一例は、排他的オ
アオペレーションである。手前の命令が2つのレジスタ
の内容をスワップするものでない限り、排他的オペレー
ションの作用は不定となる。例えば、レジスタR1とR2と
のスワップは次のようにコード化することができる。
XORL2 R1,R2 ;R2←R1 XOR R2 XORL2 R2,R1 ;R1←R2 XOR R1 XORL2 R1,R2 ;R2←R1 XOR R2 ステップ409においては、ステップ406で表示が一定値に
分析されるかどうかに基づいて実行が分岐される。プロ
グラムカウンタ指定子を除く全てのレジスタ指定子が表
示から削除されるときに表示を一定値に分析することが
できる。それ故、レジスタ指定子が除去されるか又は分
析ルーチンにおいて変更されたときには、表示を一定値
へ分析する試みがなされる。これは、図27について以下
に述べるようなルーチンを呼び出すことにより行うこと
ができる。
分析されるかどうかに基づいて実行が分岐される。プロ
グラムカウンタ指定子を除く全てのレジスタ指定子が表
示から削除されるときに表示を一定値に分析することが
できる。それ故、レジスタ指定子が除去されるか又は分
析ルーチンにおいて変更されたときには、表示を一定値
へ分析する試みがなされる。これは、図27について以下
に述べるようなルーチンを呼び出すことにより行うこと
ができる。
ステップ404において表示がメモリアクセスファンクシ
ョンを含まないと決定されたとき、又はステップ405に
おいて合致のおそれのあるメモリ行き先指定子を命令が
もたないと決定されたときに、命令が汎用レジスタの内
容に影響することが考えられる。通常の場合には、命令
が表現レジスタ直接行き先指定子を有するとき又はある
含意レジスタ直接行き先指定子を有するときに、命令が
汎用レジスタの内容に影響を与える。しかしながら、命
令が表現レジスタ直接行き先指定子を有するときには、
OPコードデータ形式がクオドワード又はオクトワードで
あれば、表現指定されたレジスタ以外のレジスタに影響
を与える。
ョンを含まないと決定されたとき、又はステップ405に
おいて合致のおそれのあるメモリ行き先指定子を命令が
もたないと決定されたときに、命令が汎用レジスタの内
容に影響することが考えられる。通常の場合には、命令
が表現レジスタ直接行き先指定子を有するとき又はある
含意レジスタ直接行き先指定子を有するときに、命令が
汎用レジスタの内容に影響を与える。しかしながら、命
令が表現レジスタ直接行き先指定子を有するときには、
OPコードデータ形式がクオドワード又はオクトワードで
あれば、表現指定されたレジスタ以外のレジスタに影響
を与える。
レジスタの内容は命令によって若干複雑に影響されるの
で、OPコードレジスタ使用、データ形式及び行き先レジ
スタ番号の種々の考えられる組み合わせに対してレジス
タ使用マスクが予め記憶されるようなデコードテーブル
を使用することができる。レジスタ使用マスクは命令に
対してフェッチすることができ、これを用いて、命令が
記号表示に影響を及ぼし得るかどうかを速やかに判断す
ることができる。例えば、図26に示すOPコードレジスタ
使用情報389をエンコードする場合には、レジスタデコ
ードテーブルのアドレスをOPコードレジスタ使用のバイ
トから形成することができる。これは、レジスタ直接行
き先が命令に対して指定されるかどうかをチェックし、
もしそうならば、行き先レジスタ番号をデータ形式に添
付させて、レジスタ使用マスクのテーブルに対するイン
デックスを形成することにより行われる。各々のレジス
タ使用マスクは、影響を受けるレジスタを指示するよう
にセットされるビットと、命令によって影響されないレ
ジスタを指示するようにクリアされるビットとを有する
ワードである。又、ステップ410において、記号表示に
使用されるレジスタ指定子を指示するビットをセットす
ることにより、記号表示に対するレジスタ使用マスクが
ワードから形成される。例えば、最上位ビット位置がセ
ット又はクリアされてR15の存在を指示し、そして最下
位ビット位置がセット又はクリアされてR0の存在を指示
すると仮定すれば、表示”@(R3+4)+R12+R4+3"
に対するレジスタ使用マスクは、00010000000011002と
なる。
で、OPコードレジスタ使用、データ形式及び行き先レジ
スタ番号の種々の考えられる組み合わせに対してレジス
タ使用マスクが予め記憶されるようなデコードテーブル
を使用することができる。レジスタ使用マスクは命令に
対してフェッチすることができ、これを用いて、命令が
記号表示に影響を及ぼし得るかどうかを速やかに判断す
ることができる。例えば、図26に示すOPコードレジスタ
使用情報389をエンコードする場合には、レジスタデコ
ードテーブルのアドレスをOPコードレジスタ使用のバイ
トから形成することができる。これは、レジスタ直接行
き先が命令に対して指定されるかどうかをチェックし、
もしそうならば、行き先レジスタ番号をデータ形式に添
付させて、レジスタ使用マスクのテーブルに対するイン
デックスを形成することにより行われる。各々のレジス
タ使用マスクは、影響を受けるレジスタを指示するよう
にセットされるビットと、命令によって影響されないレ
ジスタを指示するようにクリアされるビットとを有する
ワードである。又、ステップ410において、記号表示に
使用されるレジスタ指定子を指示するビットをセットす
ることにより、記号表示に対するレジスタ使用マスクが
ワードから形成される。例えば、最上位ビット位置がセ
ット又はクリアされてR15の存在を指示し、そして最下
位ビット位置がセット又はクリアされてR0の存在を指示
すると仮定すれば、表示”@(R3+4)+R12+R4+3"
に対するレジスタ使用マスクは、00010000000011002と
なる。
ステップ411では、命令の行き先レジスタマスクと記号
表示のレジスタ使用マスクとの間で論理アンドが計算さ
れ、命令によって影響される表示におけるレジスタ指定
子を示すレジスタ競合マスクが得られる。ステップ412
では、このレジスタ競合マスクがゼロと比較され、特定
の命令OPコードに対するレジスタ分析ルーチンを使用す
べきかどうか判断される。もしそうならば、ステップ41
3において、レジスタ分析ルーチンは、命令OPコードの
作用を考慮しておそらく表示を一定値へ分析するために
記号表示を変更すべきであるか、或いはその作用が不定
であって表示を「未知」の値へ分析すべきであるかどう
かを判断する。例えば、命令がCLRLであるか又はCLRQ命
令である場合には、レジスタ競合マスクによって指示さ
れた各レジスタ指定子の各発生が記号表示から除去され
る。MOVE Rx,Ry命令の場合には、レジスタRxに対するレ
ジスタ指定子が記号表示におけるレジスタ指定子の各発
生に置き換えられる。しかし、MOVQ Rx,Ry命令の場合に
は、レジスタ競合マスクによって指示された各レジスタ
Rzがレジスタ指示子R〔z+y−x」に置き換えられ
る。換言すれば、RxはRyに置き換えられるが、Rx+1も
Ry+1に置き換えられる。
表示のレジスタ使用マスクとの間で論理アンドが計算さ
れ、命令によって影響される表示におけるレジスタ指定
子を示すレジスタ競合マスクが得られる。ステップ412
では、このレジスタ競合マスクがゼロと比較され、特定
の命令OPコードに対するレジスタ分析ルーチンを使用す
べきかどうか判断される。もしそうならば、ステップ41
3において、レジスタ分析ルーチンは、命令OPコードの
作用を考慮しておそらく表示を一定値へ分析するために
記号表示を変更すべきであるか、或いはその作用が不定
であって表示を「未知」の値へ分析すべきであるかどう
かを判断する。例えば、命令がCLRLであるか又はCLRQ命
令である場合には、レジスタ競合マスクによって指示さ
れた各レジスタ指定子の各発生が記号表示から除去され
る。MOVE Rx,Ry命令の場合には、レジスタRxに対するレ
ジスタ指定子が記号表示におけるレジスタ指定子の各発
生に置き換えられる。しかし、MOVQ Rx,Ry命令の場合に
は、レジスタ競合マスクによって指示された各レジスタ
Rzがレジスタ指示子R〔z+y−x」に置き換えられ
る。換言すれば、RxはRyに置き換えられるが、Rx+1も
Ry+1に置き換えられる。
分析ルーチンの1つによって表示が分析されない場合に
は、ステップ414において、記号表示で指定されたレジ
スタに影響を与える自動減少オペレーションを通して記
号表示が「プッシュ」される。記号表示で指定されたレ
ジスタRxを用いた各表現及び含意自動減少指定子につい
ては、その表示内のレジスタ指定子RxがRx+Cに置き換
えられ、ここで、Cは、OPコードデータ形式がバイトで
あるか、ワードであるか、ロングワードであるか、クオ
ドワードであるか又はオクタワードであるかに基づい
て、各々、−1、−2、−4、−8又は−16であり、そ
して表示は、もし可能であれば、定数の乗算及び加算に
よって簡単化される。
は、ステップ414において、記号表示で指定されたレジ
スタに影響を与える自動減少オペレーションを通して記
号表示が「プッシュ」される。記号表示で指定されたレ
ジスタRxを用いた各表現及び含意自動減少指定子につい
ては、その表示内のレジスタ指定子RxがRx+Cに置き換
えられ、ここで、Cは、OPコードデータ形式がバイトで
あるか、ワードであるか、ロングワードであるか、クオ
ドワードであるか又はオクタワードであるかに基づい
て、各々、−1、−2、−4、−8又は−16であり、そ
して表示は、もし可能であれば、定数の乗算及び加算に
よって簡単化される。
命令を通しての表示の「プッシュ」を複雑な表示フォー
マット及び複雑な命令に対して一般的に述べたが、後方
記号実行のプロセスは、VAX/VMSプログラムにおいて計
算行き先アドレスを分析するのに非常に有効であること
が分かった。これは、たとえ、図21の簡単な表示フォー
マットが使用されても、そして分析ルーチンにより「未
知」の値を分析しても、命令がMOVAB、PUSHAB、MOVL、P
USHL、CLRL、CLRQ又はCALLSでない限り、そうである。
マット及び複雑な命令に対して一般的に述べたが、後方
記号実行のプロセスは、VAX/VMSプログラムにおいて計
算行き先アドレスを分析するのに非常に有効であること
が分かった。これは、たとえ、図21の簡単な表示フォー
マットが使用されても、そして分析ルーチンにより「未
知」の値を分析しても、命令がMOVAB、PUSHAB、MOVL、P
USHL、CLRL、CLRQ又はCALLSでない限り、そうである。
図27は、記号表示内の項目を分析するためのルーチンの
フローチャートである。この項目は、例えば、図21の固
定フォーマットで示されている。
フローチャートである。この項目は、例えば、図21の固
定フォーマットで示されている。
第1ステップ421では、レジスタフラグがセットされた
場合に実行がステップ422へ分岐し、さもなくば、実行
がステップ423へ続く。ステップ423では、レジスタ番号
が15と比較される。レジスタ番号が15でなく、従って、
プログラムカウンタの更新した値を指示しない限り、表
示を分析することができない。それ故、レジスタ番号が
15でないときには実行が復帰し、さもなくば、実行がス
テップ424へ続く。
場合に実行がステップ422へ分岐し、さもなくば、実行
がステップ423へ続く。ステップ423では、レジスタ番号
が15と比較される。レジスタ番号が15でなく、従って、
プログラムカウンタの更新した値を指示しない限り、表
示を分析することができない。それ故、レジスタ番号が
15でないときには実行が復帰し、さもなくば、実行がス
テップ424へ続く。
ステップ424では、行き先アドレスが変位と更新されたP
Cの値との和として計算される。VAX命令アーキテクチャ
ーでは、現在命令がPCを指定するレジスタ直接モードの
表現ソース指定子を有するときに、記号実行のプロセス
によりPCレジスタ指定子R15が記号表示に加えられる。
この場合、更新されたPCの値は、現在命令においてPCを
指定した指定子の直後のバイトのアドレスである。
Cの値との和として計算される。VAX命令アーキテクチャ
ーでは、現在命令がPCを指定するレジスタ直接モードの
表現ソース指定子を有するときに、記号実行のプロセス
によりPCレジスタ指定子R15が記号表示に加えられる。
この場合、更新されたPCの値は、現在命令においてPCを
指定した指定子の直後のバイトのアドレスである。
ステップ425では、メモリアクセスフラグが検査され
る。メモリアクセスフラグがセットされない場合には、
アドレスがオリジナルプログラムにおける実行転送命令
の考えられる行き先となるべきである。VAX/VMSプログ
ラムの場合には、このようなPC相対アドレスがプログラ
ムの命令メモリエリア(図14の187)になければならな
い。これはステップ426においてチェックされ、アドレ
スが命令エリア内にあることが分かると、そのアドレス
はステップ427において行き先のリストに入れられ、表
示が分析された状態で実行が復帰する。さもなくば、ス
テップ428において警報メッセージが発せられる。更
に、命令メモリアドレス以外のアドレスは無効と考えら
れるので、行き先リストには加えられない。そうではな
くて、「未知」のフラグがステップ429においてセット
され、記号表示が分析された状態で実行が復帰する。
る。メモリアクセスフラグがセットされない場合には、
アドレスがオリジナルプログラムにおける実行転送命令
の考えられる行き先となるべきである。VAX/VMSプログ
ラムの場合には、このようなPC相対アドレスがプログラ
ムの命令メモリエリア(図14の187)になければならな
い。これはステップ426においてチェックされ、アドレ
スが命令エリア内にあることが分かると、そのアドレス
はステップ427において行き先のリストに入れられ、表
示が分析された状態で実行が復帰する。さもなくば、ス
テップ428において警報メッセージが発せられる。更
に、命令メモリアドレス以外のアドレスは無効と考えら
れるので、行き先リストには加えられない。そうではな
くて、「未知」のフラグがステップ429においてセット
され、記号表示が分析された状態で実行が復帰する。
行き先がPC相対間接アドレスであるとき実行はステップ
430に分岐する。VAX/VMSプログラムでは、PC相対間接ア
ドレスは、プログラムメモリの固定ベクトルエリア(図
14の188)に含まれた固定ベクトルであるときだけ有効
であると考えられる。ステップ424で計算されたアドレ
スがプログラムメモリの固定ベクトルエリアに入り、定
義された固定ベクトルのリスト又はテーブルに含まれる
場合には、ステップ423においてアドレスされた固定ベ
クトルがメモリから読み出され、そしてステップ433に
おいて固定ベクトルが行き先のリストに入れられ、記号
表示が分析された状態で実行が復帰する。ステップ424
で計算されたアドレスがプログラムメモリの固定のベク
トルエリアに入らないか、又は定義された固定ベクトル
のリスト又はテーブルに見つからない場合は、ステップ
431で警報が発せられ、ステップ429で「未知」のフラグ
がセットされ、記号表示が分析された状態で実行が復帰
する。
430に分岐する。VAX/VMSプログラムでは、PC相対間接ア
ドレスは、プログラムメモリの固定ベクトルエリア(図
14の188)に含まれた固定ベクトルであるときだけ有効
であると考えられる。ステップ424で計算されたアドレ
スがプログラムメモリの固定ベクトルエリアに入り、定
義された固定ベクトルのリスト又はテーブルに含まれる
場合には、ステップ423においてアドレスされた固定ベ
クトルがメモリから読み出され、そしてステップ433に
おいて固定ベクトルが行き先のリストに入れられ、記号
表示が分析された状態で実行が復帰する。ステップ424
で計算されたアドレスがプログラムメモリの固定のベク
トルエリアに入らないか、又は定義された固定ベクトル
のリスト又はテーブルに見つからない場合は、ステップ
431で警報が発せられ、ステップ429で「未知」のフラグ
がセットされ、記号表示が分析された状態で実行が復帰
する。
ステップ421においてレジスタフラグがクリアされたこ
とが分かりそしてメモリアクセスフラグもクリアされた
ことが分かった場合には、行き先が絶対アドレスとな
る。VAX/VMSプログラムの場合には、絶対アドレスは、
予め定められたシステムベクトル入力ポイントであると
きだけ有効であると考えられる。それ故、ステップ434
では、予め定められたシステムベクトル入力ポイントの
リスト又はテーブルにおいてルックアップが実行され
る。アドレスが予め定められたシステムベクトル入力ポ
イントである場合には、ステップ427においてこれが行
き先のリストに加えられ、記号表示が分析された状態で
実行が復帰する。さもなくば、ステップ435において警
報が発せられ、ステップ429において「未知」のフラグ
がセットされそして記号表示が分析された状態で実行が
復帰する。
とが分かりそしてメモリアクセスフラグもクリアされた
ことが分かった場合には、行き先が絶対アドレスとな
る。VAX/VMSプログラムの場合には、絶対アドレスは、
予め定められたシステムベクトル入力ポイントであると
きだけ有効であると考えられる。それ故、ステップ434
では、予め定められたシステムベクトル入力ポイントの
リスト又はテーブルにおいてルックアップが実行され
る。アドレスが予め定められたシステムベクトル入力ポ
イントである場合には、ステップ427においてこれが行
き先のリストに加えられ、記号表示が分析された状態で
実行が復帰する。さもなくば、ステップ435において警
報が発せられ、ステップ429において「未知」のフラグ
がセットされそして記号表示が分析された状態で実行が
復帰する。
ステップ422でメモリフラグがセットされたことが分か
ると、記号表示によって指示された行き先が絶対間接ア
ドレスとなる。VAX/VMSプログラムにおいては、このよ
うなアドレスが無効であると考えられる。それ故、ステ
ップ436において警報が発せられ、ステップ429において
「未知」のフラグがセットされ、そして記号表示が分析
された状態で実行が復帰する。
ると、記号表示によって指示された行き先が絶対間接ア
ドレスとなる。VAX/VMSプログラムにおいては、このよ
うなアドレスが無効であると考えられる。それ故、ステ
ップ436において警報が発せられ、ステップ429において
「未知」のフラグがセットされ、そして記号表示が分析
された状態で実行が復帰する。
図28及び29は、図13のステップ164を参照することによ
り上記したプラウシブルコードと、図14のプログラムメ
モリマップ181の命令メモリエリア187とに対してスキャ
ンを実行する手順のフローチャートである。このスキャ
ンの結果は、命令メモリエリア(図14の187)における
「プラウシブルコード」エリア(図14の197)を識別す
ることである。特に、図28及び29の手順は、命令メモリ
エリア(図14の187)の中のエリアで、流れ図のブロッ
クに含まれるデコードされた命令を含むメモリのエリア
(194、195、196)を含まないようなエリアをスキャン
する。流れ図のブロックに含まれたデコードされた命令
は、簡単に「既知のコード」と称する。命令メモリエリ
ア(図14の187)の中のエリアで、既知のコードを含ま
ないエリアは、「未知のコードエリア」と称する。それ
故、図28及び29の手順は、「未知のコードエリア」をス
キャンして、「プラウシブルコード」を見つける。プラ
ウシブルコードのスキャン中に、プラウシブルコードの
流れ図が形成される。図28の最終ステップ499において
プラウシブルコードのスキャンが終了すると、既知のコ
ード(KNOWN_CODE)の全バイト数が、既知のコードの流
れ図における全ての基本ブロックに対して基本ブロック
記述子の「バイト長さ」アトリビュートの値を加算する
ことにより計算され、そしてプラウシブルコード(PLAU
SIBLE_CODE)の全バイト数が、プラウシブルコードの流
れ図における全ての基本ブロックに対して基本ブロック
記述子の「バイト長さ」アトリビュートの値を加算する
ことにより計算される。次いで、見つかったコードの割
合が次のように計算される。
り上記したプラウシブルコードと、図14のプログラムメ
モリマップ181の命令メモリエリア187とに対してスキャ
ンを実行する手順のフローチャートである。このスキャ
ンの結果は、命令メモリエリア(図14の187)における
「プラウシブルコード」エリア(図14の197)を識別す
ることである。特に、図28及び29の手順は、命令メモリ
エリア(図14の187)の中のエリアで、流れ図のブロッ
クに含まれるデコードされた命令を含むメモリのエリア
(194、195、196)を含まないようなエリアをスキャン
する。流れ図のブロックに含まれたデコードされた命令
は、簡単に「既知のコード」と称する。命令メモリエリ
ア(図14の187)の中のエリアで、既知のコードを含ま
ないエリアは、「未知のコードエリア」と称する。それ
故、図28及び29の手順は、「未知のコードエリア」をス
キャンして、「プラウシブルコード」を見つける。プラ
ウシブルコードのスキャン中に、プラウシブルコードの
流れ図が形成される。図28の最終ステップ499において
プラウシブルコードのスキャンが終了すると、既知のコ
ード(KNOWN_CODE)の全バイト数が、既知のコードの流
れ図における全ての基本ブロックに対して基本ブロック
記述子の「バイト長さ」アトリビュートの値を加算する
ことにより計算され、そしてプラウシブルコード(PLAU
SIBLE_CODE)の全バイト数が、プラウシブルコードの流
れ図における全ての基本ブロックに対して基本ブロック
記述子の「バイト長さ」アトリビュートの値を加算する
ことにより計算される。次いで、見つかったコードの割
合が次のように計算される。
%_CODE_FOUND=KNOWN_CODE/(KNOWN_CODE+PLAUSIBLE_
CODE) プラウシブルコードのスキャンは、プログラム内の可変
数のアドレス可能なメモリ位置に含まれた命令を含む可
変長さ命令セットにおいて法律命令を確認し、3つの異
なったスキャンモード間で切り換えを行うのが好まし
い。第1のスキャンモード(図28のステップ500ないし5
10)においては、未知のコードエリア内の各々のアドレ
ス可能なメモリ位置でスタートする法律命令に対して未
知のコードエリアをスキャンする。第1のスキャンモー
ドにおいて法律命令が見つかったときには、スキャンが
第2のスキャンモード(図28のステップ511ないし518)
へ切り換わり、第1スキャンモードで見つかった法律命
令の直後のアドレス可能なメモリ位置を検査する。第2
のスキャンモードは、実行転送命令までを含む一連の連
続する法律命令を有する1つの完全な命令ブロックをサ
ーチする。この第2のスキャンモード中に法律命令が見
つかった場合には、スキャンが第1のスキャンモードに
切り換わり、第1のスキャンモードにおいて既に見つか
っている法律命令の第1のアドレス可能なメモリ位置の
直後にあるアドレス可能なメモリ位置からスタートす
る。この第2のスキャンモード中に法律命令が見つから
なかった場合には、スキャンが第3のスキャンモード
(図29のステップ521ないし536)に切り換わり、全ブロ
ックの終わりに実行転送命令に対する既知の有効行き先
アドレスがあるかどうかチェックされ、もしあれば、そ
の既知の有効行き先アドレスで始まる有効命令があるか
どうかチェックされる。既知の行き先アドレスは、これ
がプログラムのアドレス範囲を越えるとき、又はプログ
ラムの既に見つかった命令の中間にあるときには、無効
であると考えられる。第3のスキャンモードにおいて既
知の有効行き先アドレスで始まる有効命令があるという
結論を得た場合には、ブロック全体がプラウシブルコー
ドであると考えられる。
CODE) プラウシブルコードのスキャンは、プログラム内の可変
数のアドレス可能なメモリ位置に含まれた命令を含む可
変長さ命令セットにおいて法律命令を確認し、3つの異
なったスキャンモード間で切り換えを行うのが好まし
い。第1のスキャンモード(図28のステップ500ないし5
10)においては、未知のコードエリア内の各々のアドレ
ス可能なメモリ位置でスタートする法律命令に対して未
知のコードエリアをスキャンする。第1のスキャンモー
ドにおいて法律命令が見つかったときには、スキャンが
第2のスキャンモード(図28のステップ511ないし518)
へ切り換わり、第1スキャンモードで見つかった法律命
令の直後のアドレス可能なメモリ位置を検査する。第2
のスキャンモードは、実行転送命令までを含む一連の連
続する法律命令を有する1つの完全な命令ブロックをサ
ーチする。この第2のスキャンモード中に法律命令が見
つかった場合には、スキャンが第1のスキャンモードに
切り換わり、第1のスキャンモードにおいて既に見つか
っている法律命令の第1のアドレス可能なメモリ位置の
直後にあるアドレス可能なメモリ位置からスタートす
る。この第2のスキャンモード中に法律命令が見つから
なかった場合には、スキャンが第3のスキャンモード
(図29のステップ521ないし536)に切り換わり、全ブロ
ックの終わりに実行転送命令に対する既知の有効行き先
アドレスがあるかどうかチェックされ、もしあれば、そ
の既知の有効行き先アドレスで始まる有効命令があるか
どうかチェックされる。既知の行き先アドレスは、これ
がプログラムのアドレス範囲を越えるとき、又はプログ
ラムの既に見つかった命令の中間にあるときには、無効
であると考えられる。第3のスキャンモードにおいて既
知の有効行き先アドレスで始まる有効命令があるという
結論を得た場合には、ブロック全体がプラウシブルコー
ドであると考えられる。
図28の第1ステップ500において、第1スキャンモード
のスキャンポインタは、メモリの命令エリアにおける最
小のアドレスにセットされ、変数PLAUSIBLE_CODE及びKN
OWN_CODEがクリアされる。次いで、スキャンがステップ
501で始まる。スキャンポインタによってテーブル(図1
7の224)が指示され、スキャンポインタが既知のコード
を指すかどうか判断される。もしそうであれば、スキャ
ンポインタがステップ503において次々に増加され、や
がて、ポインタがメモリの命令エリア外に出たことがス
テップ504でテストされて終了すべきプラウシブルコー
ドのサーチが行なわれるか、又はスキャンポインタが未
知のコードを指すことになる。スキャンポインタが未知
のコードを指したときには、ステップ505において実行
が続けられる。
のスキャンポインタは、メモリの命令エリアにおける最
小のアドレスにセットされ、変数PLAUSIBLE_CODE及びKN
OWN_CODEがクリアされる。次いで、スキャンがステップ
501で始まる。スキャンポインタによってテーブル(図1
7の224)が指示され、スキャンポインタが既知のコード
を指すかどうか判断される。もしそうであれば、スキャ
ンポインタがステップ503において次々に増加され、や
がて、ポインタがメモリの命令エリア外に出たことがス
テップ504でテストされて終了すべきプラウシブルコー
ドのサーチが行なわれるか、又はスキャンポインタが未
知のコードを指すことになる。スキャンポインタが未知
のコードを指したときには、ステップ505において実行
が続けられる。
ステップ505では、スキャンポインタによってアドレス
されたメモリ位置の内容がフェッチされ、発見的テーブ
ルに対するインデックスとして使用される。このテーブ
ルの入力は、ゼロと比較され、第1スキャンモードがス
キャンポインタによりアドレスされたメモリ位置をスキ
ップすべきであるかどうかの判断が行われる。例えば、
VAX命令をスキャンするときには、各々のアドレス可能
な位置がデータのバイトを保持し、この場合、発見的テ
ーブルは、256個の異なる入力を含む。
されたメモリ位置の内容がフェッチされ、発見的テーブ
ルに対するインデックスとして使用される。このテーブ
ルの入力は、ゼロと比較され、第1スキャンモードがス
キャンポインタによりアドレスされたメモリ位置をスキ
ップすべきであるかどうかの判断が行われる。例えば、
VAX命令をスキャンするときには、各々のアドレス可能
な位置がデータのバイトを保持し、この場合、発見的テ
ーブルは、256個の異なる入力を含む。
発見的テーブルは、特定の命令アーキテクチャー、典型
的なデータ構造体及びプログラムに関連したシステムア
ーキテクチャーの特性及び特徴に基づいて予めプログラ
ムされる。
的なデータ構造体及びプログラムに関連したシステムア
ーキテクチャーの特性及び特徴に基づいて予めプログラ
ムされる。
命令アーキテクチャーがユーザモードプログラムで許可
されない特権命令を有する場合には、これらの特権命令
がステップ506においてスキップされる(さもなくば、
これらが発見的テーブルのルックアップによって検出で
きない場合には、単一のアドレス可能なメモリ位置の内
容によって独特に識別できないので、ステップ510にお
いて非法律的とみなされる)。
されない特権命令を有する場合には、これらの特権命令
がステップ506においてスキップされる(さもなくば、
これらが発見的テーブルのルックアップによって検出で
きない場合には、単一のアドレス可能なメモリ位置の内
容によって独特に識別できないので、ステップ510にお
いて非法律的とみなされる)。
命令を含まないプログラムのデータ構造体及び他のエリ
アは、しばしばクリアされる。この場合に、第1スキャ
ンモードでのスキャンは、全てのゼロを含むアドレス可
能なメモリ位置に対してスキップしなければならない。
アは、しばしばクリアされる。この場合に、第1スキャ
ンモードでのスキャンは、全てのゼロを含むアドレス可
能なメモリ位置に対してスキップしなければならない。
可変長さの命令アーキテクチャーが非常に複雑な場合に
は、単一のアドレス可能なメモリ位置に命令が含まれる
ことはめったにない。VAX命令アーキテクチャーはこれ
に相当する。この場合に、第1スキャンモードでのスキ
ャンは、単一のアドレス可能なメモリ位置に含まれため
ったにない命令として識別された内容を有するアドレス
可能なメモリ位置をスキップしなければならない。
は、単一のアドレス可能なメモリ位置に命令が含まれる
ことはめったにない。VAX命令アーキテクチャーはこれ
に相当する。この場合に、第1スキャンモードでのスキ
ャンは、単一のアドレス可能なメモリ位置に含まれため
ったにない命令として識別された内容を有するアドレス
可能なメモリ位置をスキップしなければならない。
ほとんどの文字データが、命令アーキテクチャーにも使
用されるコードによってプログラムに表示される場合に
は、第1のスキャンモードは、命令ではなくて一連の文
字データを表すことの多いコードをスキップしなければ
ならない。第1のスキャンモードは、一連の少なくとも
4つのプリント可能なASCII文字をスキップするのが好
ましい。一連のプリント可能なASCII文字に対するこの
テストはステップ502で行われる。このような一連の文
字が見つかった場合には、ステップ503においてスキャ
ンポインタが増加され、さもなくば、ステップ507にお
いて実行が続けられる。ステップ502では、例えば、ス
キャンポインタにより指示されたプログラムアドレス
と、スキャンポインタに1、2及び3を加えたアドレス
とに含まれたデータが、プリント可能なASCII文字を指
示するようにセットされたフラグを含むテーブルをイン
デックスするのに用いられ、さもなくば、クリアされ
る。これら4つのプログラムアドレスの各々に含まれた
データがプリント可能なASCII文字であるときには、一
連の文字が見つかると、実行をステップ507へ続けるの
ではなく、ステップ503へ分岐させる。それ故、ステッ
プ502は、次のようにコード化することができる。
用されるコードによってプログラムに表示される場合に
は、第1のスキャンモードは、命令ではなくて一連の文
字データを表すことの多いコードをスキップしなければ
ならない。第1のスキャンモードは、一連の少なくとも
4つのプリント可能なASCII文字をスキップするのが好
ましい。一連のプリント可能なASCII文字に対するこの
テストはステップ502で行われる。このような一連の文
字が見つかった場合には、ステップ503においてスキャ
ンポインタが増加され、さもなくば、ステップ507にお
いて実行が続けられる。ステップ502では、例えば、ス
キャンポインタにより指示されたプログラムアドレス
と、スキャンポインタに1、2及び3を加えたアドレス
とに含まれたデータが、プリント可能なASCII文字を指
示するようにセットされたフラグを含むテーブルをイン
デックスするのに用いられ、さもなくば、クリアされ
る。これら4つのプログラムアドレスの各々に含まれた
データがプリント可能なASCII文字であるときには、一
連の文字が見つかると、実行をステップ507へ続けるの
ではなく、ステップ503へ分岐させる。それ故、ステッ
プ502は、次のようにコード化することができる。
X←CHARACTER_TABLE(PROGRAM(SCAN_POINTER)) IF X.EQ.0 THEN GO TO STEP_507 X←CHARACTER_TABLE(PROGRAM(SCAN_POINTERI+
1)) IF X. EQ.0 THEN GO TO STEP_507 X←CHARACTER_TABLE(PROGRAM(SCAN_POINTERI+
2)) IF X.EQ.0 THEN GO TO STEP_507 X←CHARACTER_TABLE(PROGRAM(SCAN_POINTERI+
3)) IF X.NE.0 THEN GO TO STEP_503 GO TO STEP 507 メモリ位置をスキップするときには、ステップ503にお
いてスキャンポインタが1アドレス位置だけ増加され
る。おそらく、これはスキャンポインタをメモリの未知
のコードエリア外へ進める。これは、ステップ504にお
いて、スキャンポインタを命令メモリエリアの最大限界
と比較することによりテストされ、スキャンポインタが
命令メモリエリア内にある場合には、ステップ501でテ
ーブル(図17の224)をインデックスすることにより、
スキャンポインタが既知のコードへ進んだかどうか判断
される。スキャンポインタが命令メモリエリア外へ進ん
だ場合には、プラウシブルコードに対するスキャンが終
了となり、見つかったコードの割合が最終ステップ499
において計算される。スキャンポインタが既知のコード
にある場合には、実行ループがステップ503へ戻り、ス
キャンポインタを1メモリ位置だけ増加し、既知のコー
ドにわたってスキャンさせる。スキャンポインタが未知
のコードにある場合には、実行がステップ505へ戻っ
て、次の未知のコードメモリ位置の内容が検査される。
1)) IF X. EQ.0 THEN GO TO STEP_507 X←CHARACTER_TABLE(PROGRAM(SCAN_POINTERI+
2)) IF X.EQ.0 THEN GO TO STEP_507 X←CHARACTER_TABLE(PROGRAM(SCAN_POINTERI+
3)) IF X.NE.0 THEN GO TO STEP_503 GO TO STEP 507 メモリ位置をスキップするときには、ステップ503にお
いてスキャンポインタが1アドレス位置だけ増加され
る。おそらく、これはスキャンポインタをメモリの未知
のコードエリア外へ進める。これは、ステップ504にお
いて、スキャンポインタを命令メモリエリアの最大限界
と比較することによりテストされ、スキャンポインタが
命令メモリエリア内にある場合には、ステップ501でテ
ーブル(図17の224)をインデックスすることにより、
スキャンポインタが既知のコードへ進んだかどうか判断
される。スキャンポインタが命令メモリエリア外へ進ん
だ場合には、プラウシブルコードに対するスキャンが終
了となり、見つかったコードの割合が最終ステップ499
において計算される。スキャンポインタが既知のコード
にある場合には、実行ループがステップ503へ戻り、ス
キャンポインタを1メモリ位置だけ増加し、既知のコー
ドにわたってスキャンさせる。スキャンポインタが未知
のコードにある場合には、実行がステップ505へ戻っ
て、次の未知のコードメモリ位置の内容が検査される。
未知のコードがステップ506においてスキップしないと
きには、ステップ507において命令デコードポインタが
スキャンポインタにセットされ、ステップ508におい
て、命令をデコードする試みがなされる。ステップ509
では、例えば、命令のOPコードがフェッチされ、指定子
の数を保持すると共にOPコードに対するデータをデコー
ドするためのテーブルに対してインデックスとして使用
され、そして各指定子がフェッチされ、デコードされ
る。ステップ509においては、命令デコードポインタが
デコード中に増加されるときにステップ502及び504と同
様にテストされ、命令デコードポインタがメモリの未知
のコードエリア外に進められたかどうか判断される。も
しそうならば、実行はステップ503へ分岐し、さもなく
ば、ステップ510において、非法律命令OPコード又は非
法律指定子がデコード中に検出された場合にステップ50
3へ分岐する。
きには、ステップ507において命令デコードポインタが
スキャンポインタにセットされ、ステップ508におい
て、命令をデコードする試みがなされる。ステップ509
では、例えば、命令のOPコードがフェッチされ、指定子
の数を保持すると共にOPコードに対するデータをデコー
ドするためのテーブルに対してインデックスとして使用
され、そして各指定子がフェッチされ、デコードされ
る。ステップ509においては、命令デコードポインタが
デコード中に増加されるときにステップ502及び504と同
様にテストされ、命令デコードポインタがメモリの未知
のコードエリア外に進められたかどうか判断される。も
しそうならば、実行はステップ503へ分岐し、さもなく
ば、ステップ510において、非法律命令OPコード又は非
法律指定子がデコード中に検出された場合にステップ50
3へ分岐する。
ステップ508ないし510で法律命令をデコードするときに
は、実行ルーチンがステップ511で始まる第2のスキャ
ンモードで継続される。ステップ511では、アドレステ
ーブル(図17の224)の1つ又は複数の入力が、デコー
ドされた命令のアドレス位置によってインデックスさ
れ、これらのテーブル入力は、プラウシブルコード命令
の開始部及びデコードされた命令の中間部を指示するよ
うにマークされる。次いで、ステップ512では、デコー
ドされた命令に続くアドレスでアドレステーブルがイン
デックスされ、既にデコードされた命令のアドレスであ
るかどうか判断され、もしそうであれば、それはデコー
ドされた基本ブロックの開始部であり、この場合、プラ
ウシブルコードのスキャンが図29のステップ535におい
て続けられる。さもなくば、プラウシブルコードのスキ
ャンは図28のステップ513において続けられる。
は、実行ルーチンがステップ511で始まる第2のスキャ
ンモードで継続される。ステップ511では、アドレステ
ーブル(図17の224)の1つ又は複数の入力が、デコー
ドされた命令のアドレス位置によってインデックスさ
れ、これらのテーブル入力は、プラウシブルコード命令
の開始部及びデコードされた命令の中間部を指示するよ
うにマークされる。次いで、ステップ512では、デコー
ドされた命令に続くアドレスでアドレステーブルがイン
デックスされ、既にデコードされた命令のアドレスであ
るかどうか判断され、もしそうであれば、それはデコー
ドされた基本ブロックの開始部であり、この場合、プラ
ウシブルコードのスキャンが図29のステップ535におい
て続けられる。さもなくば、プラウシブルコードのスキ
ャンは図28のステップ513において続けられる。
ステップ513では、命令デコードポインタが増加され、
別の命令をデコードする試みがなされる。しかしなが
ら、ステップ514でテストされて命令デコードポインタ
が未知のコードメモリエリア外へ進められたとき、或い
はステップ516でテストされて非法律OPコード又は指定
子が見つかったときには、デコードプロセスが終了とな
る。ステップ514又は516でデコードプロセスが終了とな
ると、テーブル(図17の224)がステップ517でクリアさ
れ、デコードされた命令がスキャンポインタのアドレス
まで戻されることを指示すると共に実行ループはステッ
プ503まで戻り、第1のスキャンモードでスキャンを続
ける。
別の命令をデコードする試みがなされる。しかしなが
ら、ステップ514でテストされて命令デコードポインタ
が未知のコードメモリエリア外へ進められたとき、或い
はステップ516でテストされて非法律OPコード又は指定
子が見つかったときには、デコードプロセスが終了とな
る。ステップ514又は516でデコードプロセスが終了とな
ると、テーブル(図17の224)がステップ517でクリアさ
れ、デコードされた命令がスキャンポインタのアドレス
まで戻されることを指示すると共に実行ループはステッ
プ503まで戻り、第1のスキャンモードでスキャンを続
ける。
第2のスキャンモードのステップ516で法律命令がデコ
ードされると、ステップ518において、実行転送命令が
デコードされない限り、実行がステップ511へ分岐して
戻され、実行命令までを含む付加的な命令をデコードす
る試みがなされる。ステップ518において実行転送命令
が見つかると、プラウシブルコードに対する第3のスキ
ャンモードが図29のステップ521で始まる。
ードされると、ステップ518において、実行転送命令が
デコードされない限り、実行がステップ511へ分岐して
戻され、実行命令までを含む付加的な命令をデコードす
る試みがなされる。ステップ518において実行転送命令
が見つかると、プラウシブルコードに対する第3のスキ
ャンモードが図29のステップ521で始まる。
図29を参照すれば、ステップ521において、テーブル
(図17の224)の1つ又は複数の入力が実行転送命令の
アドレス位置によってインデックスされそしてこれらテ
ーブル入力は、プラウシブルコード命令の開始部及び命
令の中間部を指示するようにマークされる。ステップ52
2では、行き先指定子がテストされて、計算行き先アド
レスであるかどうか判断され、もしそうであれば、ステ
ップ523において、後方記号実行がスキャンポインタへ
戻るよう試みられ、行き先として一定値が得られる。ス
テップ524でテストされて、未知の値が得られた場合に
は、実行が図28のステップ517へ分岐し、スキャンポイ
ンタまでの全コードブロックがリジェクトされると共
に、第1スキャンモードでスキャンが続けられる。
(図17の224)の1つ又は複数の入力が実行転送命令の
アドレス位置によってインデックスされそしてこれらテ
ーブル入力は、プラウシブルコード命令の開始部及び命
令の中間部を指示するようにマークされる。ステップ52
2では、行き先指定子がテストされて、計算行き先アド
レスであるかどうか判断され、もしそうであれば、ステ
ップ523において、後方記号実行がスキャンポインタへ
戻るよう試みられ、行き先として一定値が得られる。ス
テップ524でテストされて、未知の値が得られた場合に
は、実行が図28のステップ517へ分岐し、スキャンポイ
ンタまでの全コードブロックがリジェクトされると共
に、第1スキャンモードでスキャンが続けられる。
ステップ525では、行き先アドレスが、図27に示したよ
うに、例えば、絶対アドレス、絶対間接アドレス、相対
アドレス又は相対間接アドレスであるかに基づいて、そ
の有効性がチェックされる。又、行き先アドレスは、テ
ーブル(図17の224)をインデックスすることにより示
されるように、メモリの命令エリア内にあるが既にデコ
ードされた既知の命令又はプラウシブル命令の中間にあ
る場合には、無効とみなされる。行き先アドレスが無効
の場合には、実行が図28のステップ517へ分岐し、スキ
ャンポインタまでの全コードブロックがリジェクトされ
ると共に、第1スキャンモードでスキャンが続けられ
る。
うに、例えば、絶対アドレス、絶対間接アドレス、相対
アドレス又は相対間接アドレスであるかに基づいて、そ
の有効性がチェックされる。又、行き先アドレスは、テ
ーブル(図17の224)をインデックスすることにより示
されるように、メモリの命令エリア内にあるが既にデコ
ードされた既知の命令又はプラウシブル命令の中間にあ
る場合には、無効とみなされる。行き先アドレスが無効
の場合には、実行が図28のステップ517へ分岐し、スキ
ャンポインタまでの全コードブロックがリジェクトされ
ると共に、第1スキャンモードでスキャンが続けられ
る。
ステップ526では、変数END_OF_BLOCKが命令デコードポ
インタに等しくセットされる。ステップ527では、有効
な行き先が外部アドレスである場合に、実行がステップ
528へ分岐する。ステップ529においては、テーブル(図
17の224)をインデックスすることにより示されるよう
に、有効な行き先が既にデコードされた命令のアドレス
である場合に実行がステップ528へ分岐する。ステップ5
28に達すると、スキャンポインタまで戻る全コードブロ
ックがプラウシブルコードとして有効化される。それ
故、ステップ528において、プラウシブルコードのブロ
ックに対してブロック記述子が形成される。この基本ブ
ロック記述子に含まれるのは、ブロック内のバイト数に
セットされたアトリビュート「バイト長さ」であり、こ
れはスキャンポインタとEND_OF_BLOCKとの差に1を加え
たものとして計算される。
インタに等しくセットされる。ステップ527では、有効
な行き先が外部アドレスである場合に、実行がステップ
528へ分岐する。ステップ529においては、テーブル(図
17の224)をインデックスすることにより示されるよう
に、有効な行き先が既にデコードされた命令のアドレス
である場合に実行がステップ528へ分岐する。ステップ5
28に達すると、スキャンポインタまで戻る全コードブロ
ックがプラウシブルコードとして有効化される。それ
故、ステップ528において、プラウシブルコードのブロ
ックに対してブロック記述子が形成される。この基本ブ
ロック記述子に含まれるのは、ブロック内のバイト数に
セットされたアトリビュート「バイト長さ」であり、こ
れはスキャンポインタとEND_OF_BLOCKとの差に1を加え
たものとして計算される。
ステップ527において有効行き先アドレスが内部アドレ
スであると決定されそしてステップ529においてその内
部アドレスが既にデコードされた命令にないと決定され
たときには、行き先アドレスは、既にデコードされた命
令ではない命令メモリのエリアになければならない。行
き先アドレスから始めて命令をデコードできる場合に
は、既にデコードされた全コードブロックがプラウシブ
ルコードであると考えられ、さもなくば、既にデコード
された全コードブロックはプラウシブルコードとはみな
されない。それ故、ステップ531において、命令デコー
ドポインタは行き先アドレスにセットされそして命令を
デコードする試みがなされる。ステップ532及び533にお
いて、命令デコードポインタが既にデコードされた命令
へ進められるか、或いは非法律OPコード又は指定子がデ
コードされる場合は、デコードプロセスが不首尾に終わ
ると考えられる。さもなくば、法律命令がデコードされ
たときに、実行がステップ528へ続けられ、スキャンポ
インタから図28のステップ518で見つかった実行転送命
令のアドレスまでの基本コードブロックに対してブロッ
ク記述子が形成される。
スであると決定されそしてステップ529においてその内
部アドレスが既にデコードされた命令にないと決定され
たときには、行き先アドレスは、既にデコードされた命
令ではない命令メモリのエリアになければならない。行
き先アドレスから始めて命令をデコードできる場合に
は、既にデコードされた全コードブロックがプラウシブ
ルコードであると考えられ、さもなくば、既にデコード
された全コードブロックはプラウシブルコードとはみな
されない。それ故、ステップ531において、命令デコー
ドポインタは行き先アドレスにセットされそして命令を
デコードする試みがなされる。ステップ532及び533にお
いて、命令デコードポインタが既にデコードされた命令
へ進められるか、或いは非法律OPコード又は指定子がデ
コードされる場合は、デコードプロセスが不首尾に終わ
ると考えられる。さもなくば、法律命令がデコードされ
たときに、実行がステップ528へ続けられ、スキャンポ
インタから図28のステップ518で見つかった実行転送命
令のアドレスまでの基本コードブロックに対してブロッ
ク記述子が形成される。
ステップ530では、プラウシブルコードの流れ図を形成
し続ける試みがなされ、これは、図28のステップ518で
見つかった実行転送命令の行き先において開始される。
これは、ステップ236で始めて図18の流れ図形成ルーチ
ンを呼び出すことによって行われる。しかしながら、プ
ラウシブルコードの流れ図は既知の流れ図と混同しない
のが好ましく、従って、既知のコードのみが変換され
る。例えば、プラウシブルコードのブロックは、既知の
コードのブロックに対する後続及び先行ブロックのリス
トに加えられず、そして既知のコードのブロックは、未
知のコードのブロックに対する後続及び先行ブロックの
リストに加えられない。いずれにせよ、基本ブロック記
述子は、基本ブロックを既知のコード又はプラウシブル
コードとして識別するアトリビュートを有する。
し続ける試みがなされ、これは、図28のステップ518で
見つかった実行転送命令の行き先において開始される。
これは、ステップ236で始めて図18の流れ図形成ルーチ
ンを呼び出すことによって行われる。しかしながら、プ
ラウシブルコードの流れ図は既知の流れ図と混同しない
のが好ましく、従って、既知のコードのみが変換され
る。例えば、プラウシブルコードのブロックは、既知の
コードのブロックに対する後続及び先行ブロックのリス
トに加えられず、そして既知のコードのブロックは、未
知のコードのブロックに対する後続及び先行ブロックの
リストに加えられない。いずれにせよ、基本ブロック記
述子は、基本ブロックを既知のコード又はプラウシブル
コードとして識別するアトリビュートを有する。
プラウシブルコードの流れ図の形成が終了するときに
は、流れ図構成プロセスにより何らかのプラウシブルコ
ードが見い出せなかったことが依然として考えられる。
それ故、ステップ530では、スキャンポインタがEND_OF_
BLOCKにセットされる。更に、図28のステップ512におい
て、プラウシブルコードからの実行経路が既知のコード
のブロックに延びることが分かると、プラウシブルコー
ドのスキャンを続けて更に別のプラウシブルコードを見
つけなければならない。この場合に、ステップ535にお
いて、END_OF_BLOCKが命令デコードポインタにセットさ
れ、そしてステップ536において、スキャンポインタか
らEND_OF_BLOCKまでのプラウシブルコードブロックに対
しブロック記述子が形成されるが、流れ図形成ステップ
530はスキップされ、ステップ536の後にステップ534が
実行される。
は、流れ図構成プロセスにより何らかのプラウシブルコ
ードが見い出せなかったことが依然として考えられる。
それ故、ステップ530では、スキャンポインタがEND_OF_
BLOCKにセットされる。更に、図28のステップ512におい
て、プラウシブルコードからの実行経路が既知のコード
のブロックに延びることが分かると、プラウシブルコー
ドのスキャンを続けて更に別のプラウシブルコードを見
つけなければならない。この場合に、ステップ535にお
いて、END_OF_BLOCKが命令デコードポインタにセットさ
れ、そしてステップ536において、スキャンポインタか
らEND_OF_BLOCKまでのプラウシブルコードブロックに対
しブロック記述子が形成されるが、流れ図形成ステップ
530はスキップされ、ステップ536の後にステップ534が
実行される。
この点において、第3のスキャンモードが終了され、図
28のステップ503において第1スキャンモードでスキャ
ンが続けられる。
28のステップ503において第1スキャンモードでスキャ
ンが続けられる。
図30を参照すれば、実行ログファイル(図9の88)を用
いてオリジナルプログラム内の変換されていない命令を
探索する助けとする方法がフローチャートで示されてい
る。上記したように、そして図30のステップ541に示し
たように、オリジナルプログラムが変換され、トランス
レーターはプログラムに対する像情報ファイルを発生す
る。次いで、ステップ542において、変換されたプログ
ラムが(図9のRISCコンピュータ50により)インタープ
リター及びオリジナルプログラムに関連して実行され
る。この実行中に、変換されたプログラムからインター
プリターへ実行が切り換わるときに情報が実行ログファ
イルに記録され、インタープリターは変換されないコー
ドに対して計算行き先アドレスを決定する。インタープ
リターは、例えば、計算行き先アドレスが求められてい
ない実行転送命令のオリジナルプログラムにおける原点
アドレスを識別する情報と、オリジナルプログラムにお
けるその行き先アドレスに対して計算された値とを記録
する。好ましくは、この情報はオリジナルプログラムに
おける原点アドレスと行き先アドレスの対の形態であ
る。
いてオリジナルプログラム内の変換されていない命令を
探索する助けとする方法がフローチャートで示されてい
る。上記したように、そして図30のステップ541に示し
たように、オリジナルプログラムが変換され、トランス
レーターはプログラムに対する像情報ファイルを発生す
る。次いで、ステップ542において、変換されたプログ
ラムが(図9のRISCコンピュータ50により)インタープ
リター及びオリジナルプログラムに関連して実行され
る。この実行中に、変換されたプログラムからインター
プリターへ実行が切り換わるときに情報が実行ログファ
イルに記録され、インタープリターは変換されないコー
ドに対して計算行き先アドレスを決定する。インタープ
リターは、例えば、計算行き先アドレスが求められてい
ない実行転送命令のオリジナルプログラムにおける原点
アドレスを識別する情報と、オリジナルプログラムにお
けるその行き先アドレスに対して計算された値とを記録
する。好ましくは、この情報はオリジナルプログラムに
おける原点アドレスと行き先アドレスの対の形態であ
る。
ステップ542において変換されたプログラムを実行した
後に、ステップ543において実行ログファイルが検査さ
れ、インタープリターが呼び出されて変換されていない
コードの位置を決定したかどうかの判断がなされる。も
しそうであれば、ステップ544において、プログラムの
像情報ファイル及び実行ログファイルを用いてオリジナ
ルプログラムが変換される。例えば、流れ図を形成する
前に、実行ログファイルの行き先アドレスがデコードさ
れていないブロックのリスト225に加えられる。流れ図
を形成した後に、分析されていない入力ポイントで始ま
るブロックの先行ブロックが検査されて、各原点アドレ
スを含むブロックを備えているかどうかの判断がなさ
れ、もし備えていなければ、先行ブロックへのリンクが
加えられ、これらの新しいリンクを通して後方記号実行
が再び繰り返される。それ故、トランスレーターは原点
アドレス及び行き先アドレスを用いてオリジナルプログ
ラム内で考えられる実行経路を検査し、これらの経路
は、オリジナルプログラムの第1の変換中に発見されな
かったもので、且つ変換されたプログラムの実行中又は
オリジナルプログラムの変換されなかった部分の解読中
に取り上げられなかったものである。
後に、ステップ543において実行ログファイルが検査さ
れ、インタープリターが呼び出されて変換されていない
コードの位置を決定したかどうかの判断がなされる。も
しそうであれば、ステップ544において、プログラムの
像情報ファイル及び実行ログファイルを用いてオリジナ
ルプログラムが変換される。例えば、流れ図を形成する
前に、実行ログファイルの行き先アドレスがデコードさ
れていないブロックのリスト225に加えられる。流れ図
を形成した後に、分析されていない入力ポイントで始ま
るブロックの先行ブロックが検査されて、各原点アドレ
スを含むブロックを備えているかどうかの判断がなさ
れ、もし備えていなければ、先行ブロックへのリンクが
加えられ、これらの新しいリンクを通して後方記号実行
が再び繰り返される。それ故、トランスレーターは原点
アドレス及び行き先アドレスを用いてオリジナルプログ
ラム内で考えられる実行経路を検査し、これらの経路
は、オリジナルプログラムの第1の変換中に発見されな
かったもので、且つ変換されたプログラムの実行中又は
オリジナルプログラムの変換されなかった部分の解読中
に取り上げられなかったものである。
プログラムの次々の再変換を助けるために、流れ図デー
タ構造体(図17の211)及び変換されたプログラムのテ
ーブル224をファイルに記憶することができる。この場
合、再変換は、オリジナル流れ図の形成が終了したとこ
ろで開始することができる。流れ図を形成し続けるため
に、テーブル224がオリジナルアドレスでインデックス
され、それらを含むブロックが見つけられる。次いで、
実行ログファイルからの行き先アドレスが、各々のオリ
ジナルアドレスを含むブロックを備えた先行ブロックの
リスと共に待ち行列(図17の225)にロードされる。次
いで、流れ図の形成が図18の第1ステップ229において
再開される。
タ構造体(図17の211)及び変換されたプログラムのテ
ーブル224をファイルに記憶することができる。この場
合、再変換は、オリジナル流れ図の形成が終了したとこ
ろで開始することができる。流れ図を形成し続けるため
に、テーブル224がオリジナルアドレスでインデックス
され、それらを含むブロックが見つけられる。次いで、
実行ログファイルからの行き先アドレスが、各々のオリ
ジナルアドレスを含むブロックを備えた先行ブロックの
リスと共に待ち行列(図17の225)にロードされる。次
いで、流れ図の形成が図18の第1ステップ229において
再開される。
オリジナルプログラムがステップ544において再変換さ
れた後に、その再変換されたプログラムがステップ542
において実行される。実行から再変換までの情報のこの
フィードバックは、変換されたプログラムを各々実行し
た後に行なって、実際に探索されたオリジナルプログラ
ムにおける全ての命令が変換されるようにすることが好
ましい。
れた後に、その再変換されたプログラムがステップ542
において実行される。実行から再変換までの情報のこの
フィードバックは、変換されたプログラムを各々実行し
た後に行なって、実際に探索されたオリジナルプログラ
ムにおける全ての命令が変換されるようにすることが好
ましい。
図31には、プログラムを同時に変換することが望ましく
ないか又は不可能であるような状態、例えば、図17に示
すデータ構造体が変換を行うコンピュータのランダムア
クセスメモリの容量を遥に越えるような状態において、
相互に依存するプログラムを変換するための手順が示さ
れている。2つのプログラムは、それらが互いに呼び出
し合うときに相互に依存する。これらの相互依存性は、
プログラム内の命令を探索して変換するプロセスにしば
しば干渉する。特に、復帰ポイントを適切に接続しなけ
ればならず、これには、呼び出されている像に関する情
報が必要である。
ないか又は不可能であるような状態、例えば、図17に示
すデータ構造体が変換を行うコンピュータのランダムア
クセスメモリの容量を遥に越えるような状態において、
相互に依存するプログラムを変換するための手順が示さ
れている。2つのプログラムは、それらが互いに呼び出
し合うときに相互に依存する。これらの相互依存性は、
プログラム内の命令を探索して変換するプロセスにしば
しば干渉する。特に、復帰ポイントを適切に接続しなけ
ればならず、これには、呼び出されている像に関する情
報が必要である。
上記したように、オリジナルプログラムの変換中に発生
又は更新された像情報ファイルは、プログラム内の各々
の使用できる入力ポイントを呼び出す作用に関する情報
を記憶するのに用いられる。像を変換するときには、別
の像内の入力ポイントへの呼び出しが、その入力ポイン
トを呼び出す作用について記録された情報を使用するこ
とにより変換される。
又は更新された像情報ファイルは、プログラム内の各々
の使用できる入力ポイントを呼び出す作用に関する情報
を記憶するのに用いられる。像を変換するときには、別
の像内の入力ポイントへの呼び出しが、その入力ポイン
トを呼び出す作用について記録された情報を使用するこ
とにより変換される。
しかしながら、相互依存性は、第2の像内の入力ポイン
トを呼び出す作用が第1の像に依存し、第1の像が変換
されるまで分からないような状態を生み出す。しかし、
第1の像の変換には、第2の像内の入力ポイントを呼び
出す作用に関する情報が必要である。このように矛盾す
る相互依存性は、例えば、第1の像が第2の像内の入力
ポイントを呼び出しそして第1の像内の手順のアドレス
を識別する手順パラメータを通すが、次いで、第2の像
が第1の像の手順をコールバックするような場合に生ず
る。第1の像を変換するためには、第2の像内の入力ポ
イントを呼び出す作用に関する情報、例えば、第2の像
が第1の像をコールバックするといった情報が分からね
ばならない。しかしながら、この情報は、第1の像を検
査することによって決定できない。第2の像を変換する
ためには、第1の像を呼び出すことに関連した情報、例
えば、第1の像のコールバック中に通された手順パラメ
ータの1組の考えられる値や、その手順パラメータの各
考えられる値に対するコールバックの作用といった情報
が分からねばならない。しかし、この情報は、第2の像
を検査することにより決定できない。それ故、各情報
を、互いに他の情報が変換のために必要な全ての情報を
もつ前に変換しなければならない場合に、矛盾する状態
が生じる。
トを呼び出す作用が第1の像に依存し、第1の像が変換
されるまで分からないような状態を生み出す。しかし、
第1の像の変換には、第2の像内の入力ポイントを呼び
出す作用に関する情報が必要である。このように矛盾す
る相互依存性は、例えば、第1の像が第2の像内の入力
ポイントを呼び出しそして第1の像内の手順のアドレス
を識別する手順パラメータを通すが、次いで、第2の像
が第1の像の手順をコールバックするような場合に生ず
る。第1の像を変換するためには、第2の像内の入力ポ
イントを呼び出す作用に関する情報、例えば、第2の像
が第1の像をコールバックするといった情報が分からね
ばならない。しかしながら、この情報は、第1の像を検
査することによって決定できない。第2の像を変換する
ためには、第1の像を呼び出すことに関連した情報、例
えば、第1の像のコールバック中に通された手順パラメ
ータの1組の考えられる値や、その手順パラメータの各
考えられる値に対するコールバックの作用といった情報
が分からねばならない。しかし、この情報は、第2の像
を検査することにより決定できない。それ故、各情報
を、互いに他の情報が変換のために必要な全ての情報を
もつ前に変換しなければならない場合に、矛盾する状態
が生じる。
図31に示すように、相互依存性による矛盾は、多数の変
換によって分析される。ステップ551での第1プログラ
ム(PROGRAM#1)の変換中に、トランスレーターは、
第2プログラム(PROGRAM#2)の入力ポイントを呼び
出す作用に関する情報がないことが分かる。というの
は、第2のプログラムがまだ変換されていないからであ
る。それ故、トランスレーターは、第2プログラムの入
力ポイントへの呼び出しに関して、例えば、ノーマル復
帰や、コールバックなしといったデフォールト仮定をす
る。ステップ552において第2プログラムが変換される
と、トランスレーターは、そのデフォールト仮定とは逆
に、第2の像がコールバックを有すると判断する。
換によって分析される。ステップ551での第1プログラ
ム(PROGRAM#1)の変換中に、トランスレーターは、
第2プログラム(PROGRAM#2)の入力ポイントを呼び
出す作用に関する情報がないことが分かる。というの
は、第2のプログラムがまだ変換されていないからであ
る。それ故、トランスレーターは、第2プログラムの入
力ポイントへの呼び出しに関して、例えば、ノーマル復
帰や、コールバックなしといったデフォールト仮定をす
る。ステップ552において第2プログラムが変換される
と、トランスレーターは、そのデフォールト仮定とは逆
に、第2の像がコールバックを有すると判断する。
図31のステップ553ないし557に示されたように、像情報
ファイルを用いて、あるプログラムの手前の変換中に発
見された新たな情報を他のプログラムの再変換へ通すよ
うな繰り返し再変換のプロセスを使用することができ
る。ステップ555及び556では、厳密なコンバージェンス
状態が生じたときに繰り返しの再変換プロセスが終了と
なる。厳密なコンバージェンス状態は、像情報ファイル
において変化が生じなくなるまで2つのプログラムの各
々が交互のシーケンスで再変換されるときに生じる。し
かしながら、このコンバージェンス状態は、少数の変換
であっても、像情報ファイルに関連変化が生じないとき
を感知することによって確かめることができる。
ファイルを用いて、あるプログラムの手前の変換中に発
見された新たな情報を他のプログラムの再変換へ通すよ
うな繰り返し再変換のプロセスを使用することができ
る。ステップ555及び556では、厳密なコンバージェンス
状態が生じたときに繰り返しの再変換プロセスが終了と
なる。厳密なコンバージェンス状態は、像情報ファイル
において変化が生じなくなるまで2つのプログラムの各
々が交互のシーケンスで再変換されるときに生じる。し
かしながら、このコンバージェンス状態は、少数の変換
であっても、像情報ファイルに関連変化が生じないとき
を感知することによって確かめることができる。
厳密なコンバージェンス状態を簡単にテストする背景と
なる仮定は、個々のプログラムがその最初の変換中に生
じた像情報ファイルで再変換されるときに、その個々の
プログラムの第2の変換で変化が生じないことである。
この仮定では、第2のプログラムの変換によって第1の
プログラムの再変換に作用が及ぶのは、第2プログラム
に関する像情報が第1プログラムの変換に関連した仕方
で変化する場合だけであるという結論に達する。図32に
は、第1プログラムの最初の変換及び第2プログラムの
最初の変換の直後に得られる第1プログラムの像情報フ
ァイル561及び第2プログラムの像情報ファイル562が示
されている。第1プログラムの像情報ファイル561は、
第1プログラムの最初の変換中に検査された第1プログ
ラム入力ポイント(入力A、入力B、入力C、入力
D、...)に関する情報を含む。この情報は、各入力ポ
イントに対し、入力ポイントのアドレスと、その入力ポ
イントに関連したコールバックパラメータとを含み、こ
れらは、図24のステップ372で発見されて、変換中に図2
4のステップ373で像情報ファイル561に記録されたもの
である。更に、像情報ファイル561は、第1プログラム
から他のプログラムの外部入力ポイントへの呼び出し
(呼び出しQ、呼び出しS、呼び出しY、呼び出しZ)
に関する情報564を含み、これは、変換中に図19のステ
ップ256、258又は259において像情報ファイル561に記録
されたものである。例えば、この情報は、呼び出しの外
部行き先アドレス、呼び出しの形式(CALLSやCALLGのよ
うな)、呼び出しに関連したパラメータの数、及びパラ
メータの一定値を含む。パラメータの一定値は、例え
ば、呼び出し命令からの後方記号実行によって得られ
る。同様に、第2プログラムは、第2プログラムから他
のプログラムの外部入力ポイントへの呼び出し(呼び出
しA、呼び出しB、呼び出しH、呼び出しK)に関する
情報565、及び第2プログラムの最初の変換中に得たプ
ログラム入力ポイント(入力Q、入力Y、入力R、入力
S)に関する情報566とを含んでいる。
なる仮定は、個々のプログラムがその最初の変換中に生
じた像情報ファイルで再変換されるときに、その個々の
プログラムの第2の変換で変化が生じないことである。
この仮定では、第2のプログラムの変換によって第1の
プログラムの再変換に作用が及ぶのは、第2プログラム
に関する像情報が第1プログラムの変換に関連した仕方
で変化する場合だけであるという結論に達する。図32に
は、第1プログラムの最初の変換及び第2プログラムの
最初の変換の直後に得られる第1プログラムの像情報フ
ァイル561及び第2プログラムの像情報ファイル562が示
されている。第1プログラムの像情報ファイル561は、
第1プログラムの最初の変換中に検査された第1プログ
ラム入力ポイント(入力A、入力B、入力C、入力
D、...)に関する情報を含む。この情報は、各入力ポ
イントに対し、入力ポイントのアドレスと、その入力ポ
イントに関連したコールバックパラメータとを含み、こ
れらは、図24のステップ372で発見されて、変換中に図2
4のステップ373で像情報ファイル561に記録されたもの
である。更に、像情報ファイル561は、第1プログラム
から他のプログラムの外部入力ポイントへの呼び出し
(呼び出しQ、呼び出しS、呼び出しY、呼び出しZ)
に関する情報564を含み、これは、変換中に図19のステ
ップ256、258又は259において像情報ファイル561に記録
されたものである。例えば、この情報は、呼び出しの外
部行き先アドレス、呼び出しの形式(CALLSやCALLGのよ
うな)、呼び出しに関連したパラメータの数、及びパラ
メータの一定値を含む。パラメータの一定値は、例え
ば、呼び出し命令からの後方記号実行によって得られ
る。同様に、第2プログラムは、第2プログラムから他
のプログラムの外部入力ポイントへの呼び出し(呼び出
しA、呼び出しB、呼び出しH、呼び出しK)に関する
情報565、及び第2プログラムの最初の変換中に得たプ
ログラム入力ポイント(入力Q、入力Y、入力R、入力
S)に関する情報566とを含んでいる。
第1プログラムが第2プログラムの像情報ファイル562
内の情報によって再変換された場合に、この第1プログ
ラムが変化するかどうかについて考える。第1プログラ
ムに対する情報ファイル561内のプログラム入力ポイン
トのアドレスを、第2プログラムに対する像情報ファイ
ル562内の外部呼び出しのアドレスに合致させ、そして
第1プログラムに対する像情報ファイル561内の外部呼
び出しのアドレスを、第2プログラムに対する情報ファ
イル562内のプログラム入力ポイントのアドレスに合致
させることにより、第2プログラムに対する像情報ファ
イル562内の関連外部呼び出し及び入力ポイントが識別
される。第2プログラムに対する像情報ファイル562内
のこれら外部呼び出し及びプログラム入力ポイントにつ
いての情報が、上記のデフォールト仮定から、第1プロ
グラムの再変換に影響を及ぼすように異なる場合には、
第1プログラムを再変換しなければならない。更に、像
情報ファイル562が、第1プログラム内の変換されてい
ないコード位置を呼び出すようなプログラム#1への外
部呼び出し(図32のCALL Kのような)を有する場合に
は、その変換されていない呼び出し位置のアドレスを最
初の分析されていないブロック入力ポイントとして使用
して第1プログラムを再変換しなければならない。再変
換を考慮しているプログラムの変換されていない部分へ
の外部呼び出しに加えて、特に関連した変化としては、
再変換を考慮しているプログラム内の入力ポイントへの
外部呼び出しに対する呼び出しパラメータの新たな一定
値が含まれる。というのは、これらの一定値は、再変換
中に、他のプログラム内の変換されていないコードへの
行き先アドレスを分析するために後方記号実行によって
使用されるからである。更に、上記の関連した変化に
は、再変換を考慮中のプログラムにより呼び出されたプ
ログラム入力ポイントに対する新たなコールバックパラ
メータも含まれる。というのは、再変換中にこれらのコ
ールバックパラメータの後方記号実行が分析されて、再
変換を考慮中のプログラム内の変換されていないコード
における新たなプログラム入力ポイントの値が求められ
るからである。
内の情報によって再変換された場合に、この第1プログ
ラムが変化するかどうかについて考える。第1プログラ
ムに対する情報ファイル561内のプログラム入力ポイン
トのアドレスを、第2プログラムに対する像情報ファイ
ル562内の外部呼び出しのアドレスに合致させ、そして
第1プログラムに対する像情報ファイル561内の外部呼
び出しのアドレスを、第2プログラムに対する情報ファ
イル562内のプログラム入力ポイントのアドレスに合致
させることにより、第2プログラムに対する像情報ファ
イル562内の関連外部呼び出し及び入力ポイントが識別
される。第2プログラムに対する像情報ファイル562内
のこれら外部呼び出し及びプログラム入力ポイントにつ
いての情報が、上記のデフォールト仮定から、第1プロ
グラムの再変換に影響を及ぼすように異なる場合には、
第1プログラムを再変換しなければならない。更に、像
情報ファイル562が、第1プログラム内の変換されてい
ないコード位置を呼び出すようなプログラム#1への外
部呼び出し(図32のCALL Kのような)を有する場合に
は、その変換されていない呼び出し位置のアドレスを最
初の分析されていないブロック入力ポイントとして使用
して第1プログラムを再変換しなければならない。再変
換を考慮しているプログラムの変換されていない部分へ
の外部呼び出しに加えて、特に関連した変化としては、
再変換を考慮しているプログラム内の入力ポイントへの
外部呼び出しに対する呼び出しパラメータの新たな一定
値が含まれる。というのは、これらの一定値は、再変換
中に、他のプログラム内の変換されていないコードへの
行き先アドレスを分析するために後方記号実行によって
使用されるからである。更に、上記の関連した変化に
は、再変換を考慮中のプログラムにより呼び出されたプ
ログラム入力ポイントに対する新たなコールバックパラ
メータも含まれる。というのは、再変換中にこれらのコ
ールバックパラメータの後方記号実行が分析されて、再
変換を考慮中のプログラム内の変換されていないコード
における新たなプログラム入力ポイントの値が求められ
るからである。
図33には、2つのオリジナルプログラムの交互に繰り返
す変換に対する手順であって、一方のプログラムの再変
換を、他方のプログラムの像情報ファイルの内容に関連
する変化が生じた後にのみ実行することによって迅速な
コンバージェンスを得る手順のフローチャートが示され
ている。第1ステップ571及び第2ステップ572は、図31
の手順の第1ステップ551及び第2ステップ552と同じで
ある。しかしながら、図33の第3ステップ573では、第
2プログラムの像情報ファイル(図32の562)における
関連入力が、図32について上記したように、第1プログ
ラムの再変換におそらく影響を及ぼすであろうデフォー
ルト仮定からの変化について検査される。このような変
化が発見されると、第1プログラムはステップ574にお
いて再変換され、さもなくば、第1プログラムの再変換
も、第2プログラムの再変換も不要である。
す変換に対する手順であって、一方のプログラムの再変
換を、他方のプログラムの像情報ファイルの内容に関連
する変化が生じた後にのみ実行することによって迅速な
コンバージェンスを得る手順のフローチャートが示され
ている。第1ステップ571及び第2ステップ572は、図31
の手順の第1ステップ551及び第2ステップ552と同じで
ある。しかしながら、図33の第3ステップ573では、第
2プログラムの像情報ファイル(図32の562)における
関連入力が、図32について上記したように、第1プログ
ラムの再変換におそらく影響を及ぼすであろうデフォー
ルト仮定からの変化について検査される。このような変
化が発見されると、第1プログラムはステップ574にお
いて再変換され、さもなくば、第1プログラムの再変換
も、第2プログラムの再変換も不要である。
ステップ574における第1プログラムの再変換中に、そ
の第1プログラムの像情報ファイルにおける外部呼び出
し及びプログラム入力ポイント情報に対してなされた変
化は、例えば、その変化した入力に対してフラグを立て
そして古い入力のコピーを保持するか、或いは新たな入
力に対してフラグを立てることにより注目される。第1
プログラムの再変換の後に、ステップ575において、第
1プログラムの像情報ファイル(図32の561)における
関連変化入力が、図33について上記したように、第2プ
ログラムの再変換におそらく影響するであろう変化につ
いて検査される。このような変化が見つかると、ステッ
プ576において第2プログラムが再変換され、さもなく
ば、第1プログラムの再変換も、第2プログラムの再変
換も不要である。
の第1プログラムの像情報ファイルにおける外部呼び出
し及びプログラム入力ポイント情報に対してなされた変
化は、例えば、その変化した入力に対してフラグを立て
そして古い入力のコピーを保持するか、或いは新たな入
力に対してフラグを立てることにより注目される。第1
プログラムの再変換の後に、ステップ575において、第
1プログラムの像情報ファイル(図32の561)における
関連変化入力が、図33について上記したように、第2プ
ログラムの再変換におそらく影響するであろう変化につ
いて検査される。このような変化が見つかると、ステッ
プ576において第2プログラムが再変換され、さもなく
ば、第1プログラムの再変換も、第2プログラムの再変
換も不要である。
ステップ577における第2プログラムの再変換中に、そ
の第2プログラムの像情報ファイルにおける外部呼び出
し及びプログラム入力ポイント情報に対してなされた変
化は、例えば、その変化した入力にフラグを立てそして
古い入力のコピーを保持するか、或いは新たな入力に対
してフラグを立てることにより注目される。第2プログ
ラムの再変換の後に、ステップ577において、第2プロ
グラムの像情報ファイル(図32の562)における関連変
化入力が、図32について上記したように、第1プログラ
ムの再変換におそらく影響するであろう変化について検
査される。このような変化が見つかると、ステップ574
において第1プログラムが再変換され、さもなくば、第
1プログラムの再変換も、第2プログラムの再変換も不
要である。
の第2プログラムの像情報ファイルにおける外部呼び出
し及びプログラム入力ポイント情報に対してなされた変
化は、例えば、その変化した入力にフラグを立てそして
古い入力のコピーを保持するか、或いは新たな入力に対
してフラグを立てることにより注目される。第2プログ
ラムの再変換の後に、ステップ577において、第2プロ
グラムの像情報ファイル(図32の562)における関連変
化入力が、図32について上記したように、第1プログラ
ムの再変換におそらく影響するであろう変化について検
査される。このような変化が見つかると、ステップ574
において第1プログラムが再変換され、さもなくば、第
1プログラムの再変換も、第2プログラムの再変換も不
要である。
多数の変換及びチェックされた仮定についてのこのプロ
セスは、何回も繰り返されるが、最終的にこのプロセス
はコンバージェンス状態となる。多くの場合、このプロ
セスは各像が正確に記述された際にコンバージェンス状
態になり、それ以上の再変換は不要となる。例えば、実
行時間ライブラリーは、典型的に、とりわけ相互依存性
を有する像の収集体を含むが、これらは、指定された入
力ポイントにおいてユーザプログラムによって呼び出さ
れ、ユーザプログラムとの相互依存性はもたない。この
場合、多数の変換及びチェックされた仮定のプロセス
は、各像が正確に記述された際に−−指定の入力ポイン
トにおいて各像を呼び出す作用に関する完全な情報を含
む−−コンバージェンス状態に達する。この情報を含む
ファイルは、実行時間ライブラリー像の再変換を必要と
せずに、ユーザプログラムの変換に使用することができ
る。
セスは、何回も繰り返されるが、最終的にこのプロセス
はコンバージェンス状態となる。多くの場合、このプロ
セスは各像が正確に記述された際にコンバージェンス状
態になり、それ以上の再変換は不要となる。例えば、実
行時間ライブラリーは、典型的に、とりわけ相互依存性
を有する像の収集体を含むが、これらは、指定された入
力ポイントにおいてユーザプログラムによって呼び出さ
れ、ユーザプログラムとの相互依存性はもたない。この
場合、多数の変換及びチェックされた仮定のプロセス
は、各像が正確に記述された際に−−指定の入力ポイン
トにおいて各像を呼び出す作用に関する完全な情報を含
む−−コンバージェンス状態に達する。この情報を含む
ファイルは、実行時間ライブラリー像の再変換を必要と
せずに、ユーザプログラムの変換に使用することができ
る。
本発明は、CISC-RISCコードトランスレーターについて
説明したが、あるプログラミング言語のCISCコードを別
のプログラミング言語のCISCコードに変換するのにも非
常に有用であり、例えば、ある種のデジタルコンピュー
タのプログラムを別の種類のデジタルコンピュータのプ
ログラムにトランスポートしたり、或いはある種のオペ
レーティングシステムのプログラムを別の種類のオペレ
ーティングシステムにトランスポートしたりするのにも
有用である。更に、本発明の分析及びエラーチェック特
徴は、プログラムを変換せずにテストしたりデバッグし
たりするのに使用することができる。
説明したが、あるプログラミング言語のCISCコードを別
のプログラミング言語のCISCコードに変換するのにも非
常に有用であり、例えば、ある種のデジタルコンピュー
タのプログラムを別の種類のデジタルコンピュータのプ
ログラムにトランスポートしたり、或いはある種のオペ
レーティングシステムのプログラムを別の種類のオペレ
ーティングシステムにトランスポートしたりするのにも
有用である。更に、本発明の分析及びエラーチェック特
徴は、プログラムを変換せずにテストしたりデバッグし
たりするのに使用することができる。
添付資料 A 中間コード表示 データアクセスタプル 1.LITREF(リテラル) リテラルの値は、LITREFタプルで表され、そのレファレ
ンスアトリビュートは記号テーブルのリテラルノードを
指す。ノードは、名前の付けられたリテラル(SYM$LOF
FSETのような)、又は0や1のような定数に対するもの
である。
ンスアトリビュートは記号テーブルのリテラルノードを
指す。ノードは、名前の付けられたリテラル(SYM$LOF
FSETのような)、又は0や1のような定数に対するもの
である。
LITREFはソースオペランドとしてのみ現れる。
例: 2.REGREF(レジスタ) 直接レジスタレファレンスは、REGREFタプルで表され
る。これらは、レジスタ番号アトリビュートしか含ま
ず、ソース又は行き先オペランドとして直接使用するこ
とができる。
る。これらは、レジスタ番号アトリビュートしか含ま
ず、ソース又は行き先オペランドとして直接使用するこ
とができる。
タプルにおいては、レジスタ番号がソースに使用される
レジスタ番号ではなく、RISCコンピュータレジスタR0-R
31、AP、FP及びSPについて定義されたmtu_reg_k_*定数
のセットのうちの1つである。
レジスタ番号ではなく、RISCコンピュータレジスタR0-R
31、AP、FP及びSPについて定義されたmtu_reg_k_*定数
のセットのうちの1つである。
REGREFタプルは、記号名称をこのレジスタの場合と関連
付けるのに使用できる記号ノードアトリビュートを有し
ている。又、コードジェネレータによって使用されるア
トリビュートも有している。
付けるのに使用できる記号ノードアトリビュートを有し
ている。又、コードジェネレータによって使用されるア
トリビュートも有している。
例: 3.MEMREF/FETCH(非記号メモリレファレンス) マクロコードのほとんどのオペランドはレジスタを通し
てのメモリレファレンスである。
てのメモリレファレンスである。
MEMREFタプルは、これらを表すのに使用され、ベースレ
ジスタオペランド及びオプションのオフセットオペラン
ドの2つの成分を有している。ベースレジスタオペラン
ドは、常に、REGREFタプルのアドレスである。オフセッ
トオペランドは、もしあれば、LITREF、SYMREF又はCOMP
_OPタプルのいずれかを指すポインタである。オフセッ
トオペランドが指令されない場合には、オフセット0が
とられる。
ジスタオペランド及びオプションのオフセットオペラン
ドの2つの成分を有している。ベースレジスタオペラン
ドは、常に、REGREFタプルのアドレスである。オフセッ
トオペランドは、もしあれば、LITREF、SYMREF又はCOMP
_OPタプルのいずれかを指すポインタである。オフセッ
トオペランドが指令されない場合には、オフセット0が
とられる。
MEMREFタプルの値は、指定されたメモリ位置のアドレス
である。ソースオペランド内のメモリを参照するため
に、FETCHタプルを使用して、その位置の値が必要とさ
れることを指示しなければならない。MEMREFは、行き先
オペランドとして直接使用することができるし、或いは
MOVAX又は同様の命令におけるソースとして直接使用す
ることもできる。これは、マクロコンパイラーの前端が
アドレスコンテクストレファレンスを値コンテクストレ
ファレンスから区別する必要があることを意味し、これ
は、命令の形式及びオペランド番号に基づく単純なテー
ブルルックアップである。INCL命令の指定のような変更
オペランドの場合は、アドレスコンテクスト形態を使用
しなければならない。
である。ソースオペランド内のメモリを参照するため
に、FETCHタプルを使用して、その位置の値が必要とさ
れることを指示しなければならない。MEMREFは、行き先
オペランドとして直接使用することができるし、或いは
MOVAX又は同様の命令におけるソースとして直接使用す
ることもできる。これは、マクロコンパイラーの前端が
アドレスコンテクストレファレンスを値コンテクストレ
ファレンスから区別する必要があることを意味し、これ
は、命令の形式及びオペランド番号に基づく単純なテー
ブルルックアップである。INCL命令の指定のような変更
オペランドの場合は、アドレスコンテクスト形態を使用
しなければならない。
FETCHは、以下に述べるIDXREF及びSYMREFタプルにも使
用される。
用される。
MEMREFタプルは、レファレンスを更に定質化するように
セットされる3つのフラグを含んでいる。
セットされる3つのフラグを含んでいる。
●デファード:これは、間接についての追加レベルを指
示する。例えば、@offset(Rn)である。
示する。例えば、@offset(Rn)である。
●自動増加:これは、ベースレジスタの事後増加を指示
する。
する。
●自動減少:これは、ベースレジスタの事前減少を指示
する。これは、デファードや自動増加では指定できな
い。
する。これは、デファードや自動増加では指定できな
い。
SP、FP及びAP系のレファレンスは、全てMEMREFオペラン
ドとして表示される。
ドとして表示される。
MEMREFタプルは、記号名称をこのメモリ位置に関連付け
るのに使用できる記号ノードアトリビュートを有してい
る。又、同じベース位置に対する何回ものレファレンス
を最適に行うためにコードジェネレータによって使用で
きるアトリビュートも有している。
るのに使用できる記号ノードアトリビュートを有してい
る。又、同じベース位置に対する何回ものレファレンス
を最適に行うためにコードジェネレータによって使用で
きるアトリビュートも有している。
例: 4.SYMREF(記号テーブルレファレンス) SYMREFタプルは、記号名称をもつ項目へのレファレンス
を表すのに使用される。名称「SYMREF」は、「SYMbol n
ode REFerence」ではなくて、「SYMbol table REFerenc
e」を意味するものと理解されたい。というのは、それ
が指す記号テーブルノードは、記号ノードであるか、外
部ノードであるか、ラベルノードであるか又はルーチン
ノードだからである。
を表すのに使用される。名称「SYMREF」は、「SYMbol n
ode REFerence」ではなくて、「SYMbol table REFerenc
e」を意味するものと理解されたい。というのは、それ
が指す記号テーブルノードは、記号ノードであるか、外
部ノードであるか、ラベルノードであるか又はルーチン
ノードだからである。
タプルの値は記号の値である。記号ノードの場合に、こ
れは、記号の値を得るのにFETCHが使用されないことを
意味する。記号ノードは、この点についてはリテラルノ
ードと同じであり、あるコンパイル−時間値について単
なる記号名称である。
れは、記号の値を得るのにFETCHが使用されないことを
意味する。記号ノードは、この点についてはリテラルノ
ードと同じであり、あるコンパイル−時間値について単
なる記号名称である。
外部、ラベル及びルーチンノードの場合は、コンテクス
トに基づいてFETCHが要求される。アドレス又は中間モ
ードレファレンスは、FETCHを必要としない。(中間モ
ードレファレンスは外部に対する法律に過ぎない。)値
のレファレンスに場合には、SYMREFのFETCHが必要とさ
れる。例えば、外部、ラベル又はルーチンへの分岐はSY
MREFを直接使用する。例えば、あるラベルの値のMOVEL
命令は、SYMREFのFETCHを使用する。
トに基づいてFETCHが要求される。アドレス又は中間モ
ードレファレンスは、FETCHを必要としない。(中間モ
ードレファレンスは外部に対する法律に過ぎない。)値
のレファレンスに場合には、SYMREFのFETCHが必要とさ
れる。例えば、外部、ラベル又はルーチンへの分岐はSY
MREFを直接使用する。例えば、あるラベルの値のMOVEL
命令は、SYMREFのFETCHを使用する。
SYMREFタプルにおけるDEFERREDフラグは、間接を指示す
るのに使用することができる。このフラグは、外部及び
ラベルノードのSYMREFにのみ使用できる。
るのに使用することができる。このフラグは、外部及び
ラベルノードのSYMREFにのみ使用できる。
例: ラベル及び入力ポイントタプル 1.LABEL LABELタプルは、ルーチン内の分岐ターゲットを表す。
参照されるラベル記号は、分岐タプルのターゲットオペ
ランドとして使用されるSYMREFタプルによっても指示さ
れる。
参照されるラベル記号は、分岐タプルのターゲットオペ
ランドとして使用されるSYMREFタプルによっても指示さ
れる。
ソースのUNWIND_TARGETディレクティブでデクレアされ
るラベルは、ノーマルラベルタプルで表される。しかし
ながら、UNWIND_TARGETフラグは、このタプルにおいて
セットされる。
るラベルは、ノーマルラベルタプルで表される。しかし
ながら、UNWIND_TARGETフラグは、このタプルにおいて
セットされる。
例: 2.JSB_ENTRY、CALL_ENTRY、IO_INTERRUPT_ENTRY、EXCEP
TION_ENTRY 入力ポイントディレクティブタプルは、ソース内のJSB_
ENTRY、CALL_ENTRY、IO_INTERRUPT_ENTRY又はEXCEPTION
_ENTRYディレクティブのうちの1つでデクレアされたル
ーチンのスタートにフラグを立てる。タプルは、デクレ
アされたルーチンのMTU入力ノードを指す。
TION_ENTRY 入力ポイントディレクティブタプルは、ソース内のJSB_
ENTRY、CALL_ENTRY、IO_INTERRUPT_ENTRY又はEXCEPTION
_ENTRYディレクティブのうちの1つでデクレアされたル
ーチンのスタートにフラグを立てる。タプルは、デクレ
アされたルーチンのMTU入力ノードを指す。
MTU入力ノードは、ソースディレクティブに指定された
レジスタ使用及び他の情報を含んでいる。
レジスタ使用及び他の情報を含んでいる。
例: 制御流タプル 1.BRANCH BRANCHタプルは、特定ターゲットラベルへの分岐を指定
するか、又はメモリ位置を通しての間接分岐を指定す
る。第1のオペランドは、ラベル記号ノードを識別する
SYMREFタプルか又は分岐アドレスを指定する値発生タプ
ルかのいずれかのアドレスでなければならない(REGREF
又はFETCH)。
するか、又はメモリ位置を通しての間接分岐を指定す
る。第1のオペランドは、ラベル記号ノードを識別する
SYMREFタプルか又は分岐アドレスを指定する値発生タプ
ルかのいずれかのアドレスでなければならない(REGREF
又はFETCH)。
分岐タプルは、BRB、BRW及びJMP命令に使用される。
間接分岐の場合には、コードジェネレータは分岐ではな
くてJSBを発生することに注意されたい。
くてJSBを発生することに注意されたい。
例: 2.CALLS/CALLG CALLS及びCALLGタプルは、記号又はメモリレファレンス
である第1オペランドで指定されたルーチンへのVAX呼
び出し命令に対応する。第2のオペランドは、パラメー
タカウント(CALLSの場合)であるか、或いはCALLGのた
めのパラメータリストのアドレスである。
である第1オペランドで指定されたルーチンへのVAX呼
び出し命令に対応する。第2のオペランドは、パラメー
タカウント(CALLSの場合)であるか、或いはCALLGのた
めのパラメータリストのアドレスである。
例: 3.RETURN RETURNタプルは、VAX復帰命令に対応する。
アナライザーは、復帰しつつあるルーチンに対する記号
ノードと、復帰をエミュレートするためにインタープリ
ターを呼び出さねばならないかどうかを指示するフラグ
とでRETURNタプルにタグ付けを行う。
ノードと、復帰をエミュレートするためにインタープリ
ターを呼び出さねばならないかどうかを指示するフラグ
とでRETURNタプルにタグ付けを行う。
例:ソース 中間表示 ret Lo1: return 4.JSB JSBタプルは、VAXのJSB又はBSBx命令に対応する。これ
は、記号ノードアドレスを指すSYMREFであるか又は間接
的JSBターゲットを表す値発生タプルかのいずれかであ
る単一のオペランドを有している。
は、記号ノードアドレスを指すSYMREFであるか又は間接
的JSBターゲットを表す値発生タプルかのいずれかであ
る単一のオペランドを有している。
例: 5.RSB/REI RSB及びREIタプルは、各々、VAXのRSB及びREI命令に対
応している。
応している。
アナライザーは、復帰しつつあるルーチンの記号ノード
を指すポインタでこれらのタプルを更に注意する。
を指すポインタでこれらのタプルを更に注意する。
例:ソース 中間表示 rsb LO1: RSB 6.CONDBR CONDBRタプルはVAXの全ての条件分岐命令を表すのに使
用される。このタプルは、(VAX分岐OPコードを指定す
る)OPコードアトリビュートと、記号ノードを指すSYMR
EFタプルであるか又は間接的行き先を表す値発生タプル
かのいずれかのアドレスである行き先オペランドとを有
している。オプションの追加オペランドの存在は条件分
岐の形式によって左右される。例えば、BLEQは追加オペ
ランドをもたず、BLBCはテストされるべき項目を指定す
るオペランドを有し、BBSは2つの追加オペランドを有
する。
用される。このタプルは、(VAX分岐OPコードを指定す
る)OPコードアトリビュートと、記号ノードを指すSYMR
EFタプルであるか又は間接的行き先を表す値発生タプル
かのいずれかのアドレスである行き先オペランドとを有
している。オプションの追加オペランドの存在は条件分
岐の形式によって左右される。例えば、BLEQは追加オペ
ランドをもたず、BLBCはテストされるべき項目を指定す
るオペランドを有し、BBSは2つの追加オペランドを有
する。
以下のテーブルは、条件分岐の形式と、必要な追加パラ
メータを示す。形式の欄は、オペランドとして許された
オペランドの形式を示し、「Value」は、LITREF、SYMRE
F(コンパイル時間記号の)、COM_OP、REGREF及びFETCH
(SYMREF、MEMREF又はIDXREFの)が許されたことを示
し、一方、「Addr」は、REGREF、SYMREF、MEMREF及びID
XREFが許されたことを示す。オペランド1は常に分岐行
き先である。
メータを示す。形式の欄は、オペランドとして許された
オペランドの形式を示し、「Value」は、LITREF、SYMRE
F(コンパイル時間記号の)、COM_OP、REGREF及びFETCH
(SYMREF、MEMREF又はIDXREFの)が許されたことを示
し、一方、「Addr」は、REGREF、SYMREF、MEMREF及びID
XREFが許されたことを示す。オペランド1は常に分岐行
き先である。
例: 命令タプル 1.INSTR INSTRタプルは、他の全てのマクロ命令を表示する方法
である。その命令アトリビュートはOPコードを表す定数
であり、そのオペランドは命令オペランドを表す。
である。その命令アトリビュートはOPコードを表す定数
であり、そのオペランドは命令オペランドを表す。
OPコード定数は、通常は、VAXのOPコードを表すmtu_vax
_k_*値のうちの1つである。又、RISC向けのOPコード
に対する構成を表すmtu_evax_k_*のうちの1つでもあ
る。
_k_*値のうちの1つである。又、RISC向けのOPコード
に対する構成を表すmtu_evax_k_*のうちの1つでもあ
る。
許されたオペランド形式のセットは、命令依存である。
一般に、LITREF、SYMREF、COMP_OP、REGREF及びFETCH
(SYMREF、MEMREF又はIDXREFの)オペレータは、値が使
用されるオペランドに対して許され、一方、REGREF、SY
MREF、MEMREF及びIDXREFは、アドレスが使用されるオペ
ランドに対して許される。「INCx」命令の行き先のよう
な「変更」式のオペランドの場合は、アドレスの形態を
使用しなければならない。
一般に、LITREF、SYMREF、COMP_OP、REGREF及びFETCH
(SYMREF、MEMREF又はIDXREFの)オペレータは、値が使
用されるオペランドに対して許され、一方、REGREF、SY
MREF、MEMREF及びIDXREFは、アドレスが使用されるオペ
ランドに対して許される。「INCx」命令の行き先のよう
な「変更」式のオペランドの場合は、アドレスの形態を
使用しなければならない。
INSTRタプルは、アナライザーによって計算されたこの
情報をコードジェネレータに与える条件コード使用フラ
グを有している。これらは、N及びZ、C及び/又はV
ビット値を、現在命令によって発生されたコードにより
シュミレートしなければならないかどうかを指定する。
付加的な「ローカルNZ」ビットは、N/Zの唯一の使用が
その直後の1つ以上の条件分岐命令によるものである場
合にセットされる。これにより、コードジェネレータ
は、ある場合に、結果の値を直接使用することができ
る。
情報をコードジェネレータに与える条件コード使用フラ
グを有している。これらは、N及びZ、C及び/又はV
ビット値を、現在命令によって発生されたコードにより
シュミレートしなければならないかどうかを指定する。
付加的な「ローカルNZ」ビットは、N/Zの唯一の使用が
その直後の1つ以上の条件分岐命令によるものである場
合にセットされる。これにより、コードジェネレータ
は、ある場合に、結果の値を直接使用することができ
る。
例:
Claims (14)
- 【請求項1】第1のコンピュータプログラムを分析して
この第1のコンピュータプログラムの命令の位置を決定
し、また、第2のコンピュータプログラムを分析してこ
の第2のコンピュータプログラムの命令の位置を決定す
るためにデジタルコンピュータを動作するコンピュータ
実行方法であって、前記デジタルコンピュータはメモリ
を含み、前記第1のコンピュータプログラムの前記命令
は、第2のコンピュータプログラムのプログラム入力ポ
イントを含んだ外部入力ポイントを呼び出す呼び出し命
令を含んでおり、前記第1のコンピュータプログラムの
命令の位置の幾つかは未知であって、前記第1のコンピ
ュータプログラムのプログラム入力ポイントに対する前
記第2のコンピュータプログラムによるコールバックに
関する情報なくしては見つけ出すことが不可能であり、
前記第2のコンピュータプログラムの前記命令は、前記
第1のコンピュータプログラムのプログラム入力ポイン
トを含んだ外部入力ポイントを呼び出す呼び出し命令を
含んでおり、前記第2のコンピュータプログラムの命令
の位置の幾つかは未知であって、前記第2のコンピュー
タプログラムのプログラム入力ポイントに対する前記第
1のコンピュータプログラムによるコールバックに関す
る情報なくしては見つけ出すことが不可能であり、前記
第1のコンピュータプログラムに対する前記第2のコン
ピュータプログラムのコールバックに関する前記情報の
決定は、前記第2のコンピュータプログラムの前記プロ
グラム入力ポイントに対する前記第1のコンピュータプ
ログラムによる呼び出しに関する情報に基づくものであ
り、前記第2のコンピュータプログラムの前記プログラ
ム入力ポイントに対する前記第1のコンピュータプログ
ラムによるコールバックに関する前記情報の決定は、前
記第1のコンピュータプログラムの前記プログラム入力
ポイントに対する前記第2のコンピュータプログラムに
よる呼び出しに関する情報に基づいているような、コン
ピュータ実施方法において、 a)前記第1のコンピュータプログラムの第1の分析の
ために前記デジタルコンピュータを動作する段階であっ
て、前記第1のコンピュータプログラムの前記第1の分
析の間に、 a1)前記第1のコンピュータプログラムの前記命令の幾
つかの位置を決定し、 a2)前記段階a1)において前記第1のコンピュータプロ
グラムにおける位置が既に突きとめられている呼び出し
命令によって呼び出される外部入力ポイントを決定し、
前記段階a1)において前記第1のコンピュータプログラ
ムにおける位置が既に突きとめられている呼び出し命令
によって呼び出される決定された外部入力ポイントの第
1の記録を前記メモリに形成し、 a3)前記第1のコンピュータプログラムの各既知のプロ
グラム入力ポイントに関して、前記第1のコンピュータ
プログラムから前記第2のコンピュータプログラムへの
呼び出しが前記第2のコンピュータプログラムから前記
第1のコンピュータプログラムへのコールバックを伴わ
ないノーマル復帰を有するといった仮定に基づいてコー
ルバックが生じるかどうかを決定し、前記第1のコンピ
ュータプログラムの各既知のプログラム入力ポイントか
らコールバックが生じると知られているかどうかに関す
る第2の記録を前記メモリに形成する段階と、 b)前記第2のコンピュータプログラムの分析のために
前記デジタルコンピュータを動作する段階であって、前
記第2のコンピュータプログラムの前記分析の間に、 b1)前記メモリの前記第1の記録と前記第2の記録を読
み出し、前記第1の記録と前記第2の記録から読み出さ
れた情報を用いて前記第2のコンピュータプログラムの
前記命令のうちの幾つかの命令の位置を見つけだし、 b2)段階b1)において前記第2のコンピュータプログラ
ムにおける位置が既に突きとめられている呼び出し命令
によって呼び出される外部入力ポイントを決定し、前記
段階b1)において前記第2のコンピュータプログラムに
おける位置が既に突きとめられている前記呼び出し命令
によって呼び出される決定された外部入力ポイントの第
2の記録を前記メモリに形成し、 b3)前記第2のコンピュータプログラムの既知のプログ
ラム入力ポイントの各々に関してコールバックが生じる
かどうかを決定し、コールバックが前記第2のコンピュ
ータプログラムの各既知のプログラム入力ポイントから
生じるかどうかに関する第4の記録を前記メモリに形成
する段階と、 c)前記第1のコンピュータプログラムの第2の分析の
ために前記デジタルコンピュータを動作する段階であっ
て、前記第1のコンピュータプログラムの前記第2の分
析の間に、 c1)前記メモリの前記第3の記録と前記第4の記録を読
み出し、前記メモリの前記第3の記録と前記第4の記録
から読み出された情報を用いて前記第1のコンピュータ
プログラムを分析して前記第1のコンピュータプログラ
ムの前記命令のうちの付加的な命令の位置をサーチする
段階と、 を備えることを特徴とする方法。 - 【請求項2】請求項1記載のコンピュータ実施方法にお
いて、前記方法は、前記第1のコンピュータプログラム
から前記第2のコンピュータプログラムへのいずれかの
呼び出しが、前記第2のコンピュータプログラムから前
記第1のコンピュータプログラムへのコールバックを伴
ったアブノーマル復帰を有するかどうかをチェックする
段階を含んでおり、前記チェック段階は、前記段階a)
の後に実行されて、前記第2のコンピュータプログラム
から前記第1のコンピュータプログラムへのコールバッ
クを伴ったアブノーマル復帰を有する前記第1のコンピ
ュータプログラムから前記第2のコンピュータプログラ
ムへの少なくとも1つの呼び出しを見つけだし、前記段
階c)は、前記第2のコンピュータプログラムから前記
第1のコンピュータプログラムへのコールバックを伴っ
たアブノーマル復帰を有する前記第1のコンピュータプ
ログラムから前記第2のコンピュータプログラムへの少
なくとも1つの呼び出しを見つけだした後に実行される
方法。 - 【請求項3】請求項1記載のコンピュータ実施方法にお
いて、前記第1の記録と前記第2の記録は、前記第1の
コンピュータプログラムに対する像情報ファイルに含ま
れており、前記第3の記録と前記第4の記録は、前記第
2のコンピュータプログラムに対する像情報ファイルに
含まれている方法。 - 【請求項4】請求項1記載のコンピュータ実施方法にお
いて、前記第1の記録は、段階a1)において前記第1の
コンピュータプログラムにおける位置が既に突きとめら
れている呼び出し命令によって呼び出される前記外部入
力ポイントと関連するようなパラメータとアドレスを指
定する情報を含む方法。 - 【請求項5】請求項1記載のコンピュータ実施方法にお
いて、前記第2の記録は、前記第1のコンピュータプロ
グラムの既知のプログラム入力ポイントと関連するよう
なパラメータとアドレスを指定する情報を含む方法。 - 【請求項6】請求項1記載のコンピュータ実施方法にお
いて、段階c)は更に、 c2)前記第1のコンピュータプログラムの既知の呼び出
し命令によって呼び出される外部入力ポイントを再決定
し、前記第1のコンピュータプログラムの既知の呼び出
し命令によって呼び出される既知の外部入力ポイントの
第5の記録を前記メモリに形成し、 c3)前記第1のコンピュータプログラムの各既知のプロ
グラム入力ポイントに関してコールバックが生じるかど
うかを再決定し、前記第1のコンピュータプログラムの
各既知のプログラム入力ポイントからコールバックが生
じると知られているかどうかに関する第6の記録を前記
メモリに形成する段階であり、 前記方法は更に、 d)前記第2のコンピュータプログラムの第2の分析の
ために前記デジタルコンピュータを動作する後続の段階
であって、前記第2のコンピュータプログラムの前記第
2の分析の間に、 d1)前記メモリの前記第5の記録と前記第6の記録を読
み出し、前記第2のコンピュータプログラムを分析して
前記メモリの前記第5の記録と前記第6の記録から読み
出された情報を用いて前記第2のコンピュータプログラ
ムの前記命令のうちの付加的な命令の位置をサーチする
段階を含んでいる方法。 - 【請求項7】請求項1記載のコンピュータ実施方法にお
いて、前記方法は、前記第1のコンピュータプログラム
から前記第2のコンピュータプログラムへのいずれかの
呼び出しが、前記第2のコンピュータプログラムから前
記第1のコンピュータプログラムへのコールバックを伴
ったアブノーマル復帰を有するかどうかをチェックする
段階を含んでおり、前記チェック段階は、前記第2のコ
ンピュータプログラムから前記第1のコンピュータプロ
グラムへのコールバックを伴ったアブノーマル復帰を有
する前記第1のコンピュータプログラムから前記第2の
コンピュータプログラムへの少なくとも1つの呼び出し
を見つけ出すために前記段階a)の後に実行されるもの
であり、前記段階c)は、前記第2のコンピュータプロ
グラムから前記第1のコンピュータプログラムへのコー
ルバックを伴ったアブノーマル復帰を有する前記第1の
コンピュータプログラムから前記第2のコンピュータプ
ログラムへの少なくとも1つの呼び出しを見つけだした
後に実行されるものである方法。 - 【請求項8】請求項7記載のコンピュータ実施方法にお
いて、前記方法は、前記段階a3)においてコールバック
を伴わないノーマルな復帰を有するものとして決定され
たが前記段階c3)においては前記第1のコンピュータプ
ログラムから前記第2のコンピュータプログラムへのコ
ールバックを伴ったアブノーマル復帰を有するものとし
て再決定された前記第2のコンピュータプログラムから
前記第1のコンピュータプログラムへのいずれかの呼び
出しが存在するかどうかをチェックする段階を含んでお
り、前記チェック段階は、前記段階a3)においてコール
バックを伴わないノーマルな復帰を有するものとして決
定されたが前記段階c3)においては前記第1のコンピュ
ータプログラムから前記第2のコンピュータプログラム
へのコールバックを伴ったアブノーマル復帰を有するも
のとして再決定された前記第2のコンピュータプログラ
ムから前記第1のコンピュータプログラムへの呼び出し
を見つけ出すために前記段階b)の後に実行されるもの
であり、前記段階d)は、前記段階a3)においてコール
バックを伴わないノーマルな復帰を有するものとして決
定されたが前記段階c3)においては前記第1のコンピュ
ータプログラムから前記第2のコンピュータプログラム
へのコールバックを伴ったアブノーマル復帰を有するも
のとして再決定された前記第2のコンピュータプログラ
ムから前記第1のコンピュータプログラムへの呼び出し
を見つけだした後に実行されるものである方法。 - 【請求項9】請求項6記載のコンピュータ実施方法にお
いて、前記方法は、前記段階a3)においてコールバック
を伴わないノーマルな復帰を有するものとして決定され
たが前記段階c3)においては前記第1のコンピュータプ
ログラムから前記第2のコンピュータプログラムへのコ
ールバックを伴ったアブノーマル復帰を有するものとし
て再決定された前記第2のコンピュータプログラムから
前記第1のコンピュータプログラムへのいずれかの呼び
出しが存在するかどうかをチェックする段階を含んでお
り、前記チェック段階は、前記段階a3)においてコール
バックを伴わないノーマルな復帰を有するものとして決
定されたが前記段階c3)においては前記第1のコンピュ
ータプログラムから前記第2のコンピュータプログラム
へのコールバックを伴ったアブノーマル復帰を有するも
のとして再決定された前記第2のコンピュータプログラ
ムから前記第1のコンピュータプログラムへの呼び出し
を見つけ出すために前記段階b)の後に実行されるもの
であり、前記段階d)は、前記段階a3)においてコール
バックを伴わないノーマルな復帰を有するものとして決
定されたが前記段階c3)においては前記第1のコンピュ
ータプログラムから前記第2のコンピュータプログラム
へのコールバックを伴ったアブノーマル復帰を有するも
のとして再決定された前記第2のコンピュータプログラ
ムから前記第1のコンピュータプログラムへの呼び出し
を見つけだした後に実行されるものである方法。 - 【請求項10】請求項6記載のコンピュータ実施方法に
おいて、前記第1の記録と前記第2の記録は、前記第1
のコンピュータプログラムに対する像情報ファイルに含
まれており、前記第3の記録と前記第4の記録は、前記
第2のコンピュータプログラムに対する像情報ファイル
に含まれている方法。 - 【請求項11】請求項6記載のコンピュータ実施方法に
おいて、前記第1の記録は、段階a1)において前記第1
のコンピュータプログラムにおける位置が既に突きとめ
られている呼び出し命令によって呼び出される前記外部
入力ポイントと関連するようなパラメータとアドレスを
指定する情報を含む方法。 - 【請求項12】請求項6記載のコンピュータ実施方法に
おいて、前記第2の記録は、前記第1のコンピュータプ
ログラムの既知のプログラム入力ポイントと関連するよ
うなパラメータとアドレスを指定する情報を含む方法。 - 【請求項13】請求項6記載のコンピュータ実施方法に
おいて、段階d)は、更に、 d2)前記第2のコンピュータプログラムの既知の呼び出
し命令によって呼び出される外部入力ポイントを再決定
し、前記第2のコンピュータプログラムの既知の呼び出
し命令によって呼び出される既知の外部入力ポイントの
第7の記録を前記メモリに形成し、 d3)前記第2のコンピュータプログラムの各既知のプロ
グラム入力ポイントに関してコールバックが生じたかど
うかを再決定し、前記第2のコンピュータプログラムの
各既知のプログラム入力ポイントからコールバックが生
じたかどうかに関する第8の記録をメモリに形成するこ
とを含んでおり、 前記方法は更に、 e)前記第1のコンピュータプログラムの第3の分析の
ために前記デジタルコンピュータを動作する後続の段階
であって、前記第1のコンピュータプログラムの前記第
3の分析の間に、 d1)前記メモリの前記第7の記録と前記第8の記録を読
み出し、前記第1のコンピュータプログラムを分析して
前記メモリの前記第7の記録と前記第8の記録から読み
出された情報を用いて前記第1のコンピュータプログラ
ムの前記命令のうちの付加的な命令の位置をサーチする
段階を含んでいる方法。 - 【請求項14】請求項13項記載のコンピュータ実施方法
において、 前記第1の記録から読み出された情報を前記第5の記録
に書き込まれた情報と比較し、前記第2の記録から読み
出された情報を前記第6の記録に書き込まれた情報と比
較する段階であって、前記段階b)の後であって前記段
階e)の前に実行されるような第1の比較段階と、 前記第3の記録から読み出された情報を前記第7の記録
に書き込まれた情報と比較し、前記第4の記憶から読み
出された情報を前記第8の記録に書き込まれた情報と比
較する段階であって、前記段階c)の後であって前記段
階e)の前に実行されるような第2の比較段階と、を含
み、 前記第1および第2の比較段階のうちの少なくとも一方
が比較された情報における差異を見つけ出す方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US07/666,223 US5317740A (en) | 1991-03-07 | 1991-03-07 | Alternate and iterative analysis of computer programs for locating translatable code by resolving callbacks and other conflicting mutual dependencies |
PCT/US1992/001831 WO1992015932A2 (en) | 1991-03-07 | 1992-03-04 | Cross-image referencing of program code |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH06502269A JPH06502269A (ja) | 1994-03-10 |
JPH0762827B2 true JPH0762827B2 (ja) | 1995-07-05 |
Family
ID=24673321
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP4511619A Expired - Lifetime JPH0762827B2 (ja) | 1991-03-07 | 1992-03-04 | プログラムコードの交差像参照方法 |
Country Status (7)
Country | Link |
---|---|
US (1) | US5317740A (ja) |
EP (1) | EP0531522A1 (ja) |
JP (1) | JPH0762827B2 (ja) |
AU (1) | AU653626B2 (ja) |
CA (1) | CA2082065C (ja) |
IE (1) | IE920741A1 (ja) |
WO (1) | WO1992015932A2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10628140B2 (en) * | 2016-11-17 | 2020-04-21 | Mitsubishi Electric Corporation | Program code generation apparatus |
Families Citing this family (76)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2984463B2 (ja) * | 1991-06-24 | 1999-11-29 | 株式会社日立製作所 | マイクロコンピュータ |
JP3105197B2 (ja) | 1991-06-24 | 2000-10-30 | 株式会社日立製作所 | 除算回路及び除算方法 |
US6735685B1 (en) * | 1992-09-29 | 2004-05-11 | Seiko Epson Corporation | System and method for handling load and/or store operations in a superscalar microprocessor |
KR100248903B1 (ko) | 1992-09-29 | 2000-03-15 | 야스카와 히데아키 | 수퍼스칼라마이크로프로세서에서의 적재 및 저장연산처리방법 및 시스템 |
US5560010A (en) * | 1993-10-28 | 1996-09-24 | Symantec Corporation | Method for automatically generating object declarations |
US6425124B1 (en) * | 1993-11-08 | 2002-07-23 | Matsushita Electric Industrial Co. Ltd. | Resource allocation device for reducing the size and run time of a machine language program |
US5694539A (en) * | 1994-08-10 | 1997-12-02 | Intrinsa Corporation | Computer process resource modelling method and apparatus |
US5608874A (en) * | 1994-12-02 | 1997-03-04 | Autoentry Online, Inc. | System and method for automatic data file format translation and transmission having advanced features |
JP3505266B2 (ja) * | 1995-06-15 | 2004-03-08 | 三洋電機株式会社 | プログラム実行装置 |
JP3290567B2 (ja) * | 1995-08-24 | 2002-06-10 | 富士通株式会社 | プロファイル計装方法 |
US5949971A (en) * | 1995-10-02 | 1999-09-07 | International Business Machines Corporation | Method and system for performance monitoring through identification of frequency and length of time of execution of serialization instructions in a processing system |
US5691920A (en) * | 1995-10-02 | 1997-11-25 | International Business Machines Corporation | Method and system for performance monitoring of dispatch unit efficiency in a processing system |
US5751945A (en) * | 1995-10-02 | 1998-05-12 | International Business Machines Corporation | Method and system for performance monitoring stalls to identify pipeline bottlenecks and stalls in a processing system |
US5748855A (en) * | 1995-10-02 | 1998-05-05 | Iinternational Business Machines Corporation | Method and system for performance monitoring of misaligned memory accesses in a processing system |
US5797019A (en) * | 1995-10-02 | 1998-08-18 | International Business Machines Corporation | Method and system for performance monitoring time lengths of disabled interrupts in a processing system |
US5752062A (en) * | 1995-10-02 | 1998-05-12 | International Business Machines Corporation | Method and system for performance monitoring through monitoring an order of processor events during execution in a processing system |
US5729726A (en) * | 1995-10-02 | 1998-03-17 | International Business Machines Corporation | Method and system for performance monitoring efficiency of branch unit operation in a processing system |
US6000028A (en) * | 1996-01-29 | 1999-12-07 | Digital Equipment Corporation | Means and apparatus for maintaining condition codes in an unevaluated state |
US5842017A (en) * | 1996-01-29 | 1998-11-24 | Digital Equipment Corporation | Method and apparatus for forming a translation unit |
US6226789B1 (en) | 1996-01-29 | 2001-05-01 | Compaq Computer Corporation | Method and apparatus for data flow analysis |
US6535903B2 (en) | 1996-01-29 | 2003-03-18 | Compaq Information Technologies Group, L.P. | Method and apparatus for maintaining translated routine stack in a binary translation environment |
US5802373A (en) * | 1996-01-29 | 1998-09-01 | Digital Equipment Corporation | Method for providing a pipeline interpreter for a variable length instruction set |
US6091897A (en) * | 1996-01-29 | 2000-07-18 | Digital Equipment Corporation | Fast translation and execution of a computer program on a non-native architecture by use of background translator |
US5930509A (en) * | 1996-01-29 | 1999-07-27 | Digital Equipment Corporation | Method and apparatus for performing binary translation |
US5742802A (en) * | 1996-02-16 | 1998-04-21 | International Business Machines Corporation | Method and system for efficiently mapping guest instruction in an emulation assist unit |
US5805893A (en) * | 1996-03-01 | 1998-09-08 | Electronic Data Systems Corporation | Assembly language program converter |
US5754860A (en) * | 1996-07-23 | 1998-05-19 | Digital Equipment Corporation | Method and apparatus for software testing using a differential testing technique to test compilers |
US6052530A (en) * | 1996-10-09 | 2000-04-18 | Hewlett-Packard Co. | Dynamic translation system and method for optimally translating computer code |
US5812759A (en) * | 1996-11-08 | 1998-09-22 | Allen Bradley Company, Inc. | Fault handling with loaded functions |
US6314564B1 (en) * | 1997-11-17 | 2001-11-06 | Agere Systems Guardian Corp. | Method for resolving arbitrarily complex expressions at link-time |
US6407739B1 (en) | 1998-08-19 | 2002-06-18 | James C. Wen | Article and method for displaying a graphical history list |
JP4158239B2 (ja) * | 1998-09-08 | 2008-10-01 | ソニー株式会社 | 情報処理装置および方法、並びに記録媒体 |
US6449711B1 (en) | 1999-02-04 | 2002-09-10 | Sun Microsystems, Inc. | Method, apparatus, and article of manufacture for developing and executing data flow programs |
US6564374B1 (en) * | 1999-04-22 | 2003-05-13 | International Business Machines Corporation | Method and apparatus for employing cognitive compares in compare statement sequences |
US6463521B1 (en) * | 1999-06-23 | 2002-10-08 | Sun Microsystems, Inc. | Opcode numbering for meta-data encoding |
US6795962B1 (en) * | 1999-12-30 | 2004-09-21 | Microsoft Corporation | Machine independent debugger |
US6654952B1 (en) | 2000-02-03 | 2003-11-25 | Sun Microsystems, Inc. | Region based optimizations using data dependence graphs |
US6687807B1 (en) | 2000-04-18 | 2004-02-03 | Sun Microystems, Inc. | Method for apparatus for prefetching linked data structures |
SE0002440D0 (sv) | 2000-06-28 | 2000-06-28 | Virtutech Ab | Interpreter |
US6675372B1 (en) | 2000-10-31 | 2004-01-06 | Sun Microsystems, Inc. | Counting speculative and non-speculative events |
US7251811B2 (en) * | 2002-01-02 | 2007-07-31 | Intel Corporation | Controlling compatibility levels of binary translations between instruction set architectures |
JP3900485B2 (ja) * | 2002-07-29 | 2007-04-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体 |
US8020148B2 (en) * | 2002-09-23 | 2011-09-13 | Telefonaktiebolaget L M Ericsson (Publ) | Bi-directional probing and testing of software |
US6986110B1 (en) * | 2003-01-02 | 2006-01-10 | Hewlett-Packard Development Company, L.P. | Automated method and system for backtracing of instruction parameters from specified instruction in test cases |
US8195694B1 (en) * | 2004-04-26 | 2012-06-05 | Oracle America Inc. | Resolving conflicts between actions that target elements of a hierarchical data structure |
US7496901B2 (en) * | 2004-06-22 | 2009-02-24 | International Business Machines Corporation | Method for boundary trace with reproduction facility |
US8185868B1 (en) * | 2004-12-20 | 2012-05-22 | The Mathworks, Inc. | System and method for cell-based code editing and publishing |
US20090178032A1 (en) * | 2005-03-03 | 2009-07-09 | Rongzhen Yang | Mining for performance data for systems with dynamic compilers |
US7805708B2 (en) * | 2005-05-13 | 2010-09-28 | Texas Instruments Incorporated | Automatic tool to eliminate conflict cache misses |
US7900193B1 (en) * | 2005-05-25 | 2011-03-01 | Parasoft Corporation | System and method for detecting defects in a computer program using data and control flow analysis |
US7975257B2 (en) * | 2006-06-13 | 2011-07-05 | Microsoft Corporation | Iterative static and dynamic software analysis |
US7865882B2 (en) * | 2006-08-18 | 2011-01-04 | International Business Machines Corporation | Fast correctly rounding floating point conversion and identifying exceptional conversion |
US7810073B2 (en) * | 2006-09-05 | 2010-10-05 | International Business Machines Corporation | Method of translating n to n instructions employing an enhanced extended translation facility |
US7908474B2 (en) * | 2006-09-22 | 2011-03-15 | International Business Machines Corporation | Method for improved key management for ATMs and other remote devices |
US9013494B2 (en) | 2006-12-07 | 2015-04-21 | Sony Computer Entertainment Inc. | Heads-up-display software development tool |
US7950003B1 (en) * | 2006-12-07 | 2011-05-24 | Sony Computer Entertainment Inc. | Heads-up-display software development tool for analyzing and optimizing computer software |
US9645915B2 (en) | 2006-12-27 | 2017-05-09 | The Mathworks, Inc. | Continuous evaluation of program code and saving state information associated with program code |
US8762956B1 (en) | 2007-01-31 | 2014-06-24 | The Mathworks, Inc. | Generating a report document from code |
US8099719B2 (en) * | 2007-06-19 | 2012-01-17 | Microsoft Corporation | Transactional debugger for a transactional memory system and detecting conflicts |
US8381192B1 (en) * | 2007-08-03 | 2013-02-19 | Google Inc. | Software testing using taint analysis and execution path alteration |
US8316448B2 (en) * | 2007-10-26 | 2012-11-20 | Microsoft Corporation | Automatic filter generation and generalization |
US8122436B2 (en) * | 2007-11-16 | 2012-02-21 | Microsoft Corporation | Privacy enhanced error reports |
US8209356B1 (en) * | 2008-01-14 | 2012-06-26 | Marvell International Ltd. | Direct command line parser |
US8566797B2 (en) * | 2008-02-27 | 2013-10-22 | Red Hat, Inc. | Heuristic backtracer |
US9594670B2 (en) * | 2008-07-03 | 2017-03-14 | International Business Machines Corporation | Managing software dependencies during software testing and debugging |
US8468499B2 (en) * | 2009-03-16 | 2013-06-18 | Ntt Docomo, Inc. | Directed testing for property violations |
US8504997B2 (en) * | 2009-03-19 | 2013-08-06 | Fujitsu Limited | Environment data refinement based on static analysis and symbolic execution |
JP5102823B2 (ja) * | 2009-12-21 | 2012-12-19 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 総テスト時間を最小にするようにテストシナリオを最適化するテスト支援装置、テスト装置、テスト支援方法及びコンピュータプログラム |
US8479171B2 (en) * | 2010-05-24 | 2013-07-02 | Fujitsu Limited | Generating test sets using intelligent variable selection and test set compaction |
US9064052B1 (en) | 2013-10-22 | 2015-06-23 | The Mathworks, Inc. | Providing intermediate results of evaluating program code that includes a compound statement |
US9053228B1 (en) | 2013-10-22 | 2015-06-09 | The Mathworks, Inc. | Determining when to evaluate program code and provide results in a live evaluation programming environment |
US9053235B1 (en) | 2013-10-22 | 2015-06-09 | The Mathworks, Inc. | Program code interface for providing program code and corresponding results of evaluating the program code |
US9075916B1 (en) * | 2013-10-22 | 2015-07-07 | The Mathworks, Inc. | Undoing/redoing program code execution |
US9047411B1 (en) * | 2013-10-22 | 2015-06-02 | The Mathworks, Inc. | Programming environment for executing program code despite errors and for providing error indicators |
US10235190B2 (en) | 2016-12-14 | 2019-03-19 | International Business Machines Corporation | Executing instructions to store context information based on routine to be executed |
US20180165073A1 (en) * | 2016-12-14 | 2018-06-14 | International Business Machines Corporation | Context information based on type of routine being called |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4667290A (en) * | 1984-09-10 | 1987-05-19 | 501 Philon, Inc. | Compilers using a universal intermediate language |
US4992934A (en) * | 1986-12-15 | 1991-02-12 | United Technologies Corporation | Reduced instruction set computing apparatus and methods |
US5005119A (en) * | 1987-03-02 | 1991-04-02 | General Electric Company | User interactive control of computer programs and corresponding versions of input/output data flow |
US5210874A (en) * | 1988-03-22 | 1993-05-11 | Digital Equipment Corporation | Cross-domain call system in a capability based digital data processing system |
EP0428560A4 (en) * | 1988-07-29 | 1992-04-01 | Hunter Systems Software, Inc. | Machine process for translating programs in binary machine language into another binary machine language |
US5313614A (en) * | 1988-12-06 | 1994-05-17 | At&T Bell Laboratories | Method and apparatus for direct conversion of programs in object code form between different hardware architecture computer systems |
US5148528A (en) * | 1989-02-03 | 1992-09-15 | Digital Equipment Corporation | Method and apparatus for simultaneously decoding three operands in a variable length instruction when one of the operands is also of variable length |
-
1991
- 1991-03-07 US US07/666,223 patent/US5317740A/en not_active Expired - Lifetime
-
1992
- 1992-03-04 JP JP4511619A patent/JPH0762827B2/ja not_active Expired - Lifetime
- 1992-03-04 AU AU22566/92A patent/AU653626B2/en not_active Ceased
- 1992-03-04 WO PCT/US1992/001831 patent/WO1992015932A2/en not_active Application Discontinuation
- 1992-03-04 CA CA002082065A patent/CA2082065C/en not_active Expired - Fee Related
- 1992-03-04 EP EP92914712A patent/EP0531522A1/en not_active Ceased
- 1992-03-06 IE IE074192A patent/IE920741A1/en not_active Application Discontinuation
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10628140B2 (en) * | 2016-11-17 | 2020-04-21 | Mitsubishi Electric Corporation | Program code generation apparatus |
Also Published As
Publication number | Publication date |
---|---|
JPH06502269A (ja) | 1994-03-10 |
IE920741A1 (en) | 1992-09-09 |
US5317740A (en) | 1994-05-31 |
WO1992015932A3 (en) | 1992-10-15 |
AU653626B2 (en) | 1994-10-06 |
CA2082065A1 (en) | 1992-09-08 |
CA2082065C (en) | 1996-09-03 |
AU2256692A (en) | 1992-10-06 |
EP0531522A1 (en) | 1993-03-17 |
WO1992015932A2 (en) | 1992-09-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPH0762827B2 (ja) | プログラムコードの交差像参照方法 | |
US5649203A (en) | Translating, executing, and re-translating a computer program for finding and translating program code at unknown program addresses | |
JPH0727464B2 (ja) | 後方記号実行による分岐分析 | |
US5287490A (en) | Identifying plausible variable length machine code of selecting address in numerical sequence, decoding code strings, and following execution transfer paths | |
US5339238A (en) | Register usage tracking in translating code for different machine architectures by forward and reverse tracing through the program flow graph | |
US5307492A (en) | Mapping assembly language argument list references in translating code for different machine architectures | |
US5598560A (en) | Tracking condition codes in translation code for different machine architectures | |
US5301325A (en) | Use of stack depth to identify architechture and calling standard dependencies in machine code | |
US5450575A (en) | Use of stack depth to identify machine code mistakes | |
US7823140B2 (en) | Java bytecode translation method and Java interpreter performing the same | |
JPH06501582A (ja) | コード生成方法及び装置 | |
JP2004272922A (ja) | エミュレーションコンピュータ技術を実行する直接命令 | |
EP0735464B1 (en) | Method and apparatus for computer code processing in a code translator |