(57)【要約】【課題】  本発明は、各命令とそれに割当てられるオペコードとの関係を変更可能な構成としたプロセッサ及びそのようなプロセッサで実行するプログラムを生成し実行する方法を提供することを目的とする。【解決手段】  プロセッサは、オペコードを格納する命令バッファと、複数のオペコードと複数の命令との一対一の対応関係を保持し、命令バッファから入力として受け取ったオペコードに対応する命令を対応関係に基づいて特定し、特定された命令を示す信号を出力する命令デコーダと、命令デコーダが出力する信号に応じて命令動作を実行する制御回路を含み、命令デコーダは対応関係が可変に設定可能なように構成されることを特徴とする。【選択図】  図３
2007004475.tif 000002
【特許請求の範囲】
【請求項１】
オペコードを格納する命令バッファと、
複数のオペコードと複数の命令との一対一の対応関係を保持し、該命令バッファから入力として受け取った該オペコードに対応する命令を該対応関係に基づいて特定し、該特定された命令を示す信号を出力する命令デコーダと、
該命令デコーダが出力する該信号に応じて命令動作を実行する制御回路と
を含み、該命令デコーダは該対応関係が可変に設定可能なように構成されることを特徴とするプロセッサ。
【請求項２】
該命令デコーダは、該対応関係を規定するデータを格納する書き換え可能な記憶回路を含むことを特徴とする請求項１記載のプロセッサ。
【請求項３】
該命令デコーダは、
該対応関係の一部を規定するデータを格納する書き換え可能な記憶回路と、
該対応関係の残りの部分を規定するデータを格納する内容固定の記憶回路と
を含むことを特徴とする請求項１記載のプロセッサ。
【請求項４】
該記憶回路は、外部からのアクセスにより書き込み可能に構成されることを特徴とする請求項２記載のプロセッサ。
【請求項５】
該命令デコーダは、
該複数のオペコードを格納するレジスタと、
該レジスタに格納される該複数のオペコードの各々と該命令バッファから入力として受け取った該オペコードとを比較する複数の比較器と
を含むことを特徴とする請求項１記載のプロセッサ。
【請求項６】
該命令デコーダは、該複数のオペコードをアドレスとし、該複数の命令を記憶内容として格納するＲＡＭを含むことを特徴とする請求項１記載のプロセッサ。
【請求項７】
命令とオペコードとの対応関係が可変に設定可能なプロセッサによりプログラムを実行する方法であって、
第１のプログラムに含まれる命令の出現頻度を判定し、
命令とオペコードとの対応関係が該判定された出現頻度に応じた所望の対応関係になるように該プロセッサを設定する第２のプログラムを生成し、
該プロセッサにより該第２のプログラムを実行することにより該プロセッサにおいて該対応関係を設定し、
該対応関係が設定された該プロセッサにより該第１のプログラムを実行する
各段階を含むことを特徴とするプログラム実行方法。
【請求項８】
該第２のプログラムを生成する段階は、該判定に応じて該出現頻度が相対的に高い命令に１バイトのオペコードを割り当て、該出現頻度が相対的に低い命令に２バイトのオペコードを割り当てるように該所望の対応関係を定めることを特徴とする請求項７記載のプログラム実行方法。
【請求項９】
該第１のプログラムを該所望の対応関係に従って実行可能形式データに変換する段階を更に含み、該該第１のプログラムを実行する段階は、該対応関係が設定された該プロセッサにより該実行可能形式データを実行することを特徴とする請求項７記載のプログラム実行方法。
【請求項１０】
該第２のプログラムを生成する段階は、該プロセッサにおいて命令とオペコードとの対応関係が固定である命令のみを用いて該第２のプログラムを生成することを特徴とする請求項７記載のプログラム実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にプロセッサ及びプログラム実行方法に関し、詳しくは可変長の命令をデコードして実行するプロセッサ及びそのようなプロセッサを用いたプログラム実行方法に関する。
【背景技術】
【０００２】
ＣＰＵ（Central  Processing  Unit）に対しては、例えばオペコード・テーブル等の形で所定の命令セットが規定されており、各命令のビットパターン（オペコード）とそれに割当てられたＣＰＵの動作内容との対応関係は固定である。この命令セットから命令を選択して順番に並べることで、所定のタスクを実行するプログラムが構成される。ＣＰＵは、プログラムを構成する各命令をメモリから順次フェッチしてデコードし、デコード結果に応じて指定された動作を実行する。
【０００３】
ＣＰＵの命令セットにおいて命令数が少なければ、各命令は１バイトで表現することができる。しかしＣＰＵの命令セットの命令数が多い場合、多数の命令を表現するために１つのオペコードあたり複数バイトが必要になり、各命令の長さが可変の長さであるようなオペコード体系となる。この場合、全ての命令が複数バイトとなるわけではなく、主要な命令は１バイトで定義され、１バイトで表現しきれない命令（２５７個目以降の命令）が２バイトで定義される。この場合、フェッチしたオペコードの１バイトが所定のコードであれば、このオペコードは２バイト命令である等の規定がされている。
【０００４】
１バイト命令はメモリ格納に必要な容量が小さく、命令フェッチの際のデータ転送量も少なくてすむので、頻繁に使用する命令には一般に１バイトのオペコードが割当てられる。それに対して使用頻度の少ない命令は、実行可能形式モジュール内でのメモリ占有率が低く、命令フェッチされる回数も少ないので、一般に２バイトのオペコードが割当てられる。
【０００５】
しかしＣＰＵの命令セットに規定される命令のうちで、どの命令の使用頻度が高いかは、そのＣＰＵを実際に使用するユーザのニーズにより異なる。従って、あるユーザの使用形態では、ある種の命令を頻繁に使用するのにも関わらず、それらの命令が２バイト命令として規定されている等ということがあり得る。このような場合、実行可能形式モジュールの格納に必要なメモリ容量が大きくなる、実行時の速度が遅くなるなどの問題がある。しかし従来のＣＰＵの構成では、各命令とそれに割当てられるオペコードとの関係は固定であり、変化することができない。
【０００６】
図１は、従来のＣＰＵの構成の一例を示す図である。図１に示すＣＰＵ１０は、バス１４を介して、プログラムを格納するプログラムメモリ１１、データＲＡＭ１２、及び周辺リソース１３に接続されている。ＣＰＵ１０は、命令デコーダ２１、シーケンサ（制御回路）２２、命令バッファ２３、ＡＬＵ２４、レジスタ群２５、プログラムカウンタ２６、及びバス制御部２７を含む。
【０００７】
プログラムカウンタ２６は、実行するプログラムが格納されている記憶領域から順次命令をフェッチするフェッチ先のアドレスを示すレジスタである。ＣＰＵ１０が、プログラムカウンタ２６の示すアドレスから命令をフェッチすると、命令はバス制御部２７を介して命令バッファ２３に取り込まれる。命令デコーダ２１は、命令バッファ２３に格納された命令をデコードして、デコード結果をシーケンサ２２に供給する。シーケンサ２２は、命令デコーダ２１が示すデコード結果に応じて、指定されたＡＬＵモードの設定、指定されたレジスタの選択、指定されたデータのアクセス、指定されたレジスタへの書き込み等の動作を実行する。
【０００８】
命令デコーダ２１内では、模式的に図１に示されるように、固定値として設けられた複数のオペコードの各々と命令バッファ２３の内容との比較が実行される。命令バッファ２３の内容が固定値の何れか１つと一致すると、複数の比較結果出力のうちで対応する１つが一致を示す信号状態となる。この一致を示す比較結果出力により、命令バッファ２３の内容であるフェッチされた命令が特定され、この命令に対応する所定の動作シーケンスがシーケンサ２２により実行される。命令デコーダ２１において、フェッチされた命令を識別するための比較対象であるオペコードは、固定値として提供されるものであり変更することはできない。
【０００９】
図２は、従来のＣＰＵの構成の別の一例を示す図である。図２において、図１と同一の構成要素は同一の番号で参照し、その説明は省略する。
【００１０】
図２のＣＰＵ１０Ａにおいては、命令デコーダ２１ＡがマイクロＲＯＭで構成される。命令がフェッチされ命令バッファ２３に格納されると、この命令バッファ２３の内容をアドレスとして、マイクロＲＯＭをアクセスする。マイクロＲＯＭの各アドレスはオペコードに対応し、各アドレスの内容はそのオペコードに対応するシーケンサ２２への指示である。例えば図２に示されるように、命令バッファ２３から供給されるオペコードが“０３”のとき、マイクロＲＯＭの出力は“７１５５”となる。このとき例えば、先頭の“７”はＡＬＵ２４の加算モードへの設定、“１５”がオペランドフェッチの指示、最後の“５”がレジスタへの書き込みの指示を意味する。命令デコーダ２１Ａにおいて、フェッチされた命令を識別するためのテーブルは、ＲＯＭとして提供されるものであり変更することはできない。
【特許文献１】特開２００３−２２１８０号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
以上を鑑みて、本発明は、各命令とそれに割当てられるオペコードとの関係を変更可能な構成としたプロセッサ及びそのようなプロセッサで実行するプログラムを生成し実行する方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明によるプロセッサは、オペコードを格納する命令バッファと、複数のオペコードと複数の命令との一対一の対応関係を保持し、該命令バッファから入力として受け取った該オペコードに対応する命令を該対応関係に基づいて特定し、該特定された命令を示す信号を出力する命令デコーダと、該命令デコーダが出力する該信号に応じて命令動作を実行する制御回路を含み、該命令デコーダは該対応関係が可変に設定可能なように構成されることを特徴とする。
【００１３】
また本発明によるプログラム実行方法は、命令とオペコードとの対応関係が可変に設定可能なプロセッサによりプログラムを実行する方法であって、第１のプログラムに含まれる命令の出現頻度を判定し、命令とオペコードとの対応関係が該判定された出現頻度に応じた所望の対応関係になるように該プロセッサを設定する第２のプログラムを生成し、該プロセッサにより該第２のプログラムを実行することにより該プロセッサにおいて該対応関係を設定し、該対応関係が設定された該プロセッサにより該第１のプログラムを実行する各段階を含むことを特徴とする。
【発明の効果】
【００１４】
本発明の少なくとも１つの実施例によれば、プロセッサの命令解析部分である命令デコーダにおけるオペコードと命令との対応関係を可変に設定可能とすることにより、実行可能形式バイナリデータにおいて、使用頻度の高い命令には１バイトのオペコードを割り当て、使用頻度の低い命令には２バイトのオペコードを割当てることが可能となる。従って、実行可能形式バイナリデータの格納に必要なメモリ容量が小さくなると共に、実行時の命令フェッチ速度が速くなる。
【発明を実施するための最良の形態】
【００１５】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
【００１６】
本発明によるプロセッサでは、命令デコーダにおける命令解析部分において、オペコードと命令との対応関係を可変に設定可能な構成とする。更に、この命令デコーダの命令解析部分におけるオペコードと命令との対応関係を所望の対応関係に設定するために、実行するプログラムをコンパイル、アセンブル、及びリンクして実行可能形式のバイナリデータを生成する際に、命令解析部を所望の設定にするための設定プログラムをバイナリデータに含めるように実行可能形式プログラムを生成する。
【００１７】
具体的には、まず実行対象であるユーザ・アプリケーション・プログラムにおいて、使用頻度（出現頻度）の高い命令を特定する。次に、特定された使用頻度の高い命令に１バイトのオペコードを割り当て、使用頻度の低い命令に２バイトのオペコードを割当てるように、オペコードと命令との対応関係を設定する設定プログラムを生成する。この設定プログラムを、ユーザ・アプリケーション・プログラムとリンクしてアセンブルすることで、実行可能形式バイナリデータを生成する。このバイナリデータを実行すると、バイナリデータ中の各命令がプロセッサにフェッチされ、プロセッサ中の命令デコーダにより各命令がデコードされ実行される。
【００１８】
まず、最初に設定プログラム部分が実行され、設定プログラムの命令に従って、命令デコーダの命令解析部分におけるオペコードと命令との対応関係が所望の対応関係に設定される。なお全ての命令とオペコードとの対応関係を可変に設定可能とするのではなく、一部の命令とオペコードとの対応関係は固定のものとしておく。この固定のオペコードの命令だけを用いて、上記設定プログラムを構成する。これにより、命令解析部分におけるオペコードと命令との可変な対応関係が未設定の状態であっても、固定の対応関係に基づいて設定プログラムを実行することができる。このようにして設定されたオペコードと命令との対応関係に従って、その後、ユーザ・アプリケーション・プログラム部分が実行される。
【００１９】
このように本発明では、プロセッサの命令解析部分におけるオペコードと命令との対応関係を可変に設定可能とすることにより、実行可能形式バイナリデータにおいて、使用頻度の高い命令には１バイトのオペコードを割り当て、使用頻度の低い命令には２バイトのオペコードを割当てることが可能となる。従って、実行可能形式バイナリデータの格納に必要なメモリ容量が小さくなると共に、実行時の命令フェッチ速度が速くなる。
【００２０】
図３は、本発明によるプロセッサであるＣＰＵの構成の一例を示す図である。図３に示すＣＰＵ３０は、バス１４を介して、プログラムを格納するプログラムメモリ１１、データＲＡＭ１２、及び周辺リソース１３に接続されている。ＣＰＵ３０は、命令デコーダ３１、シーケンサ（制御回路）３２、命令バッファ３３、ＡＬＵ３４、レジスタ群３５、プログラムカウンタ３６、バス制御部３７、及び内部バス３８を含む。
【００２１】
プログラムカウンタ３６は、実行するプログラムの実行可能形式バイナリデータが格納されている記憶領域（プログラムメモリ１１）から順次命令をフェッチするためのフェッチ先アドレスを示すレジスタである。ＣＰＵ３０が、プログラムカウンタ３６の示すアドレスから命令をフェッチすると、命令はバス制御部３７を介して命令バッファ３３に取り込まれる。命令デコーダ３１は、命令バッファ３３に格納された命令をデコードして、デコード結果をシーケンサ３２に供給する。シーケンサ３２は、命令デコーダ３１が示すデコード結果に応じて、フェッチした命令に対応する所定の動作シーケンスを実行するための制御回路であり、指定されたＡＬＵモードの設定、指定されたレジスタの選択、指定されたデータのアクセス、指定されたレジスタへの書き込み等の動作を実行する。
【００２２】
ＡＬＵ３４は、算術論理演算ユニットであり、シーケンサ３２の制御下で動作し、加算や減算等の算術演算、反転、ＡＮＤ論理、ＯＲ論理等の論理演算を実行する。レジスタ群３５は、ＡＬＵ３４における演算の対象となるデータやＡＬＵ３４における演算の結果のデータ等を格納するレジスタ群である。
【００２３】
命令デコーダ３１は、複数の可変レジスタ４１、複数の固定値回路４２、及び複数の比較器４３を含む。複数の可変レジスタ４１は、オペコードを設定可能な命令に対して設けられており、前述の設定プログラムをＣＰＵ３０により実行することにより、オペコードがその内容として設定される。複数の固定値回路４２は、オペコードが固定である命令に対して設けられており、固定のオペコードを比較器４３に対して出力する。比較器４３は、可変レジスタ４１及び固定値回路４２の各々に対応して１つずつ設けられており、対応オペコードと命令バッファ３３の内容とを比較する。
【００２４】
命令バッファ３３の内容がオペコードの何れか１つと一致すると、複数の比較器４３の出力のうちで、対応する１つが一致を示す信号状態となる。この一致を示す比較器出力により、命令バッファ３３の内容であるフェッチされた命令が特定され、この命令に対応する所定の動作シーケンスがシーケンサ３２により実行される。
【００２５】
複数の可変レジスタ４１は、メモリ空間に割り当てた領域として、周辺リソース１３のレジスタへのアクセスと同様に、ＣＰＵ３０からバス１４及び内部バス３８を介して読み書き可能な構成としてよい。このような構成とすれば、通常の命令セットに対して特別な命令を追加することなく、レジスタ転送命令或いはレジスタ格納命令等を使用することにより、上記設定プログラムが可変レジスタ４１の内容を設定して、命令デコーダ３１におけるオペコードと命令との対応関係を所望の関係に設定することができる。
【００２６】
この場合、設定プログラムが使用するレジスタ転送命令或いはレジスタ格納命令等は、固定値回路４２に固定のオペコードとして割り当てられていることになる。このようなレジスタ転送命令等の単純なデータ転送系の命令などは、ユーザ・アプリケーション・プログラムの内容に関わらず高い頻度で使用されるので、固定値回路４２に固定のコードとして割当てておいて何ら問題はない。
【００２７】
図４は、ユーザ・アプリケーション・プログラムに対応する実行可能形式バイナリデータを生成する処理を示すフローチャートである。図４のステップＳ１において、ユーザ・アプリケーション・プログラムのソースプログラム５１をコンパイラによりコンパイルして、アセンブリ言語で記述されたアセンブラファイル５２を生成する。
【００２８】
次にステップＳ２において、アセンブラファイル５２のプログラムに出現する命令の頻度をカウントし、使用頻度が高い命令を特定する。ステップＳ３において、各命令について、使用頻度の高い順に可変レジスタ４１にオペコードを設定する可変レジスタ設定プログラム５３を生成する。この際、１バイトのオペコードを先に割り当てていき、１バイトのオペコードを使いきった後に、２バイトのオペコードを割当てるようにすればよい。これにより、使用頻度が比較的高い命令には１バイトのオペコードが割当てられ、使用頻度が比較的低い命令には２バイトのオペコードが割当てられることになる。
【００２９】
ステップＳ４において、アセンブラファイル５２と可変レジスタ設定プログラム５３とを連結して、アセンブラファイルと可変レジスタ設定プログラムとが連結されたファイル５４を生成する。更に、ステップＳ５において、アセンブラによるアセンブル作業及びリンカによるリンク作業を実行して、実行可能形式のバイナリデータ５５を生成する。なおこの実行可能形式バイナリデータ５５においては、使用頻度が比較的高い命令には１バイトのオペコードが割当てられ、使用頻度が比較的低い命令には２バイトのオペコードが割当てられている。
【００３０】
このバイナリデータ５５を実行することで、バイナリデータ５５中の命令がＣＰＵ３０にフェッチされ、命令バッファ３３に順次格納される。更に命令デコーダ３１が、命令バッファ３３に格納された命令をデコードする。このデコード結果に応じて、シーケンサ３２が命令の実行を制御する。
【００３１】
まず、最初に可変レジスタ設定プログラム５３に対応する部分が実行され、可変レジスタ設定プログラム５３の命令に従って、命令デコーダ３１の可変レジスタ４１にオペコードが設定される。これにより、オペコードと命令との対応関係が、命令の使用頻度に応じた所望の対応関係に設定される。このようにして設定されたオペコードと命令との対応関係に従って、その後、ユーザ・アプリケーション・プログラムに対応するアセンブラファイル５２の部分が実行される。
【００３２】
図５は、命令実行処理の詳細を示すフローチャートである。図５のステップＳ１において、ＣＰＵ３０にリセットが設定される。ステップＳ２において、ＣＰＵ３０のリセットが解除される。リセットが解除されると、ステップＳ３において、ＣＰＵ３０がリセットベクタをフェッチする。この場合のリセットベクタは、フェッチ先のアドレスとして可変レジスタ設定プログラムの先頭番地を示している。
【００３３】
ステップＳ４において、リセットベクタのフェッチにより、プログラム実行が可変レジスタ設定プログラムに分岐する。可変レジスタ設定プログラムは、単純なデータ転送系の命令のみで構成されており、可変レジスタ４１とは無関係に固定値回路４２だけに基づいて実行することができる。
【００３４】
具体的には、例えばプログラムメモリ１１からバス１４及びバス制御部３７を介して可変レジスタ設定プログラムの命令を順次読込み、命令バッファ３３に格納することにより、可変レジスタ設定プログラムに対する命令フェッチ動作が実行される。デコード動作においては、命令デコーダ３１の比較器４３が、命令バッファ３３に格納された命令と、可変レジスタ４１及び固定値回路４２に設定されているオペコードとを比較する。この場合、可変レジスタ設定プログラムの命令は、固定値回路４２に設定されている単純なデータ転送系の命令のみで構成されているので、可変レジスタ４１の内容が未設定であっても問題はない。
【００３５】
複数の比較器４３のうち１つが、命令バッファ３３に格納されたデータ転送系の命令に応答して、比較結果の一致を示す出力信号をアサートする。この一致を示す信号に応答して、シーケンサ３２がデータ転送命令を実行する。このデータ転送命令により、可変レジスタ設定プログラムに含まれる設定用のオペコードを、オペランドとしてプログラムメモリ１１から読み出して、バス１４及びバス制御部３７を介してレジスタ群３５の中のレジスタに一時的に格納し、更にこのレジスタに格納された内容を、バス制御部３７、バス１４、及び内部バス３８を介して命令デコーダ３１内の指定された可変レジスタ４１に格納する。或いはデータ転送命令により、プログラムメモリ１１から可変レジスタ４１に直接にオペコードを転送して設定してもよい。
【００３６】
可変レジスタ４１への全てのオペコードの設定が完了すると、ステップＳ６において、プログラム実行がユーザプログラムの先頭番地に分岐する。分岐した後、Ｓ７において、従来と同様にユーザプログラムが実行される。
【００３７】
図６は、本発明によるプロセッサであるＣＰＵの構成の別の一例を示す図である。図６に示すＣＰＵ３０Ａは、バス１４を介して、プログラムを格納するプログラムメモリ１１、データＲＡＭ１２、及び周辺リソース１３に接続されている。ＣＰＵ３０Ａは、命令デコーダ３１Ａ、シーケンサ３２、命令バッファ３３、ＡＬＵ３４、レジスタ群３５、プログラムカウンタ３６、バス制御部３７、及び内部バス３８を含む。図６において、図３と同一の構成要素は同一の番号で参照し、その説明は省略する。
【００３８】
図６に示すＣＰＵ３０Ａは、図３に示すＣＰＵ３０に対して、命令デコーダの構成が異なる。ＣＰＵ３０Ａの命令デコーダ３１Ａは、マイクロＲＯＭ６１とマイクロＲＡＭ６２を含む。マイクロＲＯＭ６１及びマイクロＲＡＭ６２の各アドレスはオペコードに対応し、各アドレスの内容はそのオペコードに対応するシーケンサ２２への指示である。マイクロＲＯＭ６１は、オペコードが固定である命令に対して設けられており、供給される固定のオペコードに対応する命令動作指示をシーケンサ２２に対して出力する。マイクロＲＡＭ６２は、オペコードを設定可能な命令に対して設けられており、指定されるアドレス（指定されるオペコード）に所望の命令動作指示を格納することにより、そのオペコードとその格納内容とが対応付けされる。
【００３９】
命令がフェッチされ命令バッファ２３に格納されると、この命令バッファ２３の内容をアドレスとして、マイクロＲＯＭ６１又はマイクロＲＡＭ６２をアクセスする。図６の例ではオペコード００〜ＥＦがマイクロＲＯＭ６１のアドレスとして割当てられ、オペコードＦ０〜ＦＦがマイクロＲＡＭ６２のアドレスとして割当てられている。例えば図６に示すように、命令バッファ２３から供給されるオペコードが“Ｆ０”のとき、マイクロＲＡＭ６２がアクセスされて“８１４２”が出力される。この出力“８１４２”が指示する命令動作を実現するように、シーケンサ３２が各動作ステップを制御する。
【００４０】
マイクロＲＡＭ６２は、メモリ空間に割り当てた領域として、ＣＰＵ３０Ａからバス１４及び内部バス３８を介して読み書き可能な構成としてよい。このような構成とすれば、通常の命令セットに対して特別な命令を追加することなく、レジスタ転送命令或いはレジスタ格納命令等を使用することにより、設定プログラムがマイクロＲＡＭ６２の内容を設定して、命令デコーダ３１Ａにおけるオペコードと命令との対応関係を所望の関係に設定することができる。
【００４１】
この場合、設定プログラムが使用するレジスタ転送命令或いはレジスタ格納命令等は、マイクロＲＯＭ６１に固定のオペコードとして割り当てられていることになる。このようなレジスタ転送命令等の単純なデータ転送系の命令などは、ユーザ・アプリケーション・プログラムの内容に関わらず高い頻度で使用されるので、マイクロＲＯＭ６１に固定のコードとして割当てておいて何ら問題はない。
【００４２】
図７は、図６のＣＰＵで実行可能な形式のバイナリデータを生成する処理を示すフローチャートである。図７のステップＳ１において、ユーザ・アプリケーション・プログラムのソースプログラム５１をコンパイラによりコンパイルして、アセンブリ言語で記述されたアセンブラファイル５２を生成する。
【００４３】
次にステップＳ２において、アセンブラファイル５２のプログラムに出現する命令の頻度をカウントし、使用頻度が高い命令を特定する。ステップＳ３において、各命令について、使用頻度の高い順にマイクロＲＡＭ６２に命令を設定するマイクロＲＡＭ設定プログラム５３Ａを生成する。この際、１バイトのオペコードに命令を先に割り当てていき、１バイトのオペコードを使いきった後に、２バイトのオペコードに命令を割当てるようにすればよい。これにより、使用頻度が比較的高い命令には１バイトのオペコードが割当てられ、使用頻度が比較的低い命令には２バイトのオペコードが割当てられることになる。
【００４４】
ステップＳ４において、アセンブラファイル５２とマイクロＲＡＭ設定プログラム５３Ａとを連結して、アセンブラファイルとマイクロＲＡＭ設定プログラムとが連結されたファイル５４Ａを生成する。更に、ステップＳ５において、アセンブラによるアセンブル作業及びリンカによるリンク作業を実行して、実行可能形式のバイナリデータ５５を生成する。なおこの実行可能形式バイナリデータ５５においては、使用頻度が比較的高い命令には１バイトのオペコードが割当てられ、使用頻度が比較的低い命令には２バイトのオペコードが割当てられている。
【００４５】
このバイナリデータ５５を実行することで、バイナリデータ５５中の命令がＣＰＵ３０Ａにフェッチされ、命令バッファ３３に順次格納される。更に命令デコーダ３１Ａが、命令バッファ３３に格納された命令をデコードする。このデコード結果に応じて、シーケンサ３２が命令の実行を制御する。
【００４６】
まず、最初にマイクロＲＡＭ設定プログラム５３Ａに対応する部分が実行され、マイクロＲＡＭ設定プログラム５３Ａの命令に従って、命令デコーダ３１ＡのマイクロＲＡＭ６２に命令が設定される。これにより、オペコードと命令との対応関係が、命令の使用頻度に応じた所望の対応関係に設定される。このようにして設定されたオペコードと命令との対応関係に従って、その後、ユーザ・アプリケーション・プログラムに対応するアセンブラファイル５２の部分が実行される。
【００４７】
図８は、命令実行処理の詳細を示すフローチャートである。図８のステップＳ１において、ＣＰＵ３０Ａにリセットが設定される。ステップＳ２において、ＣＰＵ３０Ａのリセットが解除される。リセットが解除されると、ステップＳ３において、ＣＰＵ３０Ａがリセットベクタをフェッチする。この場合のリセットベクタは、フェッチ先のアドレスとしてマイクロＲＡＭ設定プログラムの先頭番地を示している。
【００４８】
ステップＳ４において、リセットベクタのフェッチにより、プログラム実行がマイクロＲＡＭ設定プログラムに分岐する。マイクロＲＡＭ設定プログラムは、単純なデータ転送系の命令のみで構成されており、マイクロＲＡＭ６２とは無関係にマイクロＲＯＭ６１だけに基づいて実行することができる。
【００４９】
具体的には、例えばプログラムメモリ１１からバス１４及びバス制御部３７を介してマイクロＲＡＭ設定プログラムの命令を順次読込み、命令バッファ３３に格納することにより、命令フェッチ動作が実行される。デコード動作においては、命令デコーダ３１ＡのマイクロＲＯＭ６１が、命令バッファ３３に格納された命令（オペコード）をアドレスとして受け取り、そのアドレスに格納されている内容（命令実行指示）を出力する。この場合、マイクロＲＡＭ設定プログラムの命令は、マイクロＲＯＭ６１に設定されている単純なデータ転送系の命令のみで構成されているので、マイクロＲＡＭ６２の内容が未設定であっても問題はない。
【００５０】
命令実行指示に応答して、シーケンサ３２がデータ転送命令を実行する。このデータ転送命令により、マイクロＲＡＭ設定プログラムに含まれる設定用の命令実行指示を、オペランドとしてプログラムメモリ１１から読み出して、バス１４及びバス制御部３７を介してレジスタ群３５の中のレジスタに一時的に格納し、更にこのレジスタに格納された内容を、バス制御部３７、バス１４、及び内部バス３８を介して命令デコーダ３１Ａ内のマイクロＲＡＭ６２の指定されたアドレス（オペランド）に格納する。或いはデータ転送命令により、プログラムメモリ１１からマイクロＲＡＭ６２に直接に命令実行指示を転送して設定してもよい。
【００５１】
マイクロＲＡＭ６２への命令の設定が完了すると、ステップＳ６において、プログラム実行がユーザプログラムの先頭番地に分岐する。分岐した後、Ｓ７において、従来と同様にユーザプログラムが実行される。
【００５２】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【図面の簡単な説明】
【００５３】
【図１】従来のＣＰＵの構成の一例を示す図である。
【図２】従来のＣＰＵの構成の別の一例を示す図である。
【図３】本発明によるプロセッサであるＣＰＵの構成の一例を示す図である。
【図４】ユーザ・アプリケーション・プログラムに対応する実行可能形式バイナリデータを生成する処理を示すフローチャートである。
【図５】命令実行処理の詳細を示すフローチャートである。
【図６】本発明によるプロセッサであるＣＰＵの構成の別の一例を示す図である。
【図７】図６のＣＰＵで実行可能な形式のバイナリデータを生成する処理を示すフローチャートである。
【図８】命令実行処理の詳細を示すフローチャートである。
【符号の説明】
【００５４】
１１  プログラムメモリ
１２  データＲＡＭ
１３  周辺リソース
１４  バス
３０  ＣＰＵ
３１  命令デコーダ
３２  シーケンサ
３３  命令バッファ
３４  ＡＬＵ
３５  レジスタ群
３６  プログラムカウンタ
３７  バス制御部
３８  内部バス
【図１】
2007004475.tif 000003
【図２】
2007004475.tif 000004
【図３】
2007004475.tif 000005
【図４】
2007004475.tif 000006
【図５】
2007004475.tif 000007
【図６】
2007004475.tif 000008
【図７】
2007004475.tif 000009
【図８】
2007004475.tif 000010