JPH0775003B2 - プログラム内容解析装置 - Google Patents

プログラム内容解析装置

Info

Publication number
JPH0775003B2
JPH0775003B2 JP1319451A JP31945189A JPH0775003B2 JP H0775003 B2 JPH0775003 B2 JP H0775003B2 JP 1319451 A JP1319451 A JP 1319451A JP 31945189 A JP31945189 A JP 31945189A JP H0775003 B2 JPH0775003 B2 JP H0775003B2
Authority
JP
Japan
Prior art keywords
instruction
branch
program
line number
data
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 - Fee Related
Application number
JP1319451A
Other languages
English (en)
Other versions
JPH03179537A (ja
Inventor
寿教 安木
宏敏 斗納
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Denso Ten Ltd
Original Assignee
Denso Ten Ltd
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 Denso Ten Ltd filed Critical Denso Ten Ltd
Priority to JP1319451A priority Critical patent/JPH0775003B2/ja
Publication of JPH03179537A publication Critical patent/JPH03179537A/ja
Publication of JPH0775003B2 publication Critical patent/JPH0775003B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Description

【発明の詳細な説明】 概 要 アセンブラ言語で記述されたプログラムをその仕様と対
比して基本的構造や動作を解析するのは、従来では人手
により膨大な労力を用いて行つており、また過誤を避け
ることが困難であつた。本発明では、このような被解析
プログラムの基本的動作と構造とはロード命令やストア
命令による入力/出力状態と、実行順序を配列順序と異
ならせる分岐命令による分岐状態とによつて決定される
ことに着目した。したがつて、分岐命令に規定される実
行経路を識別する経路データと、分岐命令に関連して分
岐先命令や分岐元命令の位置データなどを命令毎に設定
するようにしている。
プログラムはストア命令や分岐命令から逆上られて読取
られ、その実行内容や分岐条件などが命令毎の実行内容
を表す論理式の結合された論理式として、たとえばフロ
ーチヤートやPAD図などの出力を得る。このとき、プロ
グラムが長いほど前記出力量は膨大となるので、前記論
理式の結合された論理式に論理演算を施し、簡約化して
出力する。これにより、前記出力がプログラムの仕様と
対比が容易な簡約化された形式にて得られることにな
り、解析処理の効率化と過誤の発生とを防止することが
できる。
産業上の利用分野 本発明は、マイクロプロセツサなどを動作させるために
用いられるプログラムの内容を解析する装置に関する。
従来の技術 マイクロプロセツサが動作するにあたつて実際に読取る
機械語に最も近い言語としてアセンブラ言語がプログラ
ムを記述するために用いられている。このアセンブラ言
語は高級言語と異なり、機械語の各命令と1対1対応を
なす言語であるため、このプログラムに基づく各種入出
力装置の動作内容やプログラムの実行内容の概略など
が、アセンブラ言語にては把握しにくく、仕様上の記載
内容と照合するにあたり、人手によつて命令毎に行う必
要がある。またシユミレーシヨンやエミユレーシヨンな
どを行つてプログラムの動作状態を確認する技術が採用
されているが、これらはプログラムの中で要求される各
種入力命令に対応して数値やデータを設定しなければな
らない。
したがつてプログラムの各命令を読取つてプログラム全
体の処理や流れの構造を認識し、プログラムの実行内容
を概略的に記述したり、また入出力装置の動作として記
述するなど、プログラムの実行内容の把握が容易な形式
の出力を得ようとする技術が想定される。この場合、プ
ログラムに基づく入出力装置への最終的な出力は、マイ
クロプロセツサが或データをメモリの所定のアドレスに
書込むストア命令である。したがつてストア命令に表れ
るオペランドの変数の内容が最終的に確定されるたとえ
ばロード命令まで、プログラムを逆上つて命令を読取れ
ば、当該ロード命令でデータが入力されるものとして前
記変数の内容が確定することになる。このようにして前
記ロード命令に用いられたオペランドの変数でプログラ
ムの実行内容を概略的に記述できることなる。
発明が解決しようとする課題 このような従来例において、解析する対象のプログラム
がたとえば第19図示の構造である場合について説明す
る。このプログラムは、ステツプa1〜a10の命令から成
り、ステツプa2,a4にサブルーチンプログラムを呼出す
コール命令「CALL A」および「CALL B」が配置され
ている。ここでステツプa5からプログラムを逆上る場
合、逆上り経路としては、 a5→a8→a7→a6→… および a5→a8→a7→a10→a9→… の2種類想定されるが、実際のプログラムの実行順を考
慮すると後者は実際には実行され得ない経路である。
すなわちプログラムの内容を解析するにあたつて、プロ
グラムを命令の実行内容に基づいて逆上つて順次的に読
取る技術のみでは、実際のプログラムの実行経路からは
あり得ない経路も解析な対象としてしまい、解析時間が
長くなつてしまうとともに、実際のプログラム実行内容
と異なる解析結果を導出することになり極めて不具合で
ある。
本発明の目的は、プログラムの所定の実行内容が実行さ
れるための条件を表示するにあたり、複雑な表現を判り
やすく変形して表示することができるようにしたプログ
ラム内容解析装置を提供することである。
課題を解決するための手段 本発明は、複数の命令からなるプログラムの各命令を配
列順序とは逆に逆上つて読取り、その内容を解析し、各
実行内容と該実行内容が行われる条件を出力する装置に
おいて、 プログラムを逆上つて各命令の実行内容を読取る読取手
段と、 読取られた各命令のうち実行内容に関連する命令に至る
経路を通過するための条件に対応する第1論理式情報を
求め、前記実行内容に関連する全ての経路毎の第1論理
式情報を論理和形式の総合論理式情報として合成し、該
総合論理式情報を前記実行内容に関連して記憶する実行
内容記憶手段と、 与えられた論理式情報を論理積の論理和の形式に変形し
て出力する分解手段と、 前記分解手段から与えられた論理式情報に対して、同一
項に関連する項を括弧でくくつた形式に変形して出力す
る第1同一項整理手段と、 与えられた論理式情報に対して、同一項に関連する項を
括弧でくくつた形式に変形して出力する第2同一項整理
手段と、 第1同一項整理手段から与えられた論理式情報のうち、
所定の変形パターンに該当する項を、該所定の変形パタ
ーンに従つて変形して出力するパターン変形手段と、 パターン変形手段から与えられる論理式情報とその実行
内容とを関連して表示する実行内容出力手段と、 前記第1同一項整理手段とパターン変形手段との間に設
けられ、第1同一項整理手段から与えられた論理式情報
に前記所定パターンが含まれているか否かを検出し、前
記所定パターンが含まれていれば前記パターン合成手段
に論理式情報を出力し、含まれていなければ前記分解手
段に論理式情報を出力する第1選択手段と、 前記パターン変形手段と実行内容出力手段との間に設け
られ、前記パターン変形手段から与えられた論理式情報
に同一項が含まれているか否かを判断し、同一項が含ま
れていれば前記第2同一項整理手段を介して前記第1選
択手段に論理式情報を与え、同一項が含まれていなけれ
ば前記実行内容出力手段に論理式情報を与える第2選択
手段とを具備するすることを特徴とするプログラム内容
解析装置である。
作 用 本発明に従えば、プログラムを逆上つて読取り、これに
よつて第1論理式情報を求め、分解手段は、論理積の論
理和の形式に変形して出力する機能を有し、この分解手
段からの論理式情報に対して同一項に関連する項を括弧
でくくつた形式、すなわち同一項を含む項を識別するこ
とを可能とし、このようにして変形して第1同一項を整
理手段から出力し、また第2同一項整理手段もまた設け
られ、さらにパターン変形手段と実行内容出力手段と第
1選択手段と第2選択手段とを備えることによつて、所
定の実行内容が実行されるための条件を表示するにあた
り、複雑な表示を判りやすく変形して表示することが可
能になる。
実施例 第1図は本発明の一実施例のプログラム内容解析装置
(以下、解析装置と略す)1の構成例を示すブロツク図
である。解析装置1には外部記憶装置2が接続され、解
析対象となる高級言語やアセンブラ言語で記述されたプ
ログラムが保存される。解析装置1は外部記憶装置2か
らのプログラムを機械語に変化するアセンブラ3を備
え、アセンブラ3からのアセンブルリストがアセンブル
リストフアイル記憶部4に記憶される。以下「記憶部」
の名称は解析装置1に備えられるたとえばRAM(ランダ
ムアクセスメモリ)や固定デイスク装置などの内部記憶
装置の所定の領域を示す。
アセンブルリストフアイル記憶手段4からの解析対象と
なるアセンブルプログラムは、解析準備処理手段5に与
えられ、後述するプログラム解析に先立ち解析対象とな
るプログラムのデータが内容別に分類される。解析準備
処理手段5には複数の記憶部が接続される。リストフア
イル記憶部6には被解析プログラムの機械語とアセンブ
ラ言語のニーモニツクから成る命令列が記憶される。RA
Mフアイル記憶部7には被解析プログラムで用いられる
各種変数が記憶される。マツプデータ記憶部8には被解
析プログラムで用いられるマツプ形式などでの固定デー
タが記憶される。またその他に記憶部9が接続され、被
解析プログラムで用いられるたとえば割込みベクトルの
ベクトルアドレスや、前記リストフアイル記憶部6に記
憶されているニーモニツクのプログラムに関するラベル
などが記憶される。また解析装置1には命令データフア
イル記憶部10が設けられ、被解析プログラムで用いられ
る命令が予め記憶される。
前記リストフアイル記憶部6らのニーモニツク形式での
プログラムは分岐データ作成手段としての流れ構造解析
手段11に与えられ、被解析プログラムにおける処理の流
れの構造、すなわち分岐の有無、分岐命令が想定される
場合の分岐先命令の位置の変動およびスタツクのネステ
イングの程度などを解析するようにしている。ここでは
これ以降のすべての解析処理の基礎データとなる流れ制
御フアイルを作成し、流れ制御フアイル記憶部12に記憶
する。前記リストフアイル記憶部6、命令フアイル記憶
部20および流れ制御フアイル記憶部12からの各データに
基づいて分岐条件解析部13、ストア内容解析部14、完全
分岐条件解析部15は後述するそれぞれの解析処理を行
い、得られた各データを経路データ記憶手段および位置
データ記憶手段を含む分岐条件フアイル記憶部16、実行
内容フアイル記憶部17、および完全分岐条件フアイル記
憶部18に記憶する。
流れ制御フアイル、分岐条件フアイルおよび実行内容フ
アイルからフローチヤート作成部19は、被解析プログラ
ムのフローチヤートを作成して出力する。また実行内容
フアイルおよび完全分岐条件フアイルから実行内容解析
結果出力部20は被解析プログラムの実行内容をたとえば
印字出力する。
第2図は解析準備処理手段5の動作を説明するフローチ
ヤートである。ステツプa1において解析装置1は外部記
憶装置2からソースプログラムを読込み、アセンブラ3
にてアセンブル処理を行う。アセンブルリストフアイル
4に記憶されたアセンブルプログラムに対して、解析準
備処理手段5はステツプa2にて各命令毎に一連の番号
(以下、行番号と称する)を付与する。このとき各命令
は後述するようにたとえばストア命令、入出力命令、分
岐命令あるいは演算命令などのようにその種類によつて
分類される。これは前記命令データフアイル記憶部10に
記憶されている命令を参照して行われる。ステツプa3で
はこのような命令の分類に基づいて、前述した各種デー
タフアイルの作成が行われる。
次に解析装置1は、流れ構造解析手段11によりリストフ
アイル記憶部6に記憶されている機械語とニーモニツク
から成るプログラムフアイルに関して流れ構造解析処理
を行う。この解析処理は被解析プログラムの流れ構造
(分岐の有無、分岐先の特定、スタツクのネステイング
の程度など)を解析する処理であり、以後のすべての解
析プログラムの基礎データとなる前述した各種フアイル
を作成する。とりわけ分岐命令の存在に基づく分岐先命
令の行番号などの抽出の他、「逆上り(さかのぼり)」
概念と「属性」概念とを表すデータを作成する。
(1)逆上り概念 プログラムの実行内容を解析するためにプログラムをそ
の実行順に従つて命令を読取つて解析しようとする場
合、各種フラグなどのコンデイシヨンコードの変化、複
数の命令の間の相関関係など、当該命令に関連して想定
されるすべてのデータを蓄積しておく必要がある。この
ようなデータの中には命令の種類によつては不必要なデ
ータがある場合であつても、以後の解析処理で、どのデ
ータが必要になるか判断できず、このためすべてのデー
タを収集する必要がある。
本発明に従う「逆上り」概念はこのような課題を解消す
るための方策である。
本発明は機械語やアツセンブラプログラムで記述された
プログラムを、分岐命令およびストア命令の分岐条件や
ストア内容を合成することにより、把握容易な形式に論
理式により記述しようとするものである。このため前記
分岐命令またはストア命令を始点とし、当該分岐条件ま
たはストア命令の内容が確定する個所までプログラムを
逆上りつつ、必要な情報のみを収集するものである。
ここでプログラム例として下記第1表のプログラムに則
して説明する。
上記プログラム例で、実行順序は行番号1→2→3→4
→5→6または行番号1→2→3→4→5→7である。
分岐命令は「BCC」であり、その条件は行番号4の(A
−#8)が0以上か負であるかで決定される。そのため
にはアキユムレータAの値が確定する必要がある。その
ためには行番号3にてアキユムレータA,Bの双方の値が
確定する必要があり、行番号2,1を読取つて初めてその
値が確定する。
流れ構造解析手段11では上記逆上り処理に必要な情報、
すなわち或命令とその前行とはプログラムの実行順に従
つた連続した命令あるか否かの判断のためのデータや、
これらの命令が不連続の場合、どの行番号の命令へ連続
しているかに関するデータなどの後述する属性データを
作成している。
(2)属性概念 プログラムにはメンインルーチンと、メインルーチンの
所定の個所から処理が分岐されるサブルーチンとを含ん
で構成される。同一のサブルーチンでも複数箇所から呼
出される場合があり、メインルーチンに処理を戻すリタ
ーン命令RETによる分岐先の位置は、メインルーチンの
呼出し命令に対応して変化する。したがつて1つのサブ
ルーチンによつても複数の実行経路が設定されていると
考えられ、処理経路を区分する情報として属性概念を設
定する。以下、第2表で示されるプログラム例に沿つて
説明する。
上記プログラム例のフローチヤートは第3図に示され
る。
このプログラム例の実行順序は行番号1→2→3→9→
10→11→4→5→6→8→9→10→11→7→…である。
一方、行番号7からプログラムを逆上る場合、第1の経
路として行番号7→11→10→9→8→6→5→4→11→
10→9→3→2→1→…があるが、その他に行番号7→
11→10→9→3→2→…などの逆上り経路が存在してい
ることになる。このような後者の逆上り経路は実行順序
からはあり得ない経路であり、前記属性概念を用いてこ
のような不所望な経路の選択が防止される。
第2表のプログラム例において、分岐先欄、分岐元欄、
流れフラグ欄および属性欄の内容が以下のようにして決
定される。
(a)属 性 行番号1〜7は行番号3,6のCALL命令によつて処理が分
岐し、かつサブルーチンプログラムを含んでいないの
で、すべて同一の属性記号Mが与えられる。行番号9〜
11は行番号3のCALL命令により処理が移されるサブルー
チンプログラムであり、属性記号Aが与えられる。また
行番号8〜11は行番号6のCALL命令により処理が移され
るサブルーチンプログラムであり、前記属性記号Aと異
なる属性記号Bがそれぞれ与えられる。
(b)分岐先欄 上記プログラムの分岐命令は行番号3,6,7,11に配置され
ており、これらの処理が移る先は各命令の内容に対応し
てそれぞれ行番号9,8,1であり、分岐命令RETでは対応す
るCALL命令の直後の行番号4または行番号7である。分
岐先欄にはこのような分岐先の行番号と当該行番号の命
令が有する属性とが組になつたデータが設定される。
(c)分岐元欄 前記各分岐命令により処理を移される分岐先の命令から
見て、処理が当該分岐先命令へ移る元となる分岐元命令
が対応付けられる。したがつて分岐元欄には、各命令毎
に前記分岐元命令が対応付けられる場合にはその分岐元
命令の行番号と当該分岐命令の所属する属性記号とが組
となつたデータが設定される。
(d)流れフラグ欄 流れフラグ「1」は当該命令が前行の命令から連続した
命令であることを示す。流れフラグ「0」は当該命令が
前行の命令以外の他の命令から処理が分岐してくる分岐
先命令であることを示す。すなわち行番号1〜3は一連
の命令であり、行番号4の命令は行番号3のCALL命令に
よりサブルーチンプログラムAが実行されて行番号11の
RET命令により処理が分岐してきた命令である。このた
め流れフラグ「0」が付される。同様にして行番号5,6
には流れフラグ「1」が付され、行番号7には流れフラ
グ「0」が付される。
行番号8が行番号6のCALL命令により処理が分岐してく
る命令であり、流れフラグ「0」が付される。行番号9
は行番号3のCALL命令により処理が分岐してくる命令で
あり、流れフラグ「0」が付される命令であるが、前記
行番号3りCLLの後に行番号6のCALL命令が行われるの
で、行番号9は行番号8に連続する命令となり、第2表
のように流れフラグ「1」が与えられる。行番号10,11
については流れフラグ「1」が与えられる。
上記第2表のプログラム例では、CALL命令などその命令
から処理が分岐し、またその命令へ処理が分岐してくる
命令に関して説明したが、一般にマイクロコンピユータ
のプログラムの実行は、プログラムカウンタ(PC)の出
力するアドレスの命令を読取つて実行し、その命令の実
行により次に実行すべき命令のアドレスがプログラムカ
ウンタに格納される。
一方、プログラム中にサブルーチンプログラムが含まれ
ている場合、処理が分岐するが、このときスタツクが用
いられる。スタツクは周知のように、先入れ後出し(フ
アーストインラストアウト,FILO方式)のメモリであ
り、サブルーチンを呼出すときサブルーチンから処理が
戻るべきメインルーチンの次のアドレスが格納される。
サブルーチンの処理が終了後、リターン命令RETにより
スタツクに格納されているデータがプログラムカウンタ
に転送され、当該アドレスからプログラムが実行され
る。したがつてスタツクの記憶内容を変更する命令が含
まれていれば、サブルーチンプログラムからの復帰先を
変更することができる。このようなプログラム例を下記
第3表に示す。
第3表のプログラム例は第2表のプログラム例の行番号
4〜8が変更されている。第3表のプログラム例で分岐
先欄、分岐元欄および流れフラグ欄のデータの決定方法
は第2表のプログラム例の場合と同様である。以下、属
性の決定方法について説明する。
行番号1〜3は一連の命令であり、属性データMを与え
る。行番号3のCALL命令により処理は行番号9に分岐す
るので、行番号9〜11には他の属性記号Aを与える。行
番号11のRET命令により処理は行番号4に復帰する。こ
の命令には属性記号Mを与える。
行番号5のPSH命令により、前述したスタツクの最新の
アドレスデータがXレジスタの内容に書換えられる。こ
の時点で属性データをBに変更し、以下行番号11まで同
一の属性データBを与える。このようにして、前述した
スタツクに格納されているデータを変更する命令を含む
プログラムに関する属性が決定される。
上記第2表および第3表のプログラム例に関する流れ制
御データの属性データは、スタツクの内容を変更する命
令を含む分岐命令に関してプログラムの実行経路毎に、
前述したように異なる記号を与えるようにしている。こ
のような方法の場合、被解析プログラムにおける属性の
数が増大すると、後述するようにプログラムを逆上つて
解析を行う場合、命令毎にすべての属性欄の属性データ
を検索して同一の属性に沿つて逆上るような処理を行う
ので、前記属性データの数を減少できればより高速な処
理が実現できる。
下記第4表はプログラム内容は第3表のプログラム内容
と同一であるが、前記第2表および第3表とは異なる流
れ制御データを、分岐欄1,2,…および属性欄1,2,…とし
て設定している。以下、これらの決定方法について説明
する。
(e)属性欄i(i=1,2)… 属性欄の行番号データNOは分岐命令毎に設定され、分岐
先命令の行番号が記述される。属性データtoは当該分岐
命令により、どの属性欄に処理が分岐したかを表す。ま
た行上りフラグ欄においてフラグ=「0」は対応する命
令が分岐先命令であり、直前の行の命令とは処理が連続
しない命令であることを示し、フラグ=「j」(j=1,
2,…)は属性欄の番号を示す。行番号1は行番号11を分
岐命令とする分岐先命令の場合があり、したがつてフラ
グ=「0」が設定される。また順下りフラグ欄において
フラグ=「0」は、対応する命令が直後の命令と処理が
連続しない命令であり、分岐命令であることを示す。
行番号2ではまず設定された属性欄1の番号がフラグ=
「1」として設定される。行番号3は分岐命令であり、
分岐先の行番号データNO=「9」が設定される。属性デ
ータtoについてto=「1」が設定される。この後、処理
は行番号9へ分岐し、したがつて逆上りフラグ=「0」
が設定される。行番号10には逆上りフラグ=「1」が設
定される。行番号「11」は分岐元命令であり、行番号デ
ータNO=「4」が設定される。この行番号4の命令は現
時点では属性欄1の範囲にあり、したがつて属性データ
to=「1」が設定される。
この後、処理は行番号4へ移る。このため逆上りフラグ
および順下りフラグは「0」、「1」となる。これ以
降、行番号5〜10には逆上りフラグ=「0」または
「1」のいずれかが設定される。この後、処理は行番号
11に到達する。分岐先は行番号5のRSH命令により行番
号1に変更されており、したがつて属性欄2が増設さ
れ、逆上りフラグ=「2」が設定される。また行番号デ
ータNO=「1」と属性データto=「1」が設定される。
(f)分岐元欄i(i=1,2,…) この分岐元欄のデータは分岐先命令とについて設定さ
れ、分岐先の行番号データNOと、当該分岐命令の直前の
命令が属する属性欄番号frと、分岐先命令の属する属性
欄番号toとがそれぞれ設定される。
以下、分岐元欄のデータと属性欄のデータとを用いて第
4表のプログラム例で逆上り解析可能であることを説明
する。逆上りフラグ=「1」について逆上ると、行番号
9で逆上りフラグ=「0」となるので分岐元欄を参照
し、行番号3の属性欄1から分岐していることが理解さ
れる。さらに逆上り、行番号1ですべての情報が確定す
る。したがつて逆上りフラグ=「1」に関する経路は行
番号10→9→3→2→1となる。
それぞれの実行内容は 10行目 A→[X+0] …未定義変数A,X 09行目 A←A+1 …未定義変数A,X 03行目 未定義A,Xに関する変化なし 02行目 A←[X+0] …未定義変数X 01行目 X←PORT1 …未定義変数無し であるから、10行目で得られた A→[X+0] の‘A'の代りに09行目で得られた‘A+1'を置き換えて A+1→[X+0] その‘A'の代りに02行目で得て‘X+0'を置き換えて [X+0]+1→[X+0] その‘X'の代りに01行目で得られた‘PORT1'を置き換え
ると [PORT1+0]+1→[PORT1+0] が得られる。
その処理内容は、 [PORT1+0]+1→[PORT1+0] …(1) となることが理解される。
逆に逆上りフラグ=「2」について逆上ると、まず属性
欄2が参照されるが、行番号9にて逆上りフラグ=
「1」に変更されるので、行番号8については属性欄1
が参照される。これ以降、前述と同様に逆上つて読取
り、行番号6にてすべての情報が確定する。これによれ
ば処理内容は、先ほどと同様に行番号10→9→8→7→
6とたどることで、 [PORT2+0]+1+1→[PORT2+0] …(2) となることが理解される。
第4図は流れ構造解析手段11の動作を説明するフローチ
ヤートである。流れ構造解析手段11の動作の概略は上記
第2表〜第4表を参照して説明したが、以下にその動作
を詳述する。第4図ステツプc1では解析を開始する行番
号lnを所定の値に設定し、また各種データを所定の値に
初期化する。ステツプc2では処理が最終行まで到達した
か否かを判断する。到達していなければ処理はステツプ
c3に移り、現在解析の対象となつている命令の行番号ln
に関して設定される属性欄の個数を表す配列CZ[ln]が
0であるか否かを判断する。個数配列CZが0であれば、
初めて解析する命令であることを意味する。
ステツプc3の判断が否定であれば処理はステツプc4に移
り、属性欄の個数を1つ増加する。ステップc5では第4
表を参照して説明した属性データを設定する。ステツプ
c6では行番号lnの命令が分岐先行であるか否かを判断す
る。分岐先行であればステツプc7で第4表行番号4の命
令における分岐元欄1などの分岐元欄を設定し、ステツ
プc8に移る。ステツプc6の判断が否定であればステツプ
c9に移り、前記逆上りフラグや順下りフラグを設定す
る。
以下、上記逆上りフラグと順下りフラグとについて説明
する。第5図は流れ制御フアイル記憶部12の構造を説明
する図である。流れ制御フアイル記憶部12は、分岐元フ
アイル部21と属性フアイル部22とから構成される。第6
図は分岐元フアイル部21の構造を説明する図である。分
岐元フアイル部21は行番号毎に設けられ、当該行番号を
分岐先とする分岐元命令の個数を記憶する分岐元個数記
憶部23と、第4表を参照して説明した分岐元欄に相当す
る分岐元欄記憶部24がたとえば80領域設定される。分岐
元欄記憶部24は行番号記憶部25、分岐元属性記憶部26、
分岐先属性記憶部27を含んで構成される。
第7図は属性フアイル部22の構造を説明する図である。
属性フアイル部22は各行番号毎に設けられ、当該行番号
に設定された属性欄の個数を記憶する属性個数記憶部2
8、当該命令行の属性データが確定すれば「1」、不定
の場合は「0」で表される不定フラグを記憶する不定フ
ラグ記憶部29、第4表の属性欄の属性データtoに相当す
る属性値を記憶する属性値記憶部30、第1図示の分岐条
件フアイル記憶部16において当該行番号の命令の分岐条
件を記憶しているアドレスを記憶する分岐条件記憶部3
1、第4表の属性欄における行番号データNOと属性デー
タtoとをそれぞれ記憶する分岐先行番号記憶部32、分岐
先属性欄番号33、第4表の属性欄のフラグに相当する逆
上りフラグを記憶する逆上りフラグ記憶部34、順下りフ
ラグを記憶する順下りフラグ憶部35を含んで構成され
る。
前記順下りフラグは第4表のたとえば属性欄1の順下り
フラグ欄に示すように設定される。すなわち、或行番号
の命令が直後の行番号の命令と連続した命令であれば
「1」、不連続な命令であれば「0」を与える。第4表
の行番号2は行番号3と連続する命令であり、前記デー
タ「1」が与えられる。ところが行番号3は行番号4の
命令とは連続せず、したがつてデータ「0」が与えられ
る。
第4図示ステツプc7,c9では、上述したような内容を有
する逆上り属性、順下り属性および分岐元欄が設定され
る。
まずステツプc8で当該命令が分岐命令であるか否かが判
断される。分岐命令であればステツプc10に移り、当該
分岐命令が第4表行番号11RET命令のような割込み処理
を終了させる命令であるか否かを判断する。この判断が
否定であればステツプc11に移り、分岐先行番号を求め
る。これは第1図のリストフアイル記憶部6を参照して
求められる。ステツプc12では、分岐の数を表す分岐数
データbiを+1インクリメントし、ステツプc13では当
該分岐数データbiと当該行番号を配列m、 m(bi)=ln …(3) で対応付ける。
ステツプc14では、後述するようにスタツクの変化がチ
エツクされる。ステツプc15では属性データが計算され
ステツプc16では次の行番号を変数lnに設定し、処理を
ステツプc2に戻す。前記ステツプc8の判断が否定であれ
ば処理はステツプc14に移る。
前記ステツプc3の判断が肯定であれば当該命令は初めて
解析する命令行ではないことになり、ステツプc17で同
一属性を有する属性欄が存在するか否かが判断される。
この判断が否定であればステツプc4に移り、属性欄が増
加される。ステツプc17の判断が肯定であればステツプc
18に移り、当該分岐命令が分岐先行であるか否かが判断
される。分岐先行であればステツプc19で、第4表の分
岐元欄が設定され、ステツプc20に移る。ステツプc18の
判断が否定であればステツプc21において前記ステツプc
9で説明した逆上りフラグおよび順下りフラグが設定さ
れる。ここでステツプc19,c21の後、ステツプc17の判断
が肯定となつているので同一属性欄がすでに存在してい
ることになり、この属性に関しては解析は終了してお
り、再び解析を行うことなく解析処理が終了され、ステ
ツプc20に処理を移している。
ステツプc20では前記分岐数データbiが0であるか否か
が判断される。肯定であれば処理は終了する。否定であ
れば解析処理が終了していないことになり、ステツプc2
0に前記ステツプc13で記憶した分岐命令の行番号lnを前
記配列m(bi)にて読出し、またステツプc23にて分岐
数データbiを−1デクリメントし、処理はステツプc2に
戻る。すなわちステツプc22で読出された行番号lnから
再び解析処理を行う。
第8図は、分岐条件解析手段13の動作を説明するフロー
チヤートである。上記第4表に示したプログラム内容に
即して分岐条件解析処理について説明する。第8図ステ
ツプd1では行番号slnを0に設定し、ステツプd2では行
番号slnを+1インクリメントする。ステツプd3では当
該行番号lnがプログラムの最終行番号、すなわち第4表
のプログラム例では行番号11を超えたか否かを判断す
る。超えていれば処理は終了し、超えていなければステ
ツプd4に移る。ステツプd4では行番号lnの命令が分岐命
令であるか否かを判断する。上記プログラム例では、行
番号1は分岐命令ではなく処理はステツプb2へ戻り、次
の行番号の命令へ進む。行番号3で分岐命令であること
が判断され、ステツプd5へ進む。
ステツプd5では、属性欄番号を表す変数kを0に設定
し、ステツプd6では変数kを+1インクリメントする。
ステツプd7では、当該行番号lnの命令に関する属性欄の
個数を表す配列CZ(ln)に関して、 k≦CZ(ln) …(4) の判断を行う。この判断が否定であれば、第4図に示し
た流れ構造解析処理の際の命令毎の属性欄の個数を超過
したことになり、すなわち当該分岐命令におけるすべて
の属性について分岐条件解析が終了したことになり、処
理はステツプd2へ移り、次の行番号の命令へ進む。
ステツプd7の判断が肯定であればステツプd8へ移り、当
該行番号lnの前記命令における属性欄番号kに沿って後
述する逆上り処理を開始して逆上り経路を求める。前述
したように分岐命令の分岐条件を確定するに必要な命令
には、後述する関与フラグを設定する。ステツプd9で
は、後述するように逆上つて読取つた命令毎の実行内容
を分岐条件として構成する。ステツプd10では、このよ
うにして得られた分岐条件を第1図示の分岐条件フアイ
ル記憶部16に記憶する。
第9図は、第8図のステツプd8の逆上り処理の詳細を説
明するフローチヤートである。第9図ステツプe1では、
後述する制御変数SWが0に初期化される。ステツプe2で
は、上記制御変数SWが0であるか否かを判断し、肯定で
あればステツプe3に移り、第4表の属性欄に示される逆
上りフラグをチエツクして、逆上りフラグが0のとき制
御変数SW=2とし、逆上りフラグが0以内のときSW=1
と設定する。この後、処理はステツプe2に戻る。
第10図は、前記ステツプe3の逆上り判断処理の詳細を説
明するフローチヤートである。第10図ステツプf1では、
第4表行番号3の属性欄1の属性データtoで示される属
性欄番号を読出す。上記例ではto=「1」であり、属性
欄1が読出される。ステツプf2では、属性欄1の逆上り
フラグの値を前記属性データtoの値に設定する。ステツ
プf3では、属性データtoが0であるか否かを判断する。
0であれば前行の命令とは実行順に関する持続性が失わ
れていることになり、ステツプf4で前記制御変数SW=2
に設定して処理は終了する。
前記ステツプf3で判断が否定であれば、前行の命令とは
処理が連続していることになり、ステツプf5にて制御変
数SW=1に設定する。ステツプf6では、行番号を表す変
数lnを−1デクリメントして処理を終了する。第4表の
プログラムと例の行番号3では属性データto=「1」で
あり、この場合、制御変数SW=1となる。
再び第9図を参照して、前記ステツプe2の判断が否定で
あればステツプe4へ移り、制御変数SW=1であるか否か
を判断する。肯定であればステツプe5へ移り、上記分岐
命令の分岐条件を確定するに必要な情報が全て得られて
いるとき、対応する逆上りフラグをクリアし、新たに必
要な情報を対応するフラグをセツトする。全てのフラグ
がクリアされたとき、制御変数SW=4と設定され、これ
以外のときには制御変数SW=0に設定される。この後、
処理はステツプe2に戻る。
第11図は、前記ステツプe5の逆上り情報設定処理の詳細
を説明するフローチヤートである。第11図ステツプg1で
は、被解析プログラムを1行ずつ逆上る毎に+1インク
リメントされる逆上り行カウンタrcを+1インクリメン
トする。ステツプg2では、逆上り用カウンタcnを変数と
し、行番号ln、属性データto、分岐欄番号ndおよび分岐
命令またはストア命令の分岐条件、またはストア条件を
確定するに必要な命令の行番号rn0を一時的に記憶する
ワークメモリmに、先ず逆上つた行番号lnを記憶する。
ステツプg3では同じくワークメモリmに逆上つた命令の
属性データtoを記憶する。ステツプg4では、逆上つた行
番号に対応する第6図示の分岐元フアイル部21の分岐元
欄21において、当該命令の属性データtoと同一属性へ分
岐している分岐元命令の個数を計数し、記憶する。ま
た、前記ワークメモリmに記憶された分岐元命令毎に分
岐元欄番号ntをワークメモリmに記憶する。
ステツプg5では、前記ステツプg2〜g4で得られた各種デ
ータが必要であるか否かを判断する。第4表の行番号3
のCALL命令は、無条件分岐命令であり、したがつて行番
号2の上記各種データは不必要であり、判断は否定とな
る。一方、第4表行番号3が前記第1表行番号5のBBC
命令のように条件付き分岐命令であつて、行番号2がそ
の分岐条件に関与するならばステツプg7へ移り、そのよ
うな命令毎に与えられる番号を前記ワークメモリに記憶
する。ステツプg8では、前記ワークメモリ以外の情報フ
ラグをクリアし、ステツプg9に移る。
ステツプg9では、新たな必要情報があるか否かが判断さ
れ、あればステツプg10で新たな情報フラグを設定し、
ステツプg11に移る。前記ステツプg5の判断が否定の場
合、前記ワークメモリm(rcrn0)にはデータ「0」が
設定され、ステツプg11に移る。ステツプg9の判断が否
定の場合も同様である。
ステツプg11では、分岐条件やストア命令の内容を確定
するためにさらに新たな情報が必要か否かを表す必要情
報フラグが「0」であるか否かを判断する。すなわち、
必要情報フラグが「1」のとき、逆上り解析処理が出発
した前記分岐命令やストア命令の実行内容が確定したこ
とになり、処理はステツプg12へ移り、前記制御変数SW
=「4」とする。これは後述するように、前記ワークメ
モリmに記憶されたデータを第1図の分岐条件フアイル
記憶部16に書込む処理を行うためである。また、前記ス
テツプg11の判断が否定であれば、処理はステツプg13に
移り、制御変数SW=「0」に設定される。これは後述す
るように、処理が第9図ステツプe2へ戻つたとき、ステ
ツプe3へ移つて逆上り処理を続行するためである。
このようにして第9図ステツプe5が実行され、処理はス
テツプe2に戻る。前記ステツプe4の判断が否定であれば
ステツプe6へ移り、制御変数SW=「2」であるか否かが
判断される。この場合は、ステツプe3で説明したよう
に、逆上りフラグ=「0」であつて、行番号が直前の命
令とは処理の順序が連続していない命令である場合を示
している。このような場合には、逆上り解析処理を分岐
させる必要があるため、ステツプe7に移る。ステツプe7
では、後述するように逆上り解析処理の分岐先の行番号
を求め、制御変数SW=「1」として処理をステツプe2に
戻す。
第12図は、第9図ステツプe7の逆上り分岐処理の詳細を
示すフローチヤートである。第12図ステツプh1では、第
11図ステツプg4で分岐元欄番号が記憶されたワークメモ
リm[rc,nd(cn)]から分岐元欄番号を読出し、第4
表に示されるような分岐元欄1などにおいて、対応する
分岐元行番号データNOや、分岐元の属性データすなわち
分岐元属性欄番号frを求め、行番号lnに前記分岐元行番
号データNOを設定し、ステツプh2では属性データtoに分
岐元属性データを設定する。
ステツプh3では、第11図ステツプg4で設定された分岐個
数データm[rc],cnを−1デクリメントする。この
後、ステツプh4で前記制御変数SW=「1」とし、処理は
終了する。
このように第9図ステツプe7の処理が終了してステツプ
e2に戻る。ステツプe6の判断が否定であればステツプe8
に移り、制御変数SW=「3」であるか否かを判断する。
この判断が肯定であればステツプe9に移り、逆上り解析
を保留している解析経路の開始行番号を求め、制御変数
SW=「2」として処理をステツプe2へ戻す。
第13図は第9図ステツプe9の未解析データ処理の詳細を
示すフローチヤートである。第13図ステツプp1では、逆
上り経路カウンタrcが「0」であるか否かを判断する。
すなわち、未解析の逆上り解析経路が残つているかどう
かを判断する。このような未解析逆上りルートが存在し
なければステツプp2に移り、制御変数SW=「5」として
処理を終了する。ステツプp1の判断が否定であればステ
ツプp3に移り、逆上り経路カウンタrcを−1デクリメン
トし、ステツプp4にて第11図ステツプg4で説明した分岐
個数ワークデータm(rc),cnが0であるか否かを判断
する。0であれば処理はステツプp1に戻り、他の未解析
経路に関して同様な処理を行う。
ステツプp4の判断が否定であればステツプp5に移り、制
御変数SW=「2」に設定して処理を終了する。
再び第9図を参照して、このようにしてステツプe9の未
解析ルート解析処理が終了して処理はステツプe2に戻
る。ステツプe8の判断が否定であればステツプe10に移
り、制御変数SW=「4」であるか否かを判断する。肯定
であれば、逆上り解析処理は想定される全ての逆上り解
析経路に関して終了していることになり、ステツプe11
にて得られた解析経路、すなわち逆上り解析経路を構成
する各命令の行番号データを第1図の分岐条件フアイル
16に書込む。未解析経路が残つている場合には、制御変
数SW=「3」と設定される。
第14図は、第9図ステツプe11の処理を詳述するフロー
チヤートである。第14図ステツプq1で前記逆上り経路カ
ウンタrcが0であるか否かが判断される。0であれば、
前逆上り経路に亘つて解析が終了したことになり、前述
した経路データの記憶処理を行い、処理は終了する、ス
テツプq1の判断が否定であれば、ステツプq3に移り、制
御変数SW=「3」に設定して処理を終了する。
再び第9図を参照して、このようにしてステツプe11で
データの書込み処理が終了して処理はステツプe2に戻
る。ステツプe10の判断が否定の場合、第13図ステツプp
2で説明したように、全解析経路に亘つて解析が終了し
ていることになり、第8図ステツプd8で説明したプログ
ラムを逆上る経路を求める処理が終了する。
第8図ステツプd9では、ステツプd8で得られた逆上り解
析経路毎に分岐条件を合成する処理を行う。上記第2表
〜第3表における分岐命令は、無条件分岐命令であり、
第1表のプログラム例に関して説明する。このプログラ
ム例の分岐命令は、行番号5のBCC命令であり、前述し
た逆上る経路を求める処理に従えば行番号5から出発す
る逆上り解析経路として行番号5→4→3→2→1が得
られる。
すなわち、行番号5の分岐命令の分岐条件は行番号4で
得られる、 A−#8≧0 …(5) であり、変数Aが未確定である。行番号3で変数Aにつ
いて、 A←(A−B) …(6) の演算が行われ、未確定変数はA,Bとなる。行番号2〜
1の命令にて A=#3 …(7) B=#5 …(8) が得られ、変数A,Bは確定する。したがつて、これらを
合成すると、分岐条件として 3*5−8≧8 …(9) が得られる。
第8図のステツプd10では、このようにしてステツプd9
で得られた分岐条件を第1図分岐条件フアイル記憶部16
に記憶する。このようにして、被解析プログラムを分岐
命令から逆上り、分岐条件を求める処理は終了する。
また、第4表のプログラム例において、実行内容を求め
る処理は、第8図ステツプd8で得られた逆上り解析経路
を、たとえば行番号10のST命令から開始することによつ
て得られる。得られた第1の解析経路は、前述したよう
に 行番号 10→9→3→2→1 である。この経路に沿つて前記分岐条件を合成した手法
と同様な技術により、実行内容を合成すると、 [PORT1+0]+1→[PORT1+0] …(10) [PORT1]は、アドレスPORT1に格納されたデータを示
す。
が得られる。たとえば、[PORT1+0]+1→[PORT1+
0]が実行される条件(このような実行内容が合成され
るような順序でプログラムが実行される条件、すなわち
このような実行内容が合成されるような順番でプログラ
ムを辿ったときに現れる条件分岐命令の分岐条件の合成
条件)が 分岐Aで分岐し、分岐Bで分岐し、分岐Cで分岐しなか
つたとき、 もしくは 分岐Aで分岐し、分岐Bで分岐せず、分岐Cで分岐しな
かつたとき、 であるなら、分岐Xで分岐することをX、分岐Xで分岐
しないことをで表すと、上記条件は AかつBかつもしくはAかつかつ となり、これを式で表すことにより A・B・+A・・=A・ と簡略化でき、最終的に 「分岐Aで分岐し、分岐Cで分岐しなかつたとき」に [PORT1+0]+1→[PORT1+0]が実行されるという
簡略化された命題を得ることができる。
すなわちアドレスPORT1にプリセツトデータ0を加えた
アドレスの内容にデータ1を加えたものを同一アドレス
に再び格納する処理、すなわちアドレスPORT1のデータ
を+1インクリメントする処理を示している。
他の解析経路は 行番号10→9→8→7→6 となる。この経路に沿つて実行内容を合成すると、先程
と同様に [PORT2+0]+1+1→[PORT2+0] …(11) となり、アドレスPORT2のデータを2ずつインクリメン
トする処理であることが判る。このような実行内容のデ
ータは、第1図の実行内容フアイル記憶部17に記憶され
る。
以上のようにして本実施例に従えば、上記第2表〜第4
表や第5図〜第7図に示した分岐元欄の各データや属性
欄を構成する各データを、逆上り解析処理に先立つて設
定するようにしたので、逆上り解析時においてプログラ
ムの実行順序に矛盾する不所望な逆上り解析経路が選択
されて、無駄な処理が行われる事態を防ぐことができ
る。
また本実施例では、前記第2表に示したプログラム例の
行番号9〜11のサブルーチンプログラムAのように、行
番号3のCALL命令で呼出されるとともに、行番号6のCA
LL命令で呼出されたサブルーチンプログラムBが呼出さ
れることにより再び実行されるような命令列において、
複数の分岐命令毎に解析経路を識別する属性データを設
定するようにしている。
したがつて、このようなサブルーチンプログラムの中か
ら逆上り解析処理を行うに際して、CALL命令などの呼出
し箇所に応じた解析経路を設定することができ、誤つた
解析経路が設定される事態を防ぐことができる。
以下、第4表の属性欄における順下がりフラグについて
説明する。
第15図はこの順下がりフラグを用いる理由を説明するプ
ログラム例を示すフローチヤートであり、第16図は第15
図示のプログラム実行時に用いられるスタツク36の記憶
内容を説明する図である。メインルーチンプログラムの
実行時にサブルーチンプログラムが呼出されると、第16
図(1)に示すようにスタツク36には戻りアドレスが格
納されてスタツクポインタは+1インクリメントされ、
処理はたとえば第15図示のサブルーチンプログラムに移
る。
第15図のサブルーチンプログラムにおいて、ステツプr1
でスタツク36に新たなアドレスデータを書込むプツシユ
命令PSHが実行されると、スタツク36には第16図(2)
図示のようにアドレスデータが書込まれ、スタツクポイ
ンタは+1インクリメントされる。これ以降、処理がス
テツプr2,r3,r4,r5と進行した場合、スタツク36から最
新に書込まれたアドレスデータを読出してスタツクポイ
ンタを−1デクリメントするプル命令PULLによりスタツ
ク36では、第16図(3)に示すように前記アドレスデー
タが消去され、戻りアドレスのみが残る状態となる。
第15図示のようなサブルーチンプログラムにおいて、前
記スタツク操作命令PSHとスタツク操作命令PULLとが単
一のサブルーチンプログラム内で1個ずつ組となつてい
るか否かを検査しようとする場合を想定する。このとき
逆上り処理では、下記の3種類の経路が存在する。
行番号R7,R6 …(12) 行番号R7,R6,R2,R1 …(13) 行番号R7,R5,R4,R3,R2,R1 …(14) である。したがつて、前記検査を行う場合、第12式の経
路についても検査することになり、スタツク操作命令に
全く関係を有さない無駄な検査を行つてしまうことにな
る。したがつて、前記のような検査を行う場合、プログ
ラムの実行順に命令を読取つて検査を行う手法が無駄な
処理を省く点で有利である。
このため本実施例では、第4表の属性欄における順下が
りフラグを設定するようにした。この順下がりフラグ
は、前述したように、ある命令が次の行番号の命令と実
行順序に関して連続した命令であるか否かを識別するフ
ラグである。この順下がりフラグを前述の実施例におい
て説明した逆上りフラグと同様な手法にて用いることに
より、被解析プログラムを順下がりの経路にて読取つて
解析を行うことができる。これにより無駄な処理は省か
れ、処理の高速化と高効率化とを図ることができる。
前述の第4表のプログラム例において、サブルーチンプ
ログラムAに対し、複数のCALL命令が配置される場合、
同表の分岐元欄および属性欄は、CALL命令の数だけ設定
されることになる。このようなサブルーチンプログラム
がその中でスタツクの内容を変化させないならば、異な
るCALL命令によって呼出された場合でも実行内容は同一
であり、このような場合には後述するように分岐元欄お
よび属性欄に割りあてられるメモリの容量を削減するこ
とができる。
このような本実施例の動作例を、下記第5表のプログラ
ム例に沿つて説明する。
上記の第5表の分岐元欄および属性欄のデータは、上記
第4表を参照して説明したデータの設定方法に基づいて
設定されている。ここで前述したように、分岐元欄およ
び属性欄に割りあてられるメモリの容量を削減するため
に、第5表のプログラム例に基づいて下記第6表のよう
な分岐元欄および属性欄を作成する。
上記第5表と第6表とでは、下線を付したデータが変更
されている。すなわち、行番号3のCALL命令とこれより
分岐した行番号8〜10の命令列、およびリターン命令RE
Tによりさらに分岐した行番号4に関する分岐元欄や属
性欄の決定に関しては、上記第5表と同様に設定され
る。引続き行番号6を読取つたとき、行番号8に分岐す
る。
第4表の例では新たな分岐元欄2および属性欄2が設定
されるが、本実施例は同一のサブルーチンプログラムを
解析するため、このような分岐元欄および属性欄の増加
を行わず、分岐元欄1の行番号8において、行番号デー
タNO=「0」と設定し、また行番号4の属性データfr=
「0」と設定する。さらに、行番号8の属性欄to=
「0」と設定する。このようなデータ「0」を用いて、
行番号6のCALL命令に基づく行番号8〜10のサブルーチ
ンプログラムの解析を終了したことを表示する。
このとき、属性欄も同様に、行番号1→2→3→8→9
→10→4→5までの解析が終了した段階では、第5表の
属性欄1のようなデータが設定されるが、行番号6以降
の前述のような処理によつて属性欄2を増設せず、第6
表の属性欄1のようなデータが設定される。
逆上り処理にあたつて、行番号8の分岐元欄1の行番号
データNOが参照されるとこれは「0」てあるため、分岐
元行番号が不明となる。したがつて、前述した分岐元欄
および属性欄を作成する処理において、行番号8に分岐
する分岐元命令の行番号の逆上り時における次の行番
号、すなわち第5表の例では行番号5,2をフアーストイ
ンラストアウト(FILO)形のメモリに記憶する。したが
つて、逆上り解析時において、分岐元欄で行番号データ
「0」のデータが参照された場合には、前記行番号を記
憶したFILO形メモリからデータを読出して逆上り処理に
おける分岐先行番号とする。
このようにすることによつて、流れ制御フアイル記憶部
12において、分岐元欄および属性欄に割当てられるメモ
リの容量を削減することができる。
前記第4表のプログラム例における実行内容は、行番号
3,5,11などの分岐命令やスタツクの内容を操作する命令
などによつて変化するスタツクの記憶内容に大きく作用
されることが知られている。このようなスタツクの内容
を予め属性欄のデータとしてまとめておくと、プログラ
ムの解析上便利である。とりわけ前記第4表の行番号5
のPSH命令や、これと対を成すPULL命令などのようにス
タツクの内容を変化させる命令が含まれる場合には、プ
ログラムの実行状態の変化が明瞭になり、プログラム解
析経路の特定が容易になる。
上記第4表と同一のプログラム例において、当該プログ
ラムの各命令毎に下記第7表のようなアドレスが設定さ
れる場合を想定して説明する。
本実施例では、分岐元欄および属性欄のデータは第4表
のデータを用いるが、これに加えスタツクの内容が変化
する命令がある場合には、その命令により変化したスタ
ツクの内容をデータとするスタツクデータVALの欄を設
ける。これによれば、行番号3で行番号9へ分岐する
が、このときスタツクにはデータ#F007が格納される。
したがつて、行番号9〜11のVAL欄には、当該アドレス
#F007の上位バイトおよび下位バイトを転換したデータ
VAL=「07F0」がそれぞれ設定される。
行番号11から行番号4へ処理が戻り、次に行番号5にお
いてスタツクの記憶内容が行番号1のアドレス#F000に
変更される。したがつて、これ以降の行番号4〜8の属
性欄1においては、スタツクデータVAL=「00F0」が設
定される。行番号8にて、新たな属性欄2が設定され、
引続きスタツクデータVAL=「00F0」が設定される。
以上のようにして本実施例によれば、属性欄にスタツク
のデータを設定するようにしたので、たとえばサブルー
チン命令のメインルーチンへの復帰命令RETから逆上り
処理を行う場合、前記メインルーチンへの復帰先は、ス
タツクデータVALを参照すれば判明し、各命令を逆上つ
て順次的に解析して検知する必要が解消される。これに
より処理の高速化が図られる。また、前記スタツクデー
タVALを用いれば、各命令毎に設定される属性の種類お
よび処理経路等の属性の識別が格段に容易となる。
第8図ステツプd9において、分岐条件を合成して第1図
に示すフローチヤート作成手段19や実行内容解析結果出
力手段20などから、当該得られた結果を論理式の結合し
た形式としてフローチヤートやPAD図の形式で出力した
り、または実行内容を印字出力したりする場合、被解析
プログラムが長くなるほどその出力量が膨大となる。し
たがつて、これらの論理式で記述される出力をブール代
数を用いて簡易な形に整理する技術が必要となる。
第17図は、このような実施例を説明するフローチヤート
である。フローチヤート作成手段19や実行内容解析結果
出力手段20からの出力がたとえば下式、 F=C・(+(A・B))+(・(+AB)+A・
) のような論理記号の結合した論理式として与えられてい
る場合、これを簡約化するには以下の処理を行う。この
簡約化処理の基本方針は下記の第16式と第17式とであ
る。
A+=U …(16) A+・g=A+g …(17) U;全体集合 A;Uの部分集合 ;Aの補集合 g;単項 ・;論理積演算 +;論理和演算 第18図は、上記第16式と第17式の内容を説明するベン図
である。上記第16式は、全体集合Uにおいて、部分集合
Aとその補集合との和集合が常に全体集合となる意味
である。また、上記第17式は部分集合Aと単項gとが互
いに素であるならば、補集合と単項gとの積集合と集
合Aとは集合Aと単項gとの和集合になる意味である。
このような上記第16式および第17式の基本方式に基づい
て、上記第15式を簡約化する手順について第17図のフロ
ーチヤートを参照して説明する。第17図ステツプs1にお
いて、各項を分解する。これにより上記第15式は下記第
18式に変化される。
F=C・+C・A・B+・+・A・B+A・
…(18) 次にステツプs2にて共通項があるか否かが判断される。
先ず第18式の第1項および第2項について、共通項Cが
あることが判断され、ステツプs3で()でくくられ、下
記第19式が得られる。
C・(+A・B) …(19) 次にステツプs4では、前記第16式および第17式に基づく
合成パターンがあるか否かが判断される。第19式の()
内では、第17式に基づく合成が可能であり、判断が肯定
となり、ステツプs5に移り、下記第20式のように合成さ
れる。前記ステツプs4で合成パターンがないことが判断
されると、ステツプs6に移り、他に()でくくれる同一
項があるか否かが判断され、なければステツプs3に移
る。下記第20式の例では、()内でこれ以上の合成パタ
ーンがなく、処理はステツプs1に戻され、()が分解さ
れ、下記第21式が得られる。
C・(+B) …(20) C・+CB …(21) 次に第21式第1項と第18式第3項とに関して、前記ステ
ツプs2,ステツプs3の処理が適用され、下記第22式が得
られる。
C・+・=・(C+) …(22) 次のステツプs4,s5にて上記第16式の基本方針が適用さ
れ、下記第23式が得られる。
・(C+)= …(23) 次に第21式第2項と第18式第4項とに関して、同様な処
理が行われ、下記第24式の結果が得られる。
C・B+・A・B=B・(+C・A)=BC+BA …
(24) 次に第24式最右辺の第2項と、第18式第5項との間で同
様な処理が行われ、下記第25式が得られる。
B・A+A・=A・(B+)=A …(25) したがつて第23式、第24式最右辺第1項および第25式よ
り下記第26式が得られる。
+B・C+A=B・C+U=U …(26) このようにして上記第16式および第17式に示す基本方式
の元で、第17図に示す処理手順に基づいて上記第15式に
示す論理式が全体集合Uに簡約化されることが確認され
た。このようにして第8図ステツプd9で分岐条件を合成
する処理を行うにあたつて、前述したようにブール代数
を用いて論理式を論理演算にて簡略化して表現する。こ
れによりフローチヤート作成手段19でフローチヤートを
作成して出力したり、または実行内容解析結果出力手段
20にて実行内容を論理式にて印字出力する場合にあたつ
て、実行内容をより内容の把握が容易な形式にて表現す
ることができ、本件プログラム内容解析装置をプログラ
ムのデバツグなどに用いる場合にきわめて効率的であ
る。
発明の効果 以上のように本発明によれば、所定の実行内容が実行さ
れるための条件を表示するにあたり、複雑な表示を判り
やすく変形して表示することが可能になる。
【図面の簡単な説明】
第1図は解析装置1の構成を示すブロツク図、第2図は
解析準備処理手段5の動作を説明するフローチヤート、
第3図は被解析プログラム例の動作の流れを示すフロー
チヤート、第4図は流れ構造解析手段11の動作を説明す
るフローチヤート、第5図は流れ制御フアイル記憶部12
の構成を示す図、第6図は分岐元フアイル記憶部21の構
成を示す図、第7図は属性フアイル記憶部22の構成を示
す図、第8図は分岐条件解析手段13の動作を説明するフ
ローチヤート、第9図は本実施例の逆上りフラグを説明
するフローチヤート、第10図逆上り処理における逆上り
判断を説明するフローチヤート、第11図は逆上り処理に
おけるデータ設定処理を説明するフローチヤート、第12
図は逆上り処理の逆上り分岐処理を説明するフローチヤ
ート、第13図は逆上り処理の未解析ルート処理の動作を
説明するフローチヤート、第14図はデータ書込み処理を
説明するフローチヤート、第15図は被解析プログラム例
の動作の流れを説明するフローチヤート、第16図はスタ
ツクの状態を説明する図、第17図は論理式のブール代数
を用いる簡約化処理を説明するフローチヤート、第18図
は本実施例を説明するベン図、第19図はプログラム例の
流れを示すフローチヤートである。 1……解析装置、3……アセンブラ、4……アセンブル
リストフアイル記憶部、5……解析準備処理手段、6…
…リストフアイル記憶部、10……命令データフアイル記
憶部、11……流れ構造解析手段、12……流れ制御フアイ
ル記憶部、13……分岐条件解析手段、16……分岐条件フ
アイル記憶部、21……分岐元フアイル部、22……属性フ
アイル部、23……属性元個数記憶部、24……分岐元欄記
憶部、25……行番号記憶部、26……分岐元属性記憶部、
27……分岐先属性記憶部、28……属性個数記憶部、29…
…不定フラグ記憶部、30……属性値記憶部

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】複数の命令からなるプログラムの各命令を
    配列順序とは逆に逆上つて読取り、その内容を解析し、
    各実行内容と該実行内容が行われる条件を出力する装置
    において、 プログラムを逆上つて各命令の実行内容を読取る読取手
    段と、 読取られた各命令のうち実行内容に関連する命令に至る
    経路を通過するための条件に対応する第1論理式情報を
    求め、前記実行内容に関連する全ての経路毎の第1論理
    式情報を論理和形式の総合論理式情報として合成し、該
    総合論理式情報を前記実行内容に関連して記憶する実行
    内容記憶手段と、 与えられた論理式情報を論理積の論理和の形式に変形し
    て出力する分解手段と、 前記分解手段から与えられた論理式情報に対して、同一
    項に関連する項を括弧でくくつた形式に変形して出力す
    る第1同一項整理手段と、 与えられた論理式情報に対して、同一項に関連する項を
    括弧でくくつた形式に変形して出力する第2同一項整理
    手段と、 第1同一項整理手段から与えられた論理式情報のうち、
    所定の変形パターンに該当する項を、該所定の変形パタ
    ーンに従つて変形して出力するパターン変形手段と、 パターン変形手段から与えられる論理式情報とその実行
    内容とを関連して表示する実行内容出力手段と、 前記第1同一項整理手段とパターン変形手段との間に設
    けられ、第1同一項整理手段から与えられた論理式情報
    に前記所定パターンが含まれているか否かを検出し、前
    記所定パターンが含まれていれば前記パターン合成手段
    に論理式情報を出力し、含まれていなければ前記分解手
    段に論理式情報を出力する第1選択手段と、 前記パターン変形手段と実行内容出力手段との間に設け
    られ、前記パターン変形手段から与えられた論理式情報
    に同一項が含まれているか否かを判断し、同一項が含ま
    れていれば前記第2同一項整理手段を介して前記第1選
    択手段に論理式情報を与え、同一項が含まれていなけれ
    ば前記実行内容出力手段に論理式情報を与える第2選択
    手段とを具備するすることを特徴とするプログラム内容
    解析装置。
JP1319451A 1989-12-07 1989-12-07 プログラム内容解析装置 Expired - Fee Related JPH0775003B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP1319451A JPH0775003B2 (ja) 1989-12-07 1989-12-07 プログラム内容解析装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP1319451A JPH0775003B2 (ja) 1989-12-07 1989-12-07 プログラム内容解析装置

Publications (2)

Publication Number Publication Date
JPH03179537A JPH03179537A (ja) 1991-08-05
JPH0775003B2 true JPH0775003B2 (ja) 1995-08-09

Family

ID=18110349

Family Applications (1)

Application Number Title Priority Date Filing Date
JP1319451A Expired - Fee Related JPH0775003B2 (ja) 1989-12-07 1989-12-07 プログラム内容解析装置

Country Status (1)

Country Link
JP (1) JPH0775003B2 (ja)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62166445A (ja) * 1986-01-20 1987-07-22 Nec Corp デバツグ支援装置
JPS63244239A (ja) * 1987-03-31 1988-10-11 Hitachi Ltd プログラム実行経路検証方法
JPS63317848A (ja) * 1987-06-20 1988-12-26 Fujitsu Ten Ltd プログラム内容解析装置
JPH0820969B2 (ja) * 1987-06-20 1996-03-04 富士通テン株式会社 プログラム内容解析装置
JPH0820973B2 (ja) * 1987-06-20 1996-03-04 富士通テン株式会社 プログラム内容解析装置

Also Published As

Publication number Publication date
JPH03179537A (ja) 1991-08-05

Similar Documents

Publication Publication Date Title
US5210859A (en) Program debugging support method and apparatus
US5557774A (en) Method for making test environmental programs
JPH1063550A (ja) 実行性能解析表示方法およびその方法を実施するプログラムを記録した媒体
US6968544B1 (en) Method for transformation of interface definitions and intermediate format tables thereof
JPH06149589A (ja) 参照対象変数決定処理方法および翻訳処理システム
US5907851A (en) Editing nested documents by appointing a portion for insertion with an alternative substitute
JPH0775003B2 (ja) プログラム内容解析装置
JPH0769856B2 (ja) プログラム内容解析装置
JPH0769855B2 (ja) プログラム内容解析装置
US5761508A (en) Information processing system and method applied to the development of computer programs
JPH0772873B2 (ja) プログラム内容解析装置
JPH07219810A (ja) モジュールテスト方法および装置
JPS6136868A (ja) 情報検索装置
JPH0887417A (ja) コンパイラ装置
JPH09292985A (ja) プログラム再利用部品生成方法
JPH08202741A (ja) 機能設計支援装置及び機能設計支援方法
JPH03177940A (ja) プログラム内容解析装置
EP0578830A1 (en) Information processing apparatus and method therefor
JPH0721765B2 (ja) フローチヤート表示装置
JPH04278633A (ja) 図形式表現関数型プログラムの編集・実行方法
JP2765911B2 (ja) データ駆動型制御方法およびコンパイル装置
JP2719277B2 (ja) プログラム自動解析装置
JPH0695914A (ja) プログラム監視装置
JP2555011B2 (ja) ベクトルデ−タ処理方式
JPH09147132A (ja) Cadシステム

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees