(57)【要約】【課題】  オブジェクトコードのサイズを削減することが可能なアセンブラを提供すること。【解決手段】  命令解析部２３は、プログラム入力部１２に入力されたプログラムの命令を順次解析する。ＮＯＰ命令解析部２４は、連続するＮＯＰ命令を１つの連続ＮＯＰ命令にエンコードする。そして、命令コード出力部１４は、命令解析部２３によってエンコードされた命令をオブジェクトコードとして出力する。したがって、オブジェクトコードのサイズを削減することが可能となる。【選択図】        図４
2005149297.tif 000002
【特許請求の範囲】
【請求項１】
入力されたプログラムの命令を順次解析し、連続する複数個のノーオペレーション命令を、該複数個のノーオペレーション命令の個数を指定するオペランドをもつ連続ノーオペレーション命令にエンコードする命令解析手段と、
前記命令解析手段によってエンコードされた命令をオブジェクトコードとして出力する出力手段とを含むアセンブラ。
【請求項２】
前記命令解析手段は、命令がラベルが付されたノーオペレーション命令の場合には、当該命令を前記連続ノーオペレーション命令に含めずにエンコードする、請求項１記載のアセンブラ。
【請求項３】
前記命令解析手段は、命令が引数に相当する個数のノーオペレーションを行なう引数付ノーオペレーション命令の場合には、当該命令を前記連続ノーオペレーション命令に含めずにエンコードする、請求項１または２記載のアセンブラ。
【請求項４】
フェッチすべき命令のアドレスを生成するアドレス生成手段と、
前記アドレス生成手段によって生成されたアドレスに応じて命令をフェッチする命令フェッチ手段と、
前記命令フェッチ手段によってフェッチされた命令をデコードする命令デコード手段と、
前記命令デコード手段によるデコード結果に応じて、当該命令を実行する命令実行手段とを含み、
前記命令デコード手段は、デコードする命令が、オペランド指定フィールドを有する連続ノーオペレーション命令である場合、そのオペランド指定フィールドで指定された個数分だけ連続したノーオペレーション命令として処理することができ、
その連続ノーオペレーション命令の直前にフェッチされた命令が分岐命令であり、かつこの分岐命令による分岐が生じるときには、前記オペランド指定フィールドには依存しない個数のノーオペレーション命令として処理する、プロセッサ。
【請求項５】
フェッチすべき命令のアドレスを生成するアドレス生成手段と、
前記アドレス生成手段によって生成されたアドレスに応じて命令をフェッチする命令フェッチ手段と、
前記命令フェッチ手段によってフェッチされた命令をデコードする命令デコード手段と、
前記命令デコード手段によるデコード結果に応じて、当該命令を実行する命令実行手段とを含み、
前記命令デコード手段は、デコードした命令がノーオペレーション付分岐命令であり、かつ分岐条件が成立する場合にはノーオペレーション命令を該ノーオペレーション付分岐命令の後に挿入し、デコードした命令がノーオペレーション付分岐命令であり、かつ分岐条件が不成立の場合にはノーオペレーション命令を挿入しない、プロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ニーモニックで記述されたプログラムを機械語のオブジェクトコードに変換するアセンブラおよびそのオブジェクトコードを実行するプロセッサに関し、特に、オブジェクトコードのサイズを削減することを可能にしたアセンブラおよびそのオブジェクトコードを実行するプロセッサに関する。
【背景技術】
【０００２】
プログラム制御方式プロセッサコアにおいては、ロード命令、分岐命令、演算命令など、それらの命令の実行が完了するまで複数サイクルを要する場合、待ち時間が発生する。そのため、これらの命令の結果を使用する命令を実行するためには、ＮＯＰ命令を挿入して、プログラムが正しく実行されることを保証する必要がある。これに関連する技術として、特開平４−２７５６０３号公報および特開平２−１２４２９号公報に開示された発明がある。
【０００３】
特開平４−２７５６０３号公報に開示されたプログラマブル・コントローラにおいては、ＮＯＰ命令に付加されているＮＯＰ実行回数データＮを内蔵の減算カウンタにセットし、プログラムカウンタを停止させる。そして、処理タイミング毎に減算カウンタのデクリメントを行ない、そのデクリメント後のカウント値が「１」となったときに、プログラムカウンタのカウントを再開させる。
【０００４】
また、特開平２−１２４２９号公報に開示されたディレイド・ジャンプ対応機能付情報処理装置においては、「ＮＯＰ挿入モード」でジャンプ命令または条件ジャンプ命令が実行されると、ジャンプ命令検出信号が真になる。このときモードビットが「ＮＯＰ挿入モード」であると、命令レジスタの入力は命令バッファでなく、ＮＯＰコード発生回路に切替えられる。また、プログラムカウンタの入力には、通常のインクリメンタの出力ではなく、現在のプログラムカウンタの値がフィードバックされる。これによって、次クロックにはプリフェッチされた命令ではなく、ＮＯＰコード発生回路からＮＯＰコードが命令レジスタにロードされる。
【特許文献１】特開平４−２７５６０３号公報
【特許文献２】特開平２−１２４２９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上述した特開平４−２７５６０３号公報に開示されたプログラマブル・コントローラにおいては、ＮＯＰ命令に付加されているＮＯＰ実行回数データＮに応じて、ＮＯＰ命令を実行するものである。一般に、分岐命令の直後の連続ＮＯＰ命令（ＮＯＰを連続して実行する命令）は、連続ＮＯＰ命令の直後の命令が原因となる資源の競合を防ぐために挿入されることが多い。したがって、分岐命令の分岐が成立する場合に、連続ＮＯＰ命令を実行してしまうと、不要なＮＯＰが実行されてしまい性能の低下を引き起こすといった問題点があった。
【０００６】
また、特開平２−１２４２９号公報に開示されたディレイド・ジャンプ対応機能付情報処理装置においては、「ＮＯＰ挿入モード」でジャンプ命令または条件ジャンプ命令が実行されると、プログラムカウンタの更新が停止されるため、分岐条件が不成立の場合にも不要なＮＯＰ命令が自動的に挿入されるといった問題点があった。
【０００７】
本発明は、上記問題点を解決するためになされたものであり、第１の目的は、オブジェクトコードのサイズを削減することが可能なアセンブラを提供することである。
【０００８】
本発明の第２の目的は、不要なＮＯＰ命令が挿入されるのを防止したプロセッサを提供することである。
【課題を解決するための手段】
【０００９】
本発明のある局面に従えば、アセンブラは、入力されたプログラムの命令を順次解析し、連続する複数個のノーオペレーション命令を、複数個のノーオペレーション命令の個数を指定するオペランドをもつ連続ノーオペレーション命令にエンコードする命令解析手段と、命令解析手段によってエンコードされた命令をオブジェクトコードとして出力する出力手段とを含む。
【００１０】
本発明の別の局面に従えば、プロセッサは、フェッチすべき命令のアドレスを生成するアドレス生成手段と、アドレス生成手段によって生成されたアドレスに応じて命令をフェッチする命令フェッチ手段と、命令フェッチ手段によってフェッチされた命令をデコードする命令デコード手段と、命令デコード手段によるデコード結果に応じて、当該命令を実行する命令実行手段とを含み、命令デコード手段は、デコードする命令が、オペランド指定フィールドを有する連続ノーオペレーション命令である場合、そのオペランド指定フィールドで指定された個数分だけ連続したノーオペレーション命令として処理することができ、その連続ノーオペレーション命令の直前にフェッチされた命令が分岐命令であり、かつこの分岐命令による分岐が生じるときには、オペランド指定フィールドには依存しない個数のノーオペレーション命令として処理する。
【００１１】
本発明のさらに別の局面に従えば、プロセッサは、フェッチすべき命令のアドレスを生成するアドレス生成手段と、アドレス生成手段によって生成されたアドレスに応じて命令をフェッチする命令フェッチ手段と、命令フェッチ手段によってフェッチされた命令をデコードする命令デコード手段と、命令デコード手段によるデコード結果に応じて、当該命令を実行する命令実行手段とを含み、命令デコード手段は、デコードした命令がノーオペレーション付分岐命令であり、かつ分岐条件が成立する場合にはノーオペレーション命令をノーオペレーション付分岐命令の後に挿入し、デコードした命令がノーオペレーション付分岐命令であり、かつ分岐条件が不成立の場合にはノーオペレーション命令を挿入しない。
【発明の効果】
【００１２】
本発明のある局面によれば、命令解析手段が、入力されたプログラムの命令を順次解析し、連続するノーオペレーション命令を１つの連続ノーオペレーション命令にエンコードするので、オブジェクトコードのサイズを削減することが可能となった。
【００１３】
本発明の別の局面によれば、命令デコード手段は、デコードした命令が連続ノーオペレーション命令のとき、連続ノーオペレーション命令の直前の命令が分岐命令であり、かつ分岐条件が成立する場合には、連続ノーオペレーション命令を通常のノーオペレーション命令として処理するので、不要なノーオペレーション命令が挿入されるのを防止することが可能となった。
【００１４】
本発明のさらに別の局面によれば、命令デコード手段は、デコードした命令がノーオペレーション付分岐命令であり、かつ分岐条件が成立する場合にはノーオペレーション命令を挿入し、デコードした命令がノーオペレーション付分岐命令であり、かつ分岐条件が不成立の場合にはノーオペレーション命令を挿入しないので、不要なノーオペレーション命令が挿入されるのを防止することが可能となった。
【発明を実施するための最良の形態】
【００１５】
（第１の実施の形態）
まず、一般的なアセンブラの動作について説明する。図１は、一般的なアセンブラの機能的構成を示すブロック図である。このアセンブラ１１は、ニーモニックで記述されたプログラム（以下、単にプログラムと呼ぶ。）１０が入力されるプログラム入力部１２と、プログラム入力部１２に入力されたプログラムの命令コードを１つずつ解析し、エンコードされた命令を出力する命令解析部１３と、命令解析部１３から出力されたエンコードされた命令をオブジェクトコード１５として出力する命令コード出力部１４とを含む。
【００１６】
図２は、図１に示すアセンブラに入力されるプログラムおよび生成されたオブジェクトコードの一例を示す図である。図２（ａ）に示すプログラムがプログラム入力部１２に入力されると、命令解析部１３は図２（ａ）に示すプログラムの命令を１つずつ解析し、エンコードされた命令を出力する。その結果、命令コード出力部１４は、図２（ｂ）に示すようなオブジェクトコード１５を出力する。図２（ｂ）に示すように、それぞれのＮＯＰ命令はそのままエンコードされて機械語に変換される。１つの命令コードは、３２ビットによって構成される。なお、ＡＤＤは加算命令を示し、ＳＵＢは減算命令を示す。
【００１７】
図３は、本発明の第１の実施の形態におけるアセンブラ装置の構成例を示すブロック図である。このアセンブラ装置は、コンピュータ本体６１、ディスプレイ装置６２、ＦＤ（Flexible Disk）６４が装着されるＦＤドライブ６３、キーボード６５、マウス６６、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）６８が装着されるＣＤ−ＲＯＭ装置６７、およびネットワーク通信装置６９を含む。
【００１８】
アセンブリプログラムは、ＦＤ６４またはＣＤ−ＲＯＭ６８等の記録媒体によって供給される。アセンブリプログラムがコンピュータ本体６１によって実行されることによって、ニーモニックで記述されたプログラムからオブジェクトコードが生成される。また、アセンブリプログラムは他のコンピュータよりネットワーク通信装置６９を経由し、コンピュータ本体６１に供給されてもよい。
【００１９】
図３に示すコンピュータ本体６１は、ＣＰＵ（Central Processing Unit）７０、ＲＯＭ（Read Only Memory）７１、ＲＡＭ（Random Access Memory）７２およびハードディスク７３を含む。ＣＰＵ７０は、ディスプレイ装置６２、ＦＤドライブ６３、キーボード６５、マウス６６、ＣＤ−ＲＯＭ装置６７、ネットワーク通信装置６９、ＲＯＭ７１、ＲＡＭ７２またはハードディスク７３との間でデータを入出力しながら処理を行う。
【００２０】
ＦＤ６４またはＣＤ−ＲＯＭ６８に記録されたアセンブリプログラムは、ＣＰＵ７０によりＦＤドライブ６３またはＣＤ−ＲＯＭ装置６７を介してハードディスク７３に格納される。ＣＰＵ７０は、ハードディスク７３から適宜アセンブリプログラムをＲＡＭ７２にロードして実行することによって、ニーモニックで記述されたプログラムからオブジェクトコードが生成される。
【００２１】
図４は、本発明の第１の実施の形態におけるアセンブラの機能的構成を示すブロック図である。このアセンブラは、図１に示すアセンブラと比較して、命令解析部２３の構成および機能のみが異なる。命令解析部２３は、命令コードがＮＯＰ命令である場合に、当該ＮＯＰ命令の解析を行なうＮＯＰ命令解析部２４を含む。
【００２２】
図５は、本発明の第１の実施の形態におけるアセンブラの処理手順を説明するためのフローチャートである。まず、命令解析部２３は、プログラム入力部１２に保持される最後の命令の処理が終わったか否かを判定する（Ｓ１）。最後の命令コードの処理が終わっていなければ（Ｓ１，Ｎｏ）、命令解析部２３は、命令を１つ抽出し、当該命令がＮＯＰ命令であるか否かを判定する（Ｓ２）。
【００２３】
命令がＮＯＰ命令であれば（Ｓ２，Ｙｅｓ）、ＮＯＰ命令解析部２４は、当該ＮＯＰ命令がラベル付ＮＯＰ命令または引数付ＮＯＰ命令であるか否かを判定する（Ｓ３）。ここで、引数付ＮＯＰ命令とは、ＮＯＰ＜ｎ＞（＜ｎ＞は、１以上の整数）のように記述された命令を指し、＜ｎ＞はＮＯＰ命令の処理回数を示している。通常、ＮＯＰ命令を１回だけ実行する場合には引数なしのＮＯＰ命令を使用すればよいが、自動的に前後のＮＯＰ命令と併せて１つの命令にしたくない場合には明示的に“ＮＯＰ  １”と指定するようにする。
【００２４】
また、ラベル付ＮＯＰ命令においても、分岐命令によって分岐先アドレスとして当該ラベルが指定される場合には、前後のＮＯＰ命令と併せて１つの命令にしないようにする。
【００２５】
ＮＯＰ命令がラベル付ＮＯＰ命令または引数付ＮＯＰ命令であれば（Ｓ３，Ｙｅｓ）、ＮＯＰ命令解析部２４は、ＮＯＰフラグがセットされているか否かを判定する（Ｓ４）。ＮＯＰフラグがセットされていれば（Ｓ４，Ｙｅｓ）、ＮＯＰ命令解析部２４は、カウンタの値を引数とする引数付ＮＯＰ命令をエンコードし、ＮＯＰフラグおよびカウンタをリセットする（Ｓ５）。そして、命令解析部２３は、対象命令をエンコードし（Ｓ６）、ステップＳ１に戻って以降の処理を繰返す。
【００２６】
また、ＮＯＰ命令がラベル付ＮＯＰ命令および引数付ＮＯＰ命令のいずれでもない場合には（Ｓ３，Ｎｏ）、ＮＯＰ命令解析部２４は、ＮＯＰフラグがセットされているか否かを判定する（Ｓ７）。ＮＯＰフラグがセットされていれば（Ｓ７，Ｙｅｓ）、ＮＯＰ命令解析部２４はカウンタの値をインクリメントし（Ｓ８）、ステップＳ１に戻って以降の処理を繰返す。
【００２７】
また、ＮＯＰフラグがセットされていなければ（Ｓ７，Ｎｏ）、ＮＯＰ命令解析部２４はＮＯＰフラグをセットしてカウンタをリセットし（Ｓ９）、ステップＳ１に戻って以降の処理を繰返す。
【００２８】
ステップＳ１において、命令解析部２３が最後の命令の処理が終了したと判断した場合には（Ｓ１，Ｙｅｓ）、ＮＯＰフラグがセットされているか否かを判定する（Ｓ１０）。ＮＯＰフラグがセットされていれば（Ｓ１０，Ｙｅｓ）、ＮＯＰ命令解析部２４は、カウンタの値を引数とする連続ＮＯＰ命令をエンコードし（Ｓ１１）、処理を終了する。また、ＮＯＰフラグがセットされていなければ（Ｓ１０，Ｎｏ）、そのまま処理を終了する。以上の処理によって生成されたオブジェクトコード１５が、命令コード出力部１４から出力される。
【００２９】
図６は、プログラム入力部１２に入力されるプログラムおよび生成されたオブジェクトコードの一例を示す図である。図６（ａ）に示すプログラムがアセンブラ１１によってどのようにアセンブルされるかを、図５に示すフローチャートを用いて説明する。
【００３０】
まず、命令解析部２３が最初の命令であるＡＤＤ命令を抽出する。この命令はＮＯＰ命令ではなく（Ｓ２，Ｎｏ）、ＮＯＰフラグがセットされていないので（Ｓ４，Ｎｏ）、命令解析部２３はこのＡＤＤ命令をエンコードして（Ｓ６）、ステップＳ１に処理が戻る。
【００３１】
次に、命令解析部２３が２番目の命令であるＮＯＰ命令を抽出する。この命令はＮＯＰ命令であり（Ｓ２，Ｙｅｓ）、ラベル付ＮＯＰ命令および引数付ＮＯＰ命令のいずれでもなく（Ｓ３，Ｎｏ）、ＮＯＰフラグがセットされていないので（Ｓ７，Ｎｏ）、ＮＯＰ命令解析部２４はＮＯＰフラグをセットし、カウンタを“０”にリセットする（Ｓ９）。そして、ステップＳ１に処理が戻る。
【００３２】
次に、命令解析部２３が３番目の命令であるＮＯＰ命令を抽出する。この命令はＮＯＰ命令であり（Ｓ２，Ｙｅｓ）、ラベル付ＮＯＰ命令および引数付ＮＯＰ命令のいずれでもなく（Ｓ３，Ｎｏ）、ＮＯＰフラグがセットされているので（Ｓ７，Ｙｅｓ）、ＮＯＰ命令解析部２４はカウンタをインクリメントする（Ｓ８）。そして、ステップＳ１に処理が戻る。
【００３３】
次に、命令解析部２３が４番目の命令であるＳＵＢ命令を抽出する。この命令はＮＯＰ命令ではなく（Ｓ２，Ｎｏ）、ＮＯＰフラグがセットされているので（Ｓ４，Ｙｅｓ）、ＮＯＰ命令解析部２４はカウンタの値を引数とする連続ＮＯＰ命令（ＮＯＰ２）をエンコードし、ＮＯＰフラグおよびカウンタをリセットする（Ｓ５）。そして、命令解析部２３は、対象命令であるＳＵＢ命令をエンコードして（Ｓ６）、ステップＳ１に処理が戻る。
【００３４】
ステップＳ１において、最後の命令の処理が終了しており（Ｓ１，Ｙｅｓ）、ＮＯＰフラグがセットされていないので（Ｓ１０，Ｎｏ）、命令コード出力部１４は生成されたオブジェクトコード１５を出力し、処理を終了する。図６（ｂ）は、このようにして生成されたオブジェクトコードを示している。
【００３５】
図７は、本発明の第１の実施の形態における命令コードの一例を示す図である。本発明の第１の実施の形態におけるプロセッサでサポートされる命令の命令コードは、すべて３２ビット固定長とする。図７に示すように、オペコードとして命令コードのＭＳＢ（Most Significant Bit）側８ビットがすべてゼロである場合に、連続ＮＯＰ命令が特定される。そして、ＬＳＢ（Least Significant Bit）側４ビットが連続ＮＯＰ命令のオペランドとして指定されるオペランド指定フィールドである。オペランド指定フィールドにより、連続して挿入されるＮＯＰ命令数が指定される。したがって、連続ＮＯＰ命令により最大１６個のＮＯＰ命令数が指定可能である。図５のステップＳ５で連続ＮＯＰ命令をエンコードする際に、このオペランド指定フィールドにそのときのカウンタの値が設定される。なお、連続ＮＯＰ命令の残りの２０ビットは未定義領域である。
【００３６】
図８は、本発明の第１の実施の形態におけるアセンブラによってアセンブルされるラベル付ＮＯＰ命令および引数付ＮＯＰ命令を含んだプログラムおよびそのオブジェクトコードの一例を示す図である。図８（ａ）に示すプログラムがアセンブラ１１によってどのようにアセンブルされるかを、図５に示すフローチャートを用いて説明する。
【００３７】
まず、命令解析部２３が最初の命令であるＪＭＰ命令を抽出する。この命令はＮＯＰ命令ではなく（Ｓ２，Ｎｏ）、ＮＯＰフラグがセットされていないので（Ｓ４，Ｎｏ）、命令解析部２３はこのＪＭＰ命令をエンコードして（Ｓ６）、ステップＳ１に処理が戻る。
【００３８】
次に、命令解析部２３が２番目の命令であるＮＯＰ命令を抽出する。この命令はＮＯＰ命令であり（Ｓ２，Ｙｅｓ）、引数付ＮＯＰ命令であり（Ｓ３，Ｙｅｓ）、ＮＯＰフラグがセットされていないので（Ｓ４，Ｎｏ）、ＮＯＰ命令解析部２４は対象命令であるＮＯＰ命令をエンコードする（Ｓ６）。そして、ステップＳ１に処理が戻る。
【００３９】
次に、命令解析部２３が３番目の命令であるＮＯＰ命令を抽出する。この命令はＮＯＰ命令であり（Ｓ２，Ｙｅｓ）、ラベル付ＮＯＰ命令および引数付ＮＯＰ命令のいずれでもなく（Ｓ３，Ｎｏ）、ＮＯＰフラグがセットされていないので（Ｓ７，Ｎｏ）、ＮＯＰ命令解析部２４はＮＯＰフラグをセットし、カウンタを“０”にリセットする（Ｓ９）。そして、ステップＳ１に処理が戻る。
【００４０】
次に、命令解析部２３が４番目の命令であるＮＯＰ命令を抽出する。この命令はＮＯＰ命令であり（Ｓ２，Ｙｅｓ）、ラベル付ＮＯＰ命令および引数付ＮＯＰ命令のいずれでもなく（Ｓ３，Ｎｏ）、ＮＯＰフラグがセットされているので（Ｓ７，Ｙｅｓ）、ＮＯＰ命令解析部２４はカウンタの値をインクリメントする（Ｓ８）。そして、ステップＳ１に処理が戻る。
【００４１】
次に、命令解析部２３が５番目の命令であるＮＯＰ命令を抽出する。この命令はＮＯＰ命令であり（Ｓ２，Ｙｅｓ）、ラベル付ＮＯＰ命令であり（Ｓ３，Ｙｅｓ）、ＮＯＰフラグがセットされているので（Ｓ４，Ｙｅｓ）、ＮＯＰ命令解析部２４はカウンタの値を引数とする連続ＮＯＰ命令（ＮＯＰ２）をエンコードし、ＮＯＰフラグおよびカウンタをリセットする（Ｓ５）。そして、ＮＯＰ命令解析部２４は、対象命令であるＮＯＰ命令をエンコードして（Ｓ６）、ステップＳ１に処理が戻る。
【００４２】
次に、命令解析部２３が６番目の命令であるＳＵＢ命令を抽出する。この命令はＮＯＰ命令ではなく（Ｓ２，Ｎｏ）、ＮＯＰフラグがセットされていないので（Ｓ４，Ｎｏ）、命令解析部２３は対象命令であるＳＵＢ命令をエンコードして（Ｓ６）、ステップＳ１に処理が戻る。
【００４３】
ステップＳ１において、最後の命令の処理が終了しており（Ｓ１，Ｙｅｓ）、ＮＯＰフラグがセットされていないので（Ｓ１０，Ｎｏ）、命令コード出力部１４は生成されたオブジェクトコード１５を出力し、処理を終了する。図８（ｂ）は、このようにして生成されたオブジェクトコードを示している。
【００４４】
以上説明したように、本実施の形態におけるアセンブラによれば、連続するＮＯＰ命令を１つの命令にエンコードするようにしたので、オブジェクトコードのサイズを削減することが可能となった。
【００４５】
また、対象命令がラベル付ＮＯＰ命令または引数付ＮＯＰ命令の場合には、１つの命令にエンコードしないようにしたので、命令が格納されるアドレスを固定する必要がある場合にも対応することができ、余計なＮＯＰ命令が実行されるといった不具合を防止することが可能となった。
【００４６】
さらには、従来のエディタなどで生成されたプログラムであっても、同様にアセンブルすることができ、オブジェクトコードのサイズを削減することが可能となった。
【００４７】
（第２の実施の形態）
本発明の第２の実施の形態におけるアセンブラ装置の構成例は、図３に示す本発明の第１の実施の形態におけるアセンブラ装置の構成例と同様である。また、本発明の第２の実施の形態におけるアセンブラの機能的構成は、図４に示す本発明の第１の実施の形態におけるアセンブラの機能的構成と同様である。したがって、重複する構成および機能の詳細な説明は繰返さない。
【００４８】
図９は、本発明の第２の実施の形態におけるアセンブラの処理手順を説明するためのフローチャートである。図５に示す本発明の第１の実施の形態におけるアセンブラの処理手順と比較して、ステップＳ３がステップＳ１３に置換されている点のみが異なる。したがって、重複する処理手順の詳細な説明は繰返さない。
【００４９】
ステップＳ１３において、ＮＯＰ命令解析部２４は、当該ＮＯＰ命令がラベル付ＮＯＰ命令であるか否かを判定する（Ｓ１３）。命令がラベル付ＮＯＰ命令であれば（Ｓ１３，Ｙｅｓ）、ＮＯＰ命令解析部２４は、ＮＯＰフラグがセットされているか否かを判定する（Ｓ４）。ＮＯＰフラグがセットされていれば（Ｓ４，Ｙｅｓ）、ＮＯＰ命令解析部２４は、カウンタの値を引数とする引数付ＮＯＰ命令をエンコードし、ＮＯＰフラグおよびカウンタをリセットする（Ｓ５）。そして、命令解析部２３は、対象命令をエンコードし（Ｓ６）、ステップＳ１に戻って以降の処理を繰返す。
【００５０】
また、ＮＯＰ命令がラベル付ＮＯＰ命令でない場合には（Ｓ１３，Ｎｏ）、命令解析部２３は、ＮＯＰフラグがセットされているか否かを判定する（Ｓ７）。ＮＯＰフラグがセットされていれば（Ｓ７，Ｙｅｓ）、ＮＯＰ命令解析部２４はカウンタの値をインクリメントし（Ｓ８）、ステップＳ１に戻って以降の処理を繰返す。
【００５１】
図１０は、本発明の第２の実施の形態におけるアセンブラによってアセンブルされるラベル付ＮＯＰ命令および引数付ＮＯＰ命令を含んだプログラムおよびそのオブジェクトコードの一例を示す図である。図１０（ａ）に示すプログラムがアセンブラ１１によってどのようにアセンブルされるかを、図９に示すフローチャートを用いて説明する。
【００５２】
まず、命令解析部２３が最初の命令であるＪＭＰ命令を抽出する。この命令はＮＯＰ命令ではなく（Ｓ２，Ｎｏ）、ＮＯＰフラグがセットされていないので（Ｓ４，Ｎｏ）、命令解析部２３はこのＪＭＰ命令をエンコードして（Ｓ６）、ステップＳ１に処理が戻る。
【００５３】
次に、命令解析部２３が２番目の命令であるＮＯＰ命令を抽出する。この命令はＮＯＰ命令であり（Ｓ２，Ｙｅｓ）、ラベル付ＮＯＰ命令ではなく（Ｓ１３，Ｎｏ）、ＮＯＰフラグがセットされていないので（Ｓ７，Ｎｏ）、ＮＯＰ命令解析部２４はＮＯＰフラグをセットし、カウンタを“０”にリセットする（Ｓ９）。そして、ステップＳ１に処理が戻る。
【００５４】
次に、命令解析部２３が３番目の命令であるＮＯＰ命令を抽出する。この命令はＮＯＰ命令であり（Ｓ２，Ｙｅｓ）、ラベル付ＮＯＰ命令ではなく（Ｓ１３，Ｎｏ）、ＮＯＰフラグがセットされているので（Ｓ７，Ｙｅｓ）、ＮＯＰ命令解析部２４はカウンタの値をインクリメントする（Ｓ８）。そして、ステップＳ１に処理が戻る。
【００５５】
次に、命令解析部２３が４番目の命令であるＮＯＰ命令を抽出する。この命令はＮＯＰ命令であり（Ｓ２，Ｙｅｓ）、ラベル付ＮＯＰ命令ではなく（Ｓ１３，Ｎｏ）、ＮＯＰフラグがセットされているので（Ｓ７，Ｙｅｓ）、ＮＯＰ命令解析部２４はカウンタの値をインクリメントする（Ｓ８）。そして、ステップＳ１に処理が戻る。
【００５６】
次に、命令解析部２３が５番目の命令であるＮＯＰ命令を抽出する。この命令はＮＯＰ命令であり（Ｓ２，Ｙｅｓ）、ラベル付ＮＯＰ命令であり（Ｓ３，Ｙｅｓ）、ＮＯＰフラグがセットされているので（Ｓ４，Ｙｅｓ）、ＮＯＰ命令解析部２４はカウンタの値を引数とする連続ＮＯＰ命令（ＮＯＰ３）をエンコードし、ＮＯＰフラグおよびカウンタをリセットする（Ｓ５）。そして、ＮＯＰ命令解析部２４は、対象命令であるＮＯＰ命令をエンコードして（Ｓ６）、ステップＳ１に処理が戻る。
【００５７】
次に、命令解析部２３が６番目の命令であるＳＵＢ命令を抽出する。この命令はＮＯＰ命令ではなく（Ｓ２，Ｎｏ）、ＮＯＰフラグがセットされていないので（Ｓ４，Ｎｏ）、命令解析部２３は対象命令であるＳＵＢ命令をエンコードして（Ｓ６）、ステップＳ１に処理が戻る。
【００５８】
ステップＳ１において、最後の命令の処理が終了しており（Ｓ１，Ｙｅｓ）、ＮＯＰフラグがセットされていないので（Ｓ１０，Ｎｏ）、命令コード出力部１４は生成されたオブジェクトコード１５を出力し、処理を終了する。図１０（ｂ）は、このようにして生成されたオブジェクトコードを示している。
【００５９】
以上説明したように、本実施の形態におけるアセンブラによれば、命令を格納するアドレスを固定する必要がない場合には、引数付ＮＯＰ命令を含んだ複数のＮＯＰ命令を連続ＮＯＰ命令としてエンコードするようにしたので、第１の実施の形態において説明した効果に加えて、さらにオブジェクトコードのサイズを削減することが可能となった。
【００６０】
（第３の実施の形態）
図１１は、本発明の第３の実施の形態におけるプロセッサの概略構成を示すブロック図である。このプロセッサは、フェッチする命令のアドレスを生成するプログラムアドレス生成部３０と、プログラムアドレス生成部３０によって生成されたアドレスに応じて命令をフェッチする命令フェッチ部３１と、命令フェッチ部３１によってフェッチされた命令をデコードする命令デコード部３２と、命令デコード部３２によるデコード結果に応じてメモリやレジスタからデータを読出すデータ読出し部３３と、データ読出し部３３によって読出されたデータをソースとして整数演算や浮動小数点演算などを行なう演算処理部３４と、演算処理部３４による演算結果をメモリやレジスタに書込むデータ書込み部３５とを含む。
【００６１】
プログラムアドレス生成部３０は、ゼロを初期値としてプログラムアドレスを生成し、通常動作時においては各サイクル毎にプログラムアドレスをインクリメントする。また、後述する連続ＮＯＰ命令フラグが設定されている場合、プログラムアドレス生成部３０は、プログラムアドレスを更新しない。また、分岐命令において分岐条件が成立する場合、プログラムアドレス生成部３０は、分岐先アドレスをプログラムアドレスに設定する。
【００６２】
命令フェッチ部３１は、プログラムアドレス生成部３０によって生成されたプログラムアドレスに応じて、図示しない命令メモリから命令をフェッチし、その命令を命令デコード部３２へ出力する。
【００６３】
図１２は、図１１に示す命令デコード部３２をさらに詳細に説明するためのブロック図である。この命令デコード部３２は、命令フェッチ部３１によってフェッチされた命令を格納するバッファ３９と、命令レジスタ４０と、バッファ３９に格納された命令およびＮＯＰ命令のいずれかを選択して命令レジスタ４０に設定する命令レジスタ選択部３６と、命令レジスタ４０に設定された命令が連続ＮＯＰ命令であるか否かを判定するＮＯＰ命令解析部３７と、命令レジスタ４０に設定された命令が分岐命令であるか否かを判定する分岐命令解析部３８と、ＮＯＰ命令および分岐命令以外の命令を解析し、そのデコード結果をデータ読出部３３へ与える命令解析部４１と、連続して挿入されるＮＯＰ命令をカウントするＮＯＰカウンタ４２と、ＮＯＰ命令解析部３７によって設定される連続ＮＯＰフラグが格納されるＮＯＰフラグレジスタ４３と、分岐命令解析部３８によって設定される分岐命令フラグが格納される分岐フラグレジスタ４４とを含む。
【００６４】
命令レジスタ選択部３６は、ＮＯＰフラグレジスタ４３に連続ＮＯＰ命令フラグがセットされていれば、命令フェッチ部３１によってフェッチされた命令をバッファ３９に格納し、命令レジスタ４０にＮＯＰ命令を格納する。また、ＮＯＰフラグレジスタ４３に連続ＮＯＰ命令フラグがセットされていなければ、命令フェッチ部３１によってフェッチされた命令を命令レジスタ４０に格納する。
【００６５】
ＮＯＰ命令解析部３７は、ＮＯＰ命令（連続ＮＯＰ命令も含む）をデコードしてプロセッサ各部（図示されているデータ読出部３３、アドレス生成部３０も含む）に対していわゆるＮＯＰ制御（ノーオペレーション制御）を行なう。
【００６６】
ＮＯＰ命令解析部３７は、命令レジスタ選択部３６によって格納された命令レジスタ４０の内容が連続ＮＯＰ命令であるか否かを判定する。命令レジスタ４０の内容が連続ＮＯＰ命令であり、かつ分岐フラグレジスタ４４に分岐命令フラグがセットされていない場合、すなわち直前の命令が分岐命令でない場合には、ＮＯＰ命令解析部３７はＮＯＰフラグレジスタ４３に連続ＮＯＰ命令フラグをセットする。このとき、ＮＯＰ命令解析部３７は、連続ＮＯＰ命令の引数（Ｎ）として指定された連続ＮＯＰ命令のオペランド指定フィールドの値（Ｎ−１）をＮＯＰカウンタ４２にそのままセットすると共に、ｎｏｐ＿ｆｌａｇをセットする。
【００６７】
なお、第１および第２の実施の形態におけるアセンブラにおいて、Ｎ個の連続するＮＯＰ命令を１つの連続ＮＯＰ命令にエンコードするときに、カウンタの初期値を“１”にリセットして連続ＮＯＰ命令のオペランド指定フィールドに（Ｎ）を書込む場合には、連続ＮＯＰ命令のオペランド指定フィールドで指定されたＮＯＰ実行回数を１つ引いてからＮＯＰカウンタ４２にセットするようにしてもよい。
【００６８】
ＮＯＰ命令解析部３７は、ＮＯＰフラグレジスタ４３に連続ＮＯＰ命令フラグがセットされ、かつＮＯＰカウンタ４２の値がゼロでない場合には、命令レジスタ４０に格納されるＮＯＰ命令を読出してデコードする。また、ＮＯＰフラグレジスタ４３に連続ＮＯＰ命令フラグがセットされ、かつＮＯＰカウンタ４２の値ｎｏｐ＿ｃｎｔがゼロの場合には、ＮＯＰ命令解析部３７は、ＮＯＰフラグレジスタ４３に格納される連続ＮＯＰ命令フラグをリセットし、バッファ３９に格納される命令が読出されて命令レジスタ４０に設定される。
【００６９】
それ以外のとき、すなわちｊｍｐ＿ｆｌａｇ＿ｒｅｇがセットされているか、または命令レジスタ４０の命令が連続ＮＯＰ命令でない通常のＮＯＰ命令のとき、ＮＯＰ命令解析部３７は、ｎｏｐ＿ｆｌａｇをリセットのままとする。
【００７０】
分岐命令解析部３８は、命令レジスタ４０の内容が分岐命令であるか否かを判定すると共に、分岐条件を満たすか否かを判定する。命令レジスタ４０の内容が分岐命令であり、かつ分岐条件を満たす場合には、分岐命令解析部３８はｊｍｐ＿ｆｌａｇをセットし、分岐フラグレジスタ４４にその値を設定する。また、命令レジスタ４０の内容が分岐命令でない場合、または分岐命令であっても分岐条件を満たさない場合には、分岐命令解析部３８はｊｍｐ＿ｆｌａｇをリセットし、分岐フラグレジスタ４４にその値を設定する。なお、命令レジスタ４０に格納される命令が無条件分岐命令の場合も、分岐条件を満たすとしてｊｍｐ＿ｆｌａｇがセットされる。
【００７１】
分岐命令解析部３８は、分岐命令の分岐先アドレスを示すアドレス情報を出力する。アドレス生成部３０は、分岐命令解析部３８から出力されるｊｍｐ＿ｆｌａｇがセットされていた場合に、このアドレス情報に基づいて分岐先アドレスを計算し、ｒｅａｄ＿ａｄｄｒとして出力する。
【００７２】
命令フェッチ部３１は、プログラムカウンタ（ＰＣ）を有して、ｒｅａｄ＿ａｄｄｒを保持し、ｒｅａｄ＿ａｄｄｒ＿ｒｅｇとして出力する。なお、アドレス生成部３０は、分岐命令による分岐が生じないときにはＰＣに保持された値をインクリメントして、そのインクリメントした値でＰＣの内容を更新する。
【００７３】
命令解析部４１は、分岐命令、ＮＯＰ命令（連続ＮＯＰ命令も含む）以外の命令をデコードしてデコード結果をデータ読出部３３に与える。
【００７４】
図１３は、本発明の第３の実施の形態におけるプロセッサによって実行されるプログラムおよびそのときのタイミングチャートの一例を示す図である。図１３（ａ）に示すプログラムを参照しながら、以下に、図１３（ｂ）に示すタイミングチャートの説明を行なう。
【００７５】
サイクルＴ０において、ｒｅｑ信号にハイレベル（以下、Ｈレベルと略す。）が出力されると、プログラムアドレス生成部３０はｒｅａｄ＿ａｄｄｒ信号にプログラムアドレスＡ０を出力する。ｒｅｑ信号は、命令デコード部３２から出力される信号であり、Ｈレベルのときに命令のフェッチを指示する信号である。連続ＮＯＰ命令が実行されるときには、ｒｅｑ信号にロウレベル（以下、Ｌレベルと略す。）が出力される。
【００７６】
サイクルＴ１において、命令フェッチ部３１内のプログラムカウンタ４５にプログラムアドレスＡ０が設定されてｒｅａｄ＿ａｄｄｒ＿ｒｅｇに出力されると共に、命令フェッチ部３１がプログラムアドレスＡ０に対応した命令Ｄ０（ＡＤＤ）をフェッチして、ｒｅａｄ＿ｄａｔａ信号に出力する。このサイクルにおいて、プログラムアドレス生成部３０は、プログラムカウンタ４５をインクリメントして、ｒｅａｄ＿ａｄｄｒ信号にプログラムアドレスＡ１を出力する。
【００７７】
サイクルＴ２において、ＮＯＰフラグレジスタ４３から出力されるｎｏｐ＿ｆｌａｇ＿ｒｅｇがセットされていないので、命令レジスタ４０に命令Ｄ０が設定されてｉｎｓｔｒｅｇに出力される。命令解析部４１は、命令Ｄ０のデコードを行なう。このとき、命令フェッチ部３１は、プログラムアドレスＡ１に対応した命令Ｄ１（ＳＵＢ）をフェッチする。また、プログラムアドレス生成部３０は、ｒｅａｄ＿ａｄｄｒにプログラムアドレスＡ２を出力する。
【００７８】
サイクルＴ３において、データ読出し部３３は、命令Ｄ０に対応したデータを読出す。命令解析部４１は、命令Ｄ１のデコードを行なう。このとき、命令フェッチ部３１は、プログラムアドレスＡ２に対応した命令Ｄ２（ＮＯＰ  ４）をフェッチする。また、プログラムアドレス生成部３０は、ｒｅａｄ＿ａｄｄｒ信号にプログラムアドレスＡ３を出力する。
【００７９】
サイクルＴ４において、演算処理部３４は、命令Ｄ０（ＡＤＤ）に対応した演算を行なう。このとき、命令レジスタ選択部３６は、ＮＯＰフラグレジスタ４３に連続ＮＯＰ命令フラグがセットされていないので、命令レジスタ４０に命令Ｄ２（ＮＯＰ  ４）を設定する。また、命令Ｄ２は連続ＮＯＰ命令であるので、ＮＯＰ命令解析部３７は、ｎｏｐ＿ｆｌａｇをセットしてＮＯＰフラグレジスタ４３に連続ＮＯＰ命令フラグを設定し、ＮＯＰカウンタ４３に３（４−１）を設定する。なお、命令レジスタ４０には分岐命令が格納されていないので、分岐フラグレジスタ４４に分岐命令フラグはセットされない。また、命令フェッチ部３１は、プログラムアドレスＡ３に対応した命令Ｄ３（ＡＤＤ）をフェッチする。また、プログラムアドレス生成部３０は、ｒｅａｄ＿ａｄｄｒ信号にプログラムアドレスＡ４を出力する。
【００８０】
サイクルＴ５において、命令レジスタ選択部３６は、ＮＯＰフラグレジスタ４３に連続ＮＯＰ命令フラグがセットされているので、命令レジスタ４０にＮＯＰ命令を設定する。命令フェッチ部３１によってフェッチされた命令Ｄ３はバッファ３９にｂ０として保持される。ＮＯＰ命令解析部３７は、連続ＮＯＰ命令フラグがセットされているので、ＮＯＰカウンタ４２の値をデクリメントする（ｎｏｐ＿ｃｎｔ＝２）。
【００８１】
サイクルＴ６において、命令レジスタ選択部３６は、ＮＯＰフラグレジスタ４３に連続ＮＯＰ命令フラグが設定されているので、命令レジスタ４０にＮＯＰ命令を設定する。命令フェッチ部３１によってフェッチされた命令Ｄ４（ＪＡＮ  １０）はバッファ３９にｂ１として保持される。ＮＯＰ命令解析部３７は、ＮＯＰフラグレジスタ４３に連続ＮＯＰ命令フラグがセットされているので、ＮＯＰカウンタ４２の値をデクリメントする（ｎｏｐ＿ｃｎｔ＝１）。
【００８２】
サイクルＴ７において、命令レジスタ選択部３６は、ＮＯＰフラグレジスタ４３に連続ＮＯＰ命令フラグがセットされているので、命令レジスタ４０にＮＯＰ命令を設定する。ＮＯＰ命令解析部３７は、ＮＯＰフラグレジスタ４３に連続ＮＯＰ命令フラグがセットされているので、ＮＯＰカウンタ４２の値をデクリメントする（ｎｏｐ＿ｃｎｔ＝０）。このとき、ＮＯＰカウンタ４２の値が０となるので、ＮＯＰ命令解析部３７はＮＯＰフラグレジスタ４３に格納される連続ＮＯＰ命令フラグをリセットする。
【００８３】
サイクルＴ８において、命令レジスタ選択部３６は、ＮＯＰカウンタ４２の値が０となっているので、バッファ３９にｂ０として保持されている命令Ｄ３を命令レジスタ４０に設定する。ＮＯＰ命令解析部３７は、命令レジスタ４０に設定された命令がＮＯＰ命令ではないので、ＮＯＰフラグレジスタ４３に格納される連続ＮＯＰ命令フラグをそのままとする。また、プログラムアドレス生成部３０は、ｒｅｑ信号が再びＨレベルとなるので、プログラムアドレスをインクリメントし、ｒｅａｄ＿ａｄｄｒにアドレスＡ５を出力する。
【００８４】
サイクルＴ９において、命令デコード部３２は、命令Ｄ４をデコードする。命令Ｄ４（ＪＡ  １０）は１０番地に無条件で分岐する分岐命令であるので、分岐命令解析部３８は、分岐フラグレジスタ４４に分岐命令フラグをセットする。また、プログラムアドレス生成部３０は、ｒｅａｄ＿ａｄｄｒ信号に分岐先アドレスＡ１０を出力する。
【００８５】
サイクルＴ１０において、命令レジスタ選択部３６は、ＮＯＰフラグレジスタ４３に連続ＮＯＰ命令フラグが設定されていないので、命令レジスタ４０にＤ５（ＮＯＰ  ５）を設定する。また、命令Ｄ５は連続ＮＯＰ命令であるが、分岐フラグレジスタ４４に分岐命令フラグが設定されているので、ＮＯＰ命令解析部３７は、ＮＯＰフラグレジスタ４３に連続ＮＯＰ命令フラグを設定しない。命令フェッチ部３１は、アドレスＡ１０に対応する命令Ｄ１０（ＡＤＤ）をフェッチする。
【００８６】
サイクルＴ１１において、ＮＯＰフラグレジスタ４３に連続ＮＯＰ命令フラグが設定されていないので、命令レジスタ選択部３６は、命令レジスタ４０に命令Ｄ１０を設定する。命令解析部４１は、命令Ｄ１０をデコードする。
【００８７】
なお、サイクルＴ１０において、“ＪＡ  １０”の分岐成立に対応して“ＮＯＰ  ５”には依存しない１個のＮＯＰが挿入されているが、命令のフェッチサイクルに応じて２個以上のＮＯＰが挿入されるようにしてもよい。
【００８８】
図１４（ａ）は、本発明の第３の実施の形態におけるプロセッサによって実行される条件付分岐命令ＪＡＣＣを含んだプログラムの一例を示す図である。条件分岐命令“ＪＡＣＣ  １０３”は、分岐条件を満たせば指定先の１０３番地の命令へ分岐し、分岐条件を満たさなければ分岐せずに、次の１０１番地の命令の処理に移る命令である。
【００８９】
図１４（ｂ）は、分岐条件を満たす場合のパイプライン処理を説明するための図である。サイクル１において、条件分岐命令“ＪＡＣＣ  １０３”がフェッチされる。
【００９０】
サイクル２において、ＪＡＣＣ命令がデコードされると共に、次の命令“ＮＯＰ  ４”がフェッチされる。このＪＡＣＣの命令デコードステージにおいて、分岐条件を満たしているか否かが判定される。
【００９１】
サイクル３において、分岐条件が成立しているため、“ＮＯＰ  ４”がデコードされるが、分岐先の１０３番地のＳＵＢ命令がフェッチされる。
【００９２】
サイクル４において、ＳＵＢ命令がデコードされる。そして、以降のサイクルで、このＳＵＢ命令およびそれに続く命令の処理が行なわれる。
【００９３】
図１４（ｃ）は、分岐条件を満たさない場合のパイプライン処理を説明するための図である。サイクル２までは、図１４（ｂ）に示す処理と同様である。サイクル３において、分岐条件が成立しないため、“ＮＯＰ  ４”命令がデコードされる。
【００９４】
サイクル４〜６において、３つのＮＯＰが挿入される。また、サイクル６において、続くＡＤＤ命令がフェッチされる。そして、以降のサイクルで、ＡＤＤ命令およびそれに続く命令の処理が行なわれる。
【００９５】
以上説明したように、本実施の形態におけるプロセッサによれば、連続ＮＯＰ命令の処理中は、命令フェッチ部３１が命令メモリにアクセスしないようにしたので、消費電力の削減を図ることが可能となった。また、複数のＮＯＰ命令が１つの連続ＮＯＰ命令にエンコードされているので、命令メモリをキャッシュメモリとした場合に、キャッシュのヒット率を向上させることが可能となった。
【００９６】
また、一般に、条件分岐命令の実行時において、分岐する条件が成立した時と不成立の時とでは処理内容が異なるため、資源の競合や条件なども異なる。本実施の形態においては、分岐命令の直後にある連続ＮＯＰ命令を、条件が不成立の場合（分岐しない場合）に必要となるＮＯＰの数を規定していると見なし、条件が成立した場合（分岐する場合）には通常のＮＯＰ命令として処理するようしたので、条件分岐命令の実行時に不要なＮＯＰが挿入されるのを防止することが可能となった。
【００９７】
（第４の実施の形態）
本発明の第３の実施の形態においては、図１３（ｂ）に示すように、分岐命令がフェッチされてから実際に分岐先アドレスに分岐するまでの間において、分岐命令のフェッチステージとデコードステージとの差のサイクル数の命令が処理されてしまう。一般には、これらの命令は、ＮＯＰ命令に置換されることが多い。したがって、分岐命令の後に必ずＮＯＰ命令を挿入しなければならず、オブジェクトコードのサイズが増大することになる。本実施の形態においては、必要なＮＯＰ実行回数だけＮＯＰ命令を含んだＮＯＰ付分岐命令を実行するプロセッサに関する。
【００９８】
図１５は、本発明の第４の実施の形態におけるプロセッサの処理を説明するための図である。図１５（ａ）は、ＪＡ命令の後にＮＯＰ命令が挿入されている場合のプログラムの一例を示す図である。
【００９９】
図１５（ｂ）は、図１５（ａ）に示すプログラムを実行するときのパイプライン処理を示す図である。まず、０番地の命令（ＪＡ）がフェッチされる。次のサイクルで、ＪＡ命令がデコードされると共に、１番地の命令（ＮＯＰ）がフェッチされる。さらに次のサイクルで、ＮＯＰ命令がデコードされると共に、分岐先である１０番地の命令（ＡＤＤ）がフェッチされる。
【０１００】
図１５（ｃ）は、図１５（ａ）に示すＪＡ命令およびそれに続くＮＯＰ命令が、１つのＮＯＰ付分岐命令であるＪＡＮ命令に置換されている場合のプログラムの一例を示す図である。このように、ＪＡ命令およびＮＯＰ命令をＮＯＰ付分岐命令（ＪＡＮ）に置換することによって、オブジェクトコードのサイズを削減することができる。
【０１０１】
図１６は、ＮＯＰ付分岐命令の種類を説明するための図である。これらの全てについてＮＯＰ命令付分岐命令をサポートするが、分岐命令の後にＮＯＰ命令を挿入しなくてもよい場合には、ＮＯＰ命令を含まない通常の分岐命令もサポートするものとする。
【０１０２】
図１６において、デクリメント分岐命令は、予め設定されたループカウンタの値を命令が実行される毎にデクリメントし、ループカウンタの値が０となったときに指定されたアドレスへ分岐する命令である。
【０１０３】
無条件分岐命令は、無条件に指定されたアドレスに分岐する命令である。条件分岐命令は、演算結果などに基づいて指定された条件式が成立する場合に、指定されたアドレスに分岐する命令である。
【０１０４】
ビットテスト条件分岐命令は、あるレジスタの値の指定された特定ビットが、０／１のいずれかの場合に、指定されたアドレスに分岐する命令である。なお、０／１のいずれを真とするかは指定可能である。
【０１０５】
サブルーチン無条件分岐命令は、無条件に指定されたアドレスに分岐し、サブルーチンリターン命令によって分岐した直後のアドレスに戻る命令である。
【０１０６】
サブルーチン条件分岐命令は、演算結果などに基づいて指定された条件式が成立する場合に、指定されたアドレスに分岐し、サブルーチンリターン命令によって分岐した直後の命令に戻る命令である。
【０１０７】
サブルーチンビットテスト条件分岐命令は、ビットテストを行なって条件が成立したときに指定されたアドレスに分岐し、サブルーチンリターン命令によって分岐した直後のアドレスに戻る命令である。
【０１０８】
サブルーチンリターン命令は、直前に実行されたサブルーチン命令の直後のアドレスに戻る命令である。
【０１０９】
本発明の第４の実施の形態におけるプロセッサの概略構成は、図１１に示す第３の実施の形態におけるプロセッサの概略構成と比較して、命令デコード部の構成が異なる点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰返さない。なお、本実施の形態における命令デコード部の参照符号を５２として説明する。
【０１１０】
図１７は、命令デコード部５２の詳細を説明するためのブロック図である。この命令デコード部５２は、命令レジスタ４０と、命令解析部４１と、分岐フラグレジスタ４４と、命令レジスタ選択部４６と、分岐命令解析部４７と、ＮＯＰ命令解析部４８とを含む。なお、図１２に示す命令デコード部３２と同様の機能を有する部分については同じ参照符号を付すものとする。
【０１１１】
分岐命令解析部４７は、ＮＯＰ付きであるか否かにかかわらず、図１６に示す分岐命令を解析する。また、分岐命令解析部４７は、分岐命令がＮＯＰ付きであるか否かにかかわらず、命令レジスタ４０に格納される命令が分岐命令であり、かつその分岐条件を満たしている場合に、ｊｍｐ＿ｆｌａｇをセットする。それ以外の場合には、ｊｍｐ＿ｆｌａｇをリセットする。
【０１１２】
特に、分岐命令解析部４７は、命令レジスタ４０に格納される命令がＮＯＰ付分岐命令であり、かつその分岐条件を満たしている場合に、ｎｏｐｊｍｐ＿ｆｌａｇをセットし、分岐フラグレジスタ４４に設定する。それ以外の場合には、ｎｏｐｊｍｐ＿ｆｌａｇをリセットし、分岐フラグレジスタ４４に設定する。
【０１１３】
命令レジスタ選択部４６は、分岐フラグレジスタ４４から出力されるｎｏｐｊｍｐ＿ｆｌａｇ＿ｒｅｇがセットされていれば、命令レジスタ４０にＮＯＰ命令を格納する。また、分岐フラグレジスタ４４から出力されるｎｏｐｊｍｐ＿ｆｌａｇ＿ｒｅｇがリセットされていれば、命令フェッチ部３１によってフェッチされた命令を命令レジスタ４０に格納する。
【０１１４】
ＮＯＰ命令解析部４８は、命令レジスタ４０に格納される命令がＮＯＰ命令のときに、プロセッサの各部にＮＯＰ制御を行なう指令を出力する。
【０１１５】
図１８は、本発明の第４の実施の形態におけるプロセッサによって実行されるプログラムおよびそのときのタイミングチャートの一例を示す図である。図１８（ａ）に示すプログラムを参照しながら、以下に、図１８（ｂ）に示すタイミングチャートの説明を行なう。
【０１１６】
サイクルＴ０において、ｒｅｑ信号にＨレベルが出力されると、プログラムアドレス生成部３０はｒｅａｄ＿ａｄｄｒ信号にプログラムアドレスＡ０を出力する。
【０１１７】
サイクルＴ１において、プログラムカウンタ４５にプログラムアドレスＡ０が設定されると共に、命令フェッチ部３１がプログラムアドレスＡ０に対応した命令Ｄ０（ＪＡＮ）をフェッチし、その命令をｒｅａｄ＿ｄａｔａ信号に出力する。このサイクルにおいて、プログラムアドレス生成部３０は、プログラムアドレスをインクリメントして、ｒｅａｄ＿ａｄｄｒ信号にプログラムアドレスＡ１を出力する。
【０１１８】
サイクルＴ２において、分岐フラグレジスタ４４から出力されるｎｏｐｊｍｐ＿ｆｌａｇ＿ｒｅｇ信号がセットされていないので、命令レジスタ４０に命令Ｄ０が設定される。分岐命令解析部４７は、命令Ｄ０のデコードを行なう。命令Ｄ０はＮＯＰ付分岐命令であり、かつ無条件分岐命令であるので、ＮＯＰ付分岐命令解析部４７は、ｎｏｐｊｍｐ＿ｆｌａｇをセットする。このとき、命令フェッチ部３１は、プログラムアドレスＡ１に対応した命令Ｄ１（ＯＲ）をフェッチする。また、プログラムアドレス生成部３０は、ｒｅａｄ＿ａｄｄｒ信号に分岐先アドレスであるＡ１０を出力する。なお、“ＪＡＮ  １０”は１０番地へのＮＯＰ付無条件分岐命令を示す。
【０１１９】
サイクルＴ３において、分岐フラグレジスタ４４から出力されるｎｏｐｊｍｐ＿ｆｌａｇ＿ｒｅｇがセットされているので、命令レジスタ選択部４６は命令レジスタ４０にＮＯＰ命令を設定する。また、分岐命令解析部４７は、命令レジスタ４０の内容がＮＯＰ付分岐命令ではないので、ｎｏｐｊｍｐ＿ｆｌａｇをリセットする。
【０１２０】
サイクルＴ４において、命令解析部４１は、プログラムアドレスＡ１０に対応した命令Ｄ１０（ＡＤＤ）をデコードする。また、命令フェッチ部３１は、プログラムアドレスＡ１１に対応した命令Ｄ１１（ＪＳＲ  ２０）をフェッチする。なお、“ＪＳＲ  ２０”は、サブルーチン無条件分岐命令を示す。
【０１２１】
サイクルＴ５において、分岐命令解析部４７は、プログラムアドレスＡ１１に対応した命令Ｄ１１をデコードする。また、命令フェッチ部３１は、プログラムアドレスＡ１２に対応した命令Ｄ１２（ＳＵＢ）をフェッチする。
【０１２２】
サイクルＴ６において、命令解析部４１は、プログラムアドレスＡ１２に対応した命令Ｄ１２をデコードする。また、命令フェッチ部３１は、分岐先アドレスであるＡ２０に対応した命令Ｄ２０（ＬＤＲ）をフェッチする。なお、“ＬＤＲ”は、レジスタへのデータロード命令を示す。
【０１２３】
サイクルＴ７において、命令解析部４１は、プログラムアドレスＡ２０に対応した命令Ｄ２０をデコードする。
【０１２４】
図１９（ａ）は、本発明の第４の実施の形態におけるプロセッサによって実行されるＮＯＰ付条件分岐命令ＪＡＣＣＮを含んだプログラムの一例を示す図である。ＮＯＰ付条件分岐命令“ＪＡＣＣＮ  １０３”は、分岐条件を満たせば指定先の１０３番地の命令へ分岐し、分岐条件を満たさなければ分岐せずに、次の１０１番地の命令の処理に移る命令である。
【０１２５】
図１９（ｂ）は、分岐条件を満たす場合のパイプライン処理を説明するための図である。サイクル１において、ＮＯＰ付条件分岐命令“ＪＡＣＣＮ  １０３”がフェッチされる。
【０１２６】
サイクル２において、ＪＡＣＣＮ命令がデコードされると共に、次のＡＤＤ命令がフェッチされる。このＪＡＣＣＮの命令デコードステージにおいて、分岐条件を満たしているか否かが判定される。
【０１２７】
サイクル３において、分岐条件が成立しているため、ＡＤＤのデコードステージがキャンセルされ、代わりにＮＯＰ命令のデコードステージが挿入される。このサイクルで、分岐先の１０３番地のＳＵＢ命令がフェッチされる。
【０１２８】
サイクル４において、ＳＵＢ命令がデコードされる。そして、以降のサイクルで、このＳＵＢ命令およびそれに続く命令の処理が行なわれる。
【０１２９】
図１９（ｃ）は、分岐条件を満たさない場合のパイプライン処理を説明するための図である。サイクル２までは、図１９（ｂ）に示す処理と同様である。サイクル３において、分岐条件が成立しないため、ＡＤＤがデコードされる。このサイクルで、次の１０２番地のＯＲ命令がフェッチされる。
【０１３０】
サイクル４において、ＡＤＤ命令のオペランドが読出され、ＯＲ命令がデコードされると共に、ＳＵＢ命令がフェッチされる。そして、以降のサイクルで、これらの命令の処理が行なわれる。なお、“ＯＲ”はＯＲ論理演算命令を示す。
【０１３１】
以上説明したように、本実施の形態におけるプロセッサによれば、ＮＯＰ付分岐命令をサポートするようにしたので、オブジェクトコードのサイズを削減することが可能となった。
【０１３２】
また、分岐命令に付加されたＮＯＰ命令の処理中は、命令フェッチ部３１が命令メモリにアクセスしないようにしたので消費電力の削減を図ることが可能となった。また、ＮＯＰ命令がＮＯＰ付分岐命令にエンコードされているので、命令メモリをキャッシュメモリとした場合に、キャッシュのヒット率を向上させることが可能となった。
【０１３３】
（第５の実施の形態）
本発明の第５の実施の形態におけるプロセッサは、図１１に示す第３の実施の形態におけるプロセッサの概略構成と比較して、命令フェッチ部の構成が異なる点のみが異なる。また、本発明の第５の実施の形態における命令デコード部の構成は、図１７に示す第４の実施の形態における命令デコード部の構成と同様である。したがって、重複する構成および機能の詳細な説明は繰返さない。
【０１３４】
図２０は、本発明の第５の実施の形態における命令フェッチ部の構成を示すブロック図である。この命令フェッチ部３１は、プログラムカウンタ４５と、レジスタ４９とを含む。レジスタ４９は、プログラムカウンタ４５から出力されるｒｅａｄ＿ａｄｄｒ＿ｐｒｅｒｅｇを１クロックだけ遅延して、ｒｅａｄ＿ａｄｄｒ＿ｒｅｇとして出力する。
【０１３５】
本実施の形態のプロセッサにおいては、ＮＯＰ付分岐命令が命令レジスタ４０に設定され、かつ分岐条件が成立したときに、分岐命令解析部４７は、ｎｏｐｊｍｐ＿ｆｌａｇをセットし、フェッチサイクル数をカウンタの値としてセットする。このフェッチサイクル数は、予め設定されているものとする。
【０１３６】
分岐命令解析部４７は、分岐命令フラグレジスタ４４から出力されるｊｍｐ＿ｆｌａｇ＿ｒｅｇがセットされていれば、サイクルに合わせてカウンタの値をデクリメントし、カウンタの値が０となるまでｎｏｐｊｍｐ＿ｆｌａｇをセットする。カウンタの値が０となったときに、分岐命令解析部４７は、ｎｏｐｊｍｐ＿ｆｌａｇをリセットする。これによって、フェッチサイクルが１よりも大きい場合であっても、必要となるＮＯＰが挿入されるようになる。
【０１３７】
図２１は、本発明の第５の実施の形態におけるプロセッサによって実行されるプログラムおよびそのときのタイミングチャートの一例を示す図である。図２１（ａ）に示すプログラムを参照しながら、以下に、図２１（ｂ）に示すタイミングチャートの説明を行なう。
【０１３８】
サイクルＴ０において、ｒｅｑ信号にＨレベルが出力されると、プログラムアドレス生成部３０はｒｅａｄ＿ａｄｄｒ信号にプログラムアドレスＡ０を出力する。
【０１３９】
サイクルＴ１において、命令フェッチ部３１内のプログラムカウンタ４５にプログラムアドレスＡ０が設定される。
【０１４０】
サイクルＴ２において、命令フェッチ部３１内のレジスタ４９がｒｅａｄ＿ａｄｄｒ＿ｒｅｇにプログラムアドレスＡ０を出力すると共に、命令フェッチ部３１がｒｅａｄ＿ｄａｔａ信号を介してプログラムアドレスＡ０に対応した命令Ｄ０（ＪＡＮ）をフェッチする。
【０１４１】
サイクルＴ３において、分岐フラグレジスタ４４は、ｎｏｐｊｍｐ＿ｆｌａｇ＿ｒｅｇをセットしていないので、命令レジスタ４０に命令Ｄ０が設定される。分岐命令解析部４７は、命令Ｄ０のデコードを行なう。命令Ｄ０はＮＯＰ付分岐命令であり、かつ無条件分岐命令であるので、分岐命令解析部４７は、ｎｏｐｊｍｐ＿ｆｌａｇ＿ｒｅｇをセットし、カウンタに２を設定する。このとき、プログラムアドレス生成部３０は、ｒｅａｄ＿ａｄｄｒ信号に分岐先アドレスであるＡ１０を出力する。
【０１４２】
サイクルＴ４において、分岐フラグレジスタ４４から出力されるｎｏｐｊｍｐ＿ｆｌａｇ＿ｒｅｇがセットされているので、命令レジスタ選択部４６は命令レジスタにＮＯＰ命令を設定する。また、分岐命令解析部４７は、カウンタの値が０ではないので、カウンタの値をデクリメントする。
【０１４３】
サイクルＴ５において、命令レジスタ選択部４６は、分岐フラグレジスタ４４から出力されるｎｏｐｊｍｐ＿ｆｌａｇ＿ｒｅｇがセットされているので、命令レジスタ４０にＮＯＰ命令を設定する。また、分岐命令解析部４７は、カウンタの値が０であるので、ｎｏｐｊｍｐ＿ｆｌａｇをリセットする。
【０１４４】
サイクルＴ６において、命令解析部４１は、プログラムアドレスＡ１０に対応した命令Ｄ１０（ＡＤＤ）をデコードする。また、命令フェッチ部３１は、プログラムアドレスＡ１１に対応した命令Ｄ１１（ＪＳＲ  ２０）をフェッチする。
【０１４５】
サイクルＴ７において、分岐命令解析部４７は、プログラムアドレスＡ１１に対応した命令Ｄ１１をデコードする。また、命令フェッチ部３１は、プログラムアドレスＡ１２に対応した命令Ｄ１２（ＳＵＢ）をフェッチする。
【０１４６】
サイクルＴ８において、命令解析部４１は、プログラムアドレスＡ１２に対応した命令Ｄ１２をデコードする。また、命令フェッチ部３１は、プログラムアドレスＡ１３に対応した命令Ｄ１３（ＭＶ）をフェッチする。なお、ＭＶは、データ転送命令を示している。
【０１４７】
サイクルＴ９において、命令解析部４１は、プログラムアドレスＡ１３に対応した命令Ｄ１３をデコードする。また、命令フェッチ部３１は、分岐先アドレスであるＡ２０に対応した命令Ｄ２０（ＬＤＲ）をフェッチする。
【０１４８】
サイクルＴ１０において、命令解析部４１は、プログラムアドレスＡ２０に対応した命令Ｄ２０をデコードする。
【０１４９】
以上説明したように、本実施の形態におけるプロセッサによれば、複数のＮＯＰ命令を含んだＮＯＰ付分岐命令をサポートするようにしたので、オブジェクトコードのサイズをさらに削減することが可能となった。
【０１５０】
また、分岐命令に付加された複数のＮＯＰ命令の処理中は、命令フェッチ部３１が命令メモリにアクセスしないようにしたので消費電力の削減を図ることが可能となった。また、ＮＯＰ命令がＮＯＰ付分岐命令にエンコードされているので、命令メモリをキャッシュメモリとした場合に、キャッシュのヒット率を向上させることが可能となった。
【０１５１】
さらには、ＮＯＰ付分岐命令を実行する場合でも、プログラムカウンタの更新は通常の命令の場合と同様に行なわれるので、分岐が不成立の場合でも分岐命令の直後の命令が遅延なく実行される。
【０１５２】
（第６の実施の形態）
本発明の第６の実施の形態におけるプロセッサの概略構成は、図１１に示す第３の実施の形態におけるプロセッサの概略構成と比較して、命令デコード部の構成が異なる点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰返さない。なお、本実施の形態における命令デコード部の参照符号を５３として説明する。
【０１５３】
図２２は、命令デコード部５３の詳細を説明するためのブロック図である。この命令デコード部５３は、命令レジスタ選択部３６と、ＮＯＰ命令解析部３７と、バッファ３９と、命令レジスタ４０と、命令解析部４１と、ＮＯＰカウンタ４２と、ＮＯＰフラグレジスタ４３と、分岐フラグレジスタ４４および６３と、分岐命令解析部５５と、ＯＲ回路５６とを含む。なお、図１２に示す命令デコード部３２と同様の機能を有する部分については同じ参照符号を付すものとする。
【０１５４】
分岐命令解析部５３は、命令レジスタ４０の内容が分岐命令であるか否かを判定する。命令レジスタ４０の内容が分岐命令の場合には、分岐命令解析部５５はｊｍｐ＿ｆｌａｇをセットし、分岐フラグレジスタ４４にその値を設定する。また、命令レジスタ４０の内容が分岐命令でない場合には、分岐命令解析部５５はｊｍｐ＿ｆｌａｇをリセットし、分岐フラグレジスタ４４にその値を設定する。
【０１５５】
また、分岐命令解析部５５は、命令レジスタ４０に格納される命令がＮＯＰ付分岐命令であり、かつその分岐条件を満たしている場合に、ｎｏｐｊｍｐ＿ｆｌａｇをセットし、分岐フラグレジスタ５４にその値を設定する。それ以外の場合には、ｎｏｐｊｍｐ＿ｆｌａｇをリセットし、分岐フラグレジスタ５４にその値を設定する。
【０１５６】
ＯＲ回路５６は、ＮＯＰフラグレジスタ４３および５４から出力される値の論理和を演算し、その演算結果を命令レジスタ選択部３６へ出力する。
【０１５７】
図２３は、本発明の第６の実施の形態におけるプロセッサによって実行されるプログラムおよびそのときのタイミングチャートの一例を示す図である。図２３（ａ）に示すプログラムを参照しながら、以下に、図２３（ｂ）に示すタイミングチャートの説明を行なう。なお、図１３に示す第３の実施の形態におけるプロセッサのタイミングチャートと比較して、サイクルＴ０〜Ｔ８の動作は同様である。したがって、重複する動作の説明は繰返さない。
【０１５８】
サイクルＴ９において、分岐命令解析部５５は、命令Ｄ４をデコードする。命令Ｄ４は分岐命令であるので、分岐命令解析部５５は、ｊｍｐ＿ｆｌａｇをセットする。また、命令Ｄ４はＮＯＰ付分岐命令であるので、分岐命令解析部５５は、ｎｏｐｊｍｐ＿ｆｌａｇをセットする。また、プログラムアドレス生成部３０は、ｒｅａｄ＿ａｄｄｒ信号に分岐先アドレスＡ１０を出力する。
【０１５９】
サイクルＴ１０において、命令レジスタ選択部３６は、ＯＲ回路５６からＨレベルが出力されているので、命令レジスタ４０にＮＯＰを設定する。また、命令レジスタ４０にＮＯＰが設定されているので、ｊｍｐ＿ｆｌａｇおよびｎｏｐｊｍｐ＿ｆｌａｇがリセットされる。命令フェッチ部３１は、アドレスＡ１０に対応する命令Ｄ１０（ＡＤＤ）をフェッチする。
【０１６０】
サイクルＴ１１において、ＯＲ回路５６からＬレベルが出力されているので、命令レジスタ選択部３６は、命令レジスタ４０に命令Ｄ１０を設定する。命令解析部４１は、命令Ｄ１０をデコードする。
【０１６１】
以上説明したように、本実施の形態におけるプロセッサによれば、連続ＮＯＰ命令またはＮＯＰ付分岐命令に付加されたＮＯＰ命令の処理中は、命令フェッチ部３１が命令メモリにアクセスしないようにしたので、消費電力の削減を図ることが可能となった。また、ＮＯＰ命令が１つの連続ＮＯＰ命令またはＮＯＰ付分岐命令にエンコードされているので、命令メモリをキャッシュメモリとした場合に、キャッシュのヒット率を向上させることが可能となった。
【０１６２】
また、条件が成立した場合（分岐する場合）には分岐命令の直後にある連続ＮＯＰ命令を、通常のＮＯＰ命令として処理するようしたので、条件分岐命令の実行時に不要なＮＯＰが挿入されるのを防止することが可能となった。
【０１６３】
さらには、ＮＯＰ付分岐命令を実行する場合でも、プログラムカウンタの更新は通常の命令の場合と同様に行なわれるので、分岐が不成立の場合でも分岐命令の直後の命令が遅延なく実行される。
【０１６４】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０１６５】
【図１】一般的なアセンブラの機能的構成を示すブロック図である。
【図２】図１に示すアセンブラに入力されるプログラムおよび生成されたオブジェクトコードの一例を示す図である。
【図３】本発明の第１の実施の形態におけるアセンブラ装置の構成例を示すブロック図である。
【図４】本発明の第１の実施の形態におけるアセンブラの機能的構成を示すブロック図である。
【図５】本発明の第１の実施の形態におけるアセンブラの処理手順を説明するためのフローチャートである。
【図６】プログラム入力部１２に入力されるプログラムおよび生成されたオブジェクトコードの一例を示す図である。
【図７】本発明の第１の実施の形態における命令コードの一例を示す図である。
【図８】本発明の第１の実施の形態におけるアセンブラによってアセンブルされるラベル付ＮＯＰ命令および引数付ＮＯＰ命令を含んだプログラムおよびそのオブジェクトコードの一例を示す図である。
【図９】本発明の第２の実施の形態におけるアセンブラの処理手順を説明するためのフローチャートである。
【図１０】本発明の第２の実施の形態におけるアセンブラによってアセンブルされるラベル付ＮＯＰ命令および引数付ＮＯＰ命令を含んだプログラムおよびそのオブジェクトコードの一例を示す図である。
【図１１】本発明の第３の実施の形態におけるプロセッサの概略構成を示すブロック図である。
【図１２】図１１に示す命令デコード部３２をさらに詳細に説明するためのブロック図である。
【図１３】本発明の第３の実施の形態におけるプロセッサによって実行されるプログラムおよびそのときのタイミングチャートの一例を示す図である。
【図１４】本発明の第３の実施の形態におけるプロセッサによって実行されるＮＯＰ付条件分岐命令ＪＡＣＣＮを含んだプログラムおよびそのときのパイプライン処理を示す図である。
【図１５】本発明の第４の実施の形態におけるプロセッサの処理を説明するための図である。
【図１６】ＮＯＰ付分岐命令の種類を説明するための図である。
【図１７】本発明の第４の実施の形態における命令デコード部５２の構成を示すブロック図である。
【図１８】本発明の第４の実施の形態におけるプロセッサによって実行されるプログラムおよびそのときのタイミングチャートの一例を示す図である。
【図１９】本発明の第４の実施の形態におけるプロセッサによって実行される条件付分岐命令ＪＡＣＣを含んだプログラムおよびそのときのパイプライン処理の一例を示す図である。
【図２０】本発明の第５の実施の形態における命令フェッチ部の構成を示すブロック図である。
【図２１】本発明の第５の実施の形態におけるプロセッサによって実行されるプログラムおよびそのときのタイミングチャートの一例を示す図である。
【図２２】本発明の第６の実施の形態における命令デコード部６２の詳細を説明するためのブロック図である。
【図２３】本発明の第６の実施の形態におけるプロセッサによって実行されるプログラムおよびそのときのタイミングチャートの一例を示す図である。
【符号の説明】
【０１６６】
１０  プログラム、１１  アセンブラ、１２  プログラム入力部、１３，２３  命令解析部、１４  命令コード出力部、１５  オブジェクトコード、２４  ＮＯＰ命令解析部、３０  プログラムアドレス生成部、３１  命令フェッチ部、３２，５２，５３  命令デコード部、３３  データ読出し部、３４  演算処理部、３５  データ書込み部、３６，４６  命令レジスタ選択部、３７，４８  ＮＯＰ命令解析部、３８，４７，５５  分岐命令解析部、３９  バッファ、４０  命令レジスタ、４１  命令解析部、４２  ＮＯＰカウンタ、４３  ＮＯＰフラグレジスタ、４４，５４  分岐フラグレジスタ、４５  プログラムカウンタ、４９  レジスタ、５６  ＯＲ回路、６１  コンピュータ本体、６２  ディスプレイ装置、６３  ＦＤドライブ、６４  ＦＤ、６５  キーボード、６６  マウス、６７  ＣＤ−ＲＯＭ装置、６８  ＣＤ−ＲＯＭ、６９  ネットワーク通信装置、７０  ＣＰＵ、７１  ＲＯＭ、７２  ＲＡＭ、７３  ハードディスク。
【図１】
2005149297.tif 000003
【図２】
2005149297.tif 000004
【図３】
2005149297.tif 000005
【図４】
2005149297.tif 000006
【図５】
2005149297.tif 000007
【図６】
2005149297.tif 000008
【図７】
2005149297.tif 000009
【図８】
2005149297.tif 000010
【図９】
2005149297.tif 000011
【図１０】
2005149297.tif 000012
【図１１】
2005149297.tif 000013
【図１２】
2005149297.tif 000014
【図１３】
2005149297.tif 000015
【図１４】
2005149297.tif 000016
【図１５】
2005149297.tif 000017
【図１６】
2005149297.tif 000018
【図１７】
2005149297.tif 000019
【図１８】
2005149297.tif 000020
【図１９】
2005149297.tif 000021
【図２０】
2005149297.tif 000022
【図２１】
2005149297.tif 000023
【図２２】
2005149297.tif 000024
【図２３】
2005149297.tif 000025