JPH04500132A - 2進符号の機械語のプログラムを別の2進符号の機械語に翻訳する機械処理 - Google Patents

2進符号の機械語のプログラムを別の2進符号の機械語に翻訳する機械処理

Info

Publication number
JPH04500132A
JPH04500132A JP50806789A JP50806789A JPH04500132A JP H04500132 A JPH04500132 A JP H04500132A JP 50806789 A JP50806789 A JP 50806789A JP 50806789 A JP50806789 A JP 50806789A JP H04500132 A JPH04500132 A JP H04500132A
Authority
JP
Japan
Prior art keywords
data
program
computer
memory
flow analysis
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP50806789A
Other languages
English (en)
Inventor
ハンター、コリン・ビー
ベニング、ジョン・ピー
プファル、ハンス
Original Assignee
ハンター・システムズ・ソフトウェア・インク
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ハンター・システムズ・ソフトウェア・インク filed Critical ハンター・システムズ・ソフトウェア・インク
Publication of JPH04500132A publication Critical patent/JPH04500132A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるため要約のデータは記録されません。

Description

【発明の詳細な説明】 2進符号の機械語のプログラムを 別の2進符号の機械語に翻訳する機械処理発明の背景 この発明はコンピュータ・プログラムを1つのコンピュータ言語から別のコンピ ュータ言語に翻訳する機械処理、および特に、コンピュータ・プログラムを1つ の2進符号の機械語から別の2進符号の機械語に、あるいは1つのアセンブリ語 を別のアセンブリ語に翻訳する方法に関する。
従来技術の説明 コンピュータ・プログラムを1つのコンピュータ言語から別のコンピュータ言語 に(「トランスレータ」)に翻訳する機械処理に関する技術は数多くの文献によ りよく明らかにされている。下記の本文はその関連技術を簡潔に説明している。
コンパイラは技術上周知である。それらは、コンパイラ、フォートランまたはパ スカルのように、高度な言語で書き込まれたプログラムをアセンブリ語または2 進符号の機械語のいずれにも翻訳する。同様にアセンブラは技術上周知であり、 それらはアセンブリ言語を2進符号の機械語に翻訳する。
一般に、コンパイラは人間が読み出し得る、つまり高レベル言語(「命令」)の 単一ラインを複数のアセンブリ言語または複数の2進符号の機械命令に翻訳する 。アセンブラは、一方では一般に1つのアセンブラ語ラインを1つの機械命令( コメントおよびアセンブラ指令は省略)に翻訳する。
したがって、アセンブラを伴わないコンパイラによる最適化の範囲がある。良好 な、すなわち最適化するコンパイラは、通常平均コンパイラより少ない命令の特 別なシーケンス用機械命令を発生させる。この技術的に周知のぼう大な配列の技 法は[グローバル流れ分析」を含むコンパイラ・コード発生を最適化するために 開発されてきた。コンパイラ設計用標準手引書は、アホ−(Aho)、アール・ セティ(R,+e!hi)およびジエイ・ニールマン(LUllman) (1 986年のウェスレイ(We+lB)の追加を含む)により特に第10章の最適 化技法に記載されている。
インタプリタはコンパイラと同じであるが、プログラム・ソースを機械言語にた やすく翻訳する代りをし、インタプリタは各命令を翻訳し、それから翻訳された コードを実行し、それから次の命令を翻訳かつ実行し、以下同様に実行する。イ ンタプリタは一度に1つの命令のみを処理するので、設計上、同じ言語用コンパ イラをより簡素化できるが、最適化範囲はそれ以上床がらない。したがって、イ ンタプリタ・プログラムはコンパイラ・プログラムよりもはるかに低速で実行さ れがちである。
他のトランスレータ形式も次々と開発されている。多数の高度トランスレータ( 例えば、パスカルからコンパイラへのトランスレータ)はそれらが高レベル言語 である限りほとんどどうどうめぐりであった。アセンブリ言語でのトランスレー タ(例えばアセンブラ・コード8080〜8086)も報告されるが、まれにし かみられない。明らかにコンパイラの最適化技法はそのようなトランスレータに は適さなかった。
いま2進符号の機械語ソース・ファイルを考えてみると、逆アセンブラは長年デ バッグ用ツールの標準的機能とされておりかつこれは技術的に周知である。それ らは2進符号の機械語の部分をアセンブリ言語の命令と等価な群に翻訳する。そ れらは複数の周知の問題、特に「段階問題」および「データ問題」、のために使 用の制限を受けている。
大部分のコンピュータの2進命令の書式の長さは変化するので、段階問題が生じ る。したがって、1つの命令が終了する場所及び別な命令が開始する場所を知る ことは時として困難である。特に、逆アセンブラ工程が命令の始めで正しく開始 されたか、あるいは途中で開始されたかどうかを知ることは困難である。後者の 場合においては、続いて起こるすべての逆アセンブラ命令は一般に誤まりである 。多くの問題が、命令を挿入されたデータのバイトまたは語を含むので、データ 問題が起こる。
逆アセンブラは、ビットの特別なパターンが実際に命令であるのか、数バイトの データだけであるのかを決定するのが困難である。そしてもちろん、データ・エ リヤ問題が段階問題を悪化させるのは、逆アセンブラを正しい位置で再開始する 前にアセンブラがデータ区域の長さを正確に定めなければならないからである。
逆アセンブラと同様に、シミュレータは2進符号の機械語のソースファイルを処 理する。しかし、シミュレータは、ソースファイルを同時に翻訳しかつ実行する 点でインタプリタと同じである。それらが実行すると、あたかもソースの2進プ ログラムは異なる機械語により別々のコンピュータで実行されるような効果を持 つ。シミュレータは、ソフトウェアを用いてもとのコンピュータの実行を実行用 コンピュータで正確にシミュレートするとこの効果を達成できる。シミュレータ はほとんど成功しなかったか、それは1つの周知の問題すなわち主としてそれら が極めて低速だからである。まれに数百側ものシミュレータ命令がソースプログ ラム内の各々の命令のために実行する必要があり、最良シミュレータでさえソー ス命令毎に10個から20個のシミュレータ命令を必要とする。逆アセンブラに 伴う前述の問題により、明らかに2進−2進を最適化するトランスレータの例は ない。つまり、1つの2進符号の機械語を効率よくもう1つの2進符号の機械語 に翻訳するプログラムの例はない。従って、シミュレータがインタプリタの2進 −2進と等価であるのでコンパイラと等価な2進−2進は存在しない。
発明の概要 この発明は、効率のよいコンピュータ・プログラムによって1個の2進符号の機 械語を別の2進符号の機械語に翻訳する効率的な機械処理を提供する。この機械 処理はr2進コンパイラ」として呼ばれる。それはデジタルコンピュータ用プロ グラム内で実行することができる。
その技法は1個のアセンブリ言語を別のアセンブリ言語に翻訳することにも使用 することができる。2進コンパイラは、コンパイラがインタプリタでなければな らないシミュレータと同じ関係を持つ。さらにちょうどコンパイラが通訳された コードよりも速く実行するコードを作るので、2進コンパイラで変換されたアプ リケーションプログラムはシミュレータによる作動より速く実行する。
本発明の2進コンパイラ処理は、ソース2進プログラムを逆アセンブリすること 、大域流れ分析データを用いて逆アセンブリ処理を完成するように、この「大域 流れ分析」データを作る2進プログラムを分析すること、および大域流れ分析デ ータを用い最適の2進コードを作るようにソース2進プログラムの翻訳された2 進符号の機械語型を作ることを含む。本発明が1つのアセンブリ言語から別のア センブリ言語への翻訳に使用される場合、逆アセンブリ段階は省略されるが、大 域流れ分析は依然として実行される。出力は、最適化された2進コードの代りに 最適化されたアセンブリ・コードを作る大域流れ分析データを使用する。
図面および一覧表の簡単な説明 本発明の完全な理解ならびにその上述および他の長所はその図示された実施例の 下記詳細な説明から得られるが、その実施例はインテル(Inlel) 808 6マイクロプロセツサ(r8ONコード」)の2進符号の機械語からモトローラ (Moto+ola) 68020マイクロプロセツサ(r68020コード」 )の2進符号の機械語にプログラムを変換する。
第1図は本発明に従ってデータ処理を実行する機械アルゴリズムの図を示す一般 化された流れ図を示し、第2図は第1図のアルゴリズムの処理手順(PROCE SSPROCEDURE)部分のより詳細な流れ図を示し、第3図は第2図のア ルゴリズムの1つの手順(PROCESSA PROCEDURE)部分のより 詳細な流れ図を示し、第4図は第3図のアルゴリズムのビルド・ベーシック・ブ ロック(BUILD BASICBLOCK)部分のより詳細な流れ図を示し、 第5図は第3図のアルゴリズムの前方流れ分析(FORWARD FLOW A NALYSIS)部分のより詳細な流れ図を示し、 第6図は第3図のアルゴリズムの後方流れ分析(BACKWARD FLOW  ANALYSIS)部分のより詳細な流れ図を示し、 第7図は第3図のアルゴリズムの未知分析(UNKNOWNSANALYSIS )部分のより詳細な流れ図を示し、第8図は第1図のアルゴリズムの分析完成流 れ図(1へへ、へLYSIS COλIPLETED FLOWGRAP)11 部分のより詳細な流れ図を示し、 第9図は第8図のアルゴリズムのリブ/デッド分析(LIVE/DEAD AN ALYSIS)部分のより詳細な流れ図を示し、第10図は第1図のアルゴリズ ムの変換命令(TRANSLATEINsTRUc丁1ON)部分のより詳細な 流れ図を示す。
詳細な説明 第1図の流れ図により表わされたアルゴリズムの第1段階は、表わされた処理を 実行するために必要な入力データ104を読出すことである。このデータは2進 符号の機械語8086個および任意なアプリケーション固有データ(asdN] 2および関連ソース2進プログラムを含む。読取りデータ入力は、第1図のブロ ック104で表わされる。
データの入力に続き、処理は第1図の処理手順のアルゴリズムブロック120に 入る。この処理手順120の目的はソース2進プログラムを、制御の変化(呼出 し、飛越しまたは復帰)により終了された順次命令の「基本ブロック」にまとめ られるそのコンポーネント命令で分析することである。処理手順120は、基本 ブロック間の制御の流れを表わすデータ構造である「流れグラフ」をも作成する 。各基本ブロックとそれぞれ組み合わされたデータ構造は、ブロック内のすべて の命令のリストと共に、ブロック内のレジスタ、フラッグ、スタック、およびメ モリの使用についての情報を含む。基本ブロックは、コール命令から入力される 「手順」にまとめられ、かつ復帰で終了する。
処理手順アルゴリズム120が実行されてから、処理は第1図のブロック124 で表わされる分析完成流れ図アルゴリズムに入る。分析完成流れ図124の目的 は、数種の異なる方法で処理手順120で作られたデータ構造を分析し、かつ翻 訳命令ブロック132にこの分析結果を送ることである。分析完成流れ図124 は5種類の異なる分析、すなわち「呼出し、復帰(コール・リターン)分析」、 レジスタの「リブ−デッド分析」、フラグの「リブ−デッド分析」、および「整 列分析」を実行する。この分析結果は最適化された翻訳コードを発生させる翻訳 命令132により使用される。
分析完成流れ図アルゴリズム124が実行されてから、処理は翻訳命令アルゴリ ズム・ブロック132に入る。翻訳命令】320目的は、翻訳コード順序を最適 に短縮させるために分析完成流れ図124で作られたデータを用いながら、基本 ブロックの命令リストにある分析された命令を680202進符号の機械語の等 価命令に翻訳して翻訳コードの順序を最適に短縮することである。翻訳命令13 2を適用した結果は、2進プログラム140を作ることである。第1図の処理手 順120、分析完成流れ図124、および翻訳命令132の諸アルゴリズムを、 これから詳細に説明する。
第2図は処理手順工程120の全体図を示す。そのオペレーション中に、処理が 最大3つの異なるキューまで、すなわち新手順キュー、上方手順キュー、および 下方手順キューまで連結できる手順ブロック(PBs) と呼ばれるデータ構造 物を操作する分析中のプログラムが存在し、各々の手順に対して1つのBSが存 在する。
第2図で示されるように、処理手順工程120の第1段階は、新手順キューによ り空のPBを作ることである。この段階は第2図のブロック204で表わされる 。ブロック208で表わされる次の段階は、新手順キューにどのようなPBでも 存在するかどうかを決めることである。(もちろん、ループを経た第1回目の回 答はイエスである。)FBがキューに存在すれば、処理は、新手順キューから空 のPBを除去しかつそれを初期設定し、すなわちPB内に始動値を充填する働き をする処理がブロック210に移行する。ブロック21(lで表わされた段階後 、処理は、処理手順アルゴリズムを表わすブロック220に移る。このアルゴリ ズム220は分析中の現時点でできることと同じ程度に、PBで表わされた手順 の処理を多く実行する。基本ブロックはこの手順で見8せるのと同程度に多く作 られる。
このアルゴリズムのオペレーションの1つの結果は、新しい手順キューに新しい FBを置かせたり、既存の(現在のものを含む) PBを下方の手順キューまた は上方の手順キューのいずれかに置くようにされる。
このアルゴリズムの完成後、処理はブロック208で表わされる決定段階に戻る 。この段階は、どのようなPBでも新手順キュー(あるものは処理へ手順アルゴ リズムで作られている)に存在するかどうかを再決定する。この場合もまた、工 程はブロック210に移り、さらに220に移り、もしPRがキューに発見され るならば208に戻るが、このループは新しいFBが新しい手順キューに残らな いようになるまで実行する。
この点で、処理は、どのようなPBでも下方の手順キューにあるかどうかを決定 するブロック212で表わされる決定段階に移る。どのようなPBが見い出され ても、処理はPitを処理のためにキューから移動し、さらにブロック214に 移り、続いてブロック220(処理人手類)に移る。
この段階の結果は新しいPBを作ることになり、したがって、処理は208に戻 り、かつこのサイクルはすべてのl’Bが新手順キューおよび下方手順キューの 双方から移動されるまで続く。
それから、処理はブロック216で表わされる段階に移り、さらにどのようなP Bでも上方手順キューにあるかどうかを決定する。もしそうであれば、3つのキ ューのどれにてもPBが残らなくなるまで、下方キューのPRによく似た処理を され、そのとき完全な処理手順アルゴリズムが存在する。
第3図は第2図で示された処理へ手順ブロック22Gの詳細を示す。これらの段 階の経過中、2進コンパイラは、基本ブロック(BB)と呼ばれる4種のデータ 構造物の4つのキューを操作する。これから述べるように、その4種のキューと は、新キュー、形状キュー、未知キュー、使用キューである。1つのBBは手順 内の各基本ブロックと組み合わされる。第3図で示されるようにこの処理の第1 段階は手順(30Cで識別できるすべてのBBを作ることである。それから前方 流れ分析は(ブロック308)を実行され、さらに後方流れ分析(312) 、 および最終的に未知分析(320)が実行される。少しでもBBが3段階(ブロ ック320参照)後の4種のキューのどれにでも残る場合、処理は段階304〜 316を繰り返し、さらにこのループはどのキューにもBBがなくなるまで繰返 される。
それから処理は、手順自体のFBの後方流れデータのどれでもが変形(324) されたかどうかを見るために試験する。それが変形される場合、この手順をコー ルするすべての手順のPBは第2図に示されるブロック216および218で引 き続き処理される上方手順キューに置かれる。
第4図は第3図のビルド・アルゴリズム基本ブロック304の詳細を示し、それ は手順内で識別できるすべてのBBを作る。第1段階(LO2)は最初に利用で きるBBを新キュー(上述の4種類のキューのうちの1種類)からの第1利用可 能BBをとることであり、それから、ジャンプ、コール、リターン、または割込 み命令(終了命令として知られている)で始まる連続ディスアセンブラ命令は、 始動アドレスで開始する連続ディスアセンブラ命令を続けてディスアセンブルす る。ディスアセンブラ命令の符号表示は、BBと組み合わされた命令リストと呼 ばれるデータ構造物に蓄積される。
次の段階(404)は、現在のBHの終了命令(このBBは即時サクセサと呼ば れる)の後で、そのコードが直ちに開始するBBと共に現在のBBと連結するこ とである。即時サクセサBBがまだ作られていない場合、いま工程は、このアド レスを持つ新しいBBを作り、それを現在のBBに連結し、かつ新キューにもそ れを置く。即時サクセサが既に存在している場合は、それは形状キュー(4種類 のBBキューの内の別の1種類)に置かれる。
次の段階(408)は、現在のBB内の前方流れ分析を行なうことである。これ は、現在のBBより論理的に先行しかつそれらの値をBBの命令で実行されるす べてのデータの変形を行いながら、BBを経てその終りまで伝搬する前方データ (レジスタ値、スタック値、フラグ値、メモリ値)をすべてBB内に蓄わえるこ とを意味する。現在のBBに先行するBBはすべてそのプレデセッサと呼ばれる 。それらは前節の意味におけるどの即時プレデセッサでもあり、あるいは現在の BBへの制御の伝達において生じた終了命令を持つBBでもある。この操作の結 果、BBと組み合わされたデータ構造物に蓄えられる現在のBBの前方データが 生じる。
次の段階は、現在のBBの終了命令がコール、計算されたジャンプ、または割込 み(ブロック412)であるかどうかに左右される。それが(420)である場 合、BBは未知キュー(4種類のBBキューの中の別の1種類)に置がれる。
それが(420)でない場合(すなわち終了命令が単一ジャンプである場合)  、BBはジャンプの目標アドレスでコードと組み合わされたBBに連結される。
BBがそのアドレスにない場合、新しいBBが作られて新キューに置かれる。
既存のBBは形状キューに置かれる(416参照)。
結局、すべての場合(424)において、現在のBBは使用キュー(4種類のB Bキューの中の最後の1種類)に置かれる。次に新キューが空である(428) かどうかを見るために、チェックが行なわれる。それが空でない場合は、新キュ ーが空になるまで、処理は段階420〜428を繰り返して行う。
第5図は、手順内のすべてのBBに関する前方流れ分析を行うブロック308に よって表わされる、第3図の前方流れ分析アルゴリズムの詳細を示す。第1段階 (504)はBBを形状キューから離すことである。それから、すべてのプレデ セッサからBBへの前方データは、BBを経て伝搬されかつその前方データ構造 物(ブロック508および512)内に蓄えられる。即時プレデセッサがコール 命令によって終了する場合、BBを経て伝搬される前にデータはコールされた手 順を経てまず伝搬される。それから、現在のBBの前方データが修正されている かどうかを決定するチェックが行われる。修正されていれば、すべてのサクセサ BBは形状キューに置かれる。どちらの場合も、どのようなりBが形状キュー( 524)に残されるかどうかのチェックが行なわれ、さらにBBが残されている と、BBが形状キューからなくなるまで、504から524までループ全体か再 び繰り返えされる。
第6図は、手順のすへてのBBの後方流れ分析を行なうブロック312により表 わされる第3図の後方流れ分析アルゴリズムの詳細を示す。第1段階(604) はBBを使用キューから離すことである。それからすべてのサクセサからBBへ の後方データ(式のリスト)は、BBを経て逆伝搬されかつその後方データ構造 物(ブロック608および612)に蓄えられる。どのようなサクセサでもコー ル命令内で終了する場合、データはBBを経て伝搬される前に、コールされた手 順を経てまず伝搬される。それから、現在のBBの後方データが修正されている かどうかを決定するチェックが行われる(616)。修正されていれば、すべて のプレデセッサBBは使用キュー(620)に置かれる。いずれの場合にも、ど のようなりBでも使用キュー(624)に残されるかどうかを知るチェックが行 なわれ、さらにBBが残されていると、BBが使用キューからなくなるまで、6 04から624までのループ全体は再び繰り返し実行される。
第7図は、手順内の未知BBに関する分析を実行するブロック316により表わ される第3図の未知分析アルゴリズムの詳細を示す。第1段階(704)は、B Bを未知キューから離すことである。それから、必要ならばasdファイルにあ るデータを用いて、計算されたジャンプまたはコール・アドレスを計算する試み がなされる(706)。それから、処理はこの試みの結果に左右されて分けられ る(7 ] 27 。計算が目標アドレスを具合良く定めた場合、目標BBへの 連結が作られる。そのアドレスに対してBBが存在しないと、新BBは新キュー により作られ、すなわち存在するBBは形状キューに置かれる。(ブロック72 4参照。)それから、BB自体は使用キューに置かれ、かつその入力は手順のP B (724)の未知リストから除去される。
目標アドレスを計算する試みが不成功の場合(720) 、BBは未知キューに 置き直され、かつ入力は手順のPBの未知リスト内に作られる。どの場合にも、 どのようなりBでもその未知リスト入力が処理されなかった未知キューに残るか どうかを知るチェック(728’lが行われる。BBが少しでも残ると、不成功 BBが未知キューからなくなるまで704カら728への全体のループが再び繰 返される。
第8図は、コード発生段階のための準備における完成された流れグラフのグロー バル流れ分析を行うブロック124により表わされた第1図の処理の分析完成流 れグラフ・アルゴリズムの詳細を示す。第1段階804は基本ブロックの完成し た組が、標準分類アルゴリズムに用いられる増加中のアドレスによる命令に分類 される段階である。この特別な実行においては、分類アルゴリズムは、デー・イ ー・ヌース(D、 E、 Knu lhl 発行のコンピュータ・プログラム技 術の第3巻、1973年マサチューセッツ版80〜120頁のアディソン・ウニ スリー(Adfl目on−Wesly)著「分類および探索」で説明された分類 アルゴリズムの記事の解説を用いている。分類段階の完成後、処理は、8086 コードから58020コードへの特別な場合の翻訳プログラムに対してジャンプ 、コール、およびリターン・アドレス使用を最適化する任意の段階(808)に 進む。この段階は一般の場合には与えられない。
ブロック808で表わされた段階の後、処理は、リブ・デッド分析アルゴリズム を表わすブロック8]2に移る。
この段階は、分析完成流れグラフ・アルゴリズム124により行なわれる最適化 の中核をなす。この段階は、レジスタおよびフラグ用「リブ・デッド」データを 計算する完成された流れグラフのグローバル流れ分析を行なう。
このデータは、ソース機械調節フラグ(例えば、キャリーまたはオーバーフロー )およびレジスタが次の命令(「リブ」)で使用されるか、あるいは(「デッド 」)で使用されないかどうかを明白にする。この情報は、最適化された目標コー ドを作る第1図の次のトランスレート命令アルゴリズム132により、かつリブ 調節フラグ値を維持しあるいはシミュレートする命令を作るだけで、ならびにデ ッド・レジスタ内のデータを維持しないことにより使用される。それから処理は 、8086コードから68020コードへの翻訳プログラムの特別な場合に左右 される色々な「のそき穴」の最適化を行なうもう一つの段階(116) に移る 。
第9図は第8図のブロック812、すなわち、リブ・デッド分析アルゴリズムに より表わされる段階の詳細を示す。この段階の経過中、手順ブロック(PB)の 2種類のキュー〔上方キューおよび下方キュー〕ならびに基本ブロックuB)の 1種類のキューは完成される。第1段階(904)は、下方キューのすべての非 復帰手順(すなわちもう1つの手順に戻らない)のためにPBを置くことである 。次の段階(908) は、下方キューに少しでもPBがあるがどうかをチェッ クすることである。FBがなければ、処理は上方キューに少しでもFBがあるか を調べるチェック(912)をする。どのキューにもPBが少しでもある場合、 工程は、リブ・デッド・データおよび手順のための伝達機能(すなわち手順が他 の手順から入るリブ・デッド・データを有する作用)を計算する段階916を続 行する。手順が完全に分析されあるいは工程が前もって分析されていない手順は 、コールされたコール命令に出合うときに、この段階は終了する。
それから処理は、手順か完全に分析されたり、分析されない手順へのコールか得 られたりする理由で段階916か終了したかどうかを定める段階920に続く。
手順が完成された場合、上方キューの完成された手順をコールするすへての手順 のためにPBを置く。未分析手順に対するコールが得られたという理由で段階9 16が終了した場合、未分析手順のPBは段階928の下方キューに置がれる。
どの場合も、すへての手順が十分分析されるまで、処理は段階908に戻り続け かつそれを繰り返す。
第10図は、68020コ一ド発生を実行するブロック132で表わされる第1 図の工程のトランスレート命令アルゴリズムの詳細を示す。第1段階(1204 )は、段階804て作られる増加するアドレス命令内に配列されるBBの輪がら 1つのBBを得ることである。それから、命令の符号化オプコード・アドレス・ モード、および属性はBBと組み合わされた命令リストから読み出される(12 118)。これらの符号化された値は、表から翻訳された68020の2進コー ド(ちょうど1つの命令となる場合が多い)の短いセグメントを選択するための 指標として使用される(1212)。
68020コードはデータ構造物(12+ 6)に蓄えられ、それから、BBの 命令リスト内に命令がまったくなくなるまで、処理は1220を経て段階120 8に繰り返し戻ることで次の命令の翻訳を始める。
この点で、BBを表わす68ON命令は、ファイルの出力である(1222)。
それから、翻訳すべきBBがなくなるまで、工程は次のBHに移りかっ1224 を経て段階1204を遂行する。
言うまでもなく、上記の実施例およびプログラム実行は、本発明の原理の応用を 具体的に説明しただけである。
数多くの変形は本発明の主旨および範囲を逸脱せずに当業者によって考案するこ とができる。
特表千4−500132 (10) 国際調査報告

Claims (22)

    【特許請求の範囲】
  1. 1.1つの2進符号の機械語内に1つ以上の基本ブロックを有する第1コンピュ ータ・プロを、プログラム式ディジタル・コンピュータを使用して、別の2進符 号の機械語内の第2コンピュータ・プログラムに翻訳し、かつその内部メモリに コンピュータを実行させるプログラムを蓄積させる機械処理であって、 a)前記第1コンピュータ・プログラムの1個の前記基本ブロックを逆アセンブ ルする段階と、b)グローバル流れ分析データを作るために1つの基本ブロック を分析する段階と、 c)前記第1コンピュータのすべての前記基本ブロックが逆アセンブルしかつ分 析されるまで、前記(a)および(b)段階を続行する段階と、 d)前記グローバル流れ分析データを使用して、前記第2コンピュータ・プログ ラムを作る段階と、を含む、ことを特徴とする機械処理。
  2. 2.ディスアセンブラ段階を含む処理であって、a)ブランチ、コール、または リターン命令が達成されるまで前記1つの基本ブロックの命令を絶えずディスア センブルする段階と、 b)各ディスアセンブラ命令のオプコードおよびアドレス・モードの表示を維持 する段階と、 をさらに含む、ことを特徴とする請求項1記載の処理。
  3. 3.前記分析段階を含む処理であって、a)ブランチ、コール、リターン命令の 目標アドレスを計算し、かつ蓄える段階と、 b)次のアドレスを未調節ブランチ命令に蓄える段階と、をさらに含む、ことを 特徴とする請求項2記載の処理。
  4. 4.前記続行段階を含む処理であって、a)蓄えられたアドレス(ブランチ、コ ール、またはリターンの目標アドレス、あるいは調節されたブランチの後に続く 次のアドレスのいずれも)における逆アセンブラを続行する段階と、 b)この請求項4の前記(a)段階が常に逆アセンブルされているコードのみに 遭遇し、あるいはソース・プログラムが終結するかのどちらまでもクレーム2・ 3の段階を繰り返し実行すること、 をさらに含む、ことを特徴とする請求項3記載の処理。
  5. 5.前記発生される段階を含む処理であって、a)命令内の逆アセンブラ・コー ドの部分をそのアドレスにより分類する段階と、 b)各逆アセンブラ命令のための2進符号の機械語翻訳を発生させる段階と、 をさらに含む、ことを特徴とする請求項4記載の処理。
  6. 6.計算段階を含む処理であって、 a)「グローバル流れ分析」を作るために第1コンピュータ・プログラムの現在 分っている内容を絶えず計算しかつ新しく入れ替える段階と、 b)ブランチ、コール、およびリターンの目標アドレスを計算するために前記グ ローバル流れ分析スタック・データを使用する段階と、 をさらに含む、ことを特徴とする請求項3記載の処理。
  7. 7.計算段階を含む処理であって、 a)「低分析レジスタ・データのグローバル」を作るためにプログラムのレジス タを絶えず計算しかつ新しく入れ替える段階と、 b)ブランチ、コールおよびリターンの目標アドレスを計算するために前記グロ ーバル流れ分析レジスタ・データを使用する段階と、 をさらに含む、ことを特徴とする請求項3記載の処理。
  8. 8.計算段階を含む処理であって、 a)「グローバル流れ分析メモリ・データを作るために第1コンピュータ・プロ グラムのキー・メモリ位置の現在分っている内容を絶えず計算しかつ新しく入れ 替える段階と、 b)ブランチ、コールおよびリターンの目標アドレスを計算するために前記グロ ーバル流れ分析メモリ・データを使用する段階と、 をさらに含む、ことを特徴とする請求項3記載の処理。
  9. 9.計算段階を含む処理であって、 a)クレーム6・7または8の方法では計算できないブランチ、コールまたはリ ターン目標アドレスを計算するためにアプリケーション限定データを使用する段 階と、 をさらに含む、ことを特徴とする請求項3記載の処理。
  10. 10.スタック、レジスタまたはメモリ位置の内容を決定するために使用される 前記アプリケーション限定データを含む、ことを特徴とする請求項9記載の処理 。
  11. 11.前記グローバル流れ分析データは、ソース機械調節フラグ(例えば、キャ リーまたはオーバー・フロー)が次の命令(「リブ」)により使用されるかある いは(「デッド」)により使用されないかどうかを計算するために使用され、そ れからこの情報が、リブ調節フラグ値を維持またはシミュレートするために発生 する命令のみにより最適化された目標コードの発生に使用されることを含む、こ とを特徴とする請求項5記載の処理。
  12. 12.前記グローバル流れ分析データは、ソース機械レジスタが次の命令(「リ ブ」)により使用されるかあるいは(「デッド」)により使用されないかどうか を計算するために使用され、それからこの情報は、デッド・レジスタ内の維持さ れるデータによらず最適化されたコードを発生するために使用されることを含む 、ことを特徴とする請求項11記載の処理。
  13. 13.前記グローバル流れ分析データ(スタック、レジスタ、またはメモリ)は 、次の命令(「リブ」)により使用されるかあるいは(「デッド」)により使用 されないかどうかを計算するために使用され、それからこの情報は、翻訳された 命令によって必要となる一時的な変化を保つためにデッド・レジスタの目標機械 等価物の使用により、最適化されたコードを発生させるために使用されることを 含む、ことを特徴とする請求項5記載の処理。
  14. 14.前記グローバル流れ分析データは、ソース機械のメモリ内のデータが、異 なるデータ・タイプの長さ(例えば16ビット量および8ビット量)をオペレー トする2つ以上の命令により基準とされているかどうかを計算するために使用さ れ、かつ目標機械語およびソース機械語が半語内のバイト、および1語内の半語 の順序と異なる場合に、この情報が最適化されたコードを発生させるために使用 されることを含む、ことを特徴とする請求項5記載の処理。
  15. 15.前記グローバル流れ分析データは、ソース機械のメモリ内のデータが、デ ータ長さ(例えば、2バイトまたは4バイト)の倍数であるアドレスに並べられ るかどうかを計算するために使用され、それから、そのような配列を要求するこ れらの目標機械のために、単一メモリは、データが配列され、かつ、データが配 列されずあるいは配列が決定できないときのみ基準の倍数が発生される場合に、 データを呼出すことを基準とすることを特徴とする請求項5記載の処理。
  16. 16.前記グローバル流れ分析レジスタ・データは、コールされたときに現在の レジスタ内容の効力により、2進符号の機械語に割り込まれたオペレーティング ・システム・コールを識別するために使用されることを含む、ことを特徴とする 請求項7記載の処理。
  17. 17.入口地点を有するコンピュータ・アセンブラ言語内の第1コンピュータ・ プログラムを、その内部メモリにコンピュータを実行できるプログラムを蓄えら れるプログラムされたデジタル・コンピュータを使用して第2コンピュータ・ア センブラ言語に翻訳する機械処理であって、 a)前記入口地点で開始し、第1プログラムが終結するまでグローバル流れ分析 (スタック、レジスタ、とメモリのすべてまたは1つ)を絶えず計算する段階と 、b)前記グローバル流れ分析データ(スタック、レジスタ、またはメモリ)は 、第1プログラム調節フラグ(例えばキャリーまたはオーバーフロー)が次の命 令(「リブ」)により使用されるかあるいは(「デッド」)により使用されない かどうかを計算するために使用される段階と、 c)リブ調節フラグ値を維持あるいはシミュレートするために発生された命令の みにより、この情報を使用した最適化されたアセンブラ・コードを発生させる段 階と、 を含む、ことを特徴とする機械処理。
  18. 18.前記段階(a)が、 a)アドレス命令内の第1プログラムを読み出す段階と、b)入口地点で開始し 、ブランチ、コールまたはリターン命令が達成されるまでグローバル流れ分析デ ータ(スタック、レジスタ、メモリのすべてまたは1つ)を計算する段階と、 c)ブランチ、コール、またはリターン命令の目標アドレスを計算しかつ蓄える 段階と、 d)無条件ブランチ命令を次の順次アドレスに蓄える段階と、 e)蓄えられたアドレス(ブランチ、コール、またはリターンの目標アドレス、 あるいは条件付ブランチ後の次の順次アドレス)でグローバル流れ分析データを 計算し続ける段階と、 f)段階(e)が既に完全分析されたコードにのみ遭遇したり、ソース・プログ ラムが終結したりするまで、この請求項の段階(b)〜(e)を繰り返し実行す る段階とをさらに含む、ことを特徴とする請求項17記載の機械処理。
  19. 19.コンピュータにプログラムを実行させる内部メモリに記憶されたプログラ ム式デジタル・コンピュータを用いて、入力点を持つコンピュータ・アセンブラ 言語の第1コンピュータ・プログラムを第2コンピュータ・アセンブラ言語に翻 訳する機械処理であって、a)前記入力点で始動し、第1プログラムが終結する までグローバル流れ分析データ(スタック、レジスタ、メモリのすべてまたは1 つ)を絶えず計算する段階と、b)前記グローバル流れ分析データ(スタック、 レジスタ、またはメモリ)を用いて第1プログラム・レジスタが次の命令(「リ ブ」)によって使用されるか、あるいは(「デッド」)により使用されないかど うかを計算する段階と、 c)デッド・レジスタにあるデータを蓄えないことによって、この情報を用いな がら、最適化されたアセンブリ・コードを発生させる段階とを含む、ことを特徴 とする機械処理。
  20. 20.入力点を持つコンピュータ・アセンブラ言語の第1コンピュータ・プログ ラムを、コンピュータにプログラムを実行させる内部メモリに記憶されたプログ ラム式デジタル・コンピュータを用いて第2コンピュータ・アセンブラ言語に翻 訳する機械処理であって、a)前記入口点で始動し、第1プログラムが終結する までグローバル流れ分析データ(スタック、レジスタのすべてまたはメモリ)を 絶えず計算する段階と、b)前記グローバル流れ分析データ(スタック、レジス タまたはメモリ)を用いて、次の命令(「リブ」)によって第1プログラム・レ ジスタが使用されるかあるいは(「デッド」)により使用されないかどうかを計 算する段階と、 c)翻訳された命令によって要求された一時変数を保持するために、デッド・レ ジスタの第2プログラムの等価を用いて、この情報を使用する最適化されたアセ ンブラ・コードを発生させる段階とを含む、ことを特徴とする機械処理。
  21. 21.入力点を持つコンピュータ・アセンブラ言語をコンピュータにプログラム を実行させる内部メモリに蓄えられたプログラム式デジタル・コンピュータを用 いて第2コンピュータ・アセンブラ言語に翻訳する機械処理であって、 a)前記入力点で始動し、第1プログラムが終結するまでグローバル流れ分析デ ータ(スタック、レジスタ、およびメモリのすべてまたは1つ)を絶えず計算す る段階と、 前記グローバル分析命令(スタック、レジスタまたはメモリ)を用いて、 b)異なるデータ形式長さ(例えば15ビットの量および8ビットの量)で操作 する2個以上の命令によって原始機械のメモリにあるデータが参照されるかどう かを計算する段階と、 c)この情報を用いて最適化されたコードを発生させ、この場合第2プログラム の機械語と第1プログラムの機械語の半語の中のバイトの順序および1語の中に 複数の半語がある点で異なる段階とを含む、ことを特徴とする機械処理。
  22. 22.入力点を持つコンピュータ・アセンブラ言語にある第1コンピュータ・プ ログラムを、コンピュータにプログラムを実行させる内部メモリ内に蓄えられた プログラム式デジタル・コンピュータを用いて、第2コンピュータ・アセンブラ 言語に翻訳する機械処理であって、a)前記入力点で始動し、第1プログラムが 終結するまでグローバル流れ分析データ(スタック、レジスタ、メモリのすべて または1つ)を絶えず計算する段階と、b)前記グローバル流れ分析データ(ス タック、レジスタ、またはメモリ)を用いて、データ長さ(例えば2バイトまた は4バイト)の倍数であるアドレス上に原始機械のメモリにあるデータが整列さ れているかどうかを計算する段階と、 c)データが整列されている場合データを呼び出す単一メモリ基準を発生させ、 かつデータが整列されないときのみ、またはその整列がそのような整列を要求す る第2言語を決定し得ない場合に倍数基準を発生させる段階 とを含む、ことを特徴とする機械処理。
JP50806789A 1988-07-29 1989-07-10 2進符号の機械語のプログラムを別の2進符号の機械語に翻訳する機械処理 Pending JPH04500132A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US22607888A 1988-07-29 1988-07-29
US226,078 1988-07-29

Publications (1)

Publication Number Publication Date
JPH04500132A true JPH04500132A (ja) 1992-01-09

Family

ID=22847458

Family Applications (1)

Application Number Title Priority Date Filing Date
JP50806789A Pending JPH04500132A (ja) 1988-07-29 1989-07-10 2進符号の機械語のプログラムを別の2進符号の機械語に翻訳する機械処理

Country Status (3)

Country Link
EP (1) EP0428560A4 (ja)
JP (1) JPH04500132A (ja)
WO (1) WO1990001738A1 (ja)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US5652869A (en) * 1991-03-07 1997-07-29 Digital Equipment Corporation System for executing and debugging multiple codes in a multi-architecture environment using jacketing means for jacketing the cross-domain calls
US5598560A (en) * 1991-03-07 1997-01-28 Digital Equipment Corporation Tracking condition codes in translation code for different machine architectures
US5339238A (en) * 1991-03-07 1994-08-16 Benson Thomas R Register usage tracking in translating code for different machine architectures by forward and reverse tracing through the program flow graph
DE69225982T2 (de) * 1991-03-07 1999-02-18 Digital Equipment Corp Verfahren und Gerät zur Rechnercode-Verarbeitung in einem Codeübersetzer
US5307492A (en) * 1991-03-07 1994-04-26 Digital Equipment Corporation Mapping assembly language argument list references in translating code for different machine architectures
US5428786A (en) * 1991-03-07 1995-06-27 Digital Equipment Corporation Branch resolution via backward symbolic execution
US5287490A (en) * 1991-03-07 1994-02-15 Digital Equipment Corporation Identifying plausible variable length machine code of selecting address in numerical sequence, decoding code strings, and following execution transfer paths
US5450575A (en) * 1991-03-07 1995-09-12 Digital Equipment Corporation Use of stack depth to identify machine code mistakes
US5507030A (en) * 1991-03-07 1996-04-09 Digitial Equipment Corporation Successive translation, execution and interpretation of computer program having code at unknown locations due to execution transfer instructions having computed destination addresses
US5317740A (en) * 1991-03-07 1994-05-31 Digital Equipment Corporation Alternate and iterative analysis of computer programs for locating translatable code by resolving callbacks and other conflicting mutual dependencies
US5432795A (en) * 1991-03-07 1995-07-11 Digital Equipment Corporation System for reporting errors of a translated program and using a boundry instruction bitmap to determine the corresponding instruction address in a source program
US5301325A (en) * 1991-03-07 1994-04-05 Digital Equipment Corporation Use of stack depth to identify architechture and calling standard dependencies in machine code
JP2753500B2 (ja) * 1991-03-07 1998-05-20 ディジタル インイプメント コーポレイション 多重アーキテクチャ環境内で特にコードのデバッグを行う改良したソフトウェア・デバッグ・システムと方法
US5784552A (en) * 1993-07-28 1998-07-21 Digital Equipment Corporation Debugging a computer program by simulating execution forwards and backwards in a main history log and alternative history logs
EP0703532B1 (en) * 1994-09-22 2001-11-28 Sun Microsystems, Inc. Embedded program flow information for object code manipulation
US6233733B1 (en) * 1997-09-30 2001-05-15 Sun Microsystems, Inc. Method for generating a Java bytecode data flow graph
US5966541A (en) 1997-12-04 1999-10-12 Incert Software Corporation Test protection, and repair through binary-code augmentation
US6317873B1 (en) * 1998-10-14 2001-11-13 Alcatel Usa Sourcing, L.P. Assembly language translator
US6308321B1 (en) 1998-12-11 2001-10-23 Incert Software Corporation Method for determining program control flow
US6662354B1 (en) 1999-01-29 2003-12-09 Unisys Corporation Determining destinations of a dynamic branch
US6353924B1 (en) 1999-02-08 2002-03-05 Incert Software Corporation Method for back tracing program execution
US6804814B1 (en) 1999-12-29 2004-10-12 Veritas Operating Corporation Method for simulating back program execution from a traceback sequence
US6745383B1 (en) 1999-12-29 2004-06-01 Veritas Operating Corporation Early warning mechanism for enhancing enterprise availability
US6748584B1 (en) 1999-12-29 2004-06-08 Veritas Operating Corporation Method for determining the degree to which changed code has been exercised
US6662361B1 (en) * 2000-01-14 2003-12-09 International Business Machines Corporation Method, system, program, and data structures for transforming an instruction in a first bit architecture to an instruction in a second bit architecture
US7246267B2 (en) * 2001-10-01 2007-07-17 Tektronix, Inc. Logic analyzer having a disassembler employing symbol table information for identifying op-codes
US7673293B2 (en) 2004-04-20 2010-03-02 Hewlett-Packard Development Company, L.P. Method and apparatus for generating code for scheduling the execution of binary code
CN101271398B (zh) * 2007-03-23 2010-06-09 北京大学 多路分支结构的识别方法
US20080250231A1 (en) * 2007-04-03 2008-10-09 Kabushiki Kaisha Toshiba Program code conversion apparatus, program code conversion method and recording medium
US7802299B2 (en) 2007-04-09 2010-09-21 Microsoft Corporation Binary function database system
US8869109B2 (en) 2008-03-17 2014-10-21 Microsoft Corporation Disassembling an executable binary
CN103235724A (zh) * 2013-05-10 2013-08-07 中国人民解放军信息工程大学 基于原子操作语义描述的多源二进制代码一体化翻译方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
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
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

Also Published As

Publication number Publication date
EP0428560A4 (en) 1992-04-01
EP0428560A1 (en) 1991-05-29
WO1990001738A1 (en) 1990-02-22

Similar Documents

Publication Publication Date Title
JPH04500132A (ja) 2進符号の機械語のプログラムを別の2進符号の機械語に翻訳する機械処理
US7203931B2 (en) Programmable controller, and control-program-development supporting apparatus
US6983458B1 (en) System for optimizing data type definition in program language processing, method and computer readable recording medium therefor
US7213237B2 (en) Intermediate code preprocessing apparatus, intermediate code execution apparatus, intermediate code execution system, and computer program product for preprocessing or executing intermediate code
US7702499B1 (en) Systems and methods for performing software performance estimations
US6928643B2 (en) Bi-endian libraries
US6314564B1 (en) Method for resolving arbitrarily complex expressions at link-time
US20010039653A1 (en) Program conversion method, program conversion apparatus, storage medium for storing program conversion program and program conversion program
KR0125605B1 (ko) 프로그램의 아키덱쳐 변환방법 및 장치와 그 방법 및 장치를 사용하여 프로그램의 동작을 검증하는 방법 및 장치
KR100309632B1 (ko) 최적화이미지에대응한디버그용소스파일을생성하는언어처리시스템및방법
CN115983378A (zh) 一种机器学习操作系统内核的自动化编译方法
KR100417655B1 (ko) 최적화과정을참조하면서동작검증을행하도록디버그정보를생성하는디버그정보생성장치및프로그래머가최적화과정을의식하면서동작검증을할수있는디버그장치로이루어지는프로그램개발시스템
EP0638862B1 (en) Method and system for processing language
Barnard et al. Hierarchic syntax error repair for LR grammars
EP3989059B1 (en) Interactive code optimizer
JP4152659B2 (ja) データ処理システムおよび設計システム
CN112114817A (zh) 基于cobol语言的数据字典字段信息获取方法及装置
JPH11272475A (ja) 非リエントラントプログラムの自動リエントラント化方法及びシステム
US20040045018A1 (en) Using address space bridge in postoptimizer to route indirect calls at runtime
JP3000878B2 (ja) アセンブラの処理方法
JP3003459B2 (ja) プログラム作成支援装置
CN118276839A (zh) 一种数据处理方法、链接器、电子设备及计算机程序产品
JP3323147B2 (ja) コンパイル装置、コンパイル方法およびコンパイラプログラムを記録した記録媒体
CN117055891A (zh) 基于模板函数指令序列的目标函数多数据块操作框架代码自动生成方法
JP2003050700A (ja) プログラム変換方法