(57)【要約】【課題】  消費電力を削減するように命令コードを生成することが可能なコンパイラを提供すること。【解決手段】  ｎ＋１番地のＮＯＰ命令のオペランド［２６：０］を、先行するｎ番地の命令コードのオペランドフィールド［２６：０］（オペランドＡ）のビット列に置換える。これによって、ｎ＋１番地のＮＯＰ命令のオペランドフィールドが、先行するｎ番地の命令コードのオペランドフィールドと一致し、ｎ番地の命令からｎ＋１番地の命令に処理が移る場合でも、変化するビット数を削減することができる。したがって、消費電力を削減することが可能となる。【選択図】        図１
2005196729.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの命令を解析して、命令コードを生成する命令解析手段と、
前記命令解析手段によって生成された命令コード内に動作を決定するのに必要でないビットがあるか否かを判定する判定手段と、
前記判定手段によって必要でないビットがあると判定された場合、該必要でないビットを直前の命令コードまたは直後の命令コードの該当ビットに置換する置換手段とを含むコンパイラ。
【請求項２】
前記命令解析手段によって生成された命令コードは、該命令コードがノーオペレーション命令であるか否かを示す情報を有し、
前記判定手段は、前記情報を参照して前記命令コードがノーオペレーション命令であるか否かを判定し、
前記置換手段は、前記判定手段によって前記命令コードがノーオペレーション命令であると判定された場合、前記命令コード内の前記情報以外のビットを直前の命令コードまたは直後の命令コードの該当ビットに置換する、請求項１記載のコンパイラ。
【請求項３】
プログラムの命令を解析して、命令コードを生成する命令解析手段と、
前記命令解析手段によって生成された命令コード内に動作を決定するのに必要でないビットがあるか否かを判定する判定手段と、
前記判定手段によって必要でないビットがあると判定された場合、前記命令コードのうち動作を決定するのに必要でないビットの一部を直前の命令コードの該当ビットに置換し、他の部分を直後の命令コードの該当ビットに置換する置換手段とを含むコンパイラ。
【請求項４】
前記命令解析手段によって生成された命令コードは、該命令コードがノーオペレーション命令であるか否かを示す情報を有し、
前記判定手段は、前記情報を参照して前記命令コードがノーオペレーション命令であるか否かを判定し、
前記置換手段は、前記判定手段によって前記命令コードがノーオペレーション命令であると判定された場合、前記命令コード内の前記情報以外のビットの一部を直前の命令コードの該当ビットに置換し、他の部分を直後の命令コードの該当ビットに置換する、請求項３記載のコンパイラ。
【請求項５】
前記置換手段は、前記直前の命令コードからの変化ビット数と、前記直後の命令コードへの変化ビット数との合計が最小となるように、前記命令コードのうち動作を決定するのに必要でないビットを置換する、請求項３記載のコンパイラ。
【請求項６】
前記命令解析手段によって生成された命令コードは、該命令コードがノーオペレーション命令であるか否かを示す情報を有し、
前記判定手段は、前記情報を参照して前記命令コードがノーオペレーション命令であるか否かを判定し、
前記置換手段は、前記判定手段によって前記命令コードがノーオペレーション命令であると判定された場合、前記直前の命令コードからの変化ビット数と、前記直後の命令コードへの変化ビット数との合計が最小となるように、前記命令コード内の前記情報以外のビットを置換する、請求項５記載のコンパイラ。
【請求項７】
前記命令コードはノーオペレーション命令である、請求項１，３または５記載のコンパイラ。
【請求項８】
命令コードを格納する命令メモリと、
前記命令メモリから出力される命令コードのオペコードをデコードして、命令コード内に動作を決定するのに必要でないビットがあるか否かを判定するデコーダと、
直前の命令コードを保持するレジスタと、
前記デコーダによって必要でないビットがあると判定された場合、該必要でないビットとして前記レジスタに保持される直前の命令コードの該当ビットを選択し、前記デコーダによって必要でないビットがないと判定された場合、前記命令メモリから出力される該当ビットを選択するセレクタとを含む命令コード出力装置。
【請求項９】
命令コードのうちオペコードを格納する第１の命令メモリと、
命令コードのうちオペランドを格納する第２の命令メモリと、
前記第１の命令メモリから出力される命令コードのオペコードをデコードして、オペランドが必要であるか否かを判定するデコーダと、
直前の命令コードを保持するレジスタと、
前記デコーダによってオペランドが必要でないと判定された場合、前記第２の命令メモリをディスエーブルにして前記レジスタに保持される直前の命令コードのオペランドを選択し、前記デコーダによってオペランドが必要であると判定された場合、前記第２の命令メモリから出力されるオペランドを選択するセレクタとを含む命令コード出力装置。
【請求項１０】
命令コードのうちオペコードを格納する第１の命令メモリと、
命令コードのうちオペランドを格納する第２の命令メモリと、
前記第１の命令メモリから出力される命令コードのオペコードをデコードして、オペランドが必要であるか否かを判定するデコーダと、
前記デコーダによってオペランドが必要でないと判定された場合、直前の命令コードのアドレスを選択して前記第２の命令メモリのアドレスとして出力し、前記デコーダによってオペランドが必要であると判定された場合、前記第１の命令メモリから出力されるオペコードに対応する命令コードのアドレスを選択して前記第２の命令メモリのアドレスとして出力するセレクタとを含む命令コード出力装置。
【請求項１１】
命令コードが所定命令であるか否かを示す情報を有する命令コードを格納する命令メモリと、
直前の命令コードのオペコードおよびオペランドを保持するレジスタと、
前記情報が所定命令であることを示す場合、前記レジスタに保持される直前の命令コードのオペコードおよびオペランドを選択し、前記情報が所定命令でないことを示す場合、前記命令メモリから出力されるオペコードおよびオペランドを選択するセレクタとを含む命令コード出力装置。
【請求項１２】
命令コードが所定命令であるか否かを示す情報を格納する第１の命令メモリと、
命令コードのオペコードおよびオペランドを格納する第２の命令メモリと、
直前の命令コードのオペコードおよびオペランドを保持するレジスタと、
前記情報が所定命令であることを示す場合、前記第２の命令メモリをディスエーブルにして前記レジスタに保持される直前の命令コードのオペコードおよびオペランドを選択し、前記情報が所定命令でないことを示す場合、前記第２の命令メモリから出力されるオペコードおよびオペランドを選択するセレクタとを含む命令コード出力装置。
【請求項１３】
命令コードが所定命令であるか否かを示す情報を格納する第１の命令メモリと、
命令コードのオペコードおよびオペランドを格納する第２の命令メモリと、
前記情報が所定命令であることを示す場合、直前の命令コードのアドレスを選択して前記第２の命令メモリのアドレスとして出力し、前記情報が所定命令でないことを示す場合、前記第１の命令メモリから出力される情報に対応する命令コードのアドレスを選択して前記第２の命令メモリのアドレスとして出力するセレクタとを含む命令コード出力装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサの動作を決定する命令コードを生成するコンパイラおよび命令コードを出力する命令コード出力装置に関し、特に、プロセッサを含んだ回路の消費電力の削減を可能にしたコンパイラおよび命令コード出力装置に関する。
【背景技術】
【０００２】
近年、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）など、命令コードを処理するデータ処理装置が盛んに開発されている。一般に、これらのデータ処理装置は、何ら動作を行なわないＮＯＰ（No OPeration）命令をサポートしていることが多い。たとえば、下記の非特許文献１には、３２ビットの命令コードを処理するＤＳＰにおいて、ＮＯＰ命令が３２個の０が並ぶビット構成を有する命令コードで表わされることが記載されている。また、ＮＯＰ命令以外にも、命令コードの３２ビット全てを使わずに、動作を決定しうる命令が存在することも知られている。
【０００３】
一方、バッテリ駆動の携帯機器などにもデータ処理装置が搭載されているが、このような装置においては益々処理性能の向上、消費電力の削減が必要になってくると共に、装置の小型化も必要になってくる。ハードウェア規模を小さくし、処理速度を向上させる技術として、キャッシュ技術が一般に使用されているが、処理性能を向上させつつ消費電力を削減することが困難であることも事実である。これに関連する技術として、特開２００２−２２９８０２号公報に開示された発明がある。
【０００４】
特開２００２−２２９８０２号公報に開示されたプログラム変換装置においては、プログラム読込部が、機械語命令プログラムから一定ビット長の命令コードを取出し、命令コード変換部が、今回取出された命令コードと、命令コード記憶部に記憶されている前回取出された命令コードとの排他的論理和、すなわち命令コードのビット変動を表わすコードを、変換後の機械語命令プログラムの機械語命令コードとして出力する。
【特許文献１】特開２００２−２２９８０２号公報
【非特許文献１】DSP96002 IEEE Floating-Point Dual-Port Processor User's Manual（Ａ−２７９ページ）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
一般に、データ処理装置は、ＰＣ（Program Counter）値をインクリメントしながら処
理を行なうことが多く、たとえば、ｎ＋１番地が３２個の０によって構成されるＮＯＰ命令であり、ｎ番地およびｎ＋２番地がＮＯＰ命令以外の命令である場合、ｎ番地の命令コードのうち１であるビットの数だけ１から０に変化し、ｎ＋２番地の命令コードのうち１であるビットの数だけ０から１に変化し、この変化がデータバスに現れることになる。このようなデータのトグルが頻繁に起こることによって、メモリ読出し時における消費電力の増大、信号配線における充放電に伴う消費電力の増大、デコーダ回路などの命令コードが入力されるロジック回路での消費電力の増大などが発生するといった問題点があった。
【０００６】
また、上述した特開２００２−２２９８０２号公報に開示されたプログラム変換装置においては、今回取出された命令コードと、前回取出された命令コードとの排他的論理和を演算して機械語命令コードとして出力するが、たとえば、前回取出された命令コードが３２個の０によって構成されるＮＯＰ命令であり、今回取出された命令がＮＯＰ命令以外の命令の場合には、今回取出された命令がそのまま機械語命令コードとして出力されることになり、消費電力の削減を図ることができない。
【０００７】
また、排他的論理和を演算して機械語命令コードとするため、命令コードを復元するための排他的論理和回路が必要になり、回路規模が増大する。さらには、排他的論理和回路によって復元された命令コードが命令デコーダ回路等に与えられるため、データのトグル数の削減効果がメモリからの読出しに限定されてしまう。したがって、命令デコーダ回路等においてデータトグルが発生してしまい、消費電力を効果的に削減することができないといった問題点があった。
【０００８】
本発明は、上記問題点を解決するためになされたものであり、第１の目的は、消費電力を削減するように命令コードを生成することが可能なコンパイラを提供することである。
【０００９】
第２の目的は、消費電力を削減するように命令コードを出力する命令コード出力装置を提供することである。
【課題を解決するための手段】
【００１０】
本発明のある局面に従えば、コンパイラは、プログラムの命令を解析して、命令コードを生成する命令解析手段と、命令解析手段によって生成された命令コード内に動作を決定するのに必要でないビットがあるか否かを判定する判定手段と、判定手段によって必要でないビットがあると判定された場合、必要でないビットを直前の命令コードまたは直後の命令コードの該当ビットに置換する置換手段とを含む。
【００１１】
本発明の別局面に従えば、命令コード出力装置は、命令コードを格納する命令メモリと、命令メモリから出力される命令コードのオペコードをデコードして、命令コード内に動作を決定するのに必要でないビットがあるか否かを判定するデコーダと、直前の命令コードを保持するレジスタと、デコーダによって必要でないビットがあると判定された場合、必要でないビットとしてレジスタに保持される直前の命令コードの該当ビットを選択し、デコーダによって必要でないビットがないと判定された場合、命令メモリから出力される該当ビットを選択するセレクタとを含む。
【発明の効果】
【００１２】
本発明のある局面によれば、判定手段によって必要でないビットがあると判定された場合、置換手段が、必要でないビットを直前の命令コードまたは直後の命令コードの該当ビットに置換するので、命令コードを処理するときに変化するビット数を削減することができ、消費電力を削減するように命令コードを生成することが可能となった。
【００１３】
本発明の別の局面に従えば、デコーダによって必要でないビットがあると判定された場合、セレクタが、必要でないビットとしてレジスタに保持される直前の命令コードの該当ビットを選択するので、命令コードを出力するときに変化するビット数を削減することができ、消費電力を削減することが可能となった。
【発明を実施するための最良の形態】
【００１４】
（第１の実施の形態）
図１は、本発明の第１の実施の形態におけるコンパイラによる命令コードの変換方法の一例を説明するための図である。命令コードの上位５ビット［３１：２７］はオペコードを示し、下位２７ビット［２６：０］はオペランドを示す。オペコードは、命令デコーダ回路によってデコードされ、どのような命令動作を行なうかを指定するためのフィールドである。オペランドは、オペコードで指定される動作に必要な情報、たとえばデータ格納場所などを指定するためのフィールドである。
【００１５】
図１に示す３つの命令コードは、それぞれｎ番地、ｎ＋１番地およびｎ＋２番地に格納
されており、ｎ番地、ｎ＋１番地、ｎ＋２番地の順番で命令が実行される。ｎ番地の命令がｓｕｂ（減算）命令であり、ｎ＋１番地の命令がＮＯＰ命令であり、ｎ＋２番地の命令がａｄｄ（加算）命令である。
【００１６】
図２は、本発明の第１の実施の形態におけるコンパイル装置の構成例を示すブロック図である。このコンパイル装置は、コンピュータ本体１、ディスプレイ装置２、ＦＤ（Flexible Disk）４が装着されるＦＤドライブ３、キーボード５、マウス６、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）８が装着されるＣＤ−ＲＯＭ装置７、およびネットワーク通信装置９を含む。
【００１７】
コンパイルプログラム（以下、コンパイラと呼ぶ。）は、ＦＤ４またはＣＤ−ＲＯＭ８等の記録媒体によって供給される。コンパイラがコンピュータ本体１によって実行されることによって、プログラムからオブジェクトコードが生成される。また、コンパイラは他のコンピュータよりネットワーク通信装置９を経由し、コンピュータ本体１に供給されてもよい。
【００１８】
図２に示すコンピュータ本体１は、ＣＰＵ（Central Processing Unit）１０、ＲＯＭ
（Read Only Memory）１１、ＲＡＭ（Random Access Memory）１２およびハードディスク１３を含む。ＣＰＵ１０は、ディスプレイ装置２、ＦＤドライブ３、キーボード５、マウス６、ＣＤ−ＲＯＭ装置７、ネットワーク通信装置９、ＲＯＭ１１、ＲＡＭ１２またはハードディスク１３との間でデータを入出力しながら処理を行う。
【００１９】
ＦＤ４またはＣＤ−ＲＯＭ８に記録されたコンパイラは、ＣＰＵ１０によりＦＤドライブ３またはＣＤ−ＲＯＭ装置７を介してハードディスク１３に格納される。ＣＰＵ１０は、ハードディスク１３から適宜コンパイラをＲＡＭ１２にロードして実行することによって、プログラムからオブジェクトコードが生成される。
【００２０】
図３は、本発明の第１の実施の形態におけるコンパイル装置の機能的構成を示すブロック図である。このコンパイル装置は、プログラムから命令を１つずつ抽出し、その命令を解析して命令コードを生成する命令解析部１５と、命令解析部１５によって生成された命令コードがＮＯＰ命令であるか否かを検出するＮＯＰ命令検出部１６と、ＮＯＰ命令検出部１６によってＮＯＰ命令が検出された場合に、ＮＯＰ命令のオペランドを１つ前の命令コードのオペランドに置換する置換部１７と、生成された命令コードを出力する命令コード出力部１８とを含む。
【００２１】
図４は、本発明の第１の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。まず、命令解析部１５は、プログラムから命令を抽出して解析し、その命令に対応する命令コードを生成する（Ｓ１）。次に、ＮＯＰ命令検出部１６は、命令解析部１５によって生成された命令コードがＮＯＰ命令であるか否かを検出する（Ｓ２）。
【００２２】
命令解析部１５によって生成された命令コードがＮＯＰ命令でなければ（Ｓ２，Ｎｏ）
、ステップＳ４へ処理が進む。また、命令解析部１５によって生成された命令コードがＮＯＰ命令であれば（Ｓ２，Ｙｅｓ）、置換部１７は、ＮＯＰ命令のオペランドを１つ前の命令コードのオペランドに置換する（Ｓ３）。
【００２３】
ステップＳ４において、命令解析部１５および置換部１７によって生成された命令コードを出力する（Ｓ４）。そして、命令の解析が全て終了したか否かが判定される（Ｓ５）。命令の解析が全て終了すれば（Ｓ５，Ｙｅｓ）、処理を終了する。また、命令の解析が終了していなければ（Ｓ５，Ｎｏ）、ステップＳ１に戻って次の命令の解析が行なわれる。
【００２４】
なお、本実施の形態においては、ＮＯＰ命令のオペランドフィールドを、先行する命令コードのオペランドフィールドに置換えるようにしたが、ＮＯＰ命令以外の命令コードであっても、命令コード内に動作を決定するのに必要でないビットがあれば、そのビットを先行する命令の対応するビット値に置換えるようにしてもよい。
【００２５】
また、命令コードが３２ビットの場合について説明したが、その性質上命令コードのビット長が大きいほど大きな効果が得られる。たとえば、ＶＬＩＷ（Very Long Instruction Word）方式のプロセッサにおいては、１２８ビット／命令の命令コードが使用されることがある。ＶＬＩＷ方式においては、複数の処理ユニットが、ユニット毎に用意された命令コード中のビットフィールドを使い、同時に制御できるため高い性能を達成することができる。しかし、複数の処理ユニットが同時に動作する頻度はそれほど高くないため、ＮＯＰ命令コードが出現する割合が高くなる場合がある。このような場合に、本実施の形態におけるコンパイラを使用することによって、消費電力をさらに削減することが可能となる。
【００２６】
また、本実施の形態においては、ＰＣ値が順にインクリメントされる場合について説明したが、これに制限されるものではない。たとえば、分岐命令によって連続した命令アドレスでない命令コードが実行される場合でも、注目する命令コードが特定命令コードに引続いて実行されることが事前に判明していれば、注目する命令コードのオペランドを用いて命令コードを置換することが可能である。
【００２７】
以上説明したように、本実施の形態におけるコンパイラによれば、生成された命令コードがＮＯＰ命令であれば、ＮＯＰ命令のオペランドを１つ前の命令コードのオペランドに置換するようにしたので、データ処理装置がそのプログラムを実行する際に、変化するビット数を削減することができ、電圧ノイズの低減を図ることが可能になると共に、配線充放電、メモリビット線充放電などによる消費電力を削減することが可能となった。
【００２８】
（第２の実施の形態）
図５は、本発明の第２の実施の形態におけるコンパイラによる命令コードの変換方法の一例を説明するための図である。命令コードの構成は、図１に示す第１の実施の形態における命令コードの構成と同様である。本実施の形態においては、ｎ＋１番地のＮＯＰ命令のオペランド［２６：０］を、後続のｎ＋２番地の命令コードのオペランドフィールド［２６：０］（オペランドＣ）のビット列に置換える。これによって、ｎ＋１番地のＮＯＰ命令のオペランドフィールドが、後続のｎ＋２番地の命令コードのオペランドフィールドと一致し、ｎ＋１番地の命令からｎ＋２番地の命令に処理が移る場合でも、変化するビット数を削減することができる。したがって、消費電力を削減することが可能となる。
【００２９】
本実施の形態におけるコンパイル装置の構成は、図２に示す第１の実施の形態におけるコンパイル装置の構成と同様である。
【００３０】
本実施の形態におけるコンパイル装置の機能的構成は、図３に示す第１の実施の形態におけるコンパイル装置の機能的構成と比較して、置換部１７の機能が異なる点のみが異なる。本実施の形態においては、置換部１７がＮＯＰ命令のオペランドを１つ後の命令コードのオペランドに置換する。
【００３１】
また、本実施の形態におけるコンパイル装置の処理手順は、図４に示す第１の実施の形態におけるコンパイル装置の処理手順と比較して、ステップＳ３の処理が異なる点のみが異なる。本実施の形態においては、命令解析部１５によって生成された命令コードがＮＯＰ命令であれば（Ｓ２，Ｙｅｓ）、置換部１７は、ＮＯＰ命令のオペランドを１つ後の命令コードのオペランドに置換する（Ｓ３）。このオペランドの置換は、次の命令が命令解析部１５によって解析されたときに、生成された命令コードのオペランドが参照されてＮＯＰ命令のオペランドに置換されることによって行なわれる。
【００３２】
なお、本実施の形態においては、ＮＯＰ命令のオペランドフィールドを、後続の命令コードのオペランドフィールドに置換えるようにしたが、ＮＯＰ命令以外の命令コードであっても、命令コード内に動作を決定するのに必要でないビットがあれば、そのビットを後続の命令の対応するビット値に置換えるようにしてもよい。
【００３３】
以上説明したように、本実施の形態におけるコンパイラによれば、生成された命令コードがＮＯＰ命令であれば、ＮＯＰ命令のオペランドを１つ後の命令コードのオペランドに置換するようにしたので、データ処理装置がそのプログラムを実行する際に、変化するビット数を削減することができ、電圧ノイズの低減を図ることが可能になると共に、配線充放電、メモリビット線充放電などによる消費電力を削減することが可能となった。
【００３４】
（第３の実施の形態）
図６は、本発明の第３の実施の形態におけるコンパイラによる命令コードの変換方法の一例を説明するための図である。命令コードの構成は、図１に示す第１の実施の形態における命令コードの構成と同様である。本実施の形態においては、ｎ＋１番地のＮＯＰ命令のオペランドフィールド［２６：０］のうち、［２６：（ｍ＋１）］を先行するｎ番地の命令コードのオペランドフィールド［２６：（ｍ＋１）］（オペランドＡ）に置換え、ｎ＋１番地のＮＯＰ命令のオペランドフィールド［ｍ：０］を後続のｎ＋２番地の命令コードのオペランドフィールド［ｍ：０］（オペランドＣ）に置換える。ここで、０≦ｍ≦２５とする。
【００３５】
なお、ｎ＋１番地のＮＯＰ命令のオペランドフィールド［２６：（ｍ＋１）］を後続のｎ＋２番地の命令コードのオペランドフィールド［２６：（ｍ＋１）］（オペランドＣ）に置換え、ｎ＋１番目のＮＯＰ命令のオペランドフィールド［ｍ：０］を先行するｎ番地の命令コードのオペランドフィールド［ｍ：０］（オペランドＡ）に置換えるようにしてもよい。
【００３６】
これによって、ｎ＋１番地のＮＯＰ命令のオペランドフィールド［２６：（ｍ＋１）］が先行するｎ番地の命令コードのオペランドフィールド［２６：（ｍ＋１）］と一致し、ｎ＋１番地のＮＯＰ命令のオペランドフィールド［ｍ：０］が後続のｎ＋２番地の命令コードのオペランドフィールド［ｍ：０］と一致し、ｎ番地の命令からｎ＋１番地の命令に処理が移り、さらにｎ＋１番地の命令からｎ＋２番地の命令に処理が移る場合でも、変化するビット数を削減することができる。したがって、消費電力を削減することが可能となる。
【００３７】
本実施の形態におけるコンパイル装置の構成は、図２に示す第１の実施の形態におけるコンパイル装置の構成と同様である。
【００３８】
本実施の形態におけるコンパイル装置の機能的構成は、図３に示す第１の実施の形態におけるコンパイル装置の機能的構成と比較して、置換部１７の機能が異なる点のみが異なる。本実施の形態においては、置換部１７がＮＯＰ命令のオペランドフィールド［２６：（ｍ＋１）］を１つ前の命令コードのオペランドフィールド［２６：（ｍ＋１）］に置換え、ＮＯＰ命令のオペランドフィールド［ｍ：０］を１つ後の命令コードのオペランドフィールド［ｍ：０］に置換える。
【００３９】
また、本実施の形態におけるコンパイル装置の処理手順は、図４に示す第１の実施の形態におけるコンパイル装置の処理手順と比較して、ステップＳ３の処理が異なる点のみが異なる。本実施の形態においては、命令解析部１５によって生成された命令コードがＮＯＰ命令であれば（Ｓ２，Ｙｅｓ）、置換部１７は、ＮＯＰ命令のオペランドフィールド［２６：（ｍ＋１）］を１つ前の命令コードのオペランドフィールド［２６：（ｍ＋１）］に置換え、ＮＯＰ命令のオペランドフィールド［ｍ：０］を１つ後の命令コードのオペランドフィールド［ｍ：０］に置換える（Ｓ３）。このオペランドの置換は、次の命令が命令解析部１５によって解析されたときに、生成された命令コードのオペランドと１つ前の命令コードのオペランドとが参照されてＮＯＰ命令のオペランドに置換されることによって行なわれる。
【００４０】
なお、本実施の形態においては、ＮＯＰ命令のオペランドフィールド［２６：（ｍ＋１）］を、先行する命令コードのオペランドフィールド［２６：（ｍ＋１）］に置換え、ＮＯＰ命令のオペランドフィールド［ｍ：０］を後続の命令コードのオペランドフィールド［ｍ：０］に置換えるようにしたが、ＮＯＰ命令以外の命令コードであっても、命令コード内に動作を決定するのに必要でないビットがあれば、そのビットを先行する命令および後続の命令の対応するビット値に置換えるようにしてもよい。
【００４１】
また、図６においては、ＮＯＰ命令が１つの場合であったが、図７に示すように２つのＮＯＰ命令が連続する場合には、ｎ＋１番地のＮＯＰ命令のオペランドフィールド［２６：０］のうち２／３を先行するｎ番地の命令コードのオペランドフィールド（オペランドＡ）に置換え、残りの１／３を後続のｎ＋３番地の命令コードのオペランドフィールド（オペランドＣ）に置換え、ｎ＋２番地のＮＯＰ命令のオペランドフィールド［２６：０］のうち１／３を先行するｎ番地の命令コードのオペランドフィールド（オペランドＡ）に置換え、残りの２／３を後続のｎ＋３番地の命令コードのオペランドフィールド（オペランドＣ）に置換えるようにしてもよい。
【００４２】
また、ｎ＋１番地のＮＯＰ命令のオペランドフィールド［２６：０］のうち１／３を先行するｎ番地の命令コードのオペランドフィールド（オペランドＡ）に置換え、残りの２／３を後続のｎ＋３番地の命令コードのオペランドフィールド（オペランドＣ）に置換え、ｎ＋２番地のＮＯＰ命令のオペランドフィールド［２６：０］のうち２／３を先行するｎ番地の命令コードのオペランドフィールド（オペランドＡ）に置換え、残りの１／３を後続のｎ＋３番地の命令コードのオペランドフィールド（オペランドＣ）に置換えるようにしてもよい。
【００４３】
また、ＮＯＰ命令が３つ連続する場合には、ＮＯＰ命令のオペランドフィールドを４等分し、最初のＮＯＰ命令のオペランドフィールドのうち１／４を先行する命令コードのオペランドフィールド（オペランドＡ）に置換え、残りの３／４を後続の命令コードのオペランドフィールド（オペランドＣ）に置換え、２番目のＮＯＰ命令のオペランドフィールドのうち１／２を先行する命令コードのオペランドフィールド（オペランドＡ）に置換え、残りの１／２を後続の命令コードのオペランドフィールド（オペランドＣ）に置換え、３番目のＮＯＰ命令のオペランドフィールドのうち３／４を先行する命令コードのオペラ
ンドフィールド（オペランドＡ）に置換え、残りの１／４を後続の命令コードのオペランドフィールド（オペランドＣ）に置換えるようにしてもよい。
【００４４】
このように、ＮＯＰ命令が連続する場合には、連続するＮＯＰ命令に先行する命令コードから、連続するＮＯＰ命令の後続の命令コードに至るまでに、各ビットの変化ができるだけ少なくなるようにオペランドフィールドを等分してオペランドを置換える。
【００４５】
以上説明したように、本実施の形態におけるコンパイラによれば、生成された命令コードがＮＯＰ命令であれば、ＮＯＰ命令のオペランドの一部を１つ前の命令コードの対応するオペランド部分に置換し、ＮＯＰ命令のオペランドの他の部分を１つ後の命令コードの対応するオペランド部分に置換するようにしたので、データ処理装置がそのプログラムを実行する際に、変化するビット数を削減することができ、電圧ノイズの低減を図ることが可能になると共に、配線充放電、メモリビット線充放電などによる消費電力を削減することが可能となった。
【００４６】
（第４の実施の形態）
図８は、本発明の第４の実施の形態におけるコンパイラによる命令コードの変換方法の一例を説明するための図である。命令コードの構成は、図１に示す第１の実施の形態における命令コードの構成と同様である。本実施の形態においては、ｎ＋１番地のＮＯＰ命令のオペランドフィールド［２６：０］（オペランドＢ）が、先行するｎ番地の命令コードのオペランドＡからオペランドＢに変化する場合の変化ビット数と、オペランドＢから後続のｎ＋２番地の命令コードのオペランドＣに変化する場合の変化ビット数とが同じになるようにオペランドＢを決定する。
【００４７】
たとえば、オペランドＡとオペランドＣとが同じ値のビットについては、オペランドＢの対応ビットをその値にし、オペランドＡとオペランドＣとが異なる値のビットについては、その半数のビットをオペランドＡと同じ値とし、他のビットをオペランドＣと同じ値としてオペランドＢを決定する。
【００４８】
これによって、ｎ＋１番地のＮＯＰ命令のオペランドフィールドの半分が先行するｎ番地の命令コードのオペランドフィールドと一致し、ｎ＋１番地のＮＯＰ命令のオペランドフィールドの半分が後続のｎ＋２番地の命令コードのオペランドフィールドと一致し、ｎ番地の命令からｎ＋１番地の命令に処理が移り、さらにｎ＋１番地の命令からｎ＋２番地の命令に処理が移る場合でも、変化するビット数を削減することができる。したがって、消費電力を削減することが可能となる。
【００４９】
本実施の形態におけるコンパイル装置の構成は、図２に示す第１の実施の形態におけるコンパイル装置の構成と同様である。
【００５０】
本実施の形態におけるコンパイル装置の機能的構成は、図３に示す第１の実施の形態におけるコンパイル装置の機能的構成と比較して、置換部１７の機能が異なる点のみが異なる。本実施の形態においては、置換部１７が、ＮＯＰ命令のオペランドフィールドの半分が１つ前の命令コードのオペランドフィールドの対応ビットと同じ値となるように置換え、ＮＯＰ命令のオペランドフィールドの半分が１つ後の命令コードのオペランドフィールドの対応ビットと同じ値になるように置換える。
【００５１】
また、本実施の形態におけるコンパイル装置の処理手順は、図４に示す第１の実施の形態におけるコンパイル装置の処理手順と比較して、ステップＳ３の処理が異なる点のみが異なる。本実施の形態においては、命令解析部１５によって生成された命令コードがＮＯＰ命令であれば（Ｓ２，Ｙｅｓ）、置換部１７は、ＮＯＰ命令のオペランドフィールドの
半分が１つ前の命令コードのオペランドフィールドの対応ビットと同じ値となるように置換え、ＮＯＰ命令のオペランドフィールドの半分が１つ後の命令コードのオペランドフィールドの対応ビットと同じ値になるように置換える（Ｓ３）。このオペランドの置換は、次の命令が命令解析部１５によって解析されたときに、生成された命令コードのオペランドと１つ前の命令コードのオペランドとが参照されてＮＯＰ命令のオペランドに置換されることによって行なわれる。
【００５２】
なお、本実施の形態においては、ＮＯＰ命令のオペランドフィールドの半分が先行する命令コードのオペランドフィールドの対応ビットと同じ値となるように置換え、ＮＯＰ命令のオペランドフィールドの半分が後続の命令コードのオペランドフィールドの対応ビットと同じ値となるように置換えるようにしたが、ＮＯＰ命令以外の命令コードであっても、命令コード内に動作を決定するのに必要でないビットがあれば、そのビットの半分が先行する命令コードの対応ビットと同じ値となるように置換え、そのビットの半分が後続の命令コードの対応ビットと同じ値となるように置換えるようにしてもよい。
【００５３】
以上説明したように、本実施の形態におけるコンパイラによれば、生成された命令コードがＮＯＰ命令であれば、ＮＯＰ命令のオペランドの半分が１つ前の命令コードの対応ビットと同じになるように置換し、ＮＯＰ命令のオペランドの半分が１つ後の命令コードの対応ビットと同じ値となるように置換するようにしたので、データ処理装置がそのプログラムを実行する際に、変化するビット数を削減することができ、電圧ノイズの低減を図ることが可能になると共に、配線充放電、メモリビット線充放電などによる消費電力を削減することが可能となった。
【００５４】
（第５の実施の形態）
図９は、本発明の第５の実施の形態における命令コード出力装置を含んだデータ処理装置の概略構成を示すブロック図である。このデータ処理装置は、命令コードを保持する命令メモリ３１と、フェッチする命令のアドレスを生成するプログラムアドレス生成部２１と、プログラムアドレス生成部２１によって生成されたアドレスに応じて命令メモリ３１から命令コードをフェッチする命令フェッチ部２２と、命令フェッチ部２２によってフェッチされた命令コードをデコードする命令デコード部２３と、命令デコード部２３によるデコード結果に応じてメモリやレジスタからデータを読出すデータ読出し部２４と、データ読出し部２４によって読出されたデータをソースとして整数演算や浮動小数点演算などを行なう演算処理部２５と、演算処理部２５による演算結果をメモリやレジスタに書込むデータ書込み部２６とを含む。
【００５５】
図１０は、本発明の第５の実施の形態における命令コード出力装置の概略構成を示すブロック図である。この命令コード出力装置は、命令メモリ３１と、命令メモリ３１から出力されるオペコードをデコードするオペコードデコーダ３２と、セレクタ３３と、セレクタ３３から出力されるオペランドを保持するレジスタＢ３４と、レジスタＢ３４に保持されるオペランドをデコードするオペランドデコーダ３５とを含む。なお、本実施の形態においては、オペコードデコーダ３２、セレクタ３３、レジスタＢ３４およびオペランドデコーダ３５が、図９に示す命令デコード部２３に含まれ、データ処理装置と命令コード出力装置とが１チップで構成される場合について説明する。
【００５６】
オペコードデコーダ３２は、命令メモリ３１から出力されるオペコード［３１：２７］をデコードし、そのデコード結果をデータ処理装置の各部を制御する制御信号として出力する。また、オペコードデコーダ３２は、オペコード［３１：２７］がＮＯＰ命令を示す場合には、ｎｏｐ＿ｆｌａｇ信号にハイレベル（以下、Ｈレベルと略す。）を出力し、オペコード［３１：２７］がＮＯＰ命令を示すものでない場合には、ｎｏｐ＿ｆｌａｇ信号にロウレベル（以下、Ｌレベルと略す。）を出力する。
【００５７】
セレクタ３３は、オペコードデコーダ３２から出力されるｎｏｐ＿ｆｌａｇ信号がＬレベルであれば、命令メモリ３１から出力されるオペランド［２６：０］を選択してレジスタＢ３４へ出力する。レジスタＢ３４は、次のクロックサイクルで保持するオペランドを更新する。
【００５８】
また、セレクタ３３は、オペコードデコーダ３２から出力されるｎｏｐ＿ｆｌａｇ信号がＨレベルであれば、レジスタＢ３４から出力されるオペランドを選択してレジスタＢ３４へ出力する。すなわち、次のクロックサイクルでレジスタＢ３４に保持されるオペランドがそのまま保持され、ＮＯＰ命令の１つ前のオペランドがＮＯＰ命令のオペランドとして出力される。
【００５９】
オペランドデコーダ３５は、レジスタＢ３４から出力されるオペランドをデコードし、そのデコード結果をデータ処理装置の各部を制御する制御データとして出力する。
【００６０】
なお、本実施の形態においては、命令コード出力装置とデータ処理装置とが１チップで構成される場合について説明したが、命令コード出力装置を外付けとすることも可能である。この場合、命令メモリ３１から出力されるオペコードがデータバスの上位５ビットに出力され、セレクタ３３から出力されるオペランドがデータバスの下位２７ビットに出力される。また、オペコードデコーダ３２は、ＮＯＰ命令を検出してｎｏｐ＿ｆｌａｇを出力するだけでよく、オペランドデコーダ３５は不要となる。
【００６１】
また、命令メモリをキャッシュ化することが一般に行われている。命令メモリをキャッシュ化した場合、内蔵メモリの容量を小さくできるため、内蔵メモリによる消費電力を削減することができる。しかし、ミスヒット時に外部メモリとの間でキャッシュデータの入替えが発生する。このとき、複数ワードデータが外部メモリから内部キャッシュにリロードされるが、ＬＳＩのＩＯ（Input Output）バッファでの消費電力が大きいため、結果的にキャッシュ化が消費電力の削減に寄与しないことがある。本実施の形態における命令コード出力装置によれば、連続する命令コード間のビット変化を最小限に抑えることができるため、キャッシュ化による外部メモリ間のデータ転送時における消費電力を削減することができる。
【００６２】
以上説明したように、本実施の形態における命令コード出力装置によれば、命令メモリ３１から出力されるオペコードがＮＯＰ命令を示していれば、レジスタＢ３４が１つ前の命令コードのオペランドを保持するようにしたので、変化するビット数を削減することができ、電圧ノイズの低減を図ることが可能になると共に、配線充放電などによる消費電力を削減することが可能となった。
【００６３】
（第６の実施の形態）
本発明の第６の実施の形態における命令コード出力装置を含んだデータ処理装置の概略構成は、図９に示す第５の実施の形態における命令コード出力装置を含んだデータ処理装置の概略構成と同様である。
【００６４】
図１１は、本発明の第６の実施の形態における命令コード出力装置の概略構成を示すブロック図である。この命令コード出力装置は、オペコードを保持する命令メモリＡ４１と、オペランドを保持する命令メモリＢ４２と、命令メモリＡ４１から出力されるオペコードを保持するレジスタＡ４３と、レジスタＡ４３に保持されるオペコードをデコードするオペコードデコーダ３２と、セレクタ３３と、セレクタ３３から出力されるオペランドを保持するレジスタＢ３４と、レジスタＢ３４に保持されるオペランドをデコードするオペランドデコーダ３５と、ＯＲ回路４４とを含む。図１０に示す第５の実施の形態における
命令コード出力装置と同じ機能を有する部分には同じ参照符号を付すものとする。また、本実施の形態においては、オペコードデコーダ３２、セレクタ３３、レジスタＢ３４、オペランドデコーダ３５、レジスタＡ４３およびＯＲ回路４４が、図９に示す命令デコード部２３に含まれ、データ処理装置と命令コード出力装置とが１チップで構成される場合について説明する。
【００６５】
ＯＲ回路４４は、オペコードデコーダ３２から出力されるｎｏｐ＿ｆｌａｇ信号がＨレベルの場合には、命令メモリＢ４２へのＣＳＣ（チップセレクト）信号をマスクしてディスエーブルとする。すなわち、レジスタＡ４３に保持されるオペコードがＮＯＰ命令を示す場合、命令メモリＢ４２はディスエーブルとなり、セレクタ３３はレジスタＢ３４に保持されるオペランドを選択する。その結果、次のクロックサイクルでレジスタＢ３４に保持されるオペランドがそのまま保持され、ＮＯＰ命令の１つ前のオペランドがＮＯＰ命令のオペランドとして出力される。なお、ＣＳＣ信号は負論理とする。
【００６６】
また、ＯＲ回路４４は、オペコードデコーダ３２から出力されるｎｏｐ＿ｆｌａｇ信号がＬレベルの場合には、命令メモリＢ４２へのＣＳＣ信号をそのまま出力する。すなわち、レジスタＡ４３に保持されるオペコードがＮＯＰ命令以外を示す場合、セレクタ３３は、命令メモリＢ４２から出力されるオペランド［２６：０］を選択してレジスタＢ３４へ出力する。レジスタＢ３４は、次のクロックサイクルで保持するオペランドを更新する。
【００６７】
なお、本実施の形態においては、命令コード出力装置とデータ処理装置とが１チップで構成される場合について説明したが、命令コード出力装置を外付けとすることも可能である。この場合、レジスタＡ４３に保持されるオペコードがデータバスの上位５ビットに出力され、セレクタ３３から出力されるオペランドがデータバスの下位２７ビットに出力される。また、オペコードデコーダ３２は、ＮＯＰ命令を検出してｎｏｐ＿ｆｌａｇを出力するだけでよく、オペランドデコーダ３５は不要となる。
【００６８】
以上説明したように、本実施の形態における命令コード出力装置によれば、レジスタＡ４３に保持されるオペコードがＮＯＰ命令を示していれば、ＯＲ回路４４が命令メモリＢ４２へのＣＳＣ信号をマスクするようにしたので、第５の実施の形態において説明した効果に加えて、メモリビット線充放電による消費電力を削減することが可能となった。
【００６９】
（第７の実施の形態）
本発明の第７の実施の形態における命令コード出力装置を含んだデータ処理装置の概略構成は、図９に示す第５の実施の形態における命令コード出力装置を含んだデータ処理装置の概略構成と同様である。
【００７０】
図１２は、本発明の第７の実施の形態における命令コード出力装置の概略構成を示すブロック図である。この命令コード出力装置は、オペコードを保持する命令メモリＡ４１と、オペランドを保持する命令メモリＢ４２と、命令メモリＡ４１から出力されるオペコードをデコードするオペコードデコーダ３２と、命令メモリＢ４２から出力されるオペランドをデコードするオペランドデコーダ３５と、セレクタ４５とを含む。図１１に示す第６の実施の形態における命令コード出力装置と同じ機能を有する部分には同じ参照符号を付すものとする。また、本実施の形態においては、オペコードデコーダ３２、オペランドデコーダ３５およびセレクタ４５が、図９に示す命令デコード部２３に含まれ、データ処理装置と命令コード出力装置とが１チップで構成される場合について説明する。
【００７１】
セレクタ４５は、オペコードデコーダ３２から出力されるｎｏｐ＿ｆｌａｇ信号がＨレベルの場合には、前アドレスを選択して命令メモリＢ４２にアドレス（ＡＤＲ）として出力する。すなわち、命令メモリＡ４１から出力されるオペコードがＮＯＰ命令を示す場合
、命令メモリＢ４２は１つ前の命令コードのオペランドをＮＯＰ命令のオペランドとして出力する。
【００７２】
また、セレクタ４５は、オペコードデコーダ３２から出力されるｎｏｐ＿ｆｌａｇ信号がＬレベルの場合には、次アドレスを選択して命令メモリＢ４２にアドレスとして出力する。すなわち、命令メモリＡ４１から出力されるオペコードがＮＯＰ命令以外を示す場合、命令メモリＢ４２はその命令に対応するオペランドをオペランドデコーダ３５へ出力する。
【００７３】
なお、本実施の形態においては、命令コード出力装置とデータ処理装置とが１チップで構成される場合について説明したが、命令コード出力装置を外付けとすることも可能である。この場合、命令メモリＡ４１から出力されるオペコードがデータバスの上位５ビットに出力され、命令メモリＢ４２から出力されるオペランドがデータバスの下位２７ビットに出力される。また、オペコードデコーダ３２は、ＮＯＰ命令を検出してｎｏｐ＿ｆｌａｇを出力するだけでよく、オペランドデコーダ３５は不要となる。
【００７４】
以上説明したように、本実施の形態における命令コード出力装置によれば、命令メモリＡ４１から出力されるオペコードがＮＯＰ命令を示していれば、セレクタ４５が前アドレスを命令メモリＢ４２へ出力するようにしたので、命令メモリＢ４２に入力されるアドレスの変化および命令メモリＢ４２から出力されるオペランドの変化がないため、第６の実施の形態において説明した効果に加えて、さらに消費電力を削減することが可能となった。また、第６の実施の形態における命令コード出力装置よりもさらに構成を簡略化することが可能となった。
【００７５】
（第８の実施の形態）
図１３は、本発明の第８の実施の形態におけるコンパイラによる命令コードの変換方法の一例を説明するための図である。命令コードの最上位ビット［３２］は、この命令がＮＯＰ命令であるか否かを示すフラグビットであり、その次の５ビット［３１：２７］はオペコードを示し、下位２７ビット［２６：０］はオペランドを示す。フラグビットが１のときＮＯＰ命令であることを示し、フラグビットが０のときＮＯＰ命令以外の命令であることを示す。
【００７６】
図１３に示す３つの命令コードは、それぞれｎ番地、ｎ＋１番地およびｎ＋２番地に格納されており、ｎ番地、ｎ＋１番地、ｎ＋２番地の順番で命令が実行される。ｎ番地の命令がｓｕｂ（減算）命令であり、ｎ＋１番地の命令がＮＯＰ命令であり、ｎ＋２番地の命令がａｄｄ（加算）命令である。
【００７７】
本実施の形態においては、ｎ＋１番地の命令が、フラグビットが１であるＮＯＰ命令であるので、そのオペコード［３１：２７］およびオペランド［２６：０］を、先行するＮ番地の命令コードのオペコード［３１：２７］（オペコードＡ）およびオペランドフィールド［２６：０］（オペランドＡ）のビット列に置換える。これによって、ｎ＋１番地のＮＯＰ命令のオペコードおよびオペランドフィールドが、先行するｎ番地の命令コードのオペコードおよびオペランドフィールドと一致し、ｎ番地の命令からｎ＋１番地の命令に処理が移る場合でも、変化するビット数を削減することができる。したがって、消費電力を削減することが可能となる。
【００７８】
本実施の形態におけるコンパイル装置の構成は、図２に示す第１の実施の形態におけるコンパイル装置の構成と同様である。
【００７９】
本実施の形態におけるコンパイル装置の機能的構成は、図３に示す第１の実施の形態に
おけるコンパイル装置の機能的構成と比較して、ＮＯＰ命令検出部１６および置換部１７の機能が異なる点のみが異なる。本実施の形態においては、ＮＯＰ命令検出部１６が、フラグビットが１であるか否かによって、ＮＯＰ命令であるか否かを検出する。また、置換部１７は、ＮＯＰ命令検出部１７によってＮＯＰ命令が検出された場合に、ＮＯＰ命令のオペコードおよびオペランドを１つ前の命令コードのオペコードおよびオペランドに置換する。
【００８０】
図１４は、本発明の第８の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。図４に示す第１の実施の形態におけるコンパイル装置の処理手順と比較して、ステップＳ２およびＳ３が、ステップＳ６およびＳ７に置換されている点のみが異なる。本実施の形態においては、ＮＯＰ命令検出部１６が、命令解析部１５によって生成された命令コードのフラグビットが１であるか否かによって、その命令コードがＮＯＰ命令であるか否かを検出する（Ｓ６）。命令解析部１５によって生成された命令コードがＮＯＰ命令であれば（Ｓ６，Ｙｅｓ）、置換部１７は、ＮＯＰ命令のオペコードおよびオペランドを、１つ前の命令コードのオペコードおよびオペランドに置換する（Ｓ７）。
【００８１】
以上説明したように、本実施の形態におけるコンパイラによれば、生成された命令コードがＮＯＰ命令であれば、ＮＯＰ命令のオペコードおよびオペランドを１つ前の命令コードのオペコードおよびオペランドに置換するようにしたので、第１の実施の形態におけるコンパイラよりも、さらに消費電力を削減するように命令コードを生成することが可能となった。
【００８２】
（第９の実施の形態）
図１５は、本発明の第９の実施の形態におけるコンパイラによる命令コードの変換方法の一例を説明するための図である。命令コードの構成は、図１３に示す第８の実施の形態における命令コードの構成と同様である。本実施の形態においては、ｎ＋１番地の命令が、フラグビットが１であるＮＯＰ命令であるので、そのオペコード［３１：２７］およびオペランド［２６：０］を、後続のｎ＋２番地の命令コードのオペコード［３１：２７］（オペコードＣ）およびオペランドフィールド［２６：０］（オペランドＣ）のビット列に置換える。これによって、ｎ＋１番地のＮＯＰ命令のオペコードおよびオペランドフィールドが、後続のｎ＋２番地の命令コードのオペコードおよびオペランドフィールドと一致し、ｎ＋１番地の命令からｎ＋２番地の命令に処理が移る場合でも、変化するビット数を削減することができる。したがって、消費電力を削減することが可能となる。
【００８３】
本実施の形態におけるコンパイル装置の構成は、図２に示す第１の実施の形態におけるコンパイル装置の構成と同様である。
【００８４】
本実施の形態におけるコンパイル装置の機能的構成は、図３に示す第１の実施の形態におけるコンパイル装置の機能的構成と比較して、置換部１７の機能が異なる点のみが異なる。本実施の形態においては、置換部１７が、ＮＯＰ命令のオペコードおよびオペランドを１つ後の命令コードのオペコードおよびオペランドに置換する。
【００８５】
また、本実施の形態におけるコンパイル装置の処理手順は、図１４に示す第８の実施の形態におけるコンパイル装置の処理手順と比較して、Ｓ７の処理が異なる点のみが異なる。本実施の形態においては、命令解析部１５によって生成された命令コードがＮＯＰ命令であれば（Ｓ６，Ｙｅｓ）、置換部１７は、ＮＯＰ命令のオペコードおよびオペランドを１つ後の命令コードのオペコードおよびオペランドに置換する（Ｓ７）。このオペランドの置換は、次の命令が命令解析部１５によって解析されたときに、生成された命令コードのオペコードおよびオペランドが参照されてＮＯＰ命令のオペコードおよびオペランドに
置換されることによって行なわれる。
【００８６】
以上説明したように、本実施の形態におけるコンパイラによれば、生成された命令コードがＮＯＰ命令であれば、ＮＯＰ命令のオペコードおよびオペランドを１つ後の命令コードのオペコードおよびオペランドに置換するようにしたので、第２の実施の形態におけるコンパイラよりも、さらに消費電力を削減するように命令コードを生成することが可能となった。
【００８７】
（第１０の実施の形態）
図１６は、本発明の第１０の実施の形態におけるコンパイラによる命令コードの変換方法の一例を説明するための図である。命令コードの構成は、図１３に示す第８の実施の形態における命令コードの構成と同様である。本実施の形態においては、ｎ＋１番地の命令コードが、フラグビットが１であるＮＯＰ命令であるので、そのオペコード［３１：２７］を先行するｎ番地の命令コードのオペコード［３１：２７］（オペコードＡ）に置換え、そのオペランドフィールド［２６：０］のうち、［２６：（ｍ＋１）］を先行するｎ番地の命令コードのオペランドフィールド［２６：（ｍ＋１）］（オペランドＡ）に置換え、ｎ＋１番地のＮＯＰ命令のオペランドフィールド［ｍ：０］を後続のｎ＋２番地の命令コードのオペランドフィールド［ｍ：０］（オペランドＣ）に置換える。ここで、０≦ｍ≦２５とする。
【００８８】
なお、ｎ＋１番地のＮＯＰ命令のオペコード［３１：２７］を後続のｎ＋２番地の命令コードのオペコード（オペコードＣ）に置換するようにしてもよいし、ｎ＋１番地のＮＯＰ命令のオペランドフィールド［２６：（ｍ＋１）］を後続のｎ＋２番地の命令コードのオペランドフィールド［２６：（ｍ＋１）］（オペランドＣ）に置換え、ｎ＋１番目のＮＯＰ命令のオペランドフィールド［ｍ：０］を先行するｎ番地の命令コードのオペランドフィールド［ｍ：０］（オペランドＡ）に置換えるようにしてもよい。
【００８９】
これによって、ｎ＋１番地のＮＯＰ命令のオペコード［３１：２７］が先行するｎ番地の命令コードのオペコード［３１：２７］と一致し、ｎ＋１番地のＮＯＰ命令のオペランドフィールド［２６：（ｍ＋１）］が先行するｎ番地の命令コードのオペランドフィールド［２６：（ｍ＋１）］と一致し、ｎ＋１番地のＮＯＰ命令のオペランドフィールド［ｍ：０］が後続のｎ＋２番地の命令コードのオペランドフィールド［ｍ：０］と一致し、ｎ番地の命令からｎ＋１番地の命令に処理が移り、さらにｎ＋１番地の命令からｎ＋２番地の命令に処理が移る場合でも、変化するビット数を削減することができる。したがって、消費電力を削減することが可能となる。
【００９０】
本実施の形態におけるコンパイル装置の構成は、図２に示す第１の実施の形態におけるコンパイル装置の構成と同様である。
【００９１】
本実施の形態におけるコンパイル装置の機能的構成は、図３に示す第１の実施の形態におけるコンパイル装置の機能的構成と比較して、置換部１７の機能が異なる点のみが異なる。本実施の形態においては、置換部１７が、ＮＯＰ命令のオペコード［３１：２７］を１つ前の命令コードのオペコード［３１：２７］に置換え、ＮＯＰ命令のオペランドフィールド［２６：（ｍ＋１）］を１つ前の命令コードのオペランドフィールド［２６：（ｍ＋１）］に置換え、ＮＯＰ命令のオペランドフィールド［ｍ：０］を１つ後の命令コードのオペランドフィールド［ｍ：０］に置換える。
【００９２】
また、本実施の形態におけるコンパイル装置の処理手順は、図１４に示す第８の実施の形態におけるコンパイル装置の処理手順と比較して、ステップＳ７の処理が異なる点のみが異なる。本実施の形態においては、命令解析部１５によって生成された命令コードがＮ
ＯＰ命令であれば（Ｓ６，Ｙｅｓ）、置換部１７は、ＮＯＰ命令のオペコード［３１：２７］を１つ前の命令コードのオペコード［３１：２７］に置換え、ＮＯＰ命令のオペランドフィールド［２６：（ｍ＋１）］を１つ前の命令コードのオペランドフィールド［２６：（ｍ＋１）］に置換え、ＮＯＰ命令のオペランドフィールド［ｍ：０］を１つ後の命令コードのオペランドフィールド［ｍ：０］に置換える（Ｓ７）。このオペコードおよびオペランドの置換は、次の命令が命令解析部１５によって解析されたときに、生成された命令コードのオペコードおよびオペランドと１つ前の命令コードのオペコードおよびオペランドとが参照されてＮＯＰ命令のオペコードおよびオペランドに置換されることによって行なわれる。
【００９３】
以上説明したように、本実施の形態におけるコンパイラによれば、生成された命令コードがＮＯＰ命令であれば、ＮＯＰ命令のオペコードを１つ前の命令コードのオペコードに置換し、ＮＯＰ命令のオペランドの一部を１つ前の命令コードの対応するオペランド部分に置換し、ＮＯＰ命令のオペランドの他の部分を１つ後の命令コードの対応するオペランド部分に置換するようにしたので、第３の実施の形態におけるコンパイラよりも、さらに消費電力を削減するように命令コードを生成することが可能となった。
【００９４】
（第１１の実施の形態）
図１７は、本発明の第１１の実施の形態におけるコンパイラによる命令コードの変換方法の一例を説明するための図である。命令コードの構成は、図１３に示す第８の実施の形態における命令コードの構成と同様である。本実施の形態においては、ｎ＋１番地のＮＯＰ命令のオペコード［３１：２７］が、先行するｎ番地の命令コードのオペコードからｎ＋１番地のＮＯＰ命令のオペコードに変化する場合の変化ビット数と、ｎ＋１番地のＮＯＰ命令のオペコードからｎ＋２番地の命令コードのオペコードに変化する場合の変化ビット数とが同じになるようにｎ＋１番地のＮＯＰ命令のオペコードを決定する。また、ｎ＋１番地のＮＯＰ命令のオペランドフィールド［２６：０］（オペランドＢ）が、先行するｎ番地の命令コードのオペランドＡからオペランドＢに変化する場合の変化ビット数と、オペランドＢから後続のｎ＋２番地の命令コードのオペランドＣに変化する場合の変化ビット数とが同じになるようにオペランドＢを決定する。
【００９５】
たとえば、ｎ番地の命令コードのオペコードとｎ＋２番地の命令コードのオペコードとが同じ値のビットについては、ｎ＋１番地のＮＯＰ命令のオペコードの対応ビットをその値にし、ｎ番地の命令コードのオペコードとｎ＋２番地の命令コードのオペコードとが異なる値のビットについては、その半数のビットをｎ番地の命令コードのオペコードと同じ値とし、他のビットをｎ＋２番地の命令コードのオペコードと同じ値としてｎ＋１番地のＮＯＰ命令のオペコードを決定する。また、オペランドＡとオペランドＣとが同じ値のビットについては、オペランドＢの対応ビットをその値にし、オペランドＡとオペランドＣとが異なる値のビットについては、その半数のビットをオペランドＡと同じ値とし、他のビットをオペランドＣと同じ値としてオペランドＢを決定する。
【００９６】
これによって、ｎ＋１番地のＮＯＰ命令のオペコードおよびオペランドフィールドの半分が先行するｎ番地の命令コードのオペコードおよびオペランドフィールドと一致し、ｎ＋１番地のＮＯＰ命令のオペコードおよびオペランドフィールドの半分が後続のｎ＋２番地の命令コードのオペランドおよびオペランドフィールドと一致し、ｎ番地の命令からｎ＋１番地の命令に処理が移り、さらにｎ＋１番地の命令からｎ＋２番地の命令に処理が移る場合でも、変化するビット数を削減することができる。したがって、消費電力を削減することが可能となる。
【００９７】
本実施の形態におけるコンパイル装置の構成は、図２に示す第１の実施の形態におけるコンパイル装置の構成と同様である。
【００９８】
本実施の形態におけるコンパイル装置の機能的構成は、図３に示す第１の実施の形態におけるコンパイル装置の機能的構成と比較して、置換部１７の機能が異なる点のみが異なる。本実施の形態においては、置換部１７が、ＮＯＰ命令のオペコードおよびオペランドフィールドの半分が１つ前の命令コードのオペコードおよびオペランドフィールドの対応ビットと同じ値となるように置換え、ＮＯＰ命令のオペコードおよびオペランドフィールドの半分が１つ後の命令コードのオペコードおよびオペランドフィールドの対応ビットと同じ値になるように置換える。
【００９９】
また、本実施の形態におけるコンパイル装置の処理手順は、図１４に示す第８の実施の形態におけるコンパイル装置の処理手順と比較して、ステップＳ７の処理が異なる点のみが異なる。本実施の形態においては、命令解析部１５によって生成された命令コードがＮＯＰ命令であれば（Ｓ６，Ｙｅｓ）、置換部１７は、ＮＯＰ命令のオペコードおよびオペランドフィールドの半分が１つ前の命令コードのオペコードおよびオペランドフィールドの対応ビットと同じ値となるように置換え、ＮＯＰ命令のオペコードおよびオペランドフィールドの半分が１つ後の命令コードのオペコードおよびオペランドフィールドの対応ビットと同じ値になるように置換える（Ｓ７）。このオペコードおよびオペランドの置換は、次の命令が命令解析部１５によって解析されたときに、生成された命令コードのオペコードおよびオペランドと１つ前の命令コードのオペコードおよびオペランドとが参照されてＮＯＰ命令のオペコードおよびオペランドに置換されることによって行なわれる。
【０１００】
以上説明したように、本実施の形態におけるコンパイラによれば、生成された命令コードがＮＯＰ命令であれば、ＮＯＰ命令のオペコードおよびオペランドの半分が１つ前の命令コードの対応ビットと同じになるように置換し、ＮＯＰ命令のオペコードおよびオペランドの半分が１つ後の命令コードの対応ビットと同じ値となるように置換するようにしたので、第４の実施の形態におけるコンパイラよりも、さらに消費電力を削減するように命令コードを生成することが可能となった。
【０１０１】
（第１２の実施の形態）
本発明の第１２の実施の形態における命令コード出力装置を含んだデータ処理装置の概略構成は、図９に示す第５の実施の形態における命令コード出力装置を含んだデータ処理装置の概略構成と同様である。
【０１０２】
図１８は、本発明の第１２の実施の形態における命令コード出力装置の概略構成を示すブロック図である。この命令コード出力装置は、命令メモリ５１と、セレクタ５２と、命令メモリ５１から出力されるフラグビット並びにセレクタ５２から出力されるオペコードおよびオペランドを保持するレジスタＣ５３と、レジスタＣ５３に保持されるオペコードおよびオペランドをデコードするオペコード／オペランドデコーダ５４とを含む。なお、本実施の形態においては、セレクタ５２、レジスタＣ５３およびオペコード／オペランドデコーダ５４が、図９に示す命令デコード部２３に含まれ、データ処理装置と命令コード出力装置とが１チップで構成される場合について説明する。
【０１０３】
セレクタ５２は、命令メモリ５１から出力されるフラグビット（ｎｏｐ＿ｆｌａｇ信号）がＬレベルであれば、命令メモリ５１から出力されるオペコード［３１：２７］およびオペランド［２６：０］を選択してレジスタＣ５３へ出力する。レジスタＣ５３は、次のクロックサイクルで保持するオペコードおよびオペランドを更新する。
【０１０４】
また、セレクタ５２は、命令メモリ５１から出力されるｎｏｐ＿ｆｌａｇ信号がＨレベルであれば、レジスタＣ５３から出力されるオペコードおよびオペランドを選択してレジスタＣ５３へ出力する。すなわち、次のクロックサイクルでレジスタＣ５３に保持される
オペコードおよびオペランドがそのまま保持され、ＮＯＰ命令の１つ前のオペコードおよびオペランドがＮＯＰ命令のオペコードおよびオペランドとして出力される。
【０１０５】
オペコード／オペランドデコーダ５４は、レジスタＣ５３から出力されるオペコードおよびオペランドをデコードし、そのデコード結果をデータ処理装置の各部を制御する制御信号として出力する。
【０１０６】
なお、本実施の形態においては、命令コード出力装置とデータ処理装置とが１チップで構成される場合について説明したが、命令コード出力装置を外付けとすることも可能である。この場合、命令メモリ５１から出力されるフラグビットがデータバスの最上位ビットに出力され、セレクタ５２から出力されるオペコードおよびオペランドがデータバスの下位３２ビットに出力される。また、オペコード／オペランドデコーダ５４は不要となる。
【０１０７】
また、本実施の形態においては、フラグビット（ｎｏｐ＿ｆｌａｇ）がＮＯＰ命令を示す場合について説明したが、フラグビットがＮＯＰ命令以外の所定命令を示すようにしてもよい。この場合、フラグビットが所定命令であることを示していれば、上述した処理が行なわれる。
【０１０８】
以上説明したように、本実施の形態における命令コード出力装置によれば、命令メモリ５１から出力されるフラグビットがＮＯＰ命令を示していれば、レジスタＣ５３が１つ前の命令コードのオペコードおよびオペランドを保持するようにしたので、変化するビット数を削減することができ、第５の実施の形態における命令コード出力装置よりも、さらに消費電力を削減することが可能となった。
【０１０９】
（第１３の実施の形態）
本発明の第１３の実施の形態における命令コード出力装置を含んだデータ処理装置の概略構成は、図９に示す第５の実施の形態における命令コード出力装置を含んだデータ処理装置の概略構成と同様である。
【０１１０】
図１９は、本発明の第１３の実施の形態における命令コード出力装置の概略構成を示すブロック図である。この命令コード出力装置は、フラグビットを保持する命令メモリＡ６１と、オペコードおよびオペランドを保持する命令メモリＢ６２と、命令メモリＡ６１から出力されるフラグビットを保持するレジスタＮ６３と、レジスタＮ６３に保持されるフラグビット（ｎｏｐ＿ｆｌａｇ信号）を保持する遅延用レジスタＮ６４と、セレクタ５２と、セレクタ５２から出力されるオペコードおよびオペランドを保持するレジスタＣ６５と、レジスタＣ６５に保持されるオペコードおよびオペランドをデコードするオペコード／オペランドデコーダ５４と、ＯＲ回路６６とを含む。図１８に示す第１２の実施の形態における命令コード出力装置と同じ機能を有する部分には同じ参照符号を付すものとする。また、本実施の形態においては、セレクタ５２、オペコード／オペランドデコーダ５４、レジスタＮ６３，６４、レジスタＣ６５およびＯＲ回路６６が、図９に示す命令デコード部２３に含まれ、データ処理装置と命令コード出力装置とが１チップで構成される場合について説明する。
【０１１１】
ＯＲ回路６６は、レジスタＮ６３から出力されるｎｏｐ＿ｆｌａｇ信号がＨレベルの場合には、命令メモリＢ６２へのＣＳＣ（チップセレクト）信号をマスクしてディスエーブルとする。すなわち、レジスタＮ６３から出力されるフラグビットがＮＯＰ命令を示す場合、命令メモリＢ６２はディスエーブルとなり、セレクタ５２はレジスタＣ６５に保持されるオペコードおよびオペランドを選択する。その結果、次のクロックサイクルでレジスタＣ６５に保持されるオペコードおよびオペランドがそのまま保持され、ＮＯＰ命令の１つ前のオペコードおよびオペランドがＮＯＰ命令のオペコードおよびオペランドとして出
力される。なお、ＣＳＣ信号は負論理とする。
【０１１２】
また、ＯＲ回路６６は、レジスタＮ６３から出力されるｎｏｐ＿ｆｌａｇ信号がＬレベルの場合には、命令メモリＢ６２へのＣＳＣ信号をそのまま出力する。すなわち、レジスタＮ６３から出力されるフラグビットがＮＯＰ命令以外を示す場合、セレクタ５２は、命令メモリＢ６２から出力されるオペコード［３１：２７］およびオペランド［２６：０］を選択してレジスタＣ６５へ出力する。レジスタＣ６５は、次のクロックサイクルで保持するオペコードおよびオペランドを更新する。
【０１１３】
レジスタＮ６４は、レジスタＮ６３から出力されるｎｏｐ＿ｆｌａｇ信号を１サイクルだけ遅延させ、ｎｏｐ＿ｆｌａｇ（Ｄｅｌａｙ）信号としてオペコード／オペランドデコーダ５４へ出力する。これによって、オペコード／オペランドデコーダ５４がデコードするオペコードおよびオペランドに対応するフラグビットが、オペコード／オペランドデコーダ５４に同じタイミングで入力されるようになる。
【０１１４】
なお、本実施の形態においては、命令コード出力装置とデータ処理装置とが１チップで構成される場合について説明したが、命令コード出力装置を外付けとすることも可能である。この場合、レジスタＮ６３に保持されるフラグビットがデータバスの最上位ビットに出力され、セレクタ５２から出力されるオペコードおよびオペランドがデータバスの下位３２ビットに出力される。また、レジスタＮ６４およびオペコード／オペランドデコーダ５４は不要となる。
【０１１５】
以上説明したように、本実施の形態における命令コード出力装置によれば、レジスタＮ６３に保持されるフラグビットがＮＯＰ命令を示していれば、ＯＲ回路６６が命令メモリＢ６２へのＣＳＣ信号をマスクするようにしたので、第１２の実施の形態において説明した効果に加えて、メモリビット線充放電による消費電力を削減することが可能となった。
【０１１６】
（第１４の実施の形態）
本発明の第１４の実施の形態における命令コード出力装置を含んだデータ処理装置の概略構成は、図９に示す第５の実施の形態における命令コード出力装置を含んだデータ処理装置の概略構成と同様である。
【０１１７】
図２０は、本発明の第１４の実施の形態における命令コード出力装置の概略構成を示すブロック図である。この命令コード出力装置は、フラグビットを保持する命令メモリＡ６１と、オペコードおよびオペランドを保持する命令メモリＢ６２と、命令メモリＢ６２から出力されるオペコードおよびオペランドをデコードするオペコード／オペランドデコーダ５４と、セレクタ６７とを含む。図１９に示す第１３の実施の形態における命令コード出力装置と同じ機能を有する部分には同じ参照符号を付すものとする。また、本実施の形態においては、オペコード／オペランドデコーダ５４およびセレクタ６７が、図９に示す命令デコード部２３に含まれ、データ処理装置と命令コード出力装置とが１チップで構成される場合について説明する。
【０１１８】
セレクタ６７は、命令メモリＡ６１から出力されるフラグビット（ｎｏｐ＿ｆｌａｇ信号）がＨレベルの場合には、前アドレスを選択して命令メモリＢ６２にアドレス（ＡＤＲ）として出力する。すなわち、命令メモリＡ６１から出力されるフラグビットがＮＯＰ命令を示す場合、命令メモリＢ６２は１つ前の命令コードのオペコードおよびオペランドをＮＯＰ命令のオペコードおよびオペランドとして出力する。
【０１１９】
また、セレクタ６７は、命令メモリＡ６１から出力されるｎｏｐ＿ｆｌａｇ信号がＬレベルの場合には、次アドレスを選択して命令メモリＢ６２にアドレスとして出力する。す
なわち、命令メモリＡ６１から出力されるフラグビットがＮＯＰ命令以外を示す場合、命令メモリＢ６２はその命令に対応するオペコードおよびオペランドをオペコード／オペランドデコーダ５４へ出力する。
【０１２０】
なお、本実施の形態においては、命令コード出力装置とデータ処理装置とが１チップで構成される場合について説明したが、命令コード出力装置を外付けとすることも可能である。この場合、命令メモリＡ６１から出力されるフラグビットがデータバスの最上位ビットに出力され、命令メモリＢ６２から出力されるオペコードおよびオペランドがデータバスの下位３２ビットに出力される。また、オペコード／オペランドデコーダ５４は不要となる。
【０１２１】
以上説明したように、本実施の形態における命令コード出力装置によれば、命令メモリＡ６１から出力されるフラグビットがＮＯＰ命令を示していれば、セレクタ６７が前アドレスを命令メモリＢ６２へ出力するようにしたので、命令メモリＢ６２に入力されるアドレスの変化および命令メモリＢ６２から出力されるオペコードおよびオペランドの変化がないため、第１３の実施の形態において説明した効果に加えて、さらに消費電力を削減することが可能となった。また、第１３の実施の形態における命令コード出力装置よりもさらに構成を簡略化することが可能となった。
【０１２２】
（第１５の実施の形態）
本発明の第１５の実施の形態におけるコンパイル装置は、図１に示す第１の実施の形態における命令コードの変換方法を実現するためのものである。なお、本発明の第１５の実施の形態におけるコンパイル装置の構成例は、図２に示す第１の実施の形態におけるコンパイル装置の構成例と同様である。したがって、重複する構成および機能の詳細な説明は繰返さない。
【０１２３】
図２１は、本発明の第１５の実施の形態におけるコンパイル装置の機能的構成を示すブロック図である。このコンパイル装置は、マイクロプログラム７０から命令を１つずつ入力する入力部７１と、入力部７１によって入力された命令を解析する命令解析部７２と、命令解析部７２による解析結果に応じて命令コードを生成する命令エンコード部７３と、命令エンコード部７３によって生成された命令コード（エンコードデータ）を格納するオブジェクトコードテーブル７４と、オブジェクトコードテーブル７４に格納された命令コードをオブジェクトコード７６として出力する出力部７５とを含む。
【０１２４】
オブジェクトコードテーブル７４は、命令が格納される番地、エンコードデータ、ニーモニック、ラベルなどの情報を保持する。このオブジェクトコードテーブル７４は、図２に示すＲＡＭ１２やハードディスク１３に割当てられる。
【０１２５】
図２２は、本発明の第１５の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。まず、初期処理として、前の命令のオペランドをＮＯＰコード、たとえば“0000000ｈ”などの任意のコードとし、これをオペランド０とする（Ｓ１１）。
【０１２６】
次に、マイクロプログラム７０の最後の命令の処理が終了したか否かが判定される（Ｓ１２）。最後の命令の処理が終了していなければ（Ｓ１２，Ｎｏ）、命令解析部７２は、入力部７１によって入力された命令がＮＯＰ命令であるか否かを判定する（Ｓ１３）。命令解析部７２によってＮＯＰ命令でないと判定されれば（Ｓ１３，Ｎｏ）、ステップＳ１４に処理が進む。また、命令解析部７２によってＮＯＰ命令であると判定されれば（Ｓ１３，Ｙｅｓ）、オペランド０をＮＯＰ命令のオペランドとして登録し（Ｓ１６）、ステップＳ１４に処理が進む。
【０１２７】
命令エンコード部７３は、当該命令のオペランドをオペランド０として登録し（Ｓ１４）、当該命令をエンコードして、エンコードデータをオブジェクトコードテーブル７４に格納する（Ｓ１５）。そして、ステップＳ１２に戻って以降の処理を繰返す。
【０１２８】
また、最後の命令の処理が終了していれば（Ｓ１２，Ｙｅｓ）、出力部７５はオブジェクトコードテーブル７４に格納されたデータをオブジェクトコード７６として出力する。
【０１２９】
次に、図１に示すマイクロプログラムをオブジェクトコードに変換する場合の処理を、図２２に示すフローチャートを用いて説明する。まず、前の命令のオペランドを“0000000ｈ”とし、これをオペランド０とする（Ｓ１１）。
【０１３０】
次に、入力部７１は、ＳＵＢ命令を読出す。最後の命令の処理が終了していないので（Ｓ１２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ１３）。この命令はＮＯＰ命令ではないので（Ｓ１３，Ｎｏ）、命令エンコード部７３はこのＳＵＢ命令のオペランド（オペランドＡ）をオペランド０として登録する（Ｓ１４）。そして、ＳＵＢ命令をエンコードして、エンコードデータをオブジェクトコードテーブル７４に格納する（Ｓ１５）。そして、ステップＳ１２に処理が戻る。
【０１３１】
次に、入力部７１は、ＮＯＰ命令を読出す。最後の命令の処理が終了していないので（Ｓ１２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ１３）。この命令はＮＯＰ命令であるので（Ｓ１３，Ｙｅｓ）、命令エンコード部７３はオペランド０（オペランドＡ）をＮＯＰ命令のオペランドとして登録し（Ｓ１６）、このオペランドをオペランド０として登録する（Ｓ１４）。そして、ＮＯＰ命令をエンコードして、エンコードデータをオブジェクトコードテーブル７４に格納する（Ｓ１５）。そして、ステップＳ１２に処理が戻る。
【０１３２】
次に、入力部７１は、ＡＤＤ命令を読出す。最後の命令の処理が終了していないので（Ｓ１２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ１３）。この命令はＮＯＰ命令ではないので（Ｓ１３，Ｎｏ）、命令エンコード部７３はこのＡＤＤ命令のオペランド（オペランドＣ）をオペランド０として登録する（Ｓ１４）。そして、ＡＤＤ命令をエンコードして、エンコードデータをオブジェクトコードテーブル７４に格納する（Ｓ１５）。そして、ステップＳ１２に処理が戻る。
【０１３３】
最後の命令の処理が終了しているので（Ｓ１２，Ｙｅｓ）、出力部７５はオブジェクトコードテーブル７４に格納されたデータをオブジェクトコード７６として出力する。
【０１３４】
以上説明したように、本実施の形態におけるコンパイル装置によれば、本発明の第１の実施の形態において説明した効果と同様の効果を奏することが可能となった。
【０１３５】
（第１６の実施の形態）
本発明の第１６の実施の形態におけるコンパイル装置は、図５に示す第２の実施の形態における命令コードの変換方法を実現するためのものである。なお、本発明の第１６の実施の形態におけるコンパイル装置の構成例は、図２に示す第１の実施の形態におけるコンパイル装置の構成例と同様である。また、本発明の第１６の実施の形態におけるコンパイル装置の機能的構成は、図２１に示す本発明の第１５の実施の形態におけるコンパイル装置の機能的構成と比較して、命令エンコード部の機能が異なる点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰返さない。なお、本実施の形態における命令エンコード部の参照符号を７３ａとして説明する。
【０１３６】
図２３は、本発明の第１６の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。まず、初期処理として、命令がＮＯＰ命令であることを示すＮＯＰフラグと、ＮＯＰの個数を示すカウンタとをリセットする（Ｓ２１）。
【０１３７】
次に、マイクロプログラム７０の最後の命令の処理が終了したか否かが判定される（Ｓ２２）。最後の命令の処理が終了していなければ（Ｓ２２，Ｎｏ）、命令解析部７２は、入力部７１によって入力された命令がＮＯＰ命令であるか否かを判定する（Ｓ２３）。命令解析部７２によってＮＯＰ命令であると判定されれば（Ｓ２３，Ｙｅｓ）、命令エンコード部７３ａはＮＯＰフラグをセットし、カウンタをインクリメントし（Ｓ２４）、ステップＳ２２に戻って以降の処理を繰返す。
【０１３８】
また、命令解析部７２によってＮＯＰ命令でないと判定されれば（Ｓ２３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ２５）。ＮＯＰフラグがセットされていなければ（Ｓ２５，Ｎｏ）、ステップＳ２８に処理が進む。また、ＮＯＰフラグがセットされていれば（Ｓ２５，Ｙｅｓ）、命令エンコード部７３ａはカウンタの値だけオペランドを置換えたＮＯＰコードを生成し、エンコードデータとしてオブジェクトコードテーブル７４に格納する（Ｓ２６）。そして、ＮＯＰフラグおよびカウンタをリセットする（Ｓ２７）。
【０１３９】
ステップＳ２８において、命令エンコード部７３ａは当該命令をエンコードし、エンコードデータをオブジェクトコードテーブル７４に格納する。そして、ステップＳ２２に戻って以降の処理を繰返す。
【０１４０】
次に、図５に示すマイクロプログラムをオブジェクトコードに変換する場合の処理を、図２３に示すフローチャートを用いて説明する。まず、ＮＯＰフラグとカウンタとをリセットする（Ｓ２１）。
【０１４１】
次に、入力部７１は、ＳＵＢ命令を読出す。最後の命令の処理が終了していないので（Ｓ２２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ２３）。この命令はＮＯＰ命令ではないので（Ｓ２３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ２５）。ＮＯＰフラグがセットされていないので（Ｓ２５，Ｎｏ）、命令エンコード部７３ａはＳＵＢ命令をエンコードし、エンコードデータをオブジェクトコードテーブル７４に格納する（Ｓ２８）。
【０１４２】
次に、入力部７１は、ＮＯＰ命令を読出す。最後の命令の処理が終了していないので（Ｓ２２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ２３）。この命令はＮＯＰ命令であるので（Ｓ２３，Ｙｅｓ）、命令エンコード部７３ａはＮＯＰフラグをセットし、カウンタをインクリメントする（Ｓ２４）。そして、ステップＳ２２に処理が戻る。
【０１４３】
次に、入力部７１は、ＡＤＤ命令を読出す。最後の命令の処理が終了していないので（Ｓ２２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ２３）。この命令はＮＯＰ命令ではないので（Ｓ２３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ２５）。ＮＯＰフラグがセットされているので（Ｓ２５，Ｙｅｓ）、命令エンコード部７３ａはカウンタの値（１）だけオペランドを置換えたＮＯＰコードを生成し、エンコードデータとしてオブジェクトコードテーブル７４に格納する（Ｓ２６）。そして、ＮＯＰフラグおよびカウンタをリセットする（Ｓ２７）。そして、命令エンコード部７３ａは、ＡＤＤ命令をエンコードして、エンコードデータをオブジェクトコードテーブル７４に格納し（Ｓ２８）、ステップＳ２２に処理が戻る。
【０１４４】
最後の命令の処理が終了しているので（Ｓ２２，Ｙｅｓ）、出力部７５はオブジェクトコードテーブル７４に格納されたデータをオブジェクトコード７６として出力する。
【０１４５】
以上説明したように、本実施の形態におけるコンパイル装置によれば、本発明の第２の実施の形態において説明した効果と同様の効果を奏することが可能となった。
【０１４６】
（第１７の実施の形態）
本発明の第１７の実施の形態におけるコンパイル装置は、図６に示す第３の実施の形態における命令コードの変換方法を実現するためのものである。なお、本発明の第１７の実施の形態におけるコンパイル装置の構成例は、図２に示す第１の実施の形態におけるコンパイル装置の構成例と同様である。また、本発明の第１７の実施の形態におけるコンパイル装置の機能的構成は、図２１に示す本発明の第１５の実施の形態におけるコンパイル装置の機能的構成と比較して、命令エンコード部の機能が異なる点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰返さない。なお、本実施の形態における命令エンコード部の参照符号を７３ｂとして説明する。
【０１４７】
図２４は、本発明の第１７の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。まず、初期処理として、命令がＮＯＰ命令であることを示すＮＯＰフラグと、ＮＯＰの個数を示すカウンタとをリセットし、前の命令のオペランドを任意のＮＯＰコードとし、これをオペランド０として（Ｎ−ｍ）ビット分だけ登録する（Ｓ３１）。なお、Ｎはオペランドのビット数とし、０≦ｍ≦Ｎとする。
【０１４８】
次に、マイクロプログラム７０の最後の命令の処理が終了したか否かが判定される（Ｓ３２）。最後の命令の処理が終了していなければ（Ｓ３２，Ｎｏ）、命令解析部７２は、入力部７１によって入力された命令がＮＯＰ命令であるか否かを判定する（Ｓ３３）。命令解析部７２によってＮＯＰ命令であると判定されれば（Ｓ３３，Ｙｅｓ）、命令エンコード部７３ｂはＮＯＰフラグをセットし、カウンタをインクリメントする（Ｓ３４）。そして、ステップＳ３２に戻って以降の処理を繰返す。
【０１４９】
また、命令解析部７２によってＮＯＰ命令でないと判定されれば（Ｓ３３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ３５）。ＮＯＰフラグがセットされていなければ（Ｓ３５，Ｎｏ）、ステップＳ３８に処理が進む。また、ＮＯＰフラグがセットされていれば（Ｓ３５，Ｙｅｓ）、命令エンコード部７３ｂはカウンタの値だけオペランドを置換えたＮＯＰコードを生成し、エンコードデータとしてオブジェクトコードテーブル７４に格納する（Ｓ３６）。ただし、Ｎ−ｍビットはオペランド０とし、ｍビットは当該命令のオペランドとする。そして、ＮＯＰフラグおよびカウンタをリセットする（Ｓ３７）。
【０１５０】
ステップＳ３８において、命令エンコード部７３ｂは当該命令のオペランドのＮ−ｍビットをオペランド０として登録する。そして、命令エンコード部７３ｂは当該命令をエンコードし、エンコードデータをオブジェクトコードテーブル７４に格納する（Ｓ３９）。そして、ステップＳ３２に戻って以降の処理を繰返す。
【０１５１】
次に、図６に示すマイクロプログラムをオブジェクトコードに変換する場合の処理を、図２４に示すフローチャートを用いて説明する。ここで、命令コードを３２ビットとし、オペコードを５ビット、オペランドを２７ビット、Ｎ＝２７、ｍ＝１９として説明する。まず、ＮＯＰフラグとカウンタとをリセットし、オペランド０（８ビット分）を“00h”とする（Ｓ３１）。
【０１５２】
次に、入力部７１は、ＳＵＢ命令を読出す。最後の命令の処理が終了していないので（Ｓ３２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ３３）。この命令はＮＯＰ命令ではないので（Ｓ３３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ３５）。ＮＯＰフラグがセットされていないので（Ｓ３５，Ｎｏ）、命令エンコード部７３ｂはＳＵＢ命令のオペランドのＮ−ｍビットをオペランド０として登録する（Ｓ３８）。そして、命令エンコード部７３ｂはＳＵＢ命令をエンコードし、エンコードデータをオブジェクトコードテーブル７４に格納する（Ｓ３９）。
【０１５３】
次に、入力部７１は、ＮＯＰ命令を読出す。最後の命令の処理が終了していないので（Ｓ３２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ３３）。この命令はＮＯＰ命令であるので（Ｓ３３，Ｙｅｓ）、命令エンコード部７３ｂはＮＯＰフラグをセットし、カウンタをインクリメントする（Ｓ３４）。そして、ステップＳ３２に処理が戻る。
【０１５４】
次に、入力部７１は、ＡＤＤ命令を読出す。最後の命令の処理が終了していないので（Ｓ３２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ３３）。この命令はＮＯＰ命令ではないので（Ｓ３３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ３５）。ＮＯＰフラグがセットされているので（Ｓ３５，Ｙｅｓ）、命令エンコード部７３ｂはカウンタの値（１）だけオペランドを置換えたＮＯＰコードを生成し、エンコードデータとしてオブジェクトコードテーブル７４に格納する（Ｓ３６）。ただし、８ビットはＳＵＢ命令のオペランドＡとし、残りの１９ビットはＡＤＤ命令のオペランドＣとする。
【０１５５】
次に、ＮＯＰフラグおよびカウンタをリセットする（Ｓ３７）。そして、命令エンコード部７３ｂは、ＡＤＤ命令のオペランドの８ビットをオペランド０として登録し（Ｓ３８）、ＡＤＤ命令をエンコードして、エンコードデータをオブジェクトコードテーブル７４に格納する（Ｓ３９）。そして、ステップＳ３２に処理が戻る。
【０１５６】
最後の命令の処理が終了しているので（Ｓ３２，Ｙｅｓ）、出力部７５はオブジェクトコードテーブル７４に格納されたデータをオブジェクトコード７６として出力する。
【０１５７】
以上説明したように、本実施の形態におけるコンパイル装置によれば、本発明の第３の実施の形態において説明した効果と同様の効果を奏することが可能となった。
【０１５８】
（第１８の実施の形態）
本発明の第１８の実施の形態におけるコンパイル装置は、図８に示す第４の実施の形態における命令コードの変換方法を実現するためのものである。なお、本発明の第１８の実施の形態におけるコンパイル装置の構成例は、図２に示す第１の実施の形態におけるコンパイル装置の構成例と同様である。また、本発明の第１８の実施の形態におけるコンパイル装置の機能的構成は、図２１に示す本発明の第１５の実施の形態におけるコンパイル装置の機能的構成と比較して、命令エンコード部の機能が異なる点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰返さない。なお、本実施の形態における命令エンコード部の参照符号を７３ｃとして説明する。
【０１５９】
図２５は、本発明の第１８の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。まず、初期処理として、命令がＮＯＰ命令であることを示すＮＯＰフラグと、ＮＯＰの個数を示すカウンタとをリセットし、前の命令のオペランドを任意のＮＯＰコードとし、これをオペランド０として登録する（Ｓ４１）。
【０１６０】
次に、マイクロプログラム７０の最後の命令の処理が終了したか否かが判定される（Ｓ４２）。最後の命令の処理が終了していなければ（Ｓ４２，Ｎｏ）、命令解析部７２は、入力部７１によって入力された命令がＮＯＰ命令であるか否かを判定する（Ｓ４３）。命令解析部７２によってＮＯＰ命令であると判定されれば（Ｓ４３，Ｙｅｓ）、命令エンコード部７３ｃはＮＯＰフラグをセットし、カウンタをインクリメントする（Ｓ４４）。そして、ステップＳ４２に戻って以降の処理を繰返す。
【０１６１】
また、命令解析部７２によってＮＯＰ命令でないと判定されれば（Ｓ４３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ４５）。ＮＯＰフラグがセットされていなければ（Ｓ４５，Ｎｏ）、ステップＳ４８に処理が進む。また、ＮＯＰフラグがセットされていれば（Ｓ４５，Ｙｅｓ）、命令エンコード部７３ｃはカウンタの値だけオペランドを置換えたＮＯＰコードを生成し、エンコードデータとしてオブジェクトコードテーブル７４に格納する（Ｓ４６）。そして、ＮＯＰフラグおよびカウンタをリセットする（Ｓ４７）。
【０１６２】
ステップＳ４８において、命令エンコード部７３ｃは当該命令のオペランドをオペランド０として登録する。そして、命令エンコード部７３ｃは当該命令をエンコードし、エンコードデータをオブジェクトコードテーブル７４に格納する（Ｓ４９）。そして、ステップＳ４２に戻って以降の処理を繰返す。
【０１６３】
図２６は、図２５に示すステップＳ４６の処理をさらに詳細に説明するためのフローチャートである。まず、命令エンコード部７３ｃは、前の命令のオペランドと当該命令のオペランドとの不一致箇所の個数（Ｄｉｆｆ＿ｎｕｍ）を調べる（Ｓ４０１）。そして、不一致箇所の個数（Ｄｉｆｆ＿ｎｕｍ）がゼロ以外であるか否かが判定される（Ｓ４０２）。不一致箇所の個数（Ｄｉｆｆ＿ｎｕｍ）がゼロであれば（Ｓ４０２，Ｎｏ）、ＮＯＰ命令のオペランドを当該命令のオペランドに置換え（Ｓ４１３）、ステップＳ４１４に処理が進む。
【０１６４】
また、不一致箇所の個数（Ｄｉｆｆ＿ｎｕｍ）がゼロ以外であれば（Ｓ４０２，Ｙｅｓ）、命令エンコード部７３ｃは要素数がカウンタ値＋１（ＮＯＰ命令の個数＋１）個のテーブルＴＢＬ［Ｎ］を用意し、テーブルＴＢＬの内容とＴＢＬ用のカウンタＴ＿ｃｏｕｎｔとをリセットする（Ｓ４０３）。
【０１６５】
次に、Ｎの値をリセットし（Ｓ４０４）、ＴＢＬ［Ｎ］の内容をインクリメントし、Ｔ＿ｃｏｕｎｔの値をインクリメントする（Ｓ４０５）。そして、Ｔ＿ｃｏｕｎｔの値がＤｉｆｆ＿ｎｕｍの値より小さいか否かが判定される（Ｓ４０６）。Ｔ＿ｃｏｕｎｔの値がＤｉｆｆ＿ｎｕｍの値より小さければ（Ｓ４０６、Ｙｅｓ）、Ｎをインクリメントし（Ｓ４０７）、Ｎがカウンタ値＋１（ＮＯＰ命令の個数＋１）よりも小さいか否かが判定される（Ｓ４０８）。
【０１６６】
Ｎがカウンタ値＋１よりも小さければ（Ｓ４０８，Ｙｅｓ）、ステップＳ４０５に戻って以降の処理を繰返す。また、Ｎがカウンタ値＋１よりも小さくなければ（Ｓ４０８，Ｎｏ）、ステップＳ４０４に戻って以降の処理を繰返す。
【０１６７】
また、Ｔ＿ｃｏｕｎｔの値がＤｉｆｆ＿ｎｕｍの値より小さくなければ（Ｓ４０６，Ｎｏ）、Ｎ２の値をリセットする（Ｓ４０９）。そして、命令エンコード部７３ｃは、ＴＢＬ［Ｎ２］の内容に相当するビット数だけ、前の命令のオペランドと当該命令のオペランドとの不一致箇所を、当該命令のオペランドに置換える。それ以外のオペランドの不一致箇所をオペランド０に置換える（Ｓ４１０）。
【０１６８】
次に、Ｎ２の値をインクリメントし（Ｓ４１１）、Ｎ２の値がカウンタ値（ＮＯＰ命令の個数）よりも小さいか否かが判定される（Ｓ４１２）。Ｎ２の値がカウンタ値よりも小さければ（Ｓ４１２，Ｙｅｓ）、ステップＳ４１０に戻って以降の処理を繰返す。また、Ｎ２の値がカウンタ値よりも小さくなければ（Ｓ４１２，Ｎｏ）、ステップＳ４１４に処理が進む。
【０１６９】
ステップＳ４１４において、命令エンコード部７３ｃは、書換えたデータをオブジェクトコードテーブル７４に格納する。
【０１７０】
次に、図８に示すマイクロプログラムをオブジェクトコードに変換する場合の処理を、図２５および図２６に示すフローチャートを用いて説明する。まず、ＮＯＰフラグとカウンタとをリセットし、オペランド０を“0000000h”とする（Ｓ４１）。
【０１７１】
次に、入力部７１は、ＳＵＢ命令を読出す。最後の命令の処理が終了していないので（Ｓ４２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ４３）。この命令はＮＯＰ命令ではないので（Ｓ４３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ４５）。ＮＯＰフラグがセットされていないので（Ｓ４５，Ｎｏ）、命令エンコード部７３ｃはＳＵＢ命令のオペランドをオペランド０として登録する（Ｓ４８）。そして、命令エンコード部７３ｃはＳＵＢ命令をエンコードし、エンコードデータをオブジェクトコードテーブル７４に格納する（Ｓ４９）。
【０１７２】
次に、入力部７１は、ＮＯＰ命令を読出す。最後の命令の処理が終了していないので（Ｓ４２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ４３）。この命令はＮＯＰ命令であるので（Ｓ４３，Ｙｅｓ）、命令エンコード部７３ｃはＮＯＰフラグをセットし、カウンタをインクリメントする（Ｓ４４）。そして、ステップＳ４２に処理が戻る。
【０１７３】
次に、入力部７１は、ＡＤＤ命令を読出す。最後の命令の処理が終了していないので（Ｓ４２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ４３）。この命令はＮＯＰ命令ではないので（Ｓ４３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ４５）。ＮＯＰフラグがセットされているので（Ｓ４５，Ｙｅｓ）、命令エンコード部７３ｃはＳＵＢ命令のオペランドとＡＤＤ命令のオペランドとの不一致箇所の個数（Ｄｉｆｆ＿ｎｕｍ）を調べる（Ｓ４０１）。ここで、Ｄｉｆｆ＿ｎｕｍ＝６となる。
【０１７４】
Ｄｉｆｆ＿ｎｕｍがゼロ以外であるので（Ｓ４０２，Ｙｅｓ）、命令エンコード部７３ｃは要素数がカウンタ値＋１（２）個のテーブルＴＢＬ［Ｎ］を用意し、テーブルＴＢＬの内容とＴＢＬ用のカウンタＴ＿ｃｏｕｎｔとをリセットする（Ｓ４０３）。
【０１７５】
次に、Ｎの値をリセットし（Ｓ４０４）、ＴＢＬ［０］の内容をインクリメントし、Ｔ＿ｃｏｕｎｔの値をインクリメントする（Ｓ４０５）。このとき、ＴＢＬ［０］＝１、Ｔ＿ｃｏｕｎｔ＝１となる。そして、Ｔ＿ｃｏｕｎｔの値（１）がＤｉｆｆ＿ｎｕｍの値（６）より小さいので（Ｓ４０６、Ｙｅｓ）、Ｎをインクリメントし（Ｓ４０７）、Ｎがカウンタ値＋１（２）よりも小さいか否かが判定される（Ｓ４０８）。
【０１７６】
ここで、Ｎが１であり、カウンタ値＋１（２）よりも小さいので（Ｓ４０８，Ｙｅｓ）、ステップＳ４０５に戻ってＴＢＬ［１］の内容をインクリメントし、Ｔ＿ｃｏｕｎｔの値をインクリメントする（Ｓ４０５）。このとき、ＴＢＬ［１］＝１、Ｔ＿ｃｏｕｎｔ＝２となる。そして、Ｔ＿ｃｏｕｎｔの値（２）がＤｉｆｆ＿ｎｕｍの値（６）より小さいので（Ｓ４０６、Ｙｅｓ）、Ｎをインクリメントし（Ｓ４０７）、Ｎがカウンタ値＋１（２）よりも小さいか否かが判定される（Ｓ４０８）。
【０１７７】
ここで、Ｎが２であり、カウンタ値＋１（２）よりも小さくないので（Ｓ４０８，Ｎｏ）、ステップＳ４０４に戻ってＮの値をリセットする。そして、ＴＢＬ［０］の内容をインクリメントし、Ｔ＿ｃｏｕｎｔの値をインクリメントする（Ｓ４０５）。このとき、ＴＢＬ［０］＝２、Ｔ＿ｃｏｕｎｔ＝３となる。
【０１７８】
このステップＳ４０４〜Ｓ４０８の処理を繰返すことにより、ＴＢＬ［１］＝２、Ｔ＿ｃｏｕｎｔ＝４となり、ＴＢＬ［０］＝３、Ｔ＿ｃｏｕｎｔ＝５となり、ＴＢＬ［１］＝３、Ｔ＿ｃｏｕｎｔ＝６となる。
【０１７９】
Ｔ＿ｃｏｕｎｔ＝６となると、Ｔ＿ｃｏｕｎｔの値がＤｉｆｆ＿ｎｕｍの値より小さくないので（Ｓ４０６，Ｎｏ）、Ｎ２の値をリセットする（Ｓ４０９）。そして、命令エンコード部７３ｃは、ＴＢＬ［０］の内容に相当する３ビット分だけ、ＳＵＢ命令のオペランドとＡＤＤ命令との不一致箇所を、ＡＤＤ命令のオペランドに置換える。それ以外の不一致箇所をＳＵＢ命令のオペランドに置換える（Ｓ４１０）。
【０１８０】
次に、Ｎ２の値をインクリメントし（Ｓ４１１）、Ｎ２の値（１）がカウンタ値（１）よりも小さくないので（Ｓ４１２，Ｎｏ）、命令エンコード部７３ｃは、書換えたデータをオブジェクトコードテーブル７４に格納する（Ｓ４１４）。
【０１８１】
次に、ＮＯＰフラグおよびカウンタをリセットする（Ｓ４７）。そして、命令エンコード部７３ｃは、ＡＤＤ命令のオペランドをオペランド０として登録し（Ｓ４８）、ＡＤＤ命令をエンコードして、エンコードデータをオブジェクトコードテーブル７４に格納する（Ｓ４９）。そして、ステップＳ４２に処理が戻る。
【０１８２】
最後の命令の処理が終了しているので（Ｓ４２，Ｙｅｓ）、出力部７５はオブジェクトコードテーブル７４に格納されたデータをオブジェクトコード７６として出力する。
【０１８３】
以上説明したように、本実施の形態におけるコンパイル装置によれば、本発明の第４の実施の形態において説明した効果と同様の効果を奏することが可能となった。
【０１８４】
（第１９の実施の形態）
本発明の第１９の実施の形態におけるコンパイル装置は、図１３に示す第８の実施の形態における命令コードの変換方法を実現するためのものである。なお、本発明の第１９の実施の形態におけるコンパイル装置の構成例は、図２に示す第１の実施の形態におけるコンパイル装置の構成例と同様である。また、本発明の第１９の実施の形態におけるコンパイル装置の機能的構成は、図２１に示す本発明の第１５の実施の形態におけるコンパイル装置の機能的構成と比較して、命令エンコード部の機能が異なる点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰返さない。なお、本実施の形態における命令エンコード部の参照符号を７３ｄとして説明する。
【０１８５】
図２７は、本発明の第１９の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。まず、初期処理として、前の命令のエンコードデータをＮＯＰコード、たとえば“00000000ｈ”などの任意のコードとし、これを命令コード０とする（Ｓ５１）。
【０１８６】
次に、マイクロプログラム７０の最後の命令の処理が終了したか否かが判定される（Ｓ５２）。最後の命令の処理が終了していなければ（Ｓ５２，Ｎｏ）、命令解析部７２は、入力部７１によって入力された命令がＮＯＰ命令であるか否かを判定する（Ｓ５３）。命令解析部７２によってＮＯＰ命令でないと判定されれば（Ｓ５３，Ｎｏ）、ＮＯＰ命令ビットに０をセットし（Ｓ５４）、ステップＳ５５に処理が進む。
【０１８７】
また、命令解析部７２によってＮＯＰ命令であると判定されれば（Ｓ５３，Ｙｅｓ）、命令コード０をＮＯＰ命令のエンコードデータとして登録し、ＮＯＰ命令ビットに１をセットする（Ｓ５７）。そして、ステップＳ５５に処理が進む。
【０１８８】
ステップＳ５５において、命令エンコード部７３は当該命令のエンコードデータを命令コード０として登録する（Ｓ５５）。そして、当該命令のエンコードデータとＮＯＰ命令ビットとをオブジェクトコードテーブル７４に格納する（Ｓ５６）。そして、ステップＳ５２に戻って以降の処理を繰返す。
【０１８９】
また、最後の命令の処理が終了していれば（Ｓ５２，Ｙｅｓ）、出力部７５はオブジェクトコードテーブル７４に格納されたデータをオブジェクトコード７６として出力する。
【０１９０】
次に、図１３に示すマイクロプログラムをオブジェクトコードに変換する場合の処理を、図２７に示すフローチャートを用いて説明する。まず、前の命令の命令コードを“00000000ｈ”とし、これを命令コード０とする（Ｓ５１）。
【０１９１】
次に、入力部７１は、ＳＵＢ命令を読出す。最後の命令の処理が終了していないので（Ｓ５２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ５３）。この命令はＮＯＰ命令ではないので（Ｓ５３，Ｎｏ）、命令エンコード部７３ｄはこのＳＵＢ命令のＮＯＰ命令ビットに０をセットし（Ｓ５４）、このＳＵＢ命令のエンコードデータ（オペコードＡ＋オペランドＡ）を命令コード０として登録する（Ｓ５５）。そして、ＳＵＢ命令のエンコードデータとＮＯＰ命令ビットとをオブジェクトコードテーブル７４に格納する（Ｓ５６）。そして、ステップＳ５２に処理が戻る。
【０１９２】
次に、入力部７１は、ＮＯＰ命令を読出す。最後の命令の処理が終了していないので（Ｓ５２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ５３）。この命令はＮＯＰ命令であるので（Ｓ５３，Ｙｅｓ）、命令エンコード部７３ｄは命令コード０（オペコードＡ＋オペランドＡ）をＮＯＰ命令のエンコードデータとして登録し、ＮＯＰ命令ビットに１をセットする（Ｓ５７）。
【０１９３】
次に、このエンコードデータを命令コード０として登録する（Ｓ５５）。そして、ＮＯＰ命令のエンコードデータとＮＯＰ命令ビットとをオブジェクトコードテーブル７４に格納する（Ｓ５６）。そして、ステップＳ５２に処理が戻る。
【０１９４】
次に、入力部７１は、ＡＤＤ命令を読出す。最後の命令の処理が終了していないので（Ｓ５２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ５３）。この命令はＮＯＰ命令ではないので（Ｓ５３，Ｎｏ）、命令エンコード部７３ｄはこのＡＤＤ命令のＮＯＰ命令ビットに０をセットし（Ｓ５４）、このＡＤＤ命令のエンコードデータ（オペコードＣ＋オペランドＣ）を命令コード０として登録する（Ｓ５５）。そして、ＡＤＤ命令のエンコードデータとＮＯＰ命令ビットとをオブジェクトコードテーブル７４に格納する（Ｓ５６）。そして、ステップＳ５２に処理が戻る。
【０１９５】
最後の命令の処理が終了しているので（Ｓ５２，Ｙｅｓ）、出力部７５はオブジェクトコードテーブル７４に格納されたデータをオブジェクトコード７６として出力する。
【０１９６】
以上説明したように、本実施の形態におけるコンパイル装置によれば、本発明の第８の実施の形態において説明した効果と同様の効果を奏することが可能となった。
【０１９７】
（第２０の実施の形態）
本発明の第２０の実施の形態におけるコンパイル装置は、図１５に示す第９の実施の形態における命令コードの変換方法を実現するためのものである。なお、本発明の第２０の実施の形態におけるコンパイル装置の構成例は、図２に示す第１の実施の形態におけるコンパイル装置の構成例と同様である。また、本発明の第２０の実施の形態におけるコンパイル装置の機能的構成は、図２１に示す本発明の第１５の実施の形態におけるコンパイル装置の機能的構成と比較して、命令エンコード部の機能が異なる点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰返さない。なお、本実施の形態における命令エンコード部の参照符号を７３ｅとして説明する。
【０１９８】
図２８は、本発明の第２０の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。まず、初期処理として、命令がＮＯＰ命令であることを示すＮＯＰフラグと、ＮＯＰの個数を示すカウンタとをリセットする（Ｓ６１）。
【０１９９】
次に、マイクロプログラム７０の最後の命令の処理が終了したか否かが判定される（Ｓ６２）。最後の命令の処理が終了していなければ（Ｓ６２，Ｎｏ）、命令解析部７２は、入力部７１によって入力された命令がＮＯＰ命令であるか否かを判定する（Ｓ６３）。命令解析部７２によってＮＯＰ命令であると判定されれば（Ｓ６３，Ｙｅｓ）、命令エンコード部７３ｅはＮＯＰフラグをセットし、カウンタをインクリメントし（Ｓ６４）、ステップＳ６２に戻って以降の処理を繰返す。
【０２００】
また、命令解析部７２によってＮＯＰ命令でないと判定されれば（Ｓ６３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ６５）。ＮＯＰフラグがセットされていなければ（Ｓ６５，Ｎｏ）、ステップＳ６８に処理が進む。また、ＮＯＰフラグがセットされていれば（Ｓ６５，Ｙｅｓ）、命令エンコード部７３ｅはカウンタの値だけ命令コードを当該命令のエンコードデータに置換えたＮＯＰコードを生成し、ＮＯＰ命令ビットに１をセットする。そして、ＮＯＰ命令ビットとエンコードデータとをオブジェクトコードテーブル７４に格納する（Ｓ６６）。そして、ＮＯＰフラグおよびカウンタをリセットする（Ｓ６７）。
【０２０１】
ステップＳ６８において、命令エンコード部７３ｅは当該命令のエンコードデータとＮＯＰ命令ビット＝０とをオブジェクトコードテーブル７４に格納する。そして、ステップＳ６２に戻って以降の処理を繰返す。
【０２０２】
次に、図１５に示すマイクロプログラムをオブジェクトコードに変換する場合の処理を、図２８に示すフローチャートを用いて説明する。まず、ＮＯＰフラグとカウンタとをリセットする（Ｓ６１）。
【０２０３】
次に、入力部７１は、ＳＵＢ命令を読出す。最後の命令の処理が終了していないので（Ｓ６２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ６３）。この命令はＮＯＰ命令ではないので（Ｓ６３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ６５）。ＮＯＰフラグがセットされていないので（Ｓ６５，Ｎｏ）、命令エンコード部７３ｅはＳＵＢ命令のエンコードデータとＮＯＰ命令ビット＝０とをオブジェクトコードテーブル７４に格納する（Ｓ６８）。
【０２０４】
次に、入力部７１は、ＮＯＰ命令を読出す。最後の命令の処理が終了していないので（Ｓ６２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ６３）。この命令はＮＯＰ命令であるので（Ｓ６３，Ｙｅｓ）、命令エンコード部７３ｅはＮＯＰフラグをセットし、カウンタをインクリメントする（Ｓ６４）。そして、ステップＳ６２に処理が戻る。
【０２０５】
次に、入力部７１は、ＡＤＤ命令を読出す。最後の命令の処理が終了していないので（Ｓ６２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ６３）。この命令はＮＯＰ命令ではないので（Ｓ６３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ６５）。ＮＯＰフラグがセットされているので（Ｓ６５，Ｙｅｓ）、命令エンコード部７３ｅはカウンタの値（１）だけ命令コードをＡＤＤ命令のエンコードデータに置換えたＮＯＰコードを生成し、ＮＯＰ命令ビットに１をセットする。そして、ＮＯＰ命令ビットとエンコードデータとをオブジェクトコードテーブル７４に格納する（Ｓ６６）。
【０２０６】
次に、ＮＯＰフラグおよびカウンタをリセットする（Ｓ６７）。そして、命令エンコード部７３ｅは、ＮＯＰ命令ビット＝０とＡＤＤ命令のエンコードデータとをオブジェクトコードテーブル７４に格納し（Ｓ６８）、ステップＳ６２に処理が戻る。
【０２０７】
最後の命令の処理が終了しているので（Ｓ６２，Ｙｅｓ）、出力部７５はオブジェクトコードテーブル７４に格納されたデータをオブジェクトコード７６として出力する。
【０２０８】
以上説明したように、本実施の形態におけるコンパイル装置によれば、本発明の第６の実施の形態において説明した効果と同様の効果を奏することが可能となった。
【０２０９】
（第２１の実施の形態）
本発明の第２１の実施の形態におけるコンパイル装置は、図１６に示す第１０の実施の形態における命令コードの変換方法を実現するためのものである。なお、本発明の第２１の実施の形態におけるコンパイル装置の構成例は、図２に示す第１の実施の形態におけるコンパイル装置の構成例と同様である。また、本発明の第２１の実施の形態におけるコンパイル装置の機能的構成は、図２１に示す本発明の第１５の実施の形態におけるコンパイル装置の機能的構成と比較して、命令エンコード部の機能が異なる点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰返さない。なお、本実施の形態における命令エンコード部の参照符号を７３ｆとして説明する。
【０２１０】
図２９は、本発明の第２１の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。まず、初期処理として、命令がＮＯＰ命令であることを示すＮＯＰフラグと、ＮＯＰの個数を示すカウンタとをリセットし、前の命令のエンコードデータを任意のＮＯＰコードとし、これを命令コード０として（Ｎ−ｍ）ビット分だけ登録する（Ｓ７１）。なお、Ｎは命令コードのビット数とし、０≦ｍ≦Ｎとする。
【０２１１】
次に、マイクロプログラム７０の最後の命令の処理が終了したか否かが判定される（Ｓ７２）。最後の命令の処理が終了していなければ（Ｓ７２，Ｎｏ）、命令解析部７２は、入力部７１によって入力された命令がＮＯＰ命令であるか否かを判定する（Ｓ７３）。命令解析部７２によってＮＯＰ命令であると判定されれば（Ｓ７３，Ｙｅｓ）、命令エンコード部７３ｆはＮＯＰフラグをセットし、カウンタをインクリメントする（Ｓ７４）。そして、ステップＳ７２に戻って以降の処理を繰返す。
【０２１２】
また、命令解析部７２によってＮＯＰ命令でないと判定されれば（Ｓ７３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ７５）。ＮＯＰフラグがセットされていなければ（Ｓ７５，Ｎｏ）、ステップＳ７８に処理が進む。また、ＮＯＰフラグがセットされていれば（Ｓ７５，Ｙｅｓ）、命令エンコード部７３ｆはカウンタの値だけ命令コードを置換えたＮＯＰコードを生成し、エンコードデータとしてオブジェクトコードテーブル７４に格納する（Ｓ７６）。ただし、Ｎ−ｍビットの命令コードは命令コード０とし、ｍビットの命令コードは当該命令の命令コードとする。そして、ＮＯＰフラグおよびカウンタをリセットする（Ｓ７７）。
【０２１３】
ステップＳ７８において、命令エンコード部７３ｆは当該命令の命令コードのＮ−ｍビットを命令コード０として登録する。そして、命令エンコード部７３ｆは当該命令のエンコードデータとＮＯＰ命令ビットとをオブジェクトコードテーブル７４に格納する（Ｓ７９）。そして、ステップＳ７２に戻って以降の処理を繰返す。
【０２１４】
次に、図１６に示すマイクロプログラムをオブジェクトコードに変換する場合の処理を、図２９に示すフローチャートを用いて説明する。ここで、命令コードを３２ビットとし、オペコードを５ビット、オペランドを２７ビット、Ｎ＝３２、ｍ＝１６として説明する。なお、ＮＯＰ命令ビットは１ビットである。まず、ＮＯＰフラグとカウンタとをリセットし、命令コード０（１６ビット分）を“0000h”とする（Ｓ７１）。
【０２１５】
次に、入力部７１は、ＳＵＢ命令を読出す。最後の命令の処理が終了していないので（Ｓ７２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ７３）。この命令はＮＯＰ命令ではないので（Ｓ７３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ７５）。ＮＯＰフラグがセットされていないので（Ｓ７５，Ｎｏ）、命令エンコード部７３ｆはＳＵＢ命令の命令コードのＮ−ｍビットを命令コード０として登録する（Ｓ７８）。そして、命令エンコード部７３ｆはＳＵＢ命令のエンコードデータとＮＯＰ命令ビット＝０とをオブジェクトコードテーブル７４に格納する（Ｓ７９）。
【０２１６】
次に、入力部７１は、ＮＯＰ命令を読出す。最後の命令の処理が終了していないので（Ｓ７２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ７３）。この命令はＮＯＰ命令であるので（Ｓ７３，Ｙｅｓ）、命令エンコード部７３ｆはＮＯＰフラグをセットし、カウンタをインクリメントする（Ｓ７４）。そして、ステップＳ７２に処理が戻る。
【０２１７】
次に、入力部７１は、ＡＤＤ命令を読出す。最後の命令の処理が終了していないので（Ｓ７２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ７３）。この命令はＮＯＰ命令ではないので（Ｓ７３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ７５）。ＮＯＰフラグがセットされているので（Ｓ７５，Ｙｅｓ）、命令エンコード部７３ｆはカウンタの値（１）だけ命令コードを置換えたＮＯＰコードを生成し、エンコードデータとしてＮＯＰ命令ビット＝１と共にオブジェクトコードテーブル７４に格納する（Ｓ７６）。ただし、１６ビットはＳＵＢ命令のオペコードおよびオペランドＡの１１ビットとし、残りの１６ビットはＡＤＤ命令のオペランドＣの１６ビットとする。
【０２１８】
次に、ＮＯＰフラグおよびカウンタをリセットする（Ｓ７７）。そして、命令エンコード部７３ｆは、ＡＤＤ命令の命令コードの１６ビットを命令コード０として登録し（Ｓ７８）、ＡＤＤ命令のエンコードデータとＮＯＰ命令ビット＝０とをオブジェクトコードテーブル７４に格納する（Ｓ７９）。そして、ステップＳ７２に処理が戻る。
【０２１９】
最後の命令の処理が終了しているので（Ｓ７２，Ｙｅｓ）、出力部７５はオブジェクトコードテーブル７４に格納されたデータをオブジェクトコード７６として出力する。
【０２２０】
以上説明したように、本実施の形態におけるコンパイル装置によれば、本発明の第１０の実施の形態において説明した効果と同様の効果を奏することが可能となった。
【０２２１】
（第２２の実施の形態）
本発明の第２２の実施の形態におけるコンパイル装置は、図１７に示す第１１の実施の形態における命令コードの変換方法を実現するためのものである。なお、本発明の第２２の実施の形態におけるコンパイル装置の構成例は、図２に示す第１の実施の形態におけるコンパイル装置の構成例と同様である。また、本発明の第２２の実施の形態におけるコンパイル装置の機能的構成は、図２１に示す本発明の第１５の実施の形態におけるコンパイル装置の機能的構成と比較して、命令エンコード部の機能が異なる点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰返さない。なお、本実施の形態における命令エンコード部の参照符号を７３ｇとして説明する。
【０２２２】
図３０は、本発明の第２２の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。まず、初期処理として、命令がＮＯＰ命令であることを示すＮＯＰフラグと、ＮＯＰの個数を示すカウンタとをリセットし、前の命令の命令コードを任意のＮＯＰコードとし、これを命令コード０として登録する（Ｓ８１）。
【０２２３】
次に、マイクロプログラム７０の最後の命令の処理が終了したか否かが判定される（Ｓ８２）。最後の命令の処理が終了していなければ（Ｓ８２，Ｎｏ）、命令解析部７２は、入力部７１によって入力された命令がＮＯＰ命令であるか否かを判定する（Ｓ８３）。命令解析部７２によってＮＯＰ命令であると判定されれば（Ｓ８３，Ｙｅｓ）、命令エンコード部７３ｇはＮＯＰフラグをセットし、カウンタをインクリメントする（Ｓ８４）。そして、ステップＳ８２に戻って以降の処理を繰返す。
【０２２４】
また、命令解析部７２によってＮＯＰ命令でないと判定されれば（Ｓ８３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ８５）。ＮＯＰフラグがセットされていなければ（Ｓ８５，Ｎｏ）、ステップＳ８８に処理が進む。また、ＮＯＰフラグがセットされていれば（Ｓ８５，Ｙｅｓ）、命令エンコード部７３ｇはカウンタの値だけ命令コードを置換えたＮＯＰコードを生成し、エンコードデータとしてオブジェクトコードテーブル７４に格納する（Ｓ８６）。そして、ＮＯＰフラグおよびカウンタをリセットする（Ｓ８７）。
【０２２５】
ステップＳ８８において、命令エンコード部７３ｇは当該命令の命令コードを命令コード０として登録する。そして、命令エンコード部７３ｇは当該命令のエンコードデータとＮＯＰ命令ビットとをオブジェクトコードテーブル７４に格納する（Ｓ８９）。そして、ステップＳ８２に戻って以降の処理を繰返す。
【０２２６】
図３１は、図３０に示すステップＳ８６の処理をさらに詳細に説明するためのフローチャートである。まず、命令エンコード部７３ｇは、前の命令の命令コードと当該命令の命令コードとの不一致箇所の個数（Ｄｉｆｆ＿ｎｕｍ）を調べる（Ｓ８０１）。そして、不一致箇所の個数（Ｄｉｆｆ＿ｎｕｍ）がゼロ以外であるか否かが判定される（Ｓ８０２）。不一致箇所の個数（Ｄｉｆｆ＿ｎｕｍ）がゼロであれば（Ｓ８０２，Ｎｏ）、ＮＯＰ命令の命令コードを当該命令の命令コードに置換え（Ｓ８１３）、ステップＳ８１４に処理が進む。
【０２２７】
また、不一致箇所の個数（Ｄｉｆｆ＿ｎｕｍ）がゼロ以外であれば（Ｓ８０２，Ｙｅｓ）、命令エンコード部７３ｇは要素数がカウンタ値＋１（ＮＯＰ命令の個数＋１）個のテーブルＴＢＬ［Ｎ］を用意し、テーブルＴＢＬの内容とＴＢＬ用のカウンタＴ＿ｃｏｕｎｔとをリセットする（Ｓ８０３）。
【０２２８】
次に、Ｎの値をリセットし（Ｓ８０４）、ＴＢＬ［Ｎ］の内容をインクリメントし、Ｔ＿ｃｏｕｎｔの値をインクリメントする（Ｓ８０５）。そして、Ｔ＿ｃｏｕｎｔの値がＤｉｆｆ＿ｎｕｍの値より小さいか否かが判定される（Ｓ８０６）。Ｔ＿ｃｏｕｎｔの値がＤｉｆｆ＿ｎｕｍの値より小さければ（Ｓ８０６、Ｙｅｓ）、Ｎをインクリメントし（Ｓ８０７）、Ｎがカウンタ値＋１（ＮＯＰ命令の個数＋１）よりも小さいか否かが判定される（Ｓ８０８）。
【０２２９】
Ｎがカウンタ値＋１よりも小さければ（Ｓ８０８，Ｙｅｓ）、ステップＳ８０５に戻って以降の処理を繰返す。また、Ｎがカウンタ値＋１よりも小さくなければ（Ｓ８０８，Ｎｏ）、ステップＳ８０４に戻って以降の処理を繰返す。
【０２３０】
また、Ｔ＿ｃｏｕｎｔの値がＤｉｆｆ＿ｎｕｍの値より小さくなければ（Ｓ８０６，Ｎｏ）、Ｎ２の値をリセットする（Ｓ８０９）。そして、命令エンコード部７３ｇは、ＴＢＬ［Ｎ２］の内容に相当するビット数だけ、前の命令の命令コードと当該命令の命令コードとの不一致箇所を、当該命令の命令コードに置換える。それ以外のオペランドの不一致箇所を命令コード０に置換える（Ｓ８１０）。
【０２３１】
次に、Ｎ２の値をインクリメントし（Ｓ８１１）、Ｎ２の値がカウンタ値（ＮＯＰ命令の個数）よりも小さいか否かが判定される（Ｓ８１２）。Ｎ２の値がカウンタ値よりも小さければ（Ｓ８１２，Ｙｅｓ）、ステップＳ８１０に戻って以降の処理を繰返す。また、Ｎ２の値がカウンタ値よりも小さくなければ（Ｓ８１２，Ｎｏ）、ステップＳ８１４に処理が進む。
【０２３２】
ステップＳ８１４において、命令エンコード部７３ｇは、書換えたデータをオブジェクトコードテーブル７４に格納する。
【０２３３】
次に、図１７に示すマイクロプログラムをオブジェクトコードに変換する場合の処理を、図３０および図３１に示すフローチャートを用いて説明する。まず、ＮＯＰフラグとカウンタとをリセットし、命令コード０を“00000000h”とする（Ｓ８１）。
【０２３４】
次に、入力部７１は、ＳＵＢ命令を読出す。最後の命令の処理が終了していないので（Ｓ８２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ８３）。この命令はＮＯＰ命令ではないので（Ｓ８３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ８５）。ＮＯＰフラグがセットされていないので（Ｓ８５，Ｎｏ）、命令エンコード部７３ｇはＳＵＢ命令の命令コードを命令コード０として登録する（Ｓ８８）。そして、命令エンコード部７３ｇはＳＵＢ命令をエンコードし、エンコードデータをオブジェクトコードテーブル７４に格納する（Ｓ８９）。
【０２３５】
次に、入力部７１は、ＮＯＰ命令を読出す。最後の命令の処理が終了していないので（Ｓ８２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ８３）。この命令はＮＯＰ命令であるので（Ｓ８３，Ｙｅｓ）、命令エンコード部７３ｇはＮＯＰフラグをセットし、カウンタをインクリメントする（Ｓ８４）。そして、ステップＳ８２に処理が戻る。
【０２３６】
次に、入力部７１は、ＡＤＤ命令を読出す。最後の命令の処理が終了していないので（Ｓ８２，Ｎｏ）、命令解析部７２はこの命令がＮＯＰ命令であるか否かを判定する（Ｓ８３）。この命令はＮＯＰ命令ではないので（Ｓ８３，Ｎｏ）、ＮＯＰフラグがセットされているか否かが判定される（Ｓ８５）。ＮＯＰフラグがセットされているので（Ｓ８５，Ｙｅｓ）、命令エンコード部７３ｇはＳＵＢ命令の命令コードとＡＤＤ命令の命令コードとの不一致箇所の個数（Ｄｉｆｆ＿ｎｕｍ）を調べる（Ｓ８０１）。ここで、Ｄｉｆｆ＿ｎｕｍ＝１１となる。
【０２３７】
Ｄｉｆｆ＿ｎｕｍがゼロ以外であるので（Ｓ８０２，Ｙｅｓ）、命令エンコード部７３ｇは要素数がカウンタ値＋１（２）個のテーブルＴＢＬ［Ｎ］を用意し、テーブルＴＢＬの内容とＴＢＬ用のカウンタＴ＿ｃｏｕｎｔとをリセットする（Ｓ８０３）。
【０２３８】
次に、Ｎの値をリセットし（Ｓ８０４）、ＴＢＬ［０］の内容をインクリメントし、Ｔ＿ｃｏｕｎｔの値をインクリメントする（Ｓ８０５）。このとき、ＴＢＬ［０］＝１、Ｔ＿ｃｏｕｎｔ＝１となる。そして、Ｔ＿ｃｏｕｎｔの値（１）がＤｉｆｆ＿ｎｕｍの値（１１）より小さいので（Ｓ８０６、Ｙｅｓ）、Ｎをインクリメントし（Ｓ８０７）、Ｎがカウンタ値＋１（２）よりも小さいか否かが判定される（Ｓ８０８）。
【０２３９】
ここで、Ｎが１であり、カウンタ値＋１（２）よりも小さいので（Ｓ８０８，Ｙｅｓ）、ステップＳ８０５に戻ってＴＢＬ［１］の内容をインクリメントし、Ｔ＿ｃｏｕｎｔの値をインクリメントする（Ｓ８０５）。このとき、ＴＢＬ［１］＝１、Ｔ＿ｃｏｕｎｔ＝２となる。そして、Ｔ＿ｃｏｕｎｔの値（２）がＤｉｆｆ＿ｎｕｍの値（１１）より小さいので（Ｓ８０６、Ｙｅｓ）、Ｎをインクリメントし（Ｓ８０７）、Ｎがカウンタ値＋１（２）よりも小さいか否かが判定される（Ｓ８０８）。
【０２４０】
ここで、Ｎが２であり、カウンタ値＋１（２）よりも小さくないので（Ｓ８０８，Ｎｏ）、ステップＳ８０４に戻ってＮの値をリセットする。そして、ＴＢＬ［０］の内容をインクリメントし、Ｔ＿ｃｏｕｎｔの値をインクリメントする（Ｓ８０５）。このとき、ＴＢＬ［０］＝２、Ｔ＿ｃｏｕｎｔ＝３となる。
【０２４１】
このステップＳ４０４〜Ｓ４０８の処理を繰返すことにより、ＴＢＬ［１］＝２、Ｔ＿ｃｏｕｎｔ＝４となり、ＴＢＬ［０］＝３、Ｔ＿ｃｏｕｎｔ＝５となり、ＴＢＬ［１］＝３、Ｔ＿ｃｏｕｎｔ＝６となり、ＴＢＬ［０］＝４、Ｔ＿ｃｏｕｎｔ＝７となり、ＴＢＬ［１］＝４、Ｔ＿ｃｏｕｎｔ＝８となり、ＴＢＬ［０］＝５、Ｔ＿ｃｏｕｎｔ＝９となり、ＴＢＬ［１］＝５、Ｔ＿ｃｏｕｎｔ＝１０となり、ＴＢＬ［０］＝６、Ｔ＿ｃｏｕｎｔ＝１１となる。
【０２４２】
Ｔ＿ｃｏｕｎｔ＝１１となると、Ｔ＿ｃｏｕｎｔの値がＤｉｆｆ＿ｎｕｍの値より小さくないので（Ｓ８０６，Ｎｏ）、Ｎ２の値をリセットする（Ｓ８０９）。そして、命令エンコード部７３ｇは、ＴＢＬ［０］の内容に相当する６ビット分だけ、ＳＵＢ命令の命令コードとＡＤＤ命令の命令コードとの不一致箇所を、ＡＤＤ命令の命令コードに置換える。それ以外の不一致箇所をＳＵＢ命令のオペランドに置換える（Ｓ８１０）。なお、図１７においては、ＮＯＰ命令の命令コードが、７ビット分だけＳＵＢ命令の命令コードに置換えられ、４ビット分だけＡＤＤ命令の命令コードに置換えられているが、実際には５ビット分だけＳＵＢ命令の命令コードに置換えられ、６ビット分だけＡＤＤ命令の命令コードに置換えられることになる。
【０２４３】
次に、Ｎ２の値をインクリメントし（Ｓ８１１）、Ｎ２の値（１）がカウンタ値（１）よりも小さくないので（Ｓ８１２，Ｎｏ）、命令エンコード部７３ｇは、書換えたデータをオブジェクトコードテーブル７４に格納する（Ｓ８１４）。
【０２４４】
次に、ＮＯＰフラグおよびカウンタをリセットする（Ｓ８７）。そして、命令エンコード部７３ｇは、ＡＤＤ命令のオペランドをオペランド０として登録し（Ｓ８８）、ＡＤＤ命令をエンコードして、エンコードデータをオブジェクトコードテーブル７４に格納する（Ｓ８９）。そして、ステップＳ８２に処理が戻る。
【０２４５】
最後の命令の処理が終了しているので（Ｓ８２，Ｙｅｓ）、出力部７５はオブジェクトコードテーブル７４に格納されたデータをオブジェクトコード７６として出力する。
【０２４６】
以上説明したように、本実施の形態におけるコンパイル装置によれば、本発明の第１１の実施の形態において説明した効果と同様の効果を奏することが可能となった。
【０２４７】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０２４８】
【図１】本発明の第１の実施の形態におけるコンパイラによる命令コードの変換方法の一例を説明するための図である。
【図２】本発明の第１の実施の形態におけるコンパイル装置の構成例を示すブロック図である。
【図３】本発明の第１の実施の形態におけるコンパイル装置の機能的構成を示すブロック図である。
【図４】本発明の第１の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。
【図５】本発明の第２の実施の形態におけるコンパイラによる命令コードの変換方法の一例を説明するための図である。
【図６】本発明の第３の実施の形態におけるコンパイラによる命令コードの変換方法の一例を説明するための図である。
【図７】ＮＯＰ命令が連続する場合の命令コードの変換方法の一例を説明するための図である。
【図８】本発明の第４の実施の形態におけるコンパイラによる命令コードの変換方法の一例を説明するための図である。
【図９】本発明の第５の実施の形態における命令コード出力装置を含んだデータ処理装置の概略構成を示すブロック図である。
【図１０】本発明の第５の実施の形態における命令コード出力装置の概略構成を示すブロック図である。
【図１１】本発明の第６の実施の形態における命令コード出力装置の概略構成を示すブロック図である。
【図１２】本発明の第７の実施の形態における命令コード出力装置の概略構成を示すブロック図である。
【図１３】本発明の第８の実施の形態におけるコンパイラによる命令コードの変換方法の一例を説明するための図である。
【図１４】本発明の第８の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。
【図１５】本発明の第９の実施の形態におけるコンパイラによる命令コードの変換方法の一例を説明するための図である。
【図１６】本発明の第１０の実施の形態におけるコンパイラによる命令コードの変換方法の一例を説明するための図である。
【図１７】本発明の第１１の実施の形態におけるコンパイラによる命令コードの変換方法の一例を説明するための図である。
【図１８】本発明の第１２の実施の形態における命令コード出力装置の概略構成を示すブロック図である。
【図１９】本発明の第１３の実施の形態における命令コード出力装置の概略構成を示すブロック図である。
【図２０】本発明の第１４の実施の形態における命令コード出力装置の概略構成を示すブロック図である。
【図２１】本発明の第１５の実施の形態におけるコンパイル装置の機能的構成を示すブロック図である。
【図２２】本発明の第１５の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。
【図２３】本発明の第１６の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。
【図２４】本発明の第１７の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。
【図２５】本発明の第１８の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。
【図２６】図２５に示すステップＳ４６の処理をさらに詳細に説明するためのフローチャートである。
【図２７】本発明の第１９の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。
【図２８】本発明の第２０の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。
【図２９】本発明の第２１の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。
【図３０】本発明の第２２の実施の形態におけるコンパイル装置の処理手順を説明するためのフローチャートである。
【図３１】図３０に示すステップＳ８６の処理をさらに詳細に説明するためのフローチャートである。
【符号の説明】
【０２４９】
１  コンピュータ本体、２  ディスプレイ装置、３  ＦＤドライブ、４  ＦＤ、５  キーボード、６  マウス、７  ＣＤ−ＲＯＭ装置、８  ＣＤ−ＲＯＭ、９  ネットワーク通信装置、１０  ＣＰＵ、１１  ＲＯＭ、１２  ＲＡＭ、１３  ハードディスク、１５  命令解析部、１６  ＮＯＰ命令検出部、１７  置換部、１８  命令コード出力部、２１  プログラムアドレス生成部、２２  命令フェッチ部、２３  命令デコード部、２４  データ読出し部、２５  演算処理部、２６  データ書込み部、３１，５１  命令メモリ、３２  オペコードデコーダ、３３，４５，５２，６７  セレクタ、３４  レジスタＢ、３５  オペランドデコーダ、４１  命令メモリＡ、４２  命令メモリＢ、４３  レジスタＡ、４４，６６  ＯＲ回路、５３，６５  レジスタＣ、５４  オペコード／オペランドデコーダ、６３，６４  レジスタＮ、７０  マイクロプログラム、７１  入力部、７２  命令解析部、７３  命令エンコード部、７４  オブジェクトコードテーブル、７５  出力部、７６  オブジェクトコード。
【図１】
2005196729.tif 000003
【図２】
2005196729.tif 000004
【図３】
2005196729.tif 000005
【図４】
2005196729.tif 000006
【図５】
2005196729.tif 000007
【図６】
2005196729.tif 000008
【図７】
2005196729.tif 000009
【図８】
2005196729.tif 000010
【図９】
2005196729.tif 000011
【図１０】
2005196729.tif 000012
【図１１】
2005196729.tif 000013
【図１２】
2005196729.tif 000014
【図１３】
2005196729.tif 000015
【図１４】
2005196729.tif 000016
【図１５】
2005196729.tif 000017
【図１６】
2005196729.tif 000018
【図１７】
2005196729.tif 000019
【図１８】
2005196729.tif 000020
【図１９】
2005196729.tif 000021
【図２０】
2005196729.tif 000022
【図２１】
2005196729.tif 000023
【図２２】
2005196729.tif 000024
【図２３】
2005196729.tif 000025
【図２４】
2005196729.tif 000026
【図２５】
2005196729.tif 000027
【図２６】
2005196729.tif 000028
【図２７】
2005196729.tif 000029
【図２８】
2005196729.tif 000030
【図２９】
2005196729.tif 000031
【図３０】
2005196729.tif 000032
【図３１】
2005196729.tif 000033