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

プログラム内容解析装置

Info

Publication number
JPH03179536A
JPH03179536A JP1319450A JP31945089A JPH03179536A JP H03179536 A JPH03179536 A JP H03179536A JP 1319450 A JP1319450 A JP 1319450A JP 31945089 A JP31945089 A JP 31945089A JP H03179536 A JPH03179536 A JP H03179536A
Authority
JP
Japan
Prior art keywords
instruction
data
branch
program
analysis
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP1319450A
Other languages
English (en)
Other versions
JPH0772873B2 (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 JP1319450A priority Critical patent/JPH0772873B2/ja
Publication of JPH03179536A publication Critical patent/JPH03179536A/ja
Publication of JPH0772873B2 publication Critical patent/JPH0772873B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

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

Description

【発明の詳細な説明】 概要 アセンブラ言語で記述されたプログラムの基本的動作や
fj4造をその仕様と照合する場合には、従来では膨大
な人手により行っており、また過誤が発生する事態を防
止できない。本発明は、プログラムの基本的動作と構造
とが、たとえばロード命令とストア命令とによる入力/
出力状態と、分岐命令による分岐状態とによって規定さ
れることに着目している。したがって命令毎に分岐命令
により規定される実行経路を識別する経路データと、分
岐命令により規定される分岐先命令!3よび分岐元命令
の配置位置に関する位置データとを作成する。
解析処理時には、ストア命令または分岐命令から逆上っ
て各命令の実行内容を読取る。このとき前記位置データ
および経路データは、解析装置に備えられるメモリに記
憶されるが、これらのデータは分岐命令毎に被解析プロ
グラムの全体に亘って設定される必要がある。したがっ
てこれらの設定されるメモリの容量を削減するために、
以下のようにする。
プログラムのメインルーチンの異なる箇所から同一のサ
ブルーチンが読出される場合、当該サブルーチンの実行
内容はいずれの分岐命令に関してであっても同様であり
、したがって単一個の分岐命令に関してサブルーチンの
実行内容を解析した後は、残余の複数の分岐命令に関し
ては具体的な解析処理を省略するとともに、解析処理が
省略された旨のデータを当該サブルーチンの先頭行の位
置データに代えて記憶する。またこの解析省略データが
付された命令の位置データは別途記憶される。逆上り解
析時にこの解析省略データを検出すると、別途記憶され
た位置データを読出して逆上り処理を続行する。これに
より同一のデータを重複してメモリに割当てる事態が防
がれる。
産業上の利用分野 本発明は、マイクロプロセッサなどを動作させるために
用いられるプログラムの内容を解析する装置に関する。
従来の技術 マイクロプロセッサが動作するにあたって実際に汲取る
機械語に最も近い言語としてアセンブラ言語がプログラ
ムを記述するために用いられている。このアセンブラ言
語は高級言語とλなり、機械語の各命令と1対l対応を
なす言語であるため、このプログラムに基づく各種入出
力装置の動作内容やプログラムの実行内容の概略などが
、アセンブラ言語にては把握しに<<、仕様上の記載内
容と照合するにあたり、人手によって命令毎に行う必要
がある。またシュミレーションやエミュレーションなど
を行ってプログラムの動作状態を確認する技術が採用さ
れているが、これらはプログラムの中で要求される各種
入力命令に対応して数値やデータを設定しなければなら
ない。
したがってプログラムの各命令を読取ってプログラム全
体の処理や流れの構造を認識し、プログラムの実行内容
を概略的に記述したり、また入出力装置の動作として記
述するなど、プログラムの実行内容の把握が容易な形式
の出力を得ようとする技術が想定される。この場合、プ
ログラムに基づく入出力装置への最終的な出力は、マイ
クロプロセッサが或データをメモリの所定のアドレスに
書込むストア命令である。したがってストア命令に表れ
るオペランドの変数の内容がi&終的に確定されるたと
えばロード命令まで、プログラムを逆上って命令を読取
れば、当該ロード命令でデータが入力されるものとして
前記変数の内容が確定することになる。このようにして
前記ロード命令に用いられたオペランドの変数でプログ
ラムの実行内容を概略的に記述できることなる。
発明が解決しようとする課題 このような従来例において、解析する対象のプログラム
がたとえば第19図示の構造である場合について説明す
る。このプログラムは、ステップa1〜aloの命令か
ら成り、ステップa2.a4にサブルーチンプログラム
を呼出すコール命令rCALL  AJおよびrcAL
L  13Jが配置されている。ここでステップa5か
らプログラムを′逆りる場合、逆上り経路としては、a
 5→a 8→a 7→a 6 →・・・および a 5→ a 8→ a 7→ alo →a 9→・
・の2種類想定されるが、実際のプログラムの実行順を
考慮すると後者は実際には実行され得ない経路である。
すなわちプログラムの内容を解析するにあたって、プロ
グラムを命令の実行内容に基づいて逆上って順次的に読
取る技術のみでは、実際のプログラムの実行経路からは
あり得ない経路も解析な対象としてしまい、解析時間が
長くなってしまうとともに、実際のプログラム実行内容
と異なる解析結果を導出することになり極めて不具合で
ある。
本発明の目的は、上述の技術的課題を解消し、プログラ
ムを逆上って命令を読取り、内容を解析するにあたって
実際の実行経路に対応した解析経路を選択して、実行経
路としては有り得ない解析経路を選択する不具合を解消
したプログラム内容解析装置を提供することである。
課題を解決するための手段 本発明は、複数の命令から成るプログラムの実行順序を
命令の配列順序と異ならせる分岐命令を複数含む第1プ
ログラム部分と、第1プログラム部分の複数の分岐命令
により実行順序が分岐して実行される第2プログラム部
分とを含むプログラムの各命令を、実行順とは逆に逆上
って読取り、その内容を解析する装置において、 各命令毎に、分岐命令に対応するプログラムの複数の実
行経路を識別する経路データと、分岐命令により規定さ
れる分岐先命令または分岐命令のいずれかである命令毎
に、対応する分岐命令または対応する分岐先命令のいず
れかの位置データとを含む分岐データを作成するととも
に、前記第1プログラム部分の各分岐命令に対応して第
2プログラム部分の経路データおよび位置データを作成
する際に、第2プログラム部分に実行順序が分岐する複
数個目の分岐命令の場合には、第2プログラム部分に亘
る経路データおよび位置データの作成処理に代えて、第
2プログラム部分の先頭命令に対応して前記経路データ
とともに、位置データと対応する解析省略識別データと
位置データとを作成し、当該第2プログラム部分に関連
する分岐元命令および分岐先命令に関連して位置データ
に対応する前記解析省略識別データと経路データとを作
成する分岐データ作成手段と、 経路データを記憶する経路データ記憶手段と、位置デー
タまたは解析省略識別データのいずれかを記憶する位置
データ記憶手段と、 解析省略識別データに対応する命令の位置データを記憶
する解析省略位置データ記憶手段と、プログラムを逆上
って各命令を読取る逆上り読取手段であって、逆上り時
には各命令の経路データと位置データとを、経路データ
記憶手段と位置データ記憶手段とから読出し、連続する
同一経路データに対応し、かつ位置データで規定される
分岐経路に従ってプログラムを逆上って読取るとともに
、位置データが前記解析省略データである場合に解析省
略位置データ記憶手段がら対応する位置データを読出し
て逆上って命令を読取る、そのような逆上り読取り手段
とを含むことを特徴とするプログラム内容解析装置であ
る。
作  用 本発明に従えば、命令毎に分岐命令により規定される実
行経路を識別する経路データと、分岐命令により規定さ
れる分岐先命令および分岐元命令の配置位置に関する位
置データとを分岐データ作成手段として作成する。解析
処理時には、ストア命令または分岐命令がら逆上って各
命令の実行内容を逆上り読取手段にて読取る。このとき
前記位置データおよび経路データは、位置データ記憶手
段および経路データ記憶手段に記憶される。
プログラムのメインルーチンの異なる箇所がら同一のサ
ブルーチンが呼出される場合、当該サブルーチンの実行
内容はいずれの分岐命令に関してであっても同様であり
、したがって単一個の分岐命令に関して、分岐データ作
成手段にてサブルーチンの経路データおよび位置データ
を作成した後は、残余の複数の分岐命令に関しては具体
的な解析処理を省略する旨のデータを当該サブルーチン
の先頭行の位置データに代えて記憶する。またこの解析
省略データが付された命令の位置データは別途記憶され
る。逆上り解析時にこの解析省略データを検出すると、
全体別途記憶された位置データを続出して逆上り処理を
続行する。これにより同一のデータを重複してメモリに
割当てる事態が防がれる。
実施例 第1図は本発明の一実施例のプログラム内容解析装置(
以下、解析装置と略す)1の椹成例を示すブロック図で
ある。解析装置1には外部記憶装置2が接続され、解析
対象となる高級言語やアセンブラ言語で記述されたプロ
グラムが保存される。
解析装置1は外部記憶装置2からのプログラムを11!
!械語に変化するアセンブラ3を備え、アセンブラ3か
らのアセンブルリストがアセンブルリストファイル記憶
部4に記憶される。以下「記憶部」の名称は解析装置1
に備えられるたとえばRAM(ランダムアクセスメモリ
)や固定ディスク装置などの内部記憶装置の所定の領域
を示す。
アセンブルリストファイル記憶手段4からの解析対象と
なるアセンブルプログラムは、解析2f¥備処理手段5
に与えられ、後述するプログラム解析に先立ち解析対象
となるプログラムのデータが内容別に分類される。解析
準備処理手段5には複数の記憶部が接続される。リスト
ファイル記憶部6には被解析プログラムの機械語とアセ
ンブラ言語の二一モニツクから成る命令列が記憶される
。RAMファイル記憶部7には被解析プログラムで用い
られる各種変数が記憶される。マツプデータ記憶部8に
は被解析プログラムで用いられるマツプ形式などでの固
定データが記憶される。またその他に記憶部9が接続さ
れ、被解析プログラムで用いられるたとえば割込みベク
トルのベクトルアドレスや、前記リストファイル記憶部
6に記憶されている二一モニツクのプログラムに関する
ラベルなどが記憶される。また解析装置lには命令デー
タファイル記憶部10が設けられ、被解析プログラムで
用いられる命令が予め記憶される。
前記リストファイル記憶部6からの二−モニツク形式で
のプログラムは分岐データ作成手段としての流れ構造解
析手段11に与えられ、被解析プログラムにおける処理
の流れの構造、すなわち分岐の有無、分岐命令が想定さ
れる場合の分岐先命令の位置の変動およびスタックのネ
スティングの程度などを解析するようにしている。ここ
ではこれ以降のすべての解析処理の基礎データとなる流
れ制御ファイルを作成し、流れ制御ファイル記憶部12
に記憶する。前記リストファイル記憶部6、命令ファイ
ル記憶部20および流れ制御ファイル記憶部12からの
各データに基づいて分岐条件解析部13、ストア内容解
析部14、完全分岐条件解析部15は後述するそれぞれ
の解析処理を行い得られた各データを経路データ記憶手
段および位置データ記憶手段を含む分岐条件ファイル記
憶部16、実行内容ファイル記憶部17、および完全分
岐条件ファイル記憶部18に記憶する。
流れ制御ファイル、分岐条件ファイルおよび実行内容フ
ァイルからフローチャート作成部19は、被解析プログ
ラムのフローチャートを作成して出力する。また実行内
容ファイルおよび完全分岐条件ファイルから実行内容解
析結果出力部20は被解析プログラムの実行内容をたと
えば印字出力する。
第2図は解析準備処理手段5の動作を説明するフローチ
ャートである。ステップa1において解析装置lは外部
記憶装置2からソースプログラムを読込み、アセンブラ
3にてアセンブル処理を行う、アセンブルリストファイ
ル4に記憶されたアセンブルプログラムに対して、解析
準備処理手段5はステップa2にて各命令毎に一連の番
号(以下、行番号と称する)を付与する。このとき各命
令は後述するようにたとえばストア命令、入出力命令、
分岐命令あるいは演算命令などのようにその種類によっ
て分類される。これは前記命令データファイル記憶部1
0に記憶されている命令を参照して行われる。ステップ
a3ではこのような命令の分類に基づいて、前述した各
種データファイルの作成が行われる。
次に解析装置1は、流れ構造解析手段11によりリスト
ファイル記憶部6に記憶されているti械語と二一モニ
ツクから成るプログラムファイルに関して流れ構造解析
処理を行う、この解析処理は被解析プログラムの流れ構
造(分岐の有無、分岐先の特定、スタックのネスティン
グの程度など)を解析する処理であり、以後のすべての
解析プログラムの基礎データとなる前述した各種ファイ
ルを作成する。とりわけ分岐命令の存在に基づく分岐先
命令の行番号などの抽出の池、「逆上り(さかのぼり)
」概念と「属性」概念とを表すデータを作成する。
(1)逆上り概念 プログラムの実行内容を解析するためにプログラムをそ
の実行順に従って命令を読取って解析しようとする場合
、各種フラグなどのコンデイションコードの変化、複数
の命令の間の相関関係など。
当該命令に関連して想定されるすべてのデータをMmし
ておく必要がある。このようなデータの中には命令の種
類によっては不必要なデータがある場合であっても、以
後の解析処理で、どのデータが必要になるか判断できず
、このためすべてのデータを収集する必要がある。
本発明に従う「逆上り」概念はこのような課題を解消す
るための方策である。
本発明は機械語やアッセンブラプログラムで記述された
プログラムを、分岐命令およびストア命令の分岐条件や
ストア内容を合成することにより、把握容易な形式に論
理式により記述しようとするものである。このため前記
分岐命令またはストア命令を始点とし、当該分岐条件ま
たはス1ヘア命令の内容が確定する個所までプログラム
を逆上りつつ、必要な情報のみを収集するものである。
ここでプログラム例として下記第1表のプログラムに則
して説明する。
(以下余白) 第 表 上記プログラム例で、実行順序は行番号1−2−3→4
→516または行番号1→2→3→4→5→7である。
分岐命令は「Bcc」であり、その条件は行番号4の(
A−#8)が0以上が負であるかで決定される。そのた
めにはアキュムレータAの値が確定する必要がある。そ
のためには行番号3にてアキュムレータA、Bの双方の
値が確定する必要があり、行番号2.1を読取って初め
てその値が確定する。
流れ構造解析手段11では上記逆上り処理に必要な情報
、すなわち或命令とその前行とはプログラムの実行順に
従った連続した命令あるが否がの判断のためのデータや
、これらの命令が不連続の場合、どの行番号の命令へ連
続しているかに関するデータなどの後述する属性データ
を作成している。
(2)属性概念 プログラムにはメインルーチンと、メインルーチンの所
定の個所がら処理が分岐されるサブルーチンとを含んで
構成される。同一のサブルーチンでも複数箇所がら呼出
される場合があり、メインルーチンに処理を戻すリター
ン命令RETによる分岐先の位置は、メインルーチンの
呼出し命令に対応して変化する。したがって1つのサブ
ルーチンによっても複数の実行経路が設定されていると
考えられ、処理経路を区分する情報として属性概念を設
定する。以下、第2表で示されるプログラム例に沿って
説明する。
(以下余白) 第 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→ 1 ■ → 10−49→3→2
→1→・・・があるが、その他に行番号7→11→10
→9→3→2→・・・などの逆上り経路が存在している
ことになる。このような後者の逆上り経路は実行順序か
らはあり得ない経路であり、前記属性概念を用いてこの
ような不所望な経路の選択が防止される。
第2表のプログラム例において、分岐先制、分岐元間、
流れフラグ欄および属性間の内容が以下のようにして決
定される。
(a)属 性 行番号1〜7は行番号3.6のCALL命令によって処
理が分岐し、かつサブルーチンプログラムを含んでいな
いので、すべて同一の属性記号Mが与えられる0行番号
9〜11は行番号3のCALL命令により処理が移され
るサブルーチンプログラムであり、属性記号Aが与えら
れる。また行番号8〜11は行番号6のCALL命令に
より処理が移されるサブルーチンプログラムであり、前
記属性記号Aと異なる属性記号Bがそれぞれ与えちれる
(b)分岐先制 上記プログラムの分岐命令は行番号3,6,7゜11に
配置されており、これらの処理が移る先は各命令の内容
に対応してそhぞれ行番号9,8゜1であり、分岐命令
RETでは対応するCALL命令の直後の行番号4また
は行番号7である。分岐先桐にはこのような分岐先の行
番号と当該行番号の命令が有する属性とが組になったデ
ータが設定される。
(c)分岐元間 前記各分岐命令により処理を移される分岐先の命令から
見て、処理が当該分岐先命令へ移る元となる分岐元命令
が対応1寸けられる。したがって分岐元間には、各命令
毎に前記分岐元命令が対応付けられる場合にはその分岐
元命令の行番号と当該分岐命令の所属する属性記号とが
組となったデータが設定される。
(d)流れフラグ欄 流れフラグ「1」は当該命令が前行の命令がら3!続し
た命令であることを示す、流れフラグrQ」は当該命令
が前行の命令以外の他の命令がら処理が分岐してくる分
岐先命令であることを示す、すなわち行番号l〜3は一
連の命令であり、行番号4の命令は行番号3のCALL
命令によりサブルーチンプログラムAが実行されて行番
号11のRET命令により処理が分岐してきた命令であ
る。
このため流れフラグCo」が付される。同様にして行番
号5,6には流れフラグ「1」が付され、行番号7には
流れフラグr□、が付される。
行番号8が行番号6のCALL命令により処理が分岐し
てくる命令であり、流れフラグr O、が1寸される0
行番号9は行番号3のCALL命令により処理が分岐し
てくる命令であり、流れフラグr□Jが付さizる命令
であるが、前記行番号3すCLLの後に行番号6のCA
LL命令が行われるので、行番号9は行番号8に連続す
る命令となり、第2表のように流れフラグ「1」が与え
られる。
行番号10.11については流れフラグ「1」が与えら
れる。
上記第2表のプログラム例では、CALL命令などその
命令から処理が分岐し、またその命令へ処理が分岐して
くる命令に関して説明したが、般にマイクロコンピュー
タのプロゲラ11の実行は、プログラムカウンタ(PC
)の出力するアドレスの命令を読取って実行し、その命
令の実行により次に実行すべき命令のアドレスがプログ
ラムカウンタに格納される。
一方、プログラム中にザブルーチンプログラムが含まれ
ている場合、処理が分岐するが、このときスタックが用
いられる。スタックは周知のように、先入れ後出しくフ
ァーストインラストアラl−。
FILO方式)のメモリであり、サブルーチンを呼出す
ときサブルーチンから処理が戻るべきメインルーチンの
次のアドレスが格納される。ザブルーチンの処理が終了
後、リターン命令RETによりスタックに格納されてい
るデータがプログラムカウンタに転送され、当該アドレ
スからプログラムが実行される。したがってスタックの
記憶内容を変更する命令が含まれていれば、サブルーチ
ンプログラムからの復帰先を変更することができる。
このようなプログラム例を下記第3表に示す。
第3表のプログラム例は第2表のプログラム例の行番号
4〜8が変更されている。第3表のプログラム例で分岐
先間、分岐元欄および流れフラグ欄のデータの決定方法
は第2表のプログラム例の場合と同様である。以下、属
性の決定方法について説明する。
行番号1〜3は一連の命令であり、属性データMを与え
る。行番号3のCALL命令により処理は行番号9に分
岐するので、行番号9〜11には他の属性記号Aを与え
る0行番号11のrtET命令により処理は行番号4に
復帰する。この命令には属性記号Mを与える。
行番号5のP S H命令により、前述したスタックの
最新のアドレスデータがXレジスタの内容に書換えられ
る。この時点で属性データをBに変更し、以下行番号1
1まで同一の属性データBを与える。このようにして、
前述したスタックに格納されているデータを変更する命
令を含むプログラムに関する属性が決定される。
上記第2表および第3表のプログラム例に関する流れ制
御データの属性データは、スタックの内容を変更する命
令を含む分岐命令に関してプログラムの実行経路毎に、
前述したように異なる記号を与えるようにしている。こ
のような方法の場合、被解析プログラムにおける属性の
数が増大すると、後述するようにプログラムを逆上って
解析を行う場合、命令毎にすべての属性間の属性データ
を検索して同一の属性に沿って逆上るような処理を行う
ので、前記属性データの数を減小できればより高速な処
理が実現できる。
下記第4表はプログラム内容は第3表のプログラム内容
と同一であるが、前記第2表および第3表とは異なる流
れ制御データを、分岐欄1.2゜・・・および属性間1
,2.  ・・とじて設定している。
以下、これらの決定方法について説明する。
(以下余白) (e)属性ni (i = 1 、2 ) −属性間の
行番号データNOは分岐命令毎に設定され、分岐先命令
の行番号が記述される。属性データtoは当該分岐命令
により、どの属性間に処理が分岐したかを表す、また行
上りフラグ欄においてフラグ=「O」は対応する命令が
分岐先命令であり、直前の行の命令とは処理が連続しな
い命令であることを示し、フラグ=’j」 (j=1゜
2、・・・)は属性間の番号を示す0行番号1は行番号
11を分岐命令とする分岐先命令の場合があり、したが
ってフラグ=「O」が設定される。また順下りフラグ欄
においてフラグ=「0」は、対応する命令が直後の命令
と処理が連続しない命令であり、分岐命令であることを
示す。
行番号2ではまず設定された属性間1の番号がフラグ=
「1」として設定される1行番号3は分岐命令であり、
分岐先の行番号データN0=r9Jが設定される。属性
データtoについてto=r1」が設定される。この後
、処理は行番号9へ分岐し、したがって逆上りフラグ=
「O」が設定される0行番号10には逆上りフラグ=「
1」が設定される0行番号「11」は分岐元命令であり
、行番号データN0=r4Jが設定される。この行番号
4の命令は現時点では属性間1の範囲にあり、したがっ
て属性データto=’l」が設定される。
この後、処理は行番号4へ移る。このため逆上りフラグ
および順下りフラグはrQ、、rlJとなる。これ以降
、行番号5〜10には逆上りフラグ=「O」または「1
」のいずれかが設定される。
この後、処理は行番号11にff’l達する6分岐先は
行番号5のRSH命令により行番号1に変更されており
、したがって属性間2が増設され、逆上りフラグ−「2
」が設定される。また行番号データN〇−「1」と属性
データto−rlJが設定される。
(f)分岐瓦間i (i=1.2.・・・)この分岐瓦
間のデータは分岐先命令とについて設定され、分岐先の
行番号データNoと、当該分岐命令の直前の命令が属す
る属性間番号frと、分岐先命令の属する属性間番号t
oとがそれぞれ設定される。
以下、分岐瓦間のデータと属性間のデータとを用いて第
4表のプログラム例で逆上り解析可能であることを説明
する。逆上りフラグ=「1」について逆上ると、行番号
9で道上りフラグ=「0」となるので分岐瓦間を参照し
、行番号3の属性間1から分岐していることが理解され
る。さらに逆上り、行番号1ですべての情報が確定する
。したがって逆上りフラグ−「1」に関する経路は行番
号10→9→3→2→1となり、その処理内容は、[P
ORT1+O] +1→[PORT1+O]     
・・・(1〉となることが理解される。
次に逆上りフラグ=「2」について逆上ると、まず属性
間2が参照されるが、行番号9にて逆上りフラグ=「1
」に変更されるので、行番号8については属性間1が参
照される。これ以降、前述と同様に逆上って読取り、行
番号6にてすべての情報が確定する。これによれば処理
内容は、[PORT2+O] + 1 + 1→[PO
RT2+O]  ・・・〈2〉となることが理解される
第4図は流れ構造解析手段11の動作を説明するフロー
チャートである。流れ構造解析手段11の動作の概略は
上記第2表〜第4表を参照して説明したが、以下にその
動作を詳述する。第4図ステップC1では解析を開始す
る行番号Inを所定の値に設定し、また各種データを所
定の値に初期化する。ステップc2では処理が最終行ま
で到達したか否かを判断する。到達していなければ処理
はステップc3にf多り、現在解析の対象となっている
命令の行番号1nに関して設定される属性間の個数を表
す配列CZ[1n]が0であるか否かを判断する。個数
配列CZが0であれば、初めて解析する命令であること
を意味する。
ステップC3の判断が否定であれば処理はステップc4
に移り、属性間の個数を1つ増加する。
ステップC5では第4表を参照して説明した属性データ
を設定する。ステップc6では行番号Inの命令が分岐
先行であるか否かを判断する0分岐先行であればステッ
プC7で第4表行番号4の命令における分岐元n1など
の分岐瓦間を設定し、ステップC8に移る。ステップC
6の判断が否定であればステップc9に移り、前記逆上
りフラグや順下りフラグを設定する。
以下、上記逆上りフラグと順下りフラグとについて説明
する。第5121は流れ制御ファイル記憶部12の構造
を説明する図である。流れ制御ファイル記憶部12は、
分岐元ファイル部21と属性ファイル部22とから構成
される。第6(2Iは分岐元ファイル部21のtg造を
説明する図である。分岐元ファイル部21は行番号毎に
設けられ、当該行番号を分岐先とする分岐元命令の関数
を記憶する分岐元個数記憶部23と、第4表を参照して
3(ト明した分岐瓦間に相当する分岐瓦間記憶部24が
たとえば80領域設定される。分岐瓦間記憶部24は行
番号記憶部25、分岐元属性記憶部26、分岐先属性記
憶部27を含んで構成される。
第712は属性ファイル部22の13aを説明する図で
ある。属性ファイル部22は各行番号毎に設けられ、当
該行番号に設定された属性間の関数を記憶する属性個数
記憶部28、当該命令行の属性データが確定すれば「1
」、不定の場合は「0」で表される不定フラグを記憶す
る不定フラグ記憶部29、第4表の属性間の属性データ
toに相当する属性値を記憶する属性値記憶部30.第
1図示の分岐条件ファイル記憶部16において当該行番
号の命令の分岐条件を記憶しているアドレスを記憶する
分岐条件記憶部31、第4表の属性間における行番号デ
ータNOと属性データtoとをそれぞれ記憶する分岐先
行番号記憶部32、分岐元属性記憶部33、第4表の属
性間のフラグに相当する逆上りフラグを記憶する逆上り
フラグ記憶部34、順下りフラグを記憶する順下りフラ
グ他部35を含んで構成される。
前記順下りフラグは第4表のたとえば属性間lのIij
下りフラグ欄に示すように設定される。すなわち、成行
番号の命令が直後の行番号の命令と連続した命令であれ
ば「1」、不連続な命令であれば「O」を与える。第4
表の行番号2は行番号3と連続する命令であり、前記デ
ータ「1」が与えられる。ところが行番号3は行番号4
の命令とは連続せず、したがってデータ「0」が与えら
れる。
第4図示ステップc7.c9では、上述したような内容
を右する逆上り属性、順下り属性および分岐瓦間が設定
される。
まずステップC8で当該命令が分岐命令であるか否かが
判断される0分岐命令であればステップcloに移り、
当該分岐命令が第4表行番号11RET命令のような割
込み処理を終了させる命令であるか否かを判断する。こ
の判断が否定で、らればステップallに移り、分岐先
行番号を求める。
これは第1図のリストファイル記憶部6を参照して求め
られる。ステップc12では、分岐の数を表す分岐数デ
ータbiを+1インクリメン1〜し、ステップc13で
は当該分岐数データb iと当益行番号を配列m、 m(bi)=j’ n             ・=
<3)で対応付ける。
ステップc14では、後述するようにスタックの変化が
チエツクされる。ステップc15では属性データが計算
されステップc16では次の行番号を変数Nnに設定し
、処理をステップc2に戻す。前記ステップc8の判断
が否定であれば処理はステップc14に移る。
前記ステップC3の判断が肯定であれば当該命令は初め
て解析する命令行ではないことになり、ステップc17
で同一属性を有する属性間が存在するか否かが判断され
る。この判断が否定であればステップC4に移り、属性
間が増加される。ステップC1,7の判断が肯定であれ
ばステップC18に移り、当該分岐命令が分岐先行であ
るか否かが判断される。分岐先行であればステップc1
9で、第4表の分岐瓦間が設定され、ステップC20に
仔る。ステップc18の判断が否定であればステップC
21において前記ステップc 9.で説明した逆上りフ
ラグおよび順下りフラグが設定される。ここでステップ
c19.c21の後、ステップc17の判断が肯定とな
っているので同一属性(間がすでに存在していることに
なり、この属性に関しては解析は終了しており、再び解
析を行うことなく解析処理が終了され、ステップc20
に処理を移している。
ステップc20では前記分岐数データbiが0であるか
否かが判断される。肯定であれば処理は終了する。否定
であれば解析処理が部子していないことになり、ステッ
プc20に前記ステップC13で記憶した分岐命令の行
番号enを前記配列m(bi)にて読出し、またステッ
プc23にて分岐数データbiを一1デクリメントし、
処理はステップC2に戻る。すなわちステップc22で
読出された行番号1nから再び解析処理を行う。
第8図は、分岐条件解析手段13の動作を説明するフロ
ーチャートである。上記第4表に示したプログラム内容
に即して分岐条件解析処理について説明する。第8図ス
テップd1では行番号slnを0に設定し、ステップd
2では行番号sinを+lインクリメントする。ステッ
プd3では当該行番号1nがプログラムの最杵行番号、
すなわち第4表のプログラム例では行番号11を超えた
か否かを判断する0Mえていれば処理は3.□了し、超
えていなければステップd4に移る。ステップd4では
行番号10の命令が分岐命令であるか否かを判断する。
上記プログラム例では、行番号1は分岐命令ではなく処
理はステップb2へ戻り、次の行番号の命令へ進む。行
番号3で分岐命令であることが判断され、ステップd5
へ進む。
ステップd5では、属性同番号を表す変数kをOに設定
し、ステップd6では変数kを+1インクリメントする
。ステップd7では、当該行番号1 r+の命令に関す
る属性間の個数を表す配列CZ(1n)に関して、 k≦CZ <1 n)            −(4
)の判断を行う。この判断が否定であれば、?、4図に
示した流れ+743a解析処理の際の命令毎の属性間の
個数を超過したことになり、すなわち当該分岐+i’(
7令におけるすべての属性について分岐条件解析が終了
したことになり、処理はステップd2へ移り、次の行番
号の命令へ進む。
ステップd7の判断が肯定であればステップd8へ移り
、当該行番号1nの前記命令に才3ける属性同番号1く
に沿って後述する逆上り処理を開な白して逆上り経路を
求める。前述したように分岐命令の分岐条件を確定する
に必要な命令には、後述する関与フラグを設定する。ス
テップd9では、後述するように逆上って読取った命令
毎の実行内容を分岐条件として4M成する。ステップd
loでは、このようにして得られた分岐条件を第1図示
の分岐条1′Fファイル記憶部16に記憶する。
第9図は、第8図のステップd8の逆上り処理の詳細を
説明するフローチャー1・である。第9図ステップe1
では、後述する制(卸変数S Wが0に初期化される。
ステップe2では、上記制御変数SWがOであるか否か
を判断し、肯定であればステップe3に移り、第4表の
属性間に示される逆上りフラグをチエツクして、逆上り
フラグが0のとき制御変数5W=2とし、逆上りフラグ
が0以内のときS、W=1と設定する。この後、処理は
ステップe2に戻る。
第10図は、前記ステップe3の逆上り判断処理の詳細
を説明するフローチャー1・である。第1O図ステップ
flでは、第4表行番号3の属性閤1の属性データto
で示される属性間番号を読出す。上記例ではto=rl
、1であり、属性III 1が読出される。ステップr
2では、属(1fmtの逆上りフラグの値を前記属性デ
ータtoの値に設定する。ステップf3では、属性デー
タtoが0であるか否かを判断する。○であれば前行の
命令とは実行J’ll’tに関する連続性が失われてい
ることになり、ステップf4で前記制御変数S W =
 2に設定して処理は冷も了する。
前記ステップf3で判断が否定であれば、前行の命令と
は処理が連続していることになり、ステップf5にて制
御変数5W−1に設定する。ステップf6では、行番号
を表す変数10を一1デクリメントして処理を終了する
。第4表のプログラムと例の行番号3では属性データt
o−rl」であり、この場合、制御変数5W=1となる
再び第9図を参照して、前記ステップc2の判断が否定
であればステップe4へ移り、制御変数SW= 1であ
るか否かを判断する。肯定であればステップe5へ移り
、上記分岐命令の分岐条件を確定するに必要な情報が全
て得られているとき、対応する逆上りフラグをクリアし
、新たに必要な情報を対応するフラグをセットする。全
てのフラグがクリアされたとき、制御変数S W = 
4と設定され、これ以外のときには制御変数S〜v =
 o i、:設定される。この後、処理はステップe2
に戻る。
第11図は、前記ステップe5の逆上り情報設定処理の
詳細を説明するフローチャートである。
第11図ステップg1では、被解析プログラムを1行ず
つ逆上る毎に+1インクリメントされる逆上り行カウン
タrcを+1インクリメントする。
ステップg2では、逆上り用カウンタcnを変数とし、
行番号In、属性データto、分岐量番号ndおよび分
岐命令またはストア命令の分岐条件、またはス)・ア条
件を確定するに必要な命令の行番号rnOを一時的に記
憶するワークメモリmに、先ず逆上った行番号βnを記
憶する。
ステップg3では同じくワークメモリmに逆上った命令
の属性データtoを記憶する。ステップg4では5、逆
上った行番号に対応する第6図示の分岐元ファイル部2
Iの分岐六個21において、当該命令の属性データto
と同一属性へ分岐している分岐元命令の関数を計数し、
記憶する。また。
前記ワークメモリmに記憶された分岐元命令毎に分岐元
同番号ntをワークメモリmに記憶する。
ステップg5では、前記ステップg2〜g4で得られた
各種データが必要であるが否がを判断する。第4表の行
番号3のCALL命令は、無条件分岐命令であり、した
がって行番号2の上記各種データは不必要であり、判断
は否定となる。一方、第4表行番号3が前記第1表行番
号5の[lBC命令のように条件付き分岐命令であって
、行番号2がその分岐条件に関与するならばステップg
7へ移り、そのような命令毎に与えられる番号を前記ワ
ークメモリに記憶する。ステップg8では、前記ワーク
メモリ以外の情報フラグをクリアし、ステップg9に移
る。
ステップg9では、新たな・2要情報が4p)るが否か
が判断され、あればステップgloで新たな情報フラグ
を設定し、ステップgllに移る。前記ステップg5の
判断が否定の場合、前記ワークメモリm(rcrn○)
にはデータ「の」が設定され、ステップgllに移る。
ステップg9のf’! 断が否定の場合も同様である。
ステップgllでは、分岐条件やス)・ア命令の内容を
確定するためにさらに新たな+ii報が必要が否かを表
す必要情報フラグが「O」であるが否かを判断する。す
なわち、必要情報フラグがrl。
のとき、逆上り解析処理が出発した前記分岐命令やスト
ア命令の実行内容が確定したことになり、処理はステッ
プg12へ移り、前記ホIJ DU変変数6一=4」と
する。これはth述するように、前3己ワークメモリm
に記憶されたデータを第1図の分岐条件ファイル記憶部
16に書込む処理を行うためである。また、前記ステッ
プgllの判断が否定であれば、処理はステップg13
にびり、制御変数5W=rOJに設定される。これは後
述するように、処理が第1図ステップe2へ戻ったとき
ステップe3へ移って逆上り処理を続行するためである
このようにして第1図ステップe5が実行され、処理は
ステップe2に戻る。前記ステップe4の判断が否定で
あればステップe6へ移り、制御変数sw=r2.であ
るか否かが判断される。この場合は、ステップe3で説
明したように、逆上りフラグ−「oJであって、行番号
が直前の命令とは処理の順序が連続していない命令であ
る場合を示している。このような場合には、逆上り解析
処理を分岐させる必要があるため、ステップe7に移る
。ステップe7では、後述するように逆上り解析処理の
分岐先の行番号を求め、ル制御変数SW=「1」として
処理をステップe2に戻す。
第12図は、第9図ステップe7の逆上り分岐処理の詳
細を示すフローチャートである。第12図ステップ1〕
1では、第11図ステップg4で分岐瓦間番号が記憶さ
れたワークメモリm (rcnd(cn)]から分岐元
欄番号を読出し、第4表に示されるような分岐元箱1な
どにおいて、対応する分岐元行番号データNOや、分岐
元の属性データすなわち分岐元属性データfrを求め、
行番号1nに前記分岐元行番号データNOを設定し、ス
テップh2では属性データtoに分岐元属性データを設
定する。
ステップh3では、第11図ステップg4で設定された
分岐個数データm[rc]、cnを一1デクリメントす
る。この後、ステップh4で前記制御変数5W=rl」
とし、処理は終了する。
このように第9図ステップe7の処理が終了してステッ
プe2に戻る。ステップe6の判断が否定であればステ
ップe8に移り、制御変数SW−「3」であるか否かを
PI断する。この判断が肯定であればステップe9に移
り、逆上り解析を保留している解析経路の開始行番号を
求め、制御変数5W=r2Jとして処理をステップe2
へ戻す。
第13図は第1図ステップe9の未解析データ処理の詳
細を示すフローチャートである。第13図ステラプル1
では、逆上り経路カウンタrcが「O」であるか否かを
判断する。すなわち5未解析の逆上り解析経路が残って
いるかどうかを判断する。このような未解析逆上りルー
トが存在しなければステップp2に移り、制御変数5W
=r5」として処理を終了する。ステップp1の判断が
否定であればステップp3に移り、逆上り経路カウンタ
rcを一1デクリメントし、ステップp4にて第111
21ステツプg4で説明した分岐個数ワークデータm(
rc)、cnが0であるか否かを判断する。0であれば
処理はステップp1に戻り、他の未解析経路に関して同
様な処理を行う。
ステップp4の判断が否定であればステップp5に移り
、制御変数5W=r2Jに設定して処理を終了する。
再び第9図を参照して、このようにしてステップe9の
未解析ルート解析処理が読了して処理はステップe2に
戻る。ステップe8の判断が否定であればステップel
oに移り、制御変数S W−「4」であるか否かを判断
する。肯定であれば、逆上り解析処理は想定さJ″Lる
全ての逆上り解析経路に関して終了していることになり
、ステップe11にて得られた解析経路、すなわち逆上
り解析経路を構成する各命令の行番号データを第1図の
分岐条件ファイル16に書込む、未解析経路が残ってい
る場合には、ff、II御変数5W=r3」と設定され
る。
第14図は、第9図ステップellの処理を詳述するフ
ローチャートである。第11図ステップq1で前記逆上
り経路カウンタrcがOであるが否かが判断される。0
であれば、前逆上り経路に且って解析が終了したことに
なり、前述した経路データの記憶処理を行い、処理は終
了する。ステップq1の判断が否定であれば、ステップ
(13に移り、制御変数5W=r3Jに設定して処理を
終了する。
再び第9図を参照して、このようにしてステップell
でデータの書込み処理が序!了して処理はステップe2
に戻る。ステップeloの判断が否定の場合、第13図
ステラプル2で説明したように、全解析経路に亘って解
析が終了していることになり、第8図ステップd8で説
明したプログラムを逆上る経路を求める処理が終了する
第1図ステップd9では、ステップd8で得られた逆上
り解析経路毎に分岐条件を合成する処理を行う、上記第
2表〜第3表における分岐命令は、無条件分岐命令であ
り、第1表のプログラム例に関して説明する。このプロ
グラム例の分岐命令は、行番号5のBCC命令であり、
前述した逆上る経路を求める処理に従えば行番号5から
出発する逆上り解析経路として行番号5−4→3→2−
1が得られる。
すなわち、行番号5の分岐命令の分岐条件は行番号4で
得られる、 A−#8≧0            ・・・(5)で
あり、変数Aが未確定である0行番号3で変数Aについ
て、 A1−(A−B)             ・・(6
)の演算が行われ、未確定変数はA、Bとなる0行番号
2〜lの命令にて A−#3              ・・(7)B−
#5              ・・・(8)が得ら
れ、変数A、Bは確定する。したがって、これらを合成
すると、分岐条件として 3*5−8 ≧8                 
・・・(9)が得られる。
第8図のステップdloでは、このようにしてステップ
d9で得られた分岐条件を第1図分岐条件ファイル記憶
部16に記憶する。このようにして、被解析プログラム
を分岐命令から逆上り、分岐条件を求める処理は終了す
る。
また、第4表のプログラム例において、実行内容を求め
る処理は、第8図ステップd8で得られた逆上り解析経
路を、たとえば行番号10のST命令から開始すること
によって得られる。得られた第1の解析経路は、前述し
たように 行番号10→3→2→1 である、この経路に沿って前記分岐条件を合成した手法
と同様な技術により、実行内容を合成すると、 [PORT1+Oコ + 1 → [PORT1+O]
    ・・・(10)[PORT1]は、アドレスP
ORTに格納されたデータを示す。
が得られる。すなわちアドレスPORTIにプリセット
データOを加えたアドレスの内容にデータ1を加えたも
のを同一アドレスに再び格納する処理、すなわちアドレ
スPORTIのデータを+1インクリメントする処理を
示している。
池の解析経路は、 行番号10−9→8→6→5→4 となる、この経路に沿って実行内容を合成すると、[P
ORT2十〇]  + 1 + 1 → [、POnT
2+O]・・・〈11) となり、アドレスPOr(T2のデータを2ずつインク
リメントする処理であることが判る。このような実行内
容のデータは、第1図の実行内容ファ・fル記憶部17
に記憶される。
以上のようにして本実施例に従えば、上記第2表〜第4
表や第5図〜第7図に示した分岐元(間の各データや属
性間を構成する各データを、逆上り解析処理に先立って
設定するようにしたので、逆上り解析時においてプログ
ラムの実行順序に矛盾する不所望な逆上り解析経路が選
択されて、無駄な処理が行われる事態を防ぐことができ
る。
また本実施例では、前記第2表に示したプログラム例の
行番号9〜11のサブルーチンプログラムAのように、
行番号3のCALL命令で呼出されるとともに1行番号
6のCALL命令で呼出されたサブルーチンプログラム
Bが呼出されることにより再び実行されるような命令列
において、複数の分岐命令毎に解析経路を識別する属性
データを設定するようにしている。
したがって、このようなサブルーチンプログラムの中か
ら逆上り解析処理を行うに際して、CALL命令などの
呼出し箇所に応じた解析経路を設定することができ、誤
った解析経路が設定される事態を防ぐことができる。
以下、第4表の属性間におけるIIII下がりフラグに
ついて説明する。
第15図はこの願下がりフラグを用いる理由を説明する
プログラム例を示すフローチャートであり、第16図は
第15図示のプログラム実行時に用いられるスタック3
6の記憶内容を説明する図である。メインルーチンプロ
グラムの実行時にサブルーチンプログラムが呼出される
と、第16図(1〉に示すようにスタック36に(i戻
りアドレスが格納されてスタックポインタは+lインク
リメントされ、処理はたとえば第15図示のサブルーチ
ンプログラムに移る。
第15[21のサブルーチンプログラムにおいて、ステ
ップr1でスタック36に新たなアドレスデータを書込
むブツシュ命令P S L(が実行されると、スタック
36には第161121(2)[2I示のようにアドレ
スデータが書込まれ、スタック操作命令は十■インクリ
メントされる。こ)を以降、処理がステップr2.r3
  r4.r5と血行した場合、スタック36から最新
に書込まれたアドレスデータを読出してスタックポイン
タを一1デクリメンI・するプル命令PULLによりス
タック36では、第16図(3)に示すように前記アド
レスデータが消去され、戻りアドレスのみが残る状態と
なる。
第15図示のようなサブルーチンプログラムにおいて、
前記スタック操作命令P S Hとスタック操作命令P
ULLとが単一のサブルーチンプログラム内で1個ずつ
組となっているか否かを検査しようとする場合を思定す
る。このとき逆上り処理では、下記の3種類の経路が存
在する。
行番号R7,F16                
  ・・(12)行番号R7,R6,R2,R1・・ 
(13)行番号R7,R5,R4□R3,R2,R1・
1.(14)である、したがって、前記検査を行う場合
、第12式の経路についても検査することになり、スタ
ック操作命令に全く関係を有さない無駄な検査を行って
しまうことになる。したがって、前記のような検査を行
う場合、プログラムの実行)事に命令を読取って検査を
行う手法が無駄な処理を′+’ff <点で有利である
このため本実施例では、第4表の属性間における願下が
りフラグを設定するようにした。この願下がりフラグは
、前述したように、ある命令が次の行番号の命令と実行
順序に関して連続した命令であるか否かを識別するフラ
グである。この願下がりフラグを前述の実施例において
説明した逆上りフラグと同様な手法にて用いることによ
り、肢解析プログラムを願下がりの経路にて読取って解
析を行うことができる。これにより無駄な処理は省かれ
、処理の高速化と高効率化とを図ることができる。
前述の第4表のプログラム例において、サブルーチンプ
ログラムAに対し、f!数のCALL命令が配置される
場合、同表の分岐斤量および属性間は、CALL命令の
数だけ設定されることになる。
このようなサブル−チンプログラムがその中でスタック
の内容を変化させないならば、異なるCALL命令によ
って呼出された場合でも実行内容は同一であり、このよ
うな場合には後述するように分岐斤量および属性間に割
りあてられるメモリの容量を削減することができる。
このような本実施例の動作例を、下記第5衣のプログラ
ム例に沿って説明する。
(以下余白〉 上記の第5表の分岐元間および属性間のデータは、上記
第4表を参照して説明したデータの設定方法に基づいて
設定されている。ここで前述したように、分岐元間およ
び属性間に割りあてられるメモリの容量を削減するため
に、第5表のプログラム例に基づいて下記第6表のよう
な分岐元間および属性間を作成する。
第  6  表 上記第5表と第6表とでは、 下線を付したデー タが変更されている。すなわち、行番号3のCALL命
令とこれより分岐した行番号8〜10の命令列、および
リターン命令RETによりさらに分岐した行番号4に関
する分岐元間や属性間の決定に関しては、上記第5表と
同様に設定される。引続き行番号6を読取ったとき、行
番号8に分岐する。
第4表の例では新たな分岐元間2および属性間2が設定
されるが、本実施例は同一のサブルーチンプログラムを
解析するため、このような分岐元間および属性間の増加
を行わず、分岐元間1の行番号8において、行番号デー
タN0−rOJと設定し、また行番号4の属性データf
 r−r Q Jと設定する。さらに、行番号8の属性
間to−rO」と設定する。このようなデータ「0」を
用いて。
行番号6のCALL命令に基づく行番号8〜10のサブ
ルーチンプログラムの解析を終了したことを表示する。
このとき、属性間も同様に、行番号l→2→3→8→9
−10→4→5までの解析が終了した段階では、第5表
の属性間1のようなデータが設定されるが、行番号6以
降の前述のような処理によって属性間2を増設せず、第
6表の属性WIlのようなデータが設定される。
逆上り処理にあたって、行番号8の分岐元間1の行番号
データNoが参照されるとこれは「0」であるため、分
岐元行番号が不明となる。したがって、前述した分岐元
間および属性間を作成する処理において、行番号8に分
岐する分岐元命令の行番号の次の行番号、すなわち第5
表の例では行番号5,7をファーストインラストアウト
(FrL○)形のメモリに記憶する。したがって、逆上
り解析時において、分岐元間で行番号データ「0」のデ
ータが参照された場きには、前記行番号を記憶したF 
I LO形メモリからデータを読出して逆上り処理にお
ける分岐先行番号とする。
このようにすることによって、流れ制御ファイル記憶部
12において、分岐元間および属性間に711当てられ
るメモリの容量を削減することができる。
前記第4表のプログラム例における実行内容は、行番号
3.5.11などの分岐命令やスタックの内容を操作す
る命令などによって変化するスタックの記憶内容に大き
く作用されることが知られている。このようなスタック
の内容を予め属性間のデータとしてまとめておくと、プ
ログラムの解析上便利である。とりわけ前記第4表の行
番号5のPSH命令や、これと対を成すPULL命令な
どのようにスタックの内容を変化させる命令が含まれる
場合には、プログラムの実行状態の変化が明瞭になり、
プログラム解析経路の特定が容易になる。
上記第4表と同一のプログラム嗣において、当該プログ
ラムの各命令毎に下記第7表のようなアドレスが設定さ
れる場合を想定して説明する。
(以下余白) 本実施例では、分岐元請および属(i:欄のデータは第
4表のデータを用いるが、これに加えスタックの内容が
変化する命令がある場合には、その命令により変(ヒし
たスタックの内容をデータとするスタックデータVAL
の欄を設ける。これによれば、行番号3で行番号9へ分
岐するが、このときスタックにはデータ#FOO7が格
納される。したがって、行番号9〜11のV A L 
fliには、当該アドレス#FOO7の上位バイトおよ
び下位バイトを転換したデータVAL−r07FOJが
それぞれ設定される。
行番号11から行番号4へ処理が戻り、次に行番号5に
おいてスタックの記憶内容が行番号1のアドレス#FO
OOに変更される。したがって、これ以降の行番号4〜
8の属性間1においては、スタックデータVAL= r
oOFO」が設定される1行番号8にて、新たな属性間
2が設定され、引続きスタックデータVAL= roO
FOJが設定される。
以上のようにして本実施例によれば、属性間にスタック
のデータを設定するようにしたので、たとえばサブルー
チン命令のメインルーチンへの復帰命令RETから逆上
り処理を行う場合、前記メインルーチンへの復(1先は
、スタックデータVALを参照すれば判明し、各命令を
逆上って順次的に解析して検知する必要が解消される。
これにより処理の高速化が図られる。また、前記スタッ
クデータVALを用いれば、各命令毎に設定される属性
の種類および処理経路等の属性の識別が格段に容易とな
る。
第8図ステップd9において、分岐条件を合成して第1
図に示すフローチャート作成手段1つや実行内容解析結
果出力手段20などから、当該得られた結果を論理式の
結合した形式としてフローチャートやPAD図の形式で
出力したり、または実行内容を印字出力したりする場合
、被解析プログラムが長くなるほどその出力量が膨大と
なる。
したがって、これらの論理式で記述される出力をプール
代数を用いて簡易な形に整理する技術が必要となる。
第14図は、このような実施例を説明するフローチャー
トである。フローチャート作成子1119や実行内容解
析結果出力手段20からの出力がたとえば下式、 ・・・(15) のような論理記号の結合した論理式として与えられてい
る場合、これを簡約化するには以下の処理を行う、この
簡約化処理の基本方針は下記の第16式と第17式とで
ある。
A+A=U             ・・・(16)
A+A−g=A+g          ・・・(17
)U;全体集合 ALUの部分集合 AHAの補集合 g;単項 ・;論理積演算 +;論理和演算 第15図は、上記第16式と第17式の内容を説明する
ペン図である。上記第16式は、全(、k ’1合Uに
おいて、部分集合Aとその補集合Aとの和集合が常に全
体集合となる意味である。また、上記第17式は部分集
合Aと単項gとが互いに素であるならば、補集合Aと単
項gとの頂集合と集合Aとは集合Aと単項gとの和集合
になる意味である。
このような上記第■6式および第17式の基本方式に基
づいて、上記第15式を簡約化する手11iについて第
17図のフローチャートを9@して説明する。第17図
ステップS1において、各項を分解する。これにより上
記第1式は下記第18式に変化される。
F = C−A + C−A−B +C−A + C−
A−B + A−B・・・(18) 次にステップS2にて共通項があるか否かが判断される
。先ず第18式の第1項および第2項について、共通項
Cがあることが判断され、ステップs3で0でくくられ
、下記第19式が得られる。
C・(A+A−B)            ・・・(
19)次にステップs4では、前記第16式および第1
7式に基づく合成パターンがあるか否かが判断される。
第19式のく〉内では、第17式に基づく合成が可能で
あり1判断が肯定となり、ステップs5に移り、下記第
20式のように合成される。
前記ステップS4で合成パターンがないことが判断され
るね、ステップS6に移り、池に0でくくれる同−項が
あるか否かが判断され、なければステップs3に移る。
下記第20式の例では、(〉内でこれ以上の合成パター
ンがなく、処理はステップS1に戻され、0が分解され
、下記第21式が得られる。
C・(A+B)              ・・・(
20)C−A + CB              
・・・(21)次に第21式第1項と第18式第3項と
に関して、前記ステップs2.ステップs3の処理が適
用され、下記第22式が得られる。
C−A+C−A=A・(C+C)      ・・・(
22)次のステップs4.s5にて上記第16式の基本
方針が適用され、下記第23式が得られる。
A・ (C+C)= A              
   ・・・(23)次に第21式第2項と第18式第
4項とに関して、同様な処理が行われ、下記第24式の
結果が得られる。
C,B +C,A−B = B・(C+C−A>= B
C+I3A・・・(24) 次に第21式第1辺の第2項と、第18式第5項との間
で同様な処理が行われ、下記第25式が得られる。
B−AF−A・B=A・(B+B)=A     ・・
・(25)したがって第23式、第21式第1辺第1項
および第25式より下記第26式がfnrられる。
A + B−C→−A = B−C+ U = U  
  ・・・(26)このようにして上記第16式および
第17式に示す基本方針の元で、第17図に示す処理手
順に基づいて上記第15式に示す論理式が全体集合Uに
簡約化されることが確認された。このようにして第8I
2Iステツプd9で分岐条件を合成する処理を行うにあ
たって、前述したようにプール代数を用いて論理式を論
理演算にて簡略化して表現する。
これによりフローチャート作成手段19でフローチャー
トを作成して出力したり、または実行内容解析結果出力
手段20にて実行内容を論理式にて印字出力する場合に
あたって、実行内容をより内容の把握が容易な形式にて
表現することができ、本件プログラム内容解析装置をプ
ログラムのデバッグなどに用いる場合にきわめて効率的
である。
発明の効果 以上のように本発明に従えば、単一個の分岐命令に関し
て、分岐データ作成手段にてサブルーチンの経路データ
および位置データを作成した後は、残余の複数の分岐命
令に関しては具体的な解析処理を省略する旨のデータを
当該サブルーチンの先頭行の位置データに代えて記憶す
る。またこの解析省略データが付された命令の位置デー
タは別途記憶される。逆上り解析時にこの解析省略デー
タを検出すると、全体別途記憶された位置データを読出
して逆上り処理を続行する。これにより同一のデータを
重複してメモリに割当てる事態が防がれる。
【図面の簡単な説明】
第1図は解析装置1の構成を示すブロック図、第2図は
解析設備処理手段5の動作を説明するフローチャート、
第3図は被解析プログラム例の動作の流れを示すフロー
チャート、第4図は流れ構造解析手段11の動作を説明
するフローチャート、第5図は流れ制御ファイル記憶部
12の構成を示す図、第6図は分岐元ファイル記↑Δ部
21の構成を示す図、第7図は属性ファイル記を色部2
2の組成を示ず図、第8図は分岐条件解析千F113の
動作を説明するフローチャート、第9121は本実施ρ
りの逆上りフラグを説明するフローチャート、第10図
逆上り処理における逆上り判断を説明するフローチャー
1・、第11図は逆上り処理におけるデータ設定処理を
説明するフローチャート、第12図は逆上り処理の逆上
り分岐処理を説明するフローチャート、第13図は逆上
り処理の未解析ルート処理の動作を説明するフローチャ
ート、第14図はデータ書込み処理を説明するフローチ
ャート、第15図は被解析プログラム例の動作の流れを
説明するフローチャート、第16図はスタックの状態を
説明する図、第17図は論理式のプール代数を用いる簡
約化処理を説明するフローチャート、第18図は本実施
例を説明するベン図、第19図はプログラム例の流れを
示すフローチャートである。

Claims (1)

  1. 【特許請求の範囲】 複数の命令から成るプログラムの実行順序を命令の配列
    順序と異ならせる分岐命令を複数含む第1プログラム部
    分と、第1プログラム部分の複数の分岐命令により実行
    順序が分岐して実行される第2プログラム部分とを含む
    プログラムの各命令を、実行順とは逆に逆上つて読取り
    、その内容を解析する装置において、 各命令毎に、分岐命令に対応するプログラムの複数の実
    行経路を識別する経路データと、分岐命令により規定さ
    れる分岐先命令または分岐命令のいずれかである命令毎
    に、対応する分岐命令または対応する分岐先命令のいず
    れかの位置データとを含む分岐データを作成するととも
    に、前記第1プログラム部分の各分岐命令に対応して第
    2プログラム部分の経路データおよび位置データを作成
    する際に、第2プログラム部分に実行順序が分岐する複
    数個目の分岐命令の場合には、第2プログラム部分に亘
    る経路データおよび位置データの作成処理に代えて、第
    2プログラム部分の先頭命令に対応して前記経路データ
    とともに、位置データと対応する解析省略識別データと
    位置データとを作成し、当該第2プログラム部分に関連
    する分岐元命令および分岐先命令に関連して位置データ
    に対応する前記解析省略識別データと経路データとを作
    成する分岐データ作成手段と、 経路データを記憶する経路データ記憶手段と、位置デー
    タまたは解析省略識別データのいずれかを記憶する位置
    データ記憶手段と、 解析省略識別データに対応する命令の位置データを記憶
    する解析省略位置データ記憶手段と、プログラムを逆上
    つて各命令を読取る逆上り読取手段であつて、逆上り時
    には各命令の経路データと位置データとを、経路データ
    記憶手段と位置データ記憶手段とから読出し、連続する
    同一経路データに対応し、かつ位置データで規定される
    分岐経路に従つてプログラムを逆上つて読取るとともに
    、位置データが前記解析省略データである場合に解析省
    略位置データ記憶手段から対応する位置データを読出し
    て逆上つて命令を読取る、そのような逆上り読取り手段
    とを含むことを特徴とするプログラム内容解析装置。
JP1319450A 1989-12-07 1989-12-07 プログラム内容解析装置 Expired - Fee Related JPH0772873B2 (ja)

Priority Applications (1)

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

Applications Claiming Priority (1)

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

Publications (2)

Publication Number Publication Date
JPH03179536A true JPH03179536A (ja) 1991-08-05
JPH0772873B2 JPH0772873B2 (ja) 1995-08-02

Family

ID=18110337

Family Applications (1)

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

Country Status (1)

Country Link
JP (1) JPH0772873B2 (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
JPH0772873B2 (ja) 1995-08-02

Similar Documents

Publication Publication Date Title
Van Praet et al. Instruction set definition and instruction selection for ASIPs
CA1159151A (en) Cellular network processors
JPS6024985B2 (ja) デ−タ処理方式
US4896258A (en) Data processor provided with instructions which refer to both tagged and tagless data
JP3424520B2 (ja) プログラム変換装置とデバッグ装置
JPH06250837A (ja) スケジューリング処理方式
US5673425A (en) System for automatic generating instruction string to verify pipeline operations of a processor by inputting specification information having time for the processor to access hardware resources
JPH07104784B2 (ja) デジタルデータ処理装置
JPS6081641A (ja) レジスタトレース方法
JPH03179536A (ja) プログラム内容解析装置
JP3318051B2 (ja) 翻訳処理方法
US5751288A (en) Program display method and device, and also program generation method and device
JPS60136832A (ja) タグ付きデ−タを扱う論理型デ−タ処理装置
JPH0769855B2 (ja) プログラム内容解析装置
JPH0769856B2 (ja) プログラム内容解析装置
JPH0775003B2 (ja) プログラム内容解析装置
JPH03177940A (ja) プログラム内容解析装置
JPH05241802A (ja) ソースモジュール修正情報のマージ方式
JPS6152748A (ja) マイクロコンピユ−タ開発装置のトレ−ス選択方式
JPH0334021A (ja) プログラム言語変換方法
JPH06259209A (ja) プロセス実行状況表示装置
JPS62267842A (ja) プログラムチエツク方式
JPS63138427A (ja) 配列に対する命令のスケジユ−リング処理方式
JPH04338841A (ja) デバッガ装置
JPH01184539A (ja) アセンブリ言語の並列記述方式

Legal Events

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