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

プログラム内容解析装置

Info

Publication number
JPH0769856B2
JPH0769856B2 JP1319449A JP31944989A JPH0769856B2 JP H0769856 B2 JPH0769856 B2 JP H0769856B2 JP 1319449 A JP1319449 A JP 1319449A JP 31944989 A JP31944989 A JP 31944989A JP H0769856 B2 JPH0769856 B2 JP H0769856B2
Authority
JP
Japan
Prior art keywords
instruction
data
read
branch
program
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
JP1319449A
Other languages
English (en)
Other versions
JPH03177942A (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 JP1319449A priority Critical patent/JPH0769856B2/ja
Publication of JPH03177942A publication Critical patent/JPH03177942A/ja
Publication of JPH0769856B2 publication Critical patent/JPH0769856B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Description

【発明の詳細な説明】 概 要 アセンブラ言語で記述されたプログラムの基本的動作や
構造をその仕様と比較する場合、従来では膨大な手作業
で行つており、また過誤の発生を防止することができな
い。本発明では、プログラムの基本的な動作と構造と
は、たとえばロード命令やストア命令などによる入力/
出力状態と、分岐命令による分岐状態とで決定されるこ
とに着目している。したがつて各命令毎に分岐命令で規
定される実行経路を識別する経路データと、分岐命令で
規定される分岐先命令および分岐元命令の位置データと
を命令毎に設定する。
ここで、前記経路データとして、ある命令がその前行の
命令と実行内容が連続する命令であるか否かを表す第1
経路データと、ある命令がその次行の命令に連続する内
容を有するか否かを表す第2経路データとを作成する。
したがつて、プログラムの解析内容に対応してプログラ
ムを逆上つて読取る場合には、前記位置データと第1経
路データとを参照して命令が読取られ、順下がり読取り
時には位置データと第2経路データとを参照して順下が
りに命令が読取られる。
これにより、解析内容に対応して逆上つて、または順下
がりにプログラムを読取ることができるとともに、この
ようないずれの方向かでの読取り動作においても、誤つ
た解析経路を選択して無駄な処理を行う事態を防がれ
る。
産業上の利用分野 本発明は、マイクロプロセツサなどを動作させるために
用いられるプログラムの内容を解析する装置に関する。
従来の技術 マイクロプロセツサが動作するにあたつて実際に読取る
機械語に最も近い言語としてアセンブラ言語がプログラ
ムを記述するために用いられている。このアセンブラ言
語は高級言語と異なり、機械語の各命令と1対1対応を
なす言語であるため、このプログラムに基づく各種入出
力装置の動作内容やプログラムの実行内容の概略など
が、アセンブラ言語にては把握しにくく、仕様上の記載
内容と照合するにあたり、人手によつて命令毎に行う必
要がある。またシユミレーシヨンやエミユレーシヨンな
どを行つてプログラムの動作状態を確認する技術が採用
されているが、これらはプログラムの中で要求される各
種入力命令に対応して数値やデータを設定しなければな
らない。
したがつてプログラムの各命令を読取つてプログラム全
体の処理や流れの構造を認識し、プログラムの実行内容
を概略的に記述したり、また入出力装置の動作として記
述するなど、プログラムの実行内容の把握が容易な形式
の出力を得ようとする技術が想定される。この場合、プ
ログラムに基づく入出力装置への最終的な出力は、マイ
クロプロセツサが或データをメモリの所定のアドレスに
書込むストア命令である。したがつてストア命令に表れ
るオペランドの変数の内容が最終的に確定されるたとえ
ばロード命令まで、プログラムを逆上つて命令を読取れ
ば、当該ロード命令でデータが入力されるものとして前
記変数の内容が確定することになる。このようにして前
記ロード命令に用いられたオペランドの変数でプログラ
ムの実行内容を概略的に記述できることなる。
発明が解決しようとする課題 解析の対象プログラムにおいて、コール命令によつてサ
ブルーチンに移るような場合、先入れ後出し方式の記憶
領域、いわゆるスタツクに戻りアドレス(コール命令の
次の命令の格納アドレス)を格納してサブルーチンに対
応するアドレスへ移るのが一般的である。このようなサ
ブルーチンにおいて、スタツクを操作する命令(PUSH命
令、PULL命令)が含まれている場合、サブルーチン内で
PUSH命令とPULL命令とが対応していれば、復帰するため
のリターン命令が実行される際に戻りアドレスが読出せ
るが、サブルーチン内でPUSH命令の方が多い場合には、
リターン命令にてスタツクから戻りアドレスを読出す際
に、誤つた戻りアドレスが読出されて暴走するというこ
とが考えられる。
そこで従来のプログラム解析装置によりこのようなスタ
ツクを操作する命令などの対応関係のチエツクする機能
を付加すれば、プログラムの解析に役立つ。
そこで、このような従来例により、PUSH命令やPULL命令
を含んだ対象プログラムを解析する場合、逆上つてプロ
グラムを読出しても上述のチエツクを実現することはで
きない。
すなわちPULL命令からPUSH命令まで逆上つてプログラム
を読出した場合、暴走の原因となるPUSH命令からPULL命
令を通らないという経路は発見できないため、PUSH命令
とPULL命令との対応関係を把握できないという問題があ
る。
本発明は、このような問題点を解決するものであり、逆
上り方向だけでなく順方向への経路検索を行えるプログ
ラム解析装置を提供することを目的とする。
課題を解決するための手段 本発明は、(a)複数の命令から成るプログラムの各命
令を読取り、その内容を解析する装置において、 (b)前記プログラムを実行順に読出す順方向読出手段
と、 (c)該順方向読出手段で読出した前記プログラムに含
まれている各命令毎に、該命令がプログラム実行時にそ
の直前に配置された命令に連続する実行内容を有する命
令であるか否かを示す第1経路データを発生する第1経
路データ発生手段と、 (d)前記順方向読出手段で読出した前記プログラムに
含まれている各命令毎に、該命令がプログラム実行時に
その直後に配置された命令に連続する実行内容を有する
命令であるか否かを表す第2経路データを発生する第2
経路データ発生手段と、 (e)前記順方向読出手段で読出した命令のうち、分岐
命令に対して該分岐命令により規定される分岐先命令の
位置データ、および分岐先命令に対して該分岐先命令に
対応する分岐命令の位置データを発生する位置データ発
生手段と、 (f)前記第1経路データ発生手段から与えられる第1
経路データと、前記第2経路データ発生手段から与えら
れる第2経路データと、前記位置データ発生手段から与
えられる位置データとを、対応する命令に関連して記憶
する分岐データ記憶手段と、 (g)プログラムを逆上つて各命令を読取る逆上り読取
手段であつて、 逆上り時には各命令の第1経路データと第2経路データ
とのうち、少なくとも第1経路データと、位置データと
を分岐データ記憶手段から読出すとともに、 読出したデータに位置データがあれば一時記憶領域に記
憶する第1一時記憶手段と、 命令を逆上つて読取つた順番を記憶する第1読取順記憶
手段と、 該読出した第1経路データが直前に配置された命令に連
続することを示すデータであれば、その次の読取時には
直前に配置された命令を読取り、また、該読出した第1
経路データが直前に配置された命令に連続しないことを
示すデータであり、かつ該命令に対応する位置データが
存在すれば、該位置データで示される命令を読取り、さ
らに、該読出した第1経路データが直前に配置された命
令に連続しないことを示すデータであり、かつ該命令に
対応する位置データが存在しなければ、前記第1読取順
記憶手段を参照して最後に逆上つた経路に沿って前記第
1一時記憶手段に位置データを記憶した命令まで順下
る、第1読取手段と、 第1一時記憶手段に記憶されている位置データに対応す
る命令を読取つて、以後、第1一時記憶手段と第1読取
手段により命令を読取る第1読取制御手段とを具備す
る、そのような逆上り読取手段とを具備する、そのよう
な逆上り読取手段と、 (h)プログラムの命令の配列順序に沿って各命令を読
取る順下り読取手段であつて、 順下り時には各命令の第1経路データと第2経路データ
とのうち、少なくとも第2経路データと位置データとを
分岐データ記憶手段から読出し、 読出したデータに位置データがあれば一時記憶領域に記
憶する第2一時記憶手段と、 命令を順下りに読取つた順番を記憶する第2読取順記憶
手段と、 該読出した第2経路データが直後に配置された命令に連
続することを示すデータであれば、その次の読取時には
直後に配置された命令を読取り、また、該読出した第2
経路データが直後に配置された命令に連続しないことを
示すデータであり、かつ該命令に対応する位置データが
存在すれば、該位置データで示される命令を読取り、さ
らに、該読出した第2経路データが直後に配置された命
令に連続しないことを示すデータであり、かつ該命令に
対応する位置データが存在しなければ、前記第2読取順
記憶手段を参照して最後に順下つた経路に沿つて前記第
1一時記憶手段に位置データを記憶した命令まで逆上
る、第2読取手段と、 第2一時記憶手段に記憶されている位置データに対応す
る命令を読取つて、以後第2一時記憶手段と第2読取手
段により命令を読取る第2読取制御手段とを具備する、
そのような順下り読取手段とを具備する、そのような順
下り読取手段とを含むことを特徴とするプログラム内容
解析装置である。
作 用 本発明に従えば、順方向読取手段によつて実行順に読取
られたプログラムに基づき、第1、第2経路データ発生
手段は、直前に配置された命令に連続する実行内容を有
する命令であるか否かを表す第1経路データと、前記あ
る命令がその直後に配置された命令に連続する実行内容
を有する命令であるか否かを表す第2経路データとをそ
れぞれ前記プログラムに含まれている各命令毎に発生す
る。
また、順方向読出手段で読出したプログラムに基づき、
前記順方向読出手段で読出した命令のうち、分岐命令に
対して該分岐命令により規定される分岐先命令の位置デ
ータ、および/または分岐先命令に対して該分岐先命令
に対応する分岐命令の位置データを発生する。
これらのデータは分岐データ記憶手段に、プログラムの
各命令に対応して記憶される。逆上り読取手段によりプ
ログラムを逆上つて各命令を読取る場合、各命令に関す
る第1経路データと第2経路データとのうち少なくとも
第1経路データと位置データとを分岐データ記憶手段か
ら読出し、連続する同一経路に対応して、かつ位置デー
タで規定される解析経路に従つて、プログラムを逆上つ
て読取る。
また順下り読取手段により、各命令の第1経路データと
第2経路データとのうち少なくとも第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とたどることで、 [RORT2+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) [RORT1]は、アドレス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】(a)複数の命令から成るプログラムの各
    命令を読取り、その内容を解析する装置において、 (b)前記プログラムを実行順に読出す順方向読出手段
    と、 (c)該順方向読出手段で読出した前記プログラムに含
    まれている各命令毎に、該命令がプログラム実行時にそ
    の直前に配置された命令に連続する実行内容を有する命
    令であるか否かを示す第1経路データを発生する第1経
    路データ発生手段と、 (d)前記順方向読出手段で読出した前記プログラムに
    含まれている各命令毎に、該命令がプログラム実行時に
    その直後に配置された命令に連続する実行内容を有する
    命令であるか否かを表す第2経路データを発生する第2
    経路データ発生手段と、 (e)前記順方向読出手段で読出した命令のうち、分岐
    命令に対して該分岐命令により規定される分岐先命令の
    位置データ、および分岐先命令に対して該分岐先命令に
    対応する分岐命令の位置データを発生する位置データ発
    生手段と、 (f)前記第1経路データ発生手段から与えられる第1
    経路データと、前記第2経路データ発生手段から与えら
    れる第2経路データと、前記位置データ発生手段から与
    えられる位置データとを、対応する命令に関連して記憶
    する分岐データ記憶手段と、 (g)プログラムを逆上つて各命令を読取る逆上り読取
    手段であつて、 逆上り時には各命令の第1経路データと第2経路データ
    とのうち、少なくとも第1経路データと、位置データと
    を分岐データ記憶手段から読出すとともに、 読出したデータに位置データがあれば一時記憶領域に記
    憶する第1一時記憶手段と、 命令を逆上つて読取つた順番を記憶する第1読取順記憶
    手段と、 該読出した第1経路データが直前に配置された命令に連
    続することを示すデータであれば、その次の読取時には
    直前に配置された命令を読取り、また、該読出した第1
    経路データが直前に配置された命令に連続しないことを
    示すデータであり、かつ該命令に対応する位置データが
    存在すれば、該位置データで示される命令を読取り、さ
    らに、該読出した第1経路データが直前に配置された命
    令に連続しないことを示すデータであり、かつ該命令に
    対応する位置データが存在しなければ、前記第1読取順
    記憶手段を参照して最後に逆上つた経路に沿って前記第
    1一時記憶手段に位置データを記憶した命令まで順下
    る、第1読取手段と、 第1一時記憶手段に記憶されている位置データに対応す
    る命令を読取つて、以後、第1一時記憶手段と第1読取
    手段により命令を読取る第1読取制御手段とを具備す
    る、そのような逆上り読取手段とを具備する、そのよう
    な逆上り読取手段と、 (h)プログラムの命令の配列順序に沿って各命令を読
    取る順下り読取手段であつて、 順下り時には各命令の第1経路データと第2経路データ
    とのうち、少なくとも第2経路データと位置データとを
    分岐データ記憶手段から読出し、 読出したデータに位置データがあれば一時記憶領域に記
    憶する第2一時記憶手段と、 命令を順下りに読取つた順番を記憶する第2読取順記憶
    手段と、 該読出した第2経路データが直後に配置された命令に連
    続することを示すデータであれば、その次の読取時には
    直後に配置された命令を読取り、また、該読出した第2
    経路データが直後に配置された命令に連続しないことを
    示すデータであり、かつ該命令に対応する位置データが
    存在すれば、該位置データで示される命令を読取り、さ
    らに、該読出した第2経路データが直後に配置された命
    令に連続しないことを示すデータであり、かつ該命令に
    対応する位置データが存在しなければ、前記第2読取順
    記憶手段を参照して最後に順下つた経路に沿つて前記第
    1一時記憶手段に位置データを記憶した命令まで逆上
    る、第2読取手段と、 第2一時記憶手段に記憶されている位置データに対応す
    る命令を読取つて、以後第2一時記憶手段と第2読取手
    段により命令を読取る第2読取制御手段とを具備する、
    そのような順下り読取手段とを具備する、そのような順
    下り読取手段とを含むことを特徴とするプログラム内容
    解析装置。
JP1319449A 1989-12-07 1989-12-07 プログラム内容解析装置 Expired - Fee Related JPH0769856B2 (ja)

Priority Applications (1)

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

Applications Claiming Priority (1)

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

Publications (2)

Publication Number Publication Date
JPH03177942A JPH03177942A (ja) 1991-08-01
JPH0769856B2 true JPH0769856B2 (ja) 1995-07-31

Family

ID=18110327

Family Applications (1)

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

Country Status (1)

Country Link
JP (1) JPH0769856B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0709201B1 (en) 1994-10-31 2004-03-10 Canon Kabushiki Kaisha Ink jet head production method

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5739457A (en) * 1980-08-18 1982-03-04 Mitsubishi Electric Corp Program device
JPS6020251A (ja) * 1983-07-15 1985-02-01 Fujitsu Ltd ジヤンプ命令トレ−ス方式
JPS6177943A (ja) * 1984-09-26 1986-04-21 Hitachi Electronics Eng Co Ltd プログラム通過アドレストレ−ス装置
JPS6324424A (ja) * 1986-07-17 1988-02-01 Mitsubishi Electric Corp プログラムデバツグ方式
JPS6391750A (ja) * 1986-10-06 1988-04-22 Matsushita Electric Ind Co Ltd ブランチアドレストレ−ス装置
JPH0820973B2 (ja) * 1987-06-20 1996-03-04 富士通テン株式会社 プログラム内容解析装置
JPS63317848A (ja) * 1987-06-20 1988-12-26 Fujitsu Ten Ltd プログラム内容解析装置
JPH0820969B2 (ja) * 1987-06-20 1996-03-04 富士通テン株式会社 プログラム内容解析装置

Also Published As

Publication number Publication date
JPH03177942A (ja) 1991-08-01

Similar Documents

Publication Publication Date Title
US5210859A (en) Program debugging support method and apparatus
CN105138335B (zh) 一种基于控制流图的函数调用路径提取方法及装置
JPH02109127A (ja) 仕様処理方法
JPH07200358A (ja) ソフトウェア・アプリケーションの自動テスト方法
US6968544B1 (en) Method for transformation of interface definitions and intermediate format tables thereof
US5721924A (en) Method and device for obtaining a value of a referred to variable defined in a source program having a specific variable name
EP0661650A2 (en) Document editing apparatus
JPH0769856B2 (ja) プログラム内容解析装置
JPH0769855B2 (ja) プログラム内容解析装置
JPH0772873B2 (ja) プログラム内容解析装置
JPH0775003B2 (ja) プログラム内容解析装置
US6343378B1 (en) Method of making link directive file and tool for making link directive file
JPS6136868A (ja) 情報検索装置
JPH07141192A (ja) 翻訳処理方法
JPH0820969B2 (ja) プログラム内容解析装置
JPH0820973B2 (ja) プログラム内容解析装置
JPS63317848A (ja) プログラム内容解析装置
JPH03177940A (ja) プログラム内容解析装置
JP2765911B2 (ja) データ駆動型制御方法およびコンパイル装置
JPH06214802A (ja) レジスタ割り付け方式
JPH0695914A (ja) プログラム監視装置
JPH08202741A (ja) 機能設計支援装置及び機能設計支援方法
JP2555011B2 (ja) ベクトルデ−タ処理方式
JPH06259209A (ja) プロセス実行状況表示装置
JPH0721765B2 (ja) フローチヤート表示装置

Legal Events

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