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

プログラム内容解析装置

Info

Publication number
JPH03177941A
JPH03177941A JP1319448A JP31944889A JPH03177941A JP H03177941 A JPH03177941 A JP H03177941A JP 1319448 A JP1319448 A JP 1319448A JP 31944889 A JP31944889 A JP 31944889A JP H03177941 A JPH03177941 A JP H03177941A
Authority
JP
Japan
Prior art keywords
instruction
branch
data
program
line number
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.)
Granted
Application number
JP1319448A
Other languages
English (en)
Other versions
JPH0769855B2 (ja
Inventor
Hisanori Yasuki
安木 寿教
Hirotoshi Tonou
宏敏 斗納
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 JP1319448A priority Critical patent/JPH0769855B2/ja
Publication of JPH03177941A publication Critical patent/JPH03177941A/ja
Publication of JPH0769855B2 publication Critical patent/JPH0769855B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

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

Description

【発明の詳細な説明】 概要 アセンブラ言語で記述されたプログラムの処理の流れを
、その仕様と比較して検査する場合、従来では人手によ
って膨大な労力により行っており、また過誤の発生を防
止することが困難であっfS。
これに対し、戒解析プログラムの基本的動作と構造とは
ストア命令およびロード命令による入力/出力状態と、
分岐命令による実行順序の分岐状態とによって決定づけ
られることに着目した。したがって被解析プログラムの
各命令毎に分岐命令に対応する複数の実行経路を識別す
る識別データを設定する。
プログラム内容の解析は、分岐命令またはストア命令な
どからプログラムを逆上って命令を読取トL、分岐条件
および実行内容を論理式の結合した形式にて得るように
する。このとき分岐命令にてスタックの内容が交動する
ので、分岐命令毎に5二な分岐命令に対応する分岐先命
令列に対応付けて、前記スタックの最新のアドレスデー
タを記憶する。
これにより前記逆上って解析を行うにあたって、別途記
憶されているスタックのデータを参照することにより、
分岐元の命令のアドレスデータや実行経路の識別が格段
に容易となる。
産業上の利用分野 本発明は、マイクロプロセッサなどを動作させるために
用いられるプログラムの内容を解析する装置に関する。
bt来の技術 マイクロプロセッサが動作するにあたって実際に読取る
機械語に最も近い言語としてアセンブラ言語がプログラ
ムを記述するために用いられている。このアセンブラ言
語は高級言語と異なり、機械語の各命令と1対1対応を
なす言語であるため、このプログラムに基づく各種入出
力装置の動作内容やプログラムの実行内容+7)II!
略などが、アセンブラ言語にては把握しに<<、仕様上
の記載内容と照りするにあたり、人手によって命令毎に
行う必要がある。またシュミレーションやエミュレーシ
ョンなどを行ってプロフラノ、の動作状態を確認する技
術が採用されているが、これらはプロフラノ、の中で要
求される各種入力命令に対応して数値やデータを設定し
なければならない。
したがってプログラムの各命令を読取ってプログラム全
体の処理や流れの構造を認識し、プログラムの実行内容
を概略的に記述したり、また入出力装置の動作として記
述するなど、プログラムの実行内容の把握が容易な形式
の出力を得ようとする技術が想定される。この場合、プ
ログラムに基づく入出力装置への最終的な出力は、マイ
クロフロセッサが或データをメモリの所定のアドレスに
g込むストア命令である。したがってストア命令に表れ
るオペランドの変数の内容が最終的に確定されるたとえ
ばロード命令まで、プログラムを逆上って命令を読取れ
ば、当該ロード命令でデータか入力されるものとして前
記変数の内容が確定することになる。このようにして前
記ロード命令に用いられたオペランドの変数でプログラ
ムの実行1・1容を概略的に記述てきることなる。
発明が解決しようとする課題 こ力ような従来例において、解析する対象のプロフラノ
、がたとえば第19図示の構造である場合について説明
する。このプログラムは、ステップ、11〜aloの命
令から成り、ステップa2.a4にサブルーチンプログ
ラムを呼出すコール命令I′C、A L L  Aコお
よびrCALL  BJが配置されている。こ二でステ
ップa5からプログラムを逆上る場合、逆上り経路とし
ては、 ;h  ”  −:a  8 → a 7 → a 6
 → ・・および n5→a8→a7→alo→a9→・・の2種類惣定さ
れるが、実際のプログラムの実行j:□を考慮すると後
者は実際には実行され得ない経路である。
すなわちプログラムの内容を解析するにあたって、プロ
グラムを命令の実行内容に基づいて逆上って順次的に読
取る技術のみでは、実際のプログラムの実行経路がらは
あり得ない経路も解析な対象としてしまい、解析時間が
長くなってしまうとともに、実際のプログラム実行内容
と異なる解析結果を導出することになり極めて不具合で
ある。
本発明の目的は、上述の技術的課題を解消し、プロゲラ
l、を逆上って命令を読取り、内容を解析するにあたっ
て実際の実行経路に対応した解析経路を選択して、実行
経路としては有り得ない解析経路を選択する不具合を解
消したプログラム内容解析装置を提供することである。
課題を解決するための手段 本発明は、複数の命令がら成るプログラムの各命令を配
列順とは逆に逆上って読取り、その内容を解析する装置
において、 各命令毎に、分岐実行順序を配列順と異ならせる分岐命
令に対応するプログラムの複数の実行経路を識別する経
路データと、分岐命令により規定される分岐先命令また
は分岐命令のいずれかである命令毎に、対応する分岐命
令または対応する分岐先命令のいずれかの位置データと
を含む分岐データを作成する分岐データ作成手段と、経
路データを記憶する経路データ記憶手段と、位置データ
を記憶する位置データ記憶手段と、分岐命令時の戻りア
ドレスデータが先入れ後出し方式にて格納されるスタッ
クの最新のアドレスデータを、該最新のアドレスデータ
が格納される命令以後、該最新のアドレスデータを読出
す命令に亘る命令毎に記憶するスタックデータ記憶手段
と、 10グラムを逆上って各命令を読取る逆上り読取手段で
あって、逆上り時には各命令の経路データと位置データ
とスタックデータとを、経路データ記憶手段と位置デー
タ記憶手段とスタックデータ記憶手段とから続出し、連
続する同一経路データに対応し、かつ位置データで規定
される分岐経路に従ってプログラムを逆上って読取る、
そのような逆上り読取手段とを含むことを特徴とするプ
ログラム内容解析装置である。
作用 本発明に従えば、被解析プログラムの各命令毎に分岐命
令に対応する複数の実行経路を識別する経路データを分
岐データ作成手段にて作成する。
プログラム内容の解析は、分岐命令またはストア命令な
どからプログラムを逆上り読取手段で逆上って読取り、
分岐条件および実行内容を論理式の結きした形式にて得
るようにする。このとき分岐命令にてスタックの内容が
変動するので1分岐データ作成手段は、分岐命令毎に当
該分岐命令に対応する分岐先命令に対応付けて、前記ス
タックの最新力アドレスデータを記憶する。これにより
逆上り読取手段が前記逆上って解析を行うにあたってス
タックデータ記憶手段と別途記憶されているスタックの
データを参照することにより、分岐元の命令のアドレス
データや実行経路の識別が格段に容易となる。これによ
り被解析プログラムの解析処理速度を向上することがで
き、過誤の発生を防止することができる。
実施例 第1図は本発明の一実施例のプログラム内容解析装置(
以下、解析装置と略す)lの構成例を示すブロック図で
ある。解析装置1には外部記憶装置2が接続され、解析
対象となる高級言語やアセンブラ言語で記述されたプロ
グラムが保存される。
解析装置1は外部記憶装置2からのプログラムを機械語
に変化するアセンブラ3を備え、アセンブラ3からのア
センブルリストがアセンブルリストファイル記憶部4に
記憶される。以下「記憶部」の名称は解析装置1に備え
られるたとえばRA M(ランダムアクセスメモリ〉や
固定ディスク装置lどの内部記憶装置の所定の領域を示
す。
アセンブルリストファイル記憶手段4からの解析χ・1
象となるアセンブルプログラムは、解析準備処理手段5
.に与えられ、後述するプログラム解析に先立ち解析対
象となるプログラムのデータが内容別に分類される。解
析2¥備処理手段5には複数の記憶部が接続される。リ
ストファイル記憶部6には被解析プログラムの機械語と
アセンブラ言語の二一モニツクから成る命令列が記憶さ
れる。RAMファイル記憶部7には被解析プログラムで
用いられる各種変数が記憶される。マツプデータ記憶部
8には被解析プロゲラl\で用いt)れるマツプ形式な
どでの固定データが記憶される。またその他に記憶部9
が接続され、被解析プログラムで用いられるたとえば割
込みベクトルのベクトルアドレスや、前記リストファイ
ル記憶部6に記憶されている二一モニツクのプログラム
に関するラベルなどが記憶される。また解析装置1には
命令データファイル記憶部10が設けられ、被解析プロ
グラムで用いられる命令が予め記憶される。
前記リストファイル記憶部6からの二−モニツク形式で
のプログラムは分岐データ作成手段としての流れ構造解
析手段11に与えられ、被解析ブログラムにおける処理
の流れの構造、すなわち分岐の有無、分岐命令が想定さ
れる場合の分岐先命令の位置の変動およびスタックのネ
スティングの程度などを解析するようにしている。ここ
ではこれ以降のすべての解析処理の基礎データとなる流
れ制御ファイルを作成し、流れ制御ファイル記憶部12
に記憶する。前記リストファイル記憶部6、命令ファイ
ル記憶部20および流れ制御ファイル記憶部12からの
各データに基づいて分岐条件解析部13.ストア内容解
析部14、完全分岐条件解析部15は後述するそれぞれ
の解析処理を行い、得られた各データを経路データ記憶
手段および位置データ記憶手段をきむ分岐条件ファイル
記憶部16、実行内容ファイル記憶部17.および完全
分岐条件ファイル記憶部18に記憶する。
流れ制御ファイル、分岐条件ファイルおよび実行内容フ
ァイルからフローチャート作成部19は、被解析プログ
ラムのフローチャートを作成して出力する。また実行内
容ファイルおよび完全分岐条f↑ファイルから実行内容
解析結果出力部20は被解析プログラムの実行内容をた
とえば印字出力する。
第2図は解析準備処理手段5の動作を説明するフローチ
ャートである。ステップa1において解析装置1は外部
記憶装置2からソースプログラムを読込み、アセンブラ
3にてアセンブル処理を行う、アセンブルリストファイ
ル4に記憶されたアセンブルプログラムに対して、解析
準備処理手段5はステップa2にて各命令毎に一連の番
号〈以下、行番号と称する〉を1を与する。このとき各
命令は後述するようにたとえばストア命令、入出力命令
、分岐命令あるいは演算命令などのようにそのN類によ
って分類される。これは前記#令データファイル記憶部
10に記憶されている命令を参照して行われる。ステッ
プa3ではこのような命令の分類に基づいて、前述した
各種データファイルの作成が行われる。
次に解析装置1は、流れ構造解析手段11によりリスト
ファイル記憶部6に記憶されているfl!w語と二−モ
ニツクから成るプログラムファイルに関して流れ構造解
析処理を行う。この解析処理は被解析プログラムの流れ
構造(分岐の有無、分岐先の特定、スタックのネスティ
ングの程度など)を解析する処理であり、以後のすべて
の解析プロクラドの基礎データとなる前述した各種ファ
イルを作成する。とりわけ分岐命令の存在に基づく分岐
先命令の行番号などの抽出の他、「逆上り(さかJ)ぼ
り)」概念とr属性」概念とを表すデータを1i′:成
する。
(1)逆上り概念 プログラムの実行内容を解析するためにプログラムをそ
の実行順に従って命令を読取って解析し上うヒする場合
、f!r種フラフラグのコンデイションコードの変fヒ
、複数の命令の間の相関関係など、5該li?r1↑に
関連して想定されるすべてのデータを<(itしておく
必要がある。このようなデータの中には命令の種類によ
っては不必要なデータがある場合で、らっても、以後の
解析処理で、どのデータが必要になるか判断できず、こ
のためすべてのデータを収集する必要がある。
本発明に従う「逆上り」概念はこのような課題を解消す
るための方策である。
本発明は機械語やアセンブルプログラムで記述されたプ
ログラムを、分岐命令およびストア命令の分岐条件やス
トア内容を合成することにより、把握容易な形式に論理
式により記述しようとするものである。このため前記分
岐命令またはストア命令を始点とし、当該分岐条件また
はストア命令の内容が確定する個所までプログラムを逆
上りつつ、必要な情報のみを収集するものである。
ここでプログラム例として下記第1表の10グラムに則
して説明する。
(以下余白) 第 1 表 上記プログラム例で、実行順序は行番号1−12−3−
4→5→6または行番号1−2→3→4→5−7である
。分岐命令はrBCC,であり、その条件は行番号4の
(A−#8)が0以上か負であるかで決定される。その
ためにはアキュムレータAの値が確定する必要がある。
そのためには行番号3にてアキュムレータA、Bの双方
の値が確定する必要があり、行番号2.1を読取って初
めてその値が確定する。
流れ構造解析手段11では上記逆上り処理に必要な情報
、すなわち或命令とその前行とはプログラムの実行順に
従った連続した命令あるか否かの判断のためのデータや
、これらの命令が不連続の場合、どの行番号の命令へ連
続しているかに関するデータなどの後述する属性データ
を作成している。
(2)属性概念 プログラムにはメインルーチンと、メインルーチンの所
定の個所から処理が分岐されるサブルーチンとを含んで
構成される。同一のサブルーチンでも複数箇所から呼出
される場合があり、メインルーチンに処理を戻すリター
ン命令RETによる分岐先の位置は、メインルーチンの
呼出し命令に対応して変化する。したがって1つのサブ
ルーチンによっても複数の実行経路が設定されていると
考えられ、処理経路を区分する情報として属性概念を設
定する。以下、第2表で示されるプログラム例に沿って
説明する。
(以下余白) 第 表 上記プログラム例のフローチャートは第3図に示される
このプログラム例の実行順序は行番号■→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→■→・・・があるが、その他に行番号7→11→1
0→9−3−2−・・・などの逆上り経路が存在してい
ることになる。このような後者の逆上り経路は実行順序
からはあり得ない経路であり、前記属性概念を用いてこ
のような不所望な経路の選択が防止される。
第2表のプログラム例において、分岐先部、分岐元部、
流れフラグ欄および属性欄の内容が以下のようにして決
定される。
(a>属 性 行番号1〜7は行番号3,6のCALL命令によって処
理が分岐し、かつサブルーチンプログラムを含んでいな
いので、すべて同一の属性記号Mが与えられる1行番号
9〜11は行番号3のCALL命令により処理が移され
るサブルーチンプログラムであり、属性記号Aが与えら
れる。また行番号8〜11は行番号6のCA L L 
tg令により処理が移されるサブルーチンプログラムで
あり、前記属性記号Aと異なる属性記号Bがそれぞれ与
えられる。
(b )分岐先部 上記プログラムの分岐命令は行番号3.6711に配置
されており、これ乙の処理が移る先は各命令の内容に対
応してそれぞれ行番号9.8゜■であり、分岐命令RE
Tでは対応するCALL命令の直後の行番号4または行
番号7である。分岐先部にはこのような分岐先の行番号
と当該行番号の命令が有する属性とが組にな−)たデー
タが設定される。
(c)分岐元間 前記各分岐命令により処理を移される分岐先の命令から
見て、処理が当該分岐先命令l\移る元となる分岐元命
令が対応付け?、れる。したがって分岐元間には、各命
令晦に前記分岐元命令が対応1・1けられる場合にはそ
の分岐元命令の行番号と当該分岐命令の所属する属性記
号とが組となったデータが設定される。
(d)流れフラグ欄 流れフラグ「l」は当該命令が前行の命令から連続した
命令であることを示す。流れフラグ「0」は当該命令が
前行の命令以外の他の命令から処理が分岐してくる分岐
先命令であることを示す。すなわち行番号1〜3は一連
の命令であり、行番号4の命令は行番号3のCALL命
令によりサブルーチンプログラムAが実行されて行番号
11のRET命令により処理が分岐してきた命令である
このため流れフラグ「O」が付される。同様にして行番
号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に
よりスタックに格納されているデータがプログラムカラ
シタに転送され、当該アドレスからプログラムが実行さ
れる。したがってスタックの記憶内容を変更する命令が
8−まれでいれば、サブルーチンプログラムからの復帰
先を変更することができる。
このようなプログラム例を下記第3表に示す。
第  3  表 第3表のプログラム例は第2表のプログラム例の行番号
4〜8が変更されている。第3表のプログラム例で分岐
先部、分岐元間および流れフラグ欄のデータの決定方法
は第2表のプログラム例の場合と同様である。以下、属
性の決定方法について説明する。
行番号1〜3は一連の命令であり、属性データMを与え
る0行番号3のCALL命令により処理は行番号9に分
岐するので、行番号9〜11には他の属性記号Aを与え
る0行番号11のRET命令により処理は行番号4に復
帰する。この命令には属性記号Mを与える。
行番号5のPSH命令により、前述したスタックの最新
のアドレスデータがXレジスタの内容に書換えられる。
この時点で属性データをBに変更し、以下行番号11ま
で同一の属性データBを与える。このようにして、前述
したスタックに格納されているデータを変更する命令仝
含むプログラムに関する属性が決定される。
上記第2表および第3表のプログラム例に関する流れ制
御データの属性データは、スタックの内容を変更する命
令を含む分岐命令に関してプログラムの実行経路毎に、
前述したように異なる記号を与えるようにしている。こ
のような方法の場合、被解析プログラムにおける属性の
数が増大すると、後述するようにプログラムを逆上って
解析を行う場合、命令毎にすべての属性間の属性データ
を検索して同一の属性に沿って逆上るような処理を行う
ので、前記属性データの数を減小できればより高速な処
理が実現できる。
下記第4表はプログラム内容は第3表のプログラム内容
と同一であるが、前記第2表および第3表とは異なる流
れ制御データを、分岐欄1,2゜・および属性Jull
、2.・・・として設定している。
以下、これらの決定方法について説明する。
(以下余白) (e)属性If (i=1.2)・・・属性間の行番号
データNOは分岐命令毎に設定され、分岐先命令の行番
号が記述される。属性データtoは当該分岐命令により
、どの属性間に処理が分岐したかを表す。また行上りフ
ラグ欄においてフラグ=「0」は対応する命令が分岐先
命令であり、直前の行の命令とは処理が連続しない命令
であることを示し、フラグ−’j」 (j=12、・・
・)は属性間の番号を示す。行番号1は行番号11を分
岐命令とする分岐先命令の場合があり、したがってフラ
グ=「0」が設定される。また順下りフラグ欄において
フラグ=「O」は、対応する命令が直後の命令と処理が
連続しない命令であり、分岐命令であることを示す。
行番号2ではまず設定された属性間1の番号がフラグ=
「1」として設定される。行番号3は分岐命令であり、
分岐先の行番号データNO= r9゜が設定される。属
性データtoについてto−’1」が設定される。この
後、処理は行番号9へ分岐し、したがって逆上りフラグ
=「O」が設定される。行番号10には逆上りフラグ−
「1」が設定される。行番号「11」は分岐元命令であ
り、行番号データN0−r4Jが設定される。この行番
号4の命令は現時点では属性間1の範囲にあり、したが
って属性データto= r 1 」が設定される。
この後、処理は行番号4へ移る。このため逆上りフラグ
および111n下りフラグはr□、、rl」となる。こ
れ以降、行番号5〜10には逆上りフラグ−「0」また
はrl、のいずれかが設定される。
この後、処理は行番号11に到達する。分岐先は行番号
5のR3H命令により行番号lに変更されており、した
がって属性l!1!2が増設され、逆上りフラグ−「2
」が設定される。また行番号データN0−r 1 、と
属性データto=rlJが設定される。
(f)分岐元間i (i=1.2.−1この分岐元間の
データは分岐先命令とについて設定され、分岐先の行番
号データNoと、当該分岐命令の直前の命令が属する属
性棚番号frと、分岐先命令の属する属性棚番号toと
がそれぞれ設定される。
以下、分岐元間のデータと属性間のデータとを用いて第
4表のプログラム例で逆上り解析可能であることを説明
する。逆上りフラグ−「l」について逆上ると、行番号
9で逆上りフラグ=「0」となるので分岐元間を参照し
、行番号3の属性間1から分岐していることが理解され
る。さらに逆上り、行番号1ですべての情報が確定する
。したがって逆上りフラグ=「1」に関する経路は行番
号l○→9−3→2−1となり、その処理内容は、[P
ORT1+O]  +1−=[PORT1+Oコ   
    ・(1〉となることが理解される。
次に逆上りフラグ=「2」について逆上ると、まず属性
B2が参照されるが、行番号9にて逆上りフラグ−「1
」に変更されるので、行番号8については属性間1が参
照される。これ以降、前述と同様に逆上って読取り、行
番号6にてすべての情報が確定する。これによれば処理
内容は。
[PORT2+O]+1+1−[PORT2+O]  
−(2)となることが理解される。
第4図は流れ構造解析手段11の動作を説明するフロー
チャートである。流れ構造解析手段11の動fトの概略
は上記第2表〜第4表を参照して説明したが、以下にそ
の動作を詳述する。第4図ステップclでは解析を開始
する行番号jnを所定の値に設定し、また各種データを
所定の値に初期化する。ステップc2では処理が最終行
まで到達1−たか否かを判断する。到達していなければ
処理はステップc3に移り、現在解析の対象となってい
る命令の行番号1nに関して設定される属性欄グ〕個数
を表す配列CZ[i’n]が0であるか否がを判断する
。個数配列C2がOであれば、初めて解析する命令であ
ることを意味する。
ステップC3の判断が否定であれば処理はステップC4
に仔り、属性間の個数を1つ増加する。
ステップC5ては第4表を参照して説明した属性データ
を設定する。ステップc6では行番号In、y+ iB
令か分岐先行であるか否かを判断する6分岐先行て′あ
ればステップc7で第4表行番号4の命令にわ;する分
岐元間1などの分岐元間を設定し、ステップC8に移る
。ステップc6の判断が否定であればステップc9に移
り、前記逆上りフラグや順下りフラグを設定する。
以下、上記逆上りフラグと順下りフラグとについて説明
する。第5図は流れ制御ファイル記憶部12の構造を説
明する図である。流れ制御ファイル記憶部12は、分岐
元ファイル部21と属性ファイル部22とから構成され
る。第6図は分岐元ファイル部21の構造を説明する図
である。分岐元ファイル部21は行番号毎に設けられ、
当該行番号を分岐先とする分岐元命令の個数を記憶する
分岐元個数記憶部23と、第4表を参照して説明した分
岐元間に相当する分岐元部記憶部24がたとえば80領
域設定される。分岐入間記憶部24は行番号記憶部25
、分岐元属性記憶部26、分岐先属性記憶部27を含ん
でfll戒される。
第7図は属性ファイル部22の構造を説明する図である
。属性ファイル部22は各行番号毎に設けられ、当該行
番号に設定された属性間の個数を記憶する属性個数記憶
部28、当該命令行の属性データが確定すれば「1」、
不定の場合は「0□で表される不定フラグを記憶する不
定フラグ記憶部29、第4表の属性間の属性データto
に相当する属性値を記憶する属性値記憶部30、第11
1に示の分岐条件ファイル記憶部i6において当該行番
号の命令の分岐条件を記憶しているアドレスを記憶する
分岐条件記憶部31、第4表の属性間における行番号デ
ータNoと属性データt6とをそれぞれ記憶する分岐先
行番号記憶部32、分岐先属性間番号33、第4表の属
性間のフラグに相当する逆上りフラグを記憶する逆上り
フラグ記憶部34、順下りフラグを記憶する順下りフラ
グ憶部35を含んで構成される。
前記順下りフラグは第4表のたとえば属性[1の順下り
フラグ欄に示すように設定される。すなわち、成行番号
の命令が直後の行番号の命令と連続した命令であれば「
1」、不連続な命令であればr□、を与える。第4表の
行番号2は行番号3と連続する命令であり、前記データ
「1」が与えられる。ところが行番号3は行番号4の命
令とは連続せず、したがってデータr□、が与えられる
第4図示ステップc7.c9では、上述したような内容
を有する逆上り属性、順下り属性および分岐元部が設定
される。
まずステップc8で当該命令が分岐命令であるか否かが
判断される。分岐命令であればステップcloに移り、
当該分岐命令が第4表行番号l]RET命令のような割
込み処理を終了させる命令であるか否かを判断する。こ
の判断が否定であればステップallに移り、分岐先行
番号を求める。
これは第1図のリストファイル記憶部6を参照して求め
られる。ステップc12では、分岐の数を表す分岐数デ
ータbiを+1インクリメントし、ステップc13では
当該分岐数データ1)iと当該行番号を配列m、 m(bi)=/ n             ・(3
)で対応付ける。
ステップc14では、後述するようにスタックの変化が
チエツクされる。ステップc ]、 5では属性データ
が計算されステップc16では次の行番号を変数Inに
設定し、処理をステップc2に戻す、前記ステップc8
の判断が否定であれば処理はステップc14に移る。
前記ステップC3の判断が肯定であれば当該命令は初め
て解析する命令行ではないことになり、ステップc’1
7で同一属性を有する属性間が存在するか否かが判断さ
れる。この判断が否定であれ(まステップc4に移り、
属性間が増加される。ステップc17の判断が肯定であ
ればステップc18に科り、当該分岐命令が分岐先行で
あるが否がが判断される。分岐先行であればステップc
19で、第4表の分岐元部が設定され、ステップC20
に移る。ステップc18の判断が否定であればステップ
c 21において前記ステップC9で説明した逆上りフ
ラグおよび順下りフラグが設定される。ここでステップ
C19,C21の後、ステップc17の判断が肯定とな
っているので同−属性間がすでに存在していることにな
り、この属性に関しては解析は終了してわり、再び解析
を行うことlく解析処理が終了され、ステップc20に
処理を移している。
ステップc20では前記分岐数データbiがOであるか
否かが判断される。肯定であれば処理は終了する。否定
であれば解析処理が終了していないことになり、ステッ
プc20に前記ステップC13で記憶した分岐命令の行
番号Inを前記配列m(bi)にて読出し、またステッ
プC23にて分岐数データbiを一1デクリメントし、
処理はステップc2に戻る。すなわちステップc22で
読出された行番号Inがら再び解析処理を行う。
第8図は、分岐条件解析手段13の動作を説明するフロ
ーチャートである。上記第4表に示したプログラム内容
に即して分岐条件解析処理について説明する。第8(2
1ステツプd1では行番号sI!nをOに設定し、ステ
ップd2では行番号81「1を+1インクリメントする
。ステップ゛d3では当該行番号1nがプログラムの最
終行番号、すなわち第4表のプログラム例では行番号1
1を超えたか否かを判断する。超えていれば処理は終了
し、超えていなければステップd4に移る。ステップd
4では行番号1nの命令が分岐命令であるか否かを判断
する。上記プログラム例では、行番号1は分岐命令では
なく処理はステップb2へ戻り、次の行番号の命令へ進
む。行番号3で分岐命令であることが判断され、ステッ
プd5へ進む。
ステップd5では、属性間番号を表す変数kをOに設定
し、ステップd6では変数kを+1インクリメントする
。ステップd7では、当該行番号enの命令に関する属
性間の個数を表す配列CZ(1n)に関して、 k≦CZ (1n)             −(4
)の判断を行う。この判断が否定であれば、第4図に示
した流れ構造解析処理の際の命令毎の属性間の個数を超
過したことになり、すなわち当該分岐命令におけるすべ
ての属性について分岐条件解析が終了したことになり、
処理はステップd2へ移り、次の行番号の命令へ進む。
ステップd7の判断が肯定であればステップd8へ移り
、当該行番号1nの前記命令における属性間番号kに沿
って後述する逆上り処理を開始して逆上り経路を求める
。前述したように分岐命令の分岐条件を確定するに必要
な命令には、後述する関与フラグを設定する。ステップ
d9では、後述するように逆上って読取った命令毎の実
行内容を分岐条件として構成する。ステップdloでは
、このようにして得られた分岐条件を第1図示の分岐条
件ファイル記憶部16に記憶する。
第9図は、第8図のステップd8の逆上り処理の詳細を
説明するフローチャートである。第1図ステップe1で
は、後述する制御変数SWがOに初期化される。ステッ
プe2では、上記制御変数SWがOであるか否かを判断
し、肯定であればステップe3に移り、第4表の属性間
に示される逆上りフラグをチエツクして、逆上りフラグ
がOのとき制御変数5W=2とし、逆上りフラグが0以
内のとき5W=1と設定する。この後、処理はステップ
e2に戻る。
第10図は、前記ステップe3の逆上り判断処理の詳細
を説明するフローチャートである。第11図ステップf
1では、第4表行番号3の属性間1の属性データtoで
示される属性間番号を読出す。上記(7)1ではto=
「1」であり、属性間1が続出される。ステップf2で
は、属性1111の逆上りフラグの値を前記属性データ
toの値に設定する。ステップf3では、属性データt
oがOであるか否かを判断する。0であれば前行の命令
とは実行順に関する連続性が失われていることになり、
ステップf4で前記制御変数5W=2に設定して処理は
n7する。
前記ステップf3で判断が否定であれば、前行の命令と
は処理が連続していることになり、ステップf5にて制
Dg変数5W=1に設定する。ステップf6では、行番
号を表す変数10を−lデクリメントして処理を終了す
る。第4表のプログラムと例の行番号3では属性データ
to−rl」であり、この場合、制御変数SW= 1と
なる。
再び第9図を参照して、前記ステップe2の判断が否定
てあればステップe4へ移り、制御変数3W=1である
か否かを判断する。肯定であればステップe5へ移り、
上記分岐命令の分岐条件を確定するに必要な情報が全て
得られているとき、対応する逆上りフラグをクリアし、
新たに必要な情報を対応するフラグをセットする。全て
のフラグがクリアされたとき、制御変数5W=4と設定
され、これ以外のときには制御変数5W=Oに設定され
る。この後、処理はステップe2に戻る。
第11図は、前記ステップe5の逆上り情報設定処理の
詳細を説明するフローチャートである。
第11図ステップg1では、被解析プログラムを1行ず
つ逆上る毎に+1インクリメントされる逆上り行カウン
タrcを+lインクリメントする。
ステップg2では、逆上り用カウンタcnを変数とし、
行番号In、属性データto、分岐欄番号ndおよび分
岐命令またはストア命令の分岐条件、またはストア条件
を確定するに必要な命令の行番号rnoを一時的に記憶
するワークメモリmに、先ず逆上った行番号1 rlを
記憶する。
ステップg3では同じくワークメモリmに逆上った命令
の属性データtoを記憶する。ステップg4では、逆上
った行番号に対応する第6図示の分岐元ファイル部21
の分岐元11f121において、当該命令の属性データ
toと同一属性へ分岐している分岐元命令の個数を計数
し、記憶する。また、前記ワークメモリInに記憶され
た分岐元命令毎に分岐元部番号ntをワークメモリmに
記憶する。
ステップg5では、前記ステップg2〜g4で得られた
各種データが必要であるか否かを判断する。第4表の行
番号3のCALL命令は、無条件分岐命令であり、した
がって行番号2の上記各種データは不必要であり、判断
は否定となる。一方、第4表行番号3が前記第1艮行番
号5の[1I3C命令のように条件付き分岐命令であっ
て、行番号2がその分岐条f牛に関与するならばステッ
プg7へ移り、そのような命令毎に与えられる番号を前
記ワークメモリに記憶する。ステップg8ては、前記ワ
ークメモリ以外の情報フラグをクリアし、ステップg9
に移る。
ステップg9では、新たな必要情報があるか否かが判断
され、あればステップglOで新たな情報フラグを設定
し、ステップgllに移る。前記ステップg5の判断が
否定の場合、前記ワークメモリm (rc rno)に
はデータ「o」が設定され、ステップgllに移る。ス
テップg9の判断が否定の場合も同様である6 ステップgllでは、分岐条件やストア命令の内容を確
定するためにさらに新たな情報が必要が否かを表す必要
情報フラグが「o」であるが否がを判断する。すなわち
、必要情報フラグが「1」のとき、逆上り解析処理が出
発した前記分岐命令やストア命令の実行内容が確定した
ことになり、処理はステップg 1.2へ移り、前記制
御2Il変数SW=「4」とする。これは後述するよう
に、前記ワークメモリmに記憶されたデータを第1図の
分岐条件ファイル記憶部16に書込む処理を行うためで
ある。また、前記ステップgllの1゛す断が否定であ
れば、処理はステップg13に移り、制御変数5W−r
QJに設定される。これは後述するように、処理が第1
図ステップe2へ戻ったとき、ステップe3へ移って逆
上り処理を続行するためである9 このようにして第1図ステップe5が実行され、処理は
ステップe2に戻る。前記ステップe4の判断が否定で
あればステップe6へ科り、制御変数5W=r2」であ
るか否かが判断される。この場合は、ステップe3で説
明したように、逆上りフラグ= r□、であって、行番
号が直前の命令とは処理の順序が連続していない命令で
ある場合を示している。このような場合には、逆上り解
析処理を分岐させる必要があるため、ステップe7に科
る。ステップe7では、V<述するように逆上り解析処
理の分岐先の行番号を求め、制御変数SW=「l」とし
て処理をステップe2に戻す。
第12図は、第9図ステップe7の逆上り分岐処理の詳
細を示すフローチャートである。第12図ステン7hl
では、第11図ステップg4で分岐元部番号が記憶され
たワークメモリm[rcncl(cn)]から分岐元欄
番号を読出し、第4表に示されるような分岐元部lなど
において、対応する分岐元行番号データNoや、分岐元
の属性データすなわち分岐元属性欄番号fr’5求め、
行番号Nnに前記分岐元行番号データNoを設定し、ス
テップh2では属性データtoに分岐元属性データを設
定する。
ステップh3では、第11図ステップg4で設定された
分岐個数データm[rc]、cnを一1デクリメントす
る。この後、ステップh4で前記制御変数5W−rlJ
とし、処理は終了する。
このように第9図ステップe7の処理が終了してステッ
プe2に戻る。ステップe6の判断が否定であればステ
ップe8に移り、制御変数SW=「3」であるか否かを
判断する。この判断が肯定であればステップe9に移り
、逆上り解析を保留している解析経路の開始行番号を求
め、制御変数sw=r2」として処理をステップe2へ
戻す。
第1311Wは第1図ステップe9の未解析データ処理
の詳細を示すフローチャートである。第13図ステラプ
ル1では、逆上り経路カウンタr(がr□、であるか否
かを判断する。すなわち、未解析の逆上り解析経路が残
っているがどうがを判断する。このような未解析逆上り
ルートが存在しなければステップp2に移り、制御変数
5W=r5Jとして処理を終了する。ステップp1の判
断が否定であればステップp3に移り、逆上り経路カウ
ンタrcを一1デクリメンl−L、ステ゛ンブp4にて
第11図ステップg4で説明した分岐個数ワータデータ
m (r c ) 、 c nがOであるか否かを判断
する。0であれば処理はステップI) 1に戻り、池の
未解析経路に関して同様な処理を行う。
ステップp4の判断が否定であればステップp5に移り
、制御変数5W−r2Jに設定して処理を終了する。
再び第9図を参照して、このようにしてステップe9の
未解析ルート解析処理が終了して処理はステップe2に
戻る。ステップe8の判断が否定であればステップel
oに移り、制御変数SW−「4」であるか否かを判断す
る。肯定であれば、運上り解析処理は想定される全ての
逆上り解析経路に関して終了していることになり、ステ
ップC11にて13られた解析経路、すなわち逆上り解
析経路を構成する各命令の行番号データを第1[2Iの
分岐条件ファイル16に書込む。未解析経路が残ってい
る場合には、制御変数5W=r3Jと設定される。
第■4図は、第9図ステップellの処理を詳述するフ
ローチャートである。第11図ステップq1で前記逆上
り経路カウンタrcがOであるか否かが判断される。0
であれば、前逆上り経路に亘って解析が終了したことに
なり、前述した経路データの記憶処理を行い、処理は終
了する。ステップq1の判断が否定であれば、ステップ
(13に移り、制御変数5W=r3.に設定して処理を
終了する。
再び第9図を参照して、このようにしてステップall
でデータの書込み処理が終了して処理はステップe2に
戻る。ステップeloの判断が否定の場合、第1311
1ステツプp2で説明したように、全解析経路に亘って
解析が終了していることになり、第8図ステップd8で
説明し−たプログラムを逆上る経路を求める処理が終了
する。
第1図ステップd9では、ステップd8で得られた逆上
り解析経路毎に分岐条件を合成する処理を行う。上記第
2表〜第3表に13ける分岐命令は、黒条(’1分岐1
1′i令で、p)す、第1表のプログラム例に関して説
明する。このプロゲラl、例の分岐命令は、行番4づ5
力I3 CC命令であり、前述した逆上る経路を求める
処理に従えば行番号5から出発する逆上り角T析経路と
して行番号5− =1 = 3−2−1がマ゛) ・)
 ノし る 。
すなわち、行番号5の分岐命令の分岐条1°トは行番4
3↓て↑I+□、れる、 A  98≧0            ・(5)て′
あり、変数Aが未確定である。行番号3て゛変数Aに′
)いて1 、八−−(、・\−F’=)−(6) 、7′l演算が行われ、石確定変数はA、Bとなる。行
番号2〜1の命令にて A−#3               ・(7)B 
 =  #5                   
        (8)ダi1られ、1数、八、Bは確
定する。したがって、これ;、を合成すると、分岐条件
として3*5− 8  ≧ 8           
       ・・・(9)が得られる。
第8図のステップdlOでは、このようにしてステップ
d9で得られた分岐条件を第1図分岐条件ファイル記憶
部16に記憶する。このようにし・て、被解析プログラ
ムを分岐命令から逆上り、分岐条件を求める処理は終了
する。
また、第4表のプログラム例において、実行内容を求め
る処理は、第8図ステップd8で得られた逆上り解析経
路を、たとえば行番号10のST命令から開始すること
によって得られる。得られた第1の解析経路は、前述し
たように 行番号10−3−2→1 である、この経路に沿って前記分岐条件を合成した手法
と同様な技術により、実行内容を含酸すると、 [PORT1十〇]  +  1  → [PORT1
+○コ   ・・・(10)[PORT1]は、アドレ
スPORTに格納されたデータを示す。
が得られる。すなわちアドレスPORTIにプリセット
デ−タ 1を加えたものを同一アドレスに再び格納する処理、す
なわちアドレスPORTIのデータを+■インクリメン
トする処理を示している。
池の解析経路は、 行番号10−9−8−6−5−4 となる。この経路に沿って実行内容をき或すると、[P
ORT2+O]   +   1   +   1  
→  [PORT2+O](11) となり、アドレスPORT2のデータを2ずつインクリ
メントする処理であることが判る。このような実行内容
のデータは、第1図の実行内容ファイル記憶部17に記
憶される。
以上のようにして本実施例に従えば、上記第2表〜第4
表や第5I2I〜第7図に示した分岐入間の各データや
属性間を構成する各データを、逆上り解析処理に先立っ
て設定するようにしたので、逆上り解析時においてプロ
グラムの実行順序に矛盾する不所望な逆上り解析経路が
選択されて、無駄な処理が行われる事態を防ぐことがで
きる。
また本実施例では、前記第2表に示したプログラム例の
行番号9−11のサブルーチンプログラムAのように、
行番号3のCALLALL命令されるとともに、行番号
6のCALLALL命令されたサブルーチンプログラム
Bが呼出されることにより再び実行されるような命令列
において、複数の分岐命令毎に解析経路を識別する属性
データを設定するようにしている。
したがって、このようなサブルーチンプログラムの中か
ら逆上り解析処理を行うに際して、(2ALL命令など
の呼出し箇所に応じた解析経路を設定することができ、
誤った解析経路が設定される事態を防ぐことができる。
以下、第4表の属性間における願下がりフラグについて
説明する。
第15図はこの願下がりフラグを用いる理由を説明する
プログラム例を示すフローチャートであり、第16図は
第15図示のプログラム実行時に用いられるスタック3
6の記憶内容を説明する図である。メインルーチンプロ
グラムの実行時にサブルーチンプログラムが呼出される
と、第16図(1)に示すようにスタック36には戻り
アドレスが格納されてスタックポインタは+lインクリ
メンl〜され、処理はたとえば第15図示のサブルーチ
〉プログラムに移る。
第15図のサブルーチンプログラムにおいて4ステツプ
r1でスタック36に新たなアドレスデータを書込むブ
ツシュ命令P S l(が実行されると、スタック36
には第16図(2)図示のようにアドレスデータが書込
まれ、スタックポインタはt1インクリメントされる。
これ以降、処理がステンプr2.r3.r4.r5と進
行した場合、スタック36から最新に書込まれたアドレ
スデータを:売出してスタックポインタを一1デクリメ
ントするプル命令PULLによりスタック36では、第
16 l71(3)にホずように前記アドレスデータが
消去され、戻りアドレスのみが残る状態となる。
第15121示のようなサブルーチ〉プログラムにおい
て、前記スタック操作命令PS)lとスタック操作命令
PULLとが単一のサブルーチンプログラド内てl関ず
つ組となっているか否かを検査しようとする場合を思定
する。このとき逆上り処理では、下記の3種類の経路が
存在する。
行番号R7,R6・・・(12) 行番号R7,R6,R2,R1−(13)行番号R7,
R5,R4,R3,R2,R1・(14)である。した
がって、前記検査を行う場合、第12式の経路について
も検査することになり、スタック操作命令に全く関係を
有さない無駄な検査を行ってしまうことになる。したが
って、前記のような検査を行う場合、プログラムの実行
順に命令を読取って検査を行う手法が無駄な処理を省く
点で有利である。
このため本実施例では、第4表の属性間における願下が
りフラグを設定するようにした。二ノ)願下がりフラグ
は、前述したように、ある命令が次の行番号の命令と実
行+1i序に関して連続した命令であるか否かを識別す
るフラグである。この願下がりフラグを前述の実施例に
おいて説明した逆上りフラグと同様な手法にて用いるこ
とにより、被解析プログラムを願下がりの経路にて読取
って解折を行うことができる。これにより無駄な処理は
省かれ、処理の高速化と高効率化とを図ることができる
前述の第4表のプロゲラl、例において、サブルーチン
プログラムAに対し、複数のCALL、命令が配置され
る場き、同表の分岐元間および属性部(ま、CALL命
令の数だけ設定されることになる。
このようなサブルーチンプログラムがその中でスタック
の内容を変化させないならば、異なるCALL+fff
令によって呼出された場合でも実行内容は同一・であり
、このような場合には後述するように分岐元間および属
性部に割りあてt、れるメモリの容量を削減することが
できる。
このような本実施例の動作例を、下記第5表0プログラ
ム例に沿って説明する。
(以下余白) 上記の第5表の分岐元間および属性部のデータは、上記
第4表を参照して説明したデータの設定方法に基づいて
設定されている。ここで前述したように、分岐元間およ
び属性部に割りあてられるメモノの容量を削減するため
に、第5表のプログラムρ1に基づいて下記第6表のよ
うな分岐元間および属性部を作成する。
第   6   表 上記第5表と第6表とでは、 下線を付したデー タが変更されている。すなわち、行番号3のCALL命
令とこれより分岐した行番号8〜10の命令列、および
リターン命令λETによりさらに分岐した行番号4に関
する分岐元間や属性部の決定に関しては、上記第5表と
同様に設定される。引続き行番号6を読取ったとき、行
番号8に分岐する。
第4表の例では新たな分岐元間2および属性部2が設定
されるが、本実施例は同一のサブルーチンプログラムを
解析するため、このような分岐元間および属性部の増加
を行わず、分岐元間1の行番号8において、行番号デー
タNO=「0」と設定し、また行番号4の属性データf
r=r0」と設定する。さらに、行番号8の属性部t 
o −’ f) Jと設定する。このようなデータr 
OJを用いて、行番号6のCALL命令に基づく行番号
8〜10のサブルーチンプログラムの解析を總了したこ
とを表示する。
このとき、属性部も同様に、行番号1−2−3−8−9
−10−4−5までの解析が終了した段階では、第5尺
の属性欄1のようなデータが設定されるが、行番号6以
降の前述のような処理によって属性WI2を増設せず、
第6表の属性欄lのようなデータが設定される。
逆上り処理にあたって、行番号8の分岐入間1の行番号
データNoが参照されるとこれは「o」であるため、分
岐元行番号が不明となる。したがって、前述した分岐入
間および属性欄を作成する処理において、行番号8に分
岐する分岐元命令の行番号の次の行番号、すなわち第5
表の例では行香り5.7をファーストインラストアウ1
〜(FIL○)形のメモリに記憶する。したがって、逆
上り解析時に才3いて、分岐入間で行番号データ「o」
のデータが参照された場合には、前記行番号を記憶した
FTLO形メモリがちデータを読出して逆上り処理にお
ける分岐先行番号とする。
このようにすることによって、流れ制御ファイル記憶部
12において、分岐入間および属性欄に割当てられるメ
モリの容量を削減することができる。
前記第4表のプログラム醐にわける実行内容は、行番号
3,5.11などの分岐命令やスタックの内容を操作す
る命令などによって変化するスタックの記憶内容に大き
く作用されることが知られている。このようなスタック
の内容を予め属性欄のデータとしてまとめておくと、プ
ログラムの解析上便利である。とりわけ前記第4表の行
番号5のPSH命令や、これと対を或すPULL命令な
どのようにスタックの内容を変化させる命令が含まれる
場合には、プログラムの実行状態の変化が明瞭になり、
プログラム解析経路の特定が容易になる。
上記第4表と同一のプログラム閂にむいて、当該プログ
ラムの各命令毎に下記第7表のようなアドレスが設定さ
れる場合を想定して説明する。
(以下余白) 本実施例では、分岐入間および属性欄のデータは第4表
のデータを用いるが、これに加えスタックの内容が変化
する命令がある場合には、その命令により変化したスタ
ックの内容をデータとするスタックデータVALの欄を
設ける。これによれば、行番号3で行番号9へ分岐する
が、このときスタックにはデータ#FOO7が格納され
る。したがって、行番号9〜11のVALlliには、
当該アドレス#FOO7の上位バイトおよび下位バイト
を転換したデータVAL= r07FO」がそれぞれ設
定される。
行番号11がら行番号4へ処理が戻り、次に行番号5に
おいてスタックの記憶内容が行番号1のアドレス#FO
OOに変更される。したがって、これ以降の行番号4〜
8の属性flilにおいては、スタックデータVAL=
 roOFO」が設定される0行番号8にて、新たな属
性欄2が設定され、引続きスタックデータVAL−ro
OFo、が設定される。
以上のようにして本実施例によれば、属性欄にスタック
のデータを設定するよう(こしたので、たとえばサブル
ーチン命令のメインルーチンへの瀧婦命令n ETから
逆上り処理を行う場合、nit記メインルーチンへの復
帰先は、スタックデータVALを参照すれば判明し、各
命令を逆上って順次的に解析して検知する必要が解消さ
れる。これにより処理の高速化が図られる。また、前記
スタックデータVALを用いれば、各命令毎に設定され
る属性の種Mわよび処理経路等の属性の識別かj?JV
:tに容易となる。
第8図ステップd9において、分岐農作を合成して第1
(2Iに示すフローチャート作成手段10や実行内容解
析結果出力手段20などか+2、:3! 3G、得られ
た結果を論理式の結合した形式として〕1フーチヤート
やPAD図の形式で出力したり、または実行内容を印字
出力したりする場合、被解析プログラムが長くなるほど
その出力量が膨大となる。
したがって、これらの論理式で記述さ!上る出力をプー
ル代数を用いて簡易な形に整理する技術が・ピ・要とな
る。
第141は、このような実施m+を説明するフローチャ
ートである。フローチャート作成手段19や実行内容解
析結果出力手段20からの出力がたとえば下式、 F2=C・(A+−(A−+3)) −(C(AB) 
+ A、B・・・(15) のような論理記号の結合した論理式として与えられてい
る場合、これを簡約化するには以下の処理を行う。この
簡約化処理の基本方針は下記の第16式と第17式とで
ある。
A+A=U             ・・・(16)
A + A−g = A + g          
−(+7)U:全体集合 A;Uの部分Sき AHAの補集合 g;単項 ;論F!!積演算 +;論理和演算 第15図は、上記第16式と第17式の内容を説明する
ペン図である。上記第16式は、全体集合、Uにおいて
、部分集合Aとその補集合Aとの和集合が常に全体集合
となる意味である。また、上記第17式は部分集合Aと
単項gとが互いに素であるならば、補集合Aと単項gと
の補集合と集さAとは集合Aと単項gとの和集合になる
意味である。
このような上記第16式および第17式の基本方式に基
づいて、上記第15式を簡約化する手順に′)いて第1
7図のフローチャートを参照して説明する。第17[N
ステップslに+3いて、各項な分解する。これにより
上記第1式は下記第18式に変化される。
F=C・4・\+C−A−B + C−A + C−A
−B +A−B(18) 次にステップs2にて共通項があるか否かが判断される
。先ず第18式の第1項才3よび第2項について、共通
項Cがあることが判断され、ステップs3で〈ンでくく
られ、下記第19式が得られろ。
C(A十A、B)                 
 ・・(19)次にステップS4では、前記第16式お
よび第17式に基づく合成パターンがあるか否かが判断
される。第19式の0内では、第17式に基づく合成が
可能であり、判断が肯定となり、ステップs5に移り、
下記第20式のように合成される。
前記ステップs4で合成パターンがないことが判断され
ると、ステップs6に移り、他に0ててくれる同−項が
あるか否かが判断され、なければステップs3に移る。
下記第20式の例では、0内でこれ以上の合成パターン
がなく、処理はステップslに戻され、0が分解され、
下記第21式が得られる。
C(A+B)              ・(20)
C−A + CB              ・(2
1)次に第21式第1項と第18式第3争とに関して、
前記ステップS2.ステップs3の処理が適用され、下
記第22式が得られる。
CA+CA−A (C+C)     ・・・(22)
次のステップs4.s5にて上記第16式の基本方針が
適用され、下記第23式が得られる。
A・ (c+c)  −A             
   ・(23〉次に第21式第2項と第18式第・4
項とに関して、同様な処理が行われ、下記第24式の結
果が得られる。
CII  +  C−A−B  =  n   (C+
−C−A)  =  DC+r(A(24) 次に第21式第2辺の第2項と、第18式第5項との間
で同様な処理が行われ、下記第25式が得られる。
[A  + A−n  = A・(T3+El)  =
 A      −(25)したがって第23式、第2
1式第2辺第1項お上び第25式より下記第26式が1
)られる。
A +BC+ A = B、C+ U = U    
・・・(26)このようにして上記第16式す3よび第
17式に示す基本方針の元で、第17図に示す処理手順
に基づいて上記第15式に示す論理式が全体集合Uに簡
約化されることが確認された。このようにして第8図ス
テップd9で分岐条件を合成する処理を行うにあたって
、前述したようにプール代数を用いて論理式を論理演算
にて簡略化して表現する。
これによりフローチャート作成手段19でフローチャー
トを作成して出力したり、または実行内容解析結果出力
手段20にて実行内容を論理式にて印字出力する場合に
あたって、実行内容をより内容の把握が容易な形式にて
表現することができ、本件プログラム内容解析装置をプ
ログラムのデバッグなどに用いる場合にきわめて効率的
である。
発明の効果 以上のように本発明に従えば、分岐命令毎に当該分岐命
令に対応する分岐先命令列に対応1寸けて前記スタック
の最新のアドレスデータを記憶し、逆上って解析を行う
にあたって別途配位されているスタックのデータを参照
することにより、分岐元の命令のアドレスデータや実行
経路の識別が格段に容易となる。これにより被解析プロ
グラムの解析処理速度を向上することができ、過誤の発
生を防止することができる。
【図面の簡単な説明】
第1図は解析装置lの構成を示すブロック図、第2図は
解析4を篩処理手段5の動作を説明rるフローチャート
、第3図は被解析プログラム則の動作の流れを示すフロ
ーチャート、第4図は流れ構造解析手E’JIIの動作
を説明するフローチャート、第5図は流れ制御ファイル
記憶部12の構成を示す図、第6図は分岐元ファイル記
憶部21の構成を示す国、第7図は属性ファイル記憶部
22の構成を示す図、第80は分岐条件解析手段13の
動作を説明するフローチャー1− 、第9図は本実施例
の逆上りフラグを説明するフローチャート、第1O図逆
Eり処理における逆上り判断を説明するフローチャート
、第11図は逆上り処理におけるデータ完走処理を説明
するフローチャー1− 、第12図は逆上り95理の逆
上り分岐処理を説明するフローチャー1・、第13図は
逆上り処理の未解析ルート処理の動作を説明するフロー
チャー1− 、第14図はデータ書込み+7fi理を説
明するフローチャート。 第15図は被解析プロゲラj、例の動作の流れを説明す
るフローチャート、第16[21はスタックの状態を説
明する図、第1711は論理式のプール代数を用いる簡
約化処理を説明するフローチャート、第18図は本実施
例を説明するペン図、第19図はプログラム例の流れを
示すフローチャートである。

Claims (1)

  1. 【特許請求の範囲】 複数の命令から成るプログラムの各命令を配列順とは逆
    に逆上つて読取り、その内容を解析する装置において、 各命令毎に、分岐実行順序を配列順と異ならせる分岐命
    令に対応するプログラムの複数の実行経路を識別する経
    路データと、分岐命令により規定される分岐先命令また
    は分岐命令のいずれかである命令毎に、対応する分岐命
    令または対応する分岐先命令のいずれかの位置データと
    を含む分岐データを作成する分岐データ作成手段と、 経路データを記憶する経路データ記憶手段と、位置デー
    タを記憶する位置データ記憶手段と、分岐命令時の戻り
    アドレスデータが先入れ後出し方式にて格納されるスタ
    ックの最新のアドレスデータを、該最新のアドレスデー
    タが格納される命令以後、該最新のアドレスデータを読
    出す命令に亘る命令毎に記憶するスタックデータ記憶手
JP1319448A 1989-12-07 1989-12-07 プログラム内容解析装置 Expired - Fee Related JPH0769855B2 (ja)

Priority Applications (1)

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

Applications Claiming Priority (1)

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

Publications (2)

Publication Number Publication Date
JPH03177941A true JPH03177941A (ja) 1991-08-01
JPH0769855B2 JPH0769855B2 (ja) 1995-07-31

Family

ID=18110316

Family Applications (1)

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

Country Status (1)

Country Link
JP (1) JPH0769855B2 (ja)

Citations (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 ブランチアドレストレ−ス装置
JPS63317853A (ja) * 1987-06-20 1988-12-26 Fujitsu Ten Ltd プログラム内容解析装置
JPS63317844A (ja) * 1987-06-20 1988-12-26 Fujitsu Ten Ltd プログラム内容解析装置
JPS63317848A (ja) * 1987-06-20 1988-12-26 Fujitsu Ten Ltd プログラム内容解析装置

Patent Citations (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 ブランチアドレストレ−ス装置
JPS63317853A (ja) * 1987-06-20 1988-12-26 Fujitsu Ten Ltd プログラム内容解析装置
JPS63317844A (ja) * 1987-06-20 1988-12-26 Fujitsu Ten Ltd プログラム内容解析装置
JPS63317848A (ja) * 1987-06-20 1988-12-26 Fujitsu Ten Ltd プログラム内容解析装置

Also Published As

Publication number Publication date
JPH0769855B2 (ja) 1995-07-31

Similar Documents

Publication Publication Date Title
JP2694122B2 (ja) ソフトウェア・アプリケーションの自動テスト方法
US5367468A (en) Design aid method and design aid apparatus for integrated circuits
JPH06250846A (ja) コンパイル装置
CN102289362A (zh) 分段符号执行装置及其工作方法
Fauth et al. Automated generation of DSP program development tools using a machine description formalism
US6968544B1 (en) Method for transformation of interface definitions and intermediate format tables thereof
JPH09160949A (ja) ハードウエアとソフトウエアの混在システムの設計支援方法
JPH03177941A (ja) プログラム内容解析装置
JPH07141192A (ja) 翻訳処理方法
JPH04205423A (ja) プログラム作成装置
JPH1124913A (ja) Jclプログラム変換装置および記録媒体
JPS6136868A (ja) 情報検索装置
KR100407009B1 (ko) 프로그램재생방법 및 장치 및 프로그램재생을 위한프로그램을 기록한 매체
JPH03177942A (ja) プログラム内容解析装置
JPH03179536A (ja) プログラム内容解析装置
JPH03177940A (ja) プログラム内容解析装置
JPH0775003B2 (ja) プログラム内容解析装置
EP0244928A1 (en) Improvements relating to control flow in computers
JP3240647B2 (ja) コンピュータ言語の構造化処理方式
JPH06222913A (ja) プログラム解析装置
JPH01184539A (ja) アセンブリ言語の並列記述方式
JPS60254327A (ja) オブジエクト生成方式
JPH05250210A (ja) プログラムトレース方式
Marwedel MSSV: tree based mapping of algorithms to predefined structures;(extended version)
Wilkes et al. The associative language AL-1

Legal Events

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