(57)【特許請求の範囲】
【請求項１】
命令フィールドと、処理対象のレジスタ名を記載した第１のフィールドと、処理対象の他のレジスタ名又は即値を記載した第２のフィールドで構成される命令コードを有する命令セットを解読して実行するプロセッサの命令制御機構であって、
前記命令フィールドの値を解読する命令デコーダと、
前記処理対象のレジスタ名及び前記処理対象の他のレジスタ名で指示されるレジスタと、
前記即値を記憶する記憶回路と、
前記レジスタ又は前記レジスタと前記記憶回路に記憶された値に対して、前記命令デコーダの解読結果に対応する処理を行う演算回路とを備えるプロセッサの命令制御機構において、
前記第２のフィールドに前記処理対象の他のレジスタを記載したレジスタ命令コードは、前記命令フィールドを特定の値とし、前記第２のフィールドのうちの前記処理対象の他のレジスタを記載した以外の部分に第２の命令フィールドを記載することにより表され、
前記第２のフィールドに前記即値を記載した即値命令コードは、前記命令フィールドに前記特定の値以外の値が記載され、
前記即値と前記処理対象の他のレジスタを使用する以外は同一の処理である少なくとも一部の即値命令コードと即値類似レジスタ命令コードには、前記命令フィールドと前記第２の命令フィールドに同一の値が割り当てられ、
前記命令セットは、前記即値命令コードと前記即値類似レジスタ命令コードの少なくとも一部に対応し、前記即値命令コードと即値類似レジスタ命令コードの基本長命令コードより短い短縮長命令コードを有し、
該短縮長命令コードの命令フィールドは、前記基本長命令コードの命令フィールドと同じ位置で、処理内容が類似の前記即値類似レジスタの前記第２の命令フィールドと同一の値を有し、
前記命令フィールドが前記特定の値であるかを判定するレジスタ命令検出回路と、
該レジスタ命令検出回路の判定結果に従って、前記命令フィールドが前記特定の値である時には前記第２の命令フィールドが、前記命令フィールドが前記特定の値でない時には前記命令フィールドが、前記命令デコーダに入力されるように切り換える選択回路と、
前記基本長命令コードを処理する基本長モードと前記短縮長命令コードを処理する短縮長モードを切り換えるモード切り換え回路と、を備え、
前記命令デコーダは、モードに応じて解読処理を変化させることを特徴とするプロセッサの命令制御機構。
【請求項２】
請求項１に記載のプロセッサの命令制御機構であって、
前記即値命令コード及び前記即値類似レジスタ命令コードと類似した処理であるが、前記即値及び処理対象の他のレジスタの値は使用しない第２のレジスタ命令コードの少なくとも一部には、前記命令フィールドが前記特定の値以外の第２の特定の値で、前記第２の命令フィールドに前記即値類似レジスタ命令コードの前記第２の命令フィールドの値と同一の値が割り当てられ、
前記レジスタ命令検出回路は、前記命令フィールドが前記第２の特定の値であるかも判定するプロセッサの命令制御機構。
【請求項３】
請求項１に記載のプロセッサの命令制御機構であって、
前記短縮長モード時に、レジスタ命令検出回路が前記命令フィールドが前記特定の値であることを検出した時には、前記命令デコーダは、当該命令コードを前記基本長命令コードとして処理するプロセッサの命令制御機構。
【請求項４】
請求項２に記載のプロセッサの命令制御機構であって、
前記短縮長モード時に、レジスタ命令検出回路が前記命令フィールドが前記特定の値又は前記第２の特定の値であることを検出した時には、前記命令デコーダは、当該命令コードを前記基本長命令コードとして処理するプロセッサの命令制御機構。
【請求項５】
請求項３又は４に記載のプロセッサの命令制御機構であって、
レジスタ間転送命令を、前記第２のレジスタ命令コードに割り当てたプロセッサの命令制御機構。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、効率的な命令セットを簡単な機構で実行できるプロセッサの命令制御機構に関し、特に命令コードを効率的に圧縮し、プログラムサイズを小さくできる短縮長命令が使用できると共に多数の命令を効率よく使用できる命令セットを実行できるプロセッサの命令制御機構を簡単な機構で実現する技術に関する。
【０００２】
【従来の技術】
プロセッサでは実行できる命令セットが決められている。命令セットを構成する命令コードは、命令フィールド（オペレーションコード）とオペランドから構成される。命令フィールドは、処理の内容を示す部分で、オペランドは処理の対象となるレジスタやメモリアドレスを示す部分で、処理に使用する数値であることもある。このような数値は即値又はリテラルと呼ばれる。
【０００３】
命令には、ジャンプ命令などのようにオペランドが１個の命令や、２個のオペランドの値に対して加算などの演算を行ってその結果を一方のオペランドに格納したり、２個のオペランドの一方から他方に値を移動させるなどのオペランドが２個の命令や、２個のオペランドの値に対して加算などの演算を行ってその結果を別のオペランドに格納するなどのオペランドが３個の命令がある。なお、この３個のオペランドを使用する命令は、２個のオペランドを使用する命令を組み合わせることにより実現できるので、３個のオペランドを使用する命令を持たない命令セットもある。ここでは、上記の、オペランドを１個、２個及び３個使用する３種のアドレッシングモードを有する命令セットを例として、以下の説明を行う。なお、レジスタのみを使用したアドレシイングモードの命令はレジスタ命令、即値を使用したアドレシイングモードの命令はイミーディエート命令と呼ばれる。
【０００４】
図１は、レジスタ命令と即値（イミーディエート）命令の命令コードの従来の構成例を示す図であり、（１）がレジスタ命令の構成を、（２）が即値命令の構成を示す。図示のように、レジスタ命令と即値命令は同じ長さであり、本発明はこのようなレジスタ命令と即値命令の長さが同じ命令セットを対象とする発明である。上記のメモリアドレスを直接指示するメモリアドレシッング命令は、レジスタ命令や即値命令と長さが同じ場合も異なる場合もあるが、本発明はこれには直接関係しないので、いずれであってもよい。
【０００５】
図１に示すように、レジスタ命令は、上位６ビットが命令フィールドＯＰ１であり、次の５ビットが演算対象の第１のレジスタＲｓ１を示し、次の５ビットが演算結果を格納する結果格納先レジスタＲｄを示す。ここまでは即値命令も同じである。レジスタ命令では、更に次の５ビットが演算対象の第２のレジスタＲｓ２を示すが、即値命令では次の１６ビットが即値を示す。レジスタ命令の第２のレジスタＲｓ２の後の残りの１１ビットは第２の命令フィールドＯＰ２であり、ＯＰ１と合せて命令フィールドを形成する。従ってレジスタ命令は即値命令より種類が多い。
【０００６】
図２は、図１のような命令セットを実行するプロセッサの命令制御機構の従来例の構成を示す図である。プログラムはメモリに格納されており、メモリから読み出された命令コードは、命令保持用フリップフロップ１１から１４に一時的に保持される。参照番号１１が命令フィールドＯＰ１の示す値を保持する部分で、１２が第１の演算対象レジスタＲｓ１を指示する値を保持する部分で、１３が第１の結果格納先レジスタＲｄを指示する値を保持する部分で、１４がレジスタ命令の時には第２の演算対象レジスタＲｓ２を指示する値と第２の命令フィールドＯＰ２を示す値を保持し、即値命令の時には即値を保持する部分である。フリップフロップ１１と１４に保持された命令フィールドＯＰ１とＯＰ２は命令デコーダ１５に出力され、そこで解読されて、処理する内容が演算器２８と２９に指示されると共に、命令に応じて第２の演算対象レジスタＲｓ２の値を使用するか即値が使用されるかが選択される。フリップフロップ１２、１３及び１４（Ｒｓ２の部分のみ）に保持された値により、レジスタ１８、１９、１７が指示される。また、フリップフロップ１４に保持された値は更にフリップフロップ２３に保持される。命令デコーダ１５の解読結果に応じて、レジスタ１９の値又はフリップフロップ２３に保持された値が内部バスに出力され、同時に出力されるレジスタ１８と共に演算器２８、２９に入力され、そこで命令フィールドＯＰで指示された演算が行われる。その演算結果は、レジスタ１７に格納される。このようにして１つの命令コードに対する処理が完了し、プログラムで指示される命令コードを順次行う。
【０００７】
【発明が解決しようとする課題】
図１及び図２の例は、もっとも一般的な命令セット及びプロセッサの命令制御機構の従来例であるが、近年プロセッサの高速化・低価格化により、従来は専用回路を用いて行っていた様々な処理を、１つのプロセッサでプログラムを切り換えながら処理できるようになってきた。その反面、プログラムサイズが膨大になり、キャッシュなどのチップ内蔵メモリや外部メモリが増大したり、それらのメモリのアクセス頻度が高くなるために消費電力が増大するといった問題が生じている。
【０００８】
最近のように、メディア機器の携帯化が進むと、プロセッサのコストや消費電力は、機器トータルのコストや消費電力の増大にとって大きな割合を占めるようになってきており、このため、いかに全体のプログラムサイズを圧縮するかがプロセッサの課題となっている。そのため、同じ長さの命令セットであれば、できるだけ多数の命令コードが表現できることが望ましい。
【０００９】
また、このような課題を解決するための別の方法に、短縮長命令を使用することがある。短縮長命令を使用できれば、プログラムサイズを圧縮することが可能である。従来から基本長命令と共に短縮長命令が使用できるようにサポートしているプロセッサがある。図３は、基本長命令と短縮長命令が両方使用できるようにした従来例における命令コードの従来例の構成を示す図である。この方法は、あらかじめ命令フィールド中に命令長を示すビットを持たせることにより、プログラム中の命令が基本長命令と短縮長命令のいずれであるかが識別できるようにする方法であり、図３では最上位ビットをこれに割り当てている。しかし、この場合、１ビットがこのような識別に使用されることになり、その分他のフィールのビットが減少することになる。図３では、命令フィールドの１ビットを基本長命令と短縮長命令の識別に割り当てており、命令フィールドの長さが６ビットから５ビットに減少している。６ビットであれば６４通りの命令が表されるのに、５ビットであれば３２通りの命令しか表せなくなる。基本長命令と短縮長命令の識別のための１ビットを他の部分、例えば、即値の部分の１ビットを基本長命令と短縮長命令の識別に割り当てることも考えられるが、その場合には即値の範囲が半分に減少することになる。短縮長命令は、そもそも命令コードの長さが限られるため特に問題である。
【００１０】
そこで、プロセッサにモード切り換え機構を設け、プログラム中のモード切り換え命令でモードを切り換えられるようにする。短縮長命令モードであれば、命令コードはすべて短縮長命令であるとして処理される。図４は、モード切り換えを可能にした場合の命令コードの従来例の構成を示す図である。しかし、この方法では、当然のことながら短縮長命令に割り当てられなかった命令は使用できないが、すべての基本長命令セットを短縮長命令セットに割り当てることは原理的に不可能であるため、基本長命令セットにはあるが短縮長命令としては使用できない命令が存在することになる。そのため、短縮長命令モードにおいてはこのような命令が使用できず、そのような命令を使用する場合には、一旦基本長命令モードに切り換える必要が生じる。これでは、プログラムが複雑で、サイズも大きくなる。
【００１１】
上記の２つの方法では、基本長命令も短縮長命令も命令フィールドは同じ長さであるとしたが、基本長命令セットと短縮長命令セットで命令フィールドの体系を大きく異ならせることにより、多くの命令を短縮長命令として持つことができるようになる。しかし、この場合、モード切り換えにより両方の命令セットを実行できるプロセッサでは、命令デコーダを共通に使用するためには、短縮長命令フィールドを基本長命令フィールドに変換するために、図５に示すような回路が必要になる。この回路は、短縮長命令モード時には、短縮長命令の命令フィールドを、対応する処理内容の基本長命令コードの命令フィールドに変換する命令コード変換エンコーダ３１と、その出力を一時保持するフリップフロップ３２で構成される。通常の処理においては、この変換回路での処理のためにパイプラインの１段分を消費するか、あるいは、１段分を消費しない場合でもデコーダのクリティカルパスを圧迫することになり、ハードウエアの増加を招くだけでなく、分岐ペナルティの増大で性能の低下を招くといった問題がある。
【００１２】
本発明は、コードの長さが同じ命令セットであれば、できるだけ多数の種類の命令コードが表現できるようにすることで、プログラムの長さを短くした命令コードのセットを実行できるプロセッサの命令制御機構を簡単な構成で実現することを目的とする。また、所定の長さのコードで多数の短縮長命令を効率よく実行できるプロセッサの命令制御機構を簡単な構成で実現することを目的とする。
【００１３】
【課題を解決するための手段】
上記目的を実現するため、本発明のプロセッサの命令制御機構は、命令コードのうち、処理対象のレジスタ名又は即値を記載した第２のフィールドにおいてレジスタ名を記載した場合には、第２のフィールドに使用しない第２の命令フィールドがあることに着目した。そして、第２のフィールドに処理対象のレジスタ名を記憶するレジスタ命令については、命令フィールドに特定の値を割り当て、実際の命令内容は第２の命令フィールドに記載するようにし、即値命令については、命令フィールドにこの特定の値以外の値を割り当て、しかも、即値とレジスタを使用する以外は同一の処理である少なくとも一部の即値命令コードと即値類似レジスタ命令コードには、命令フィールドと第２の命令フィールドに同一の値を割り当てる。これであれば、命令デコーダなどを複雑にすることもない。
【００１４】
すなわち、本発明のプロセッサの命令制御機構は、命令フィールドと、処理対象のレジスタ名を記載した第１のフィールドと、処理対象の他のレジスタ名又は即値を記載した第２のフィールドで構成される命令コードを有する命令セットを解読して実行するプロセッサの命令制御機構であって、命令フィールドの値を解読する命令デコーダと、処理対象のレジスタ名及び処理対象の他のレジスタ名で指示されるレジスタと、即値を記憶する記憶回路と、レジスタ又はレジスタと記憶回路に記憶された値に対して、命令デコーダの解読結果に対応する処理を行う演算回路とを備えるプロセッサの命令制御機構において、第２のフィールドに処理対象の他のレジスタを記載したレジスタ命令コードは、命令フィールドを特定の値とし、第２のフィールドのうちの処理対象の他のレジスタを記載した以外の部分に第２の命令フィールドを記載することにより表され、第２のフィールドに即値を記載した即値命令コードは、命令フィールドに特定の値以外の値が記載され、即値と処理対象の他のレジスタを使用する以外は同一の処理である少なくとも一部の即値命令コードと即値類似レジスタ命令コードには、命令フィールドと第２の命令フィールドに同一の値が割り当てられ、命令フィールドが特定の値であるかを判定するレジスタ命令検出回路と、レジスタ命令検出回路の判定結果に従って、命令フィールドが特定の値である時には第２の命令フィールドが、命令フィールドが特定の値でない時には命令フィールドが、命令デコーダに入力されるように切り換える選択回路を備えることを特徴とする。
【００１５】
また、即値命令コード及び即値類似レジスタ命令コードと類似した処理であるが、即値及び処理対象の他のレジスタの値は使用しない第２のレジスタ命令コードの少なくとも一部には、命令フィールドに特定の値以外の第２の特定の値で、第２の命令フィールドに即値類似レジスタ命令コードの第２の命令フィールドの値と同一の値を割り当てるようにし、レジスタ命令検出回路が、命令フィールドが第２の特定の値であるかも判定するようにすることが望ましい。このような命令の例としては、レジスタ間転送命令がある。
【００１６】
本発明のプロセッサの命令制御機構においては、基本長命令を実行するモードと短縮長命令を実行するモードを切り換えて、両方の命令が実行できるようにする。そこで、短縮長命令コードの命令フィールドは、基本長命令コードの命令フィールドと同じ位置で、処理内容が類似の即値類似レジスタの第２の命令フィールドと同一の値とし、基本長命令コードを処理する基本長モードと短縮長命令コードを処理する短縮長モードを切り換えるモード切り換え回路を設け、命令デコーダは、モードに応じて解読処理を変化させる。
【００１７】
ここで、短縮長モード時に、レジスタ命令検出回路が命令フィールドが特定の値であることを検出した時には、命令デコーダは、この命令コードを基本長命令コードとして処理するようにすれば、短縮命令を実行するモードにおいても、そのまま基本長命令が実行できるようになる。
【００１８】
【発明の実施の形態】
図６は、本発明の実施例における命令コードの構造を示す図であり、（１）が基本長命令を、（２）が短縮長命令を示し、それぞれ（ａ）がレジスタアドレッシング命令を、（ｂ）が即値アドレッシング命令を示す。図示のように、本実施例の命令コードにおいては、短縮長命令及び基本長の即値アドレッシング命令は、図４の従来の命令コードと同じ構造であり、異なるのは基本長のレジスタアドレッシング命令の構造である。基本長のレジスタアドレッシング命令では、上位６ビットの第１の命令フィールドＯＰ１の値が000000又は000100であり、従来例においては使用されなかった下位１１ビットに第２の命令フィールドＯＰ２と第３の命令フィールドＯＰ３が記載される。
【００１９】
図７は、実施例における基本長の即値アドレッシング命令のセットを示す図である。ここでは各命令の詳しい説明は省略するが、命令は４６個あり、空白の部分は対応する命令が規定されておらず、斜線の部分、すなわち000000と000100は基本長のレジスタアドレッシング命令であることを示す。
図８及び図９は、基本長のレジスタアドレッシング命令のセットを示す図である。図示のように、基本長のレジスタアドレッシング命令の第１の命令フィールドＯＰ１の値は000000又は000100であり、第２の命令フィールドＯＰ２の値により処理の内容が規定される。ここで重要なのが第２の命令フィールドＯＰ２の値は、類似の処理を行う基本長の即値アドレッシング命令の第１の命令フィールドＯＰ１の値と同じである点である。例えば、第１の命令フィールドＯＰ１の値が000010の基本長のレジスタアドレッシング命令の乗算命令ＭＵＬ（Ｒｓ１，Ｒｓ２，Ｒｄ）の第２の命令フィールドＯＰ２の値は110111であり、対応する基本長の即値アドレッシング命令ＭＵＬＩ（Ｒｓ１，＃１６，Ｒｄ）の第１の命令フィールドＯＰ１の値と同じである。また、第１の命令フィールドＯＰ１の値が000100の基本長のレジスタアドレッシング命令の加算命令ＡＤＤ（Ｒｓ１，Ｒｓ２，Ｒｄ）の第２の命令フィールドＯＰ２の値は001111であり、対応する基本長の即値アドレッシング命令ＡＤＤＩ（Ｒｓ１，＃１６，Ｒｄ）の第１の命令フィールドＯＰ１の値と同じである。
【００２０】
ここで、第１の命令フィールドＯＰ１の値が000000の基本長のレジスタアドレッシング命令についても、同様に、第２の命令フィールドＯＰ２の値は、類似の処理を行う基本長の即値アドレッシング命令の第１の命令フィールドＯＰ１の値と同じである。例えば、加算命令には、符号なし飽和処理付き３２ビット加算（ＡＤＤ）や、符号付き飽和処理付き３２ビット加算（ＡＤＤＳＳ）や、オペランドを上位と下位で１６ビットずつに分け、それぞれに符号付き飽和処理付きの１６ビット加算を同時に行う加算（ＡＤＤＨＳＳ）や、オペランドを上位と下位で１６ビットずつに分け、それぞれに符号なし飽和処理付きの１６ビット加算を同時に行う加算（ＡＤＤＨＵＳ）などの各種の加算処理がある。本実施例では、ＡＤＤは、第１の命令フィールドＯＰ１の値が000100の基本長のレジスタアドレッシング命令として規定し、ＡＤＤＳＳとＡＤＤＨＳＳとＡＤＤＨＵＳは、第１の命令フィールドＯＰ１の値が000000の基本長のレジスタアドレッシング命令として規定している。ＡＤＤＳＳとＡＤＤＨＳＳとＡＤＤＨＵＳの第２の命令フィールドＯＰ２の値は001111であり、第３の命令フィールドＯＰ３の値を異ならせることにより、これらの処理を識別している。このように、同じような処理であるが、処理内容が細部で異なる処理を第３の命令フィールドＯＰ３により規定している。
【００２１】
図７に示すように、第１の命令フィールドＯＰ１は６ビットであり、そこでは最大６４通りの命令を規定できる。従来は、この６４通りで、即値アドレッシング命令を規定していた。レジスタアドレッシング命令については、ＯＰ１とＯＰ２と合せて命令を規定していた。これに対して、本実施例では、４６通りの即値アドレッシング命令が規定され、７２通りのレジスタアドレッシング命令が規定されており、即値アドレッシング命令は６２通りまで（２つの値をレジスタアドレッシング命令に割り当てるとした場合）、レジスタアドレッシング命令は第２の命令フィールドＯＰ２だけで規定したとしても６２通り（000000と000100除くとする）規定することが可能であり、第３の命令フィールドＯＰ３も使用するとすれば更に３２倍のレジスタアドレッシング命令を規定することが可能である。
【００２２】
図１０は、短縮長命令の例を示す図であり、ここでは加算命令の例を示している。ここで重要なのは、短縮長命令の命令フィールドの値001111は、類似の処理を行う基本長の即値アドレッシング命令の第１の命令フィールドＯＰ１の値及び基本長のレジスタアドレッシング命令の第２の命令フィールドＯＰ２の値と同じである点である。また、上記のＡＤＤ、ＡＤＤＳＳ、ＡＤＤＨＳＳ及びＡＤＤＨＵＳのいずれの加算命令であるかは、９ビット目と５ビット目の値の組合せで規定している。なお、短縮長命令においては、演算対象の第１のレジスタＲｓ１と演算結果を格納する結果格納先レジスタＲｄは同じレジスタであり、Ｒｓ１／Ｒｄで指示されるレジスタの値に対して処理を行い、その処理結果を同じレジスタに格納する。
【００２３】
図１１と図１２は、本発明の実施例のプロセッサの命令制御機構の構成を示す図である。基本長命令を処理するモードであるか、短縮長命令を処理するモードであるかは、プログラム中の命令により、モードレジスタに所定の値をセットすることにより設定されるようになっている。いずれのモードにおいても、メモリから３２ビット分の命令コードが読み出され、命令保持用フリップフロップ（ＦＦ）４１と４２に一時的に保持される。命令保持用フリップフロップは、上位１６ビットを保持するＦＦ４１と下位１６ビットを保持するＦＦ４２で構成される。従って、基本長命令の場合には、第１の命令フィールドＯＰ１と第１の演算対象レジスタＲｓ１と格納先レジスタＲｄがＦＦ４１に保持され、第２の演算対象レジスタＲｓ２と第２の命令フィールドＯＰ２と第３の命令フィールドＯＰ３又は即値＃１６がＦＦ４２に保持され、短縮長命令の場合には、一方の命令フィールドＯＰとＲｓ／ＲｄとＲｓ２（又は即値＃４）がＦＦ４１に保持され、他方のＯＰと第１のレジスタＲｓ／Ｒｄと第２のレジスタＲｓ２（又は即値＃４）がＦＦ４２に保持される。
【００２４】
まず、基本長命令を処理するモード時の動作について説明する。ＯＰ１はデコーダ４３に入力され、その値が000100又は000000であるかが判定される。ＯＰ１が000100又は000000であればレジスタアドレッシング命令であり、000100と000000以外であれば即値アドレッシング命令である。デコーダ４３は、この判定結果とモード信号に従って命令モード信号を出力する。セレクタ４４には、ＯＰ１（ＦＦ４１のＯＰと同じ）、ＯＰ２、ＦＦ４２のＯＰが入力される。セレクタ４４は、命令モード信号に従って、レジスタアドレッシング命令であれば入力される信号のうちからＯＰ２を選択し、即値アドレッシング命令であればＯＰ１を選択して、命令デコーダ４５に出力する。前述のように、レジスタアドレッシング命令のＯＰ２と即値アドレッシング命令ＯＰ１は、類似の処理であれば同じ値であるから、命令デコーダ４５は最大６２通りの命令が識別できればよい。命令デコーダ４５は入力されるＯＰ１又はＯＰ２を解読して、演算器制御信号を出力する。
【００２５】
セレクタ５１には、ＦＦ４１のＲｓ１とＲｄとＲｓ１／Ｒｄ及びＦＦ４２のＲｓ１／Ｒｄが入力され、セレクタ５２には、ＦＦ４１のＲｓ２（＃４）及びＦＦ４２のＲｓ２とＲｓ２（＃４）が入力され、セレクタ５３には、ＦＦ４２の即値＃１６（Ｒｓ２とＯＰ２とＯＰ３）が入力される。セレクタ５１は、命令モード信号に従って、Ｒｓ１とＲｄをそれぞれレジスタ５５のアドレスデコーダＤ（Ｒｓ１）とＤ（Ｒｄ）に入力する。ここで、フリップフロップＦＦ５４は、基本長命令を実行するモードの場合には通過状態になる。同様に、セレクタ５２は、命令モード信号に従って、Ｒｓ２をレジスタ５５のアドレスデコーダＤ（Ｒｓ２）に入力する。更に、セレクタ５３は、命令モード信号に従って、ＦＦ４２の即値＃１６を選択してＦＦ５６に出力する。なお、図では命令モード信号のセレクタ５１、５２及び５３への配線を省略してある。
【００２６】
命令モード信号が基本長命令を示す時には、カウント値発生回路６８が４を発生し、それをプログラムカウンタ４７に印加する。プログラムカウンタ４７はＦＦ４８に保持された直前のプログラムカウント値にこの４を加えてプログラムカウンタの値を増加させる。また、セレクタ４９は、短縮長命令にのみ関係するセレクタであり、基本長命令には関係しない。デコーダ５０には、セレクタ４９の出力と命令モード信号の一部が入力される。デコーダ５０は、基本長命令の場合には、命令モード信号の一部を選択し、それをＲｓ２／即値選択信号として出力する。
【００２７】
図１２に示すように、レジスタ５５の読み書きポートＰ（Ｒｓ１）から出力された値は一方の内部バス６２に出力される。Ｒｓ２／即値選択信号に従って、レジスタ５５の読み書きポートＰ（Ｒｓ２）の出力とＦＦ５６の出力の一方が、他方の内部バス６１に出力される。演算器６３と６４は、内部バス６１と６２上の値に対して、命令デコーダ４５の出力する演算制御信号により指示された処理を行い、その結果を出力ポート６５と６６を介して更に別の内部バス６７に出力する。内部バス６７に出力された値は、適当なタイミングでレジスタ５５の読み書きポートＰ（Ｒｄ）に書き込まれる。
【００２８】
以上のようにして、レジスタアドレッシング命令の場合には、Ｒｓ１とＲｓ２で指示されたレジスタの値に対して演算が行われ、その結果がＲｄで指示されるレジスタに記憶され、即値アドレッシング命令の場合には、Ｒｓ１で指示されたレジスタの値と即値＃１６に対して演算が行われ、その結果がＲｄで指示されるレジスタに記憶される。
【００２９】
次に、短縮長命令を処理するモード時の動作について説明する。短縮長命令のＦＦ４１に保持されるＯＰはＯＰ１と同じビットであり、デコーダ４３に入力され、その値が000100又は000000であるかが判定される。ＯＰが000100又は000000であれば短縮長命令を処理するモード時であっても、基本長のレジスタアドレッシング命令であると判定され、上記の基本長命令用の処理が行われる。ただし、短縮長命令に基本長命令を混在させる場合には、基本長命令は４バイトの境界、すなわち、ＦＦ４１のＯＰ（ＯＰ１）に保持されるように制限されているものとする。ＯＰが000100又は000000でなければ短縮長命令であり、カウント値発生回路４９は２を発生して、プログラムカウンタ４７は２増加する。
【００３０】
デコーダ４３は、判定結果とモード信号に従って命令モード信号を出力する。セレクタ４４は、短縮長命令の場合には、プログラムカウンタ４７の出力をラッチしたＦＦ４８の出力の最下位のビットを判定して、ＦＦ４１のＯＰを選択すべきか、ＦＦ４２のＯＰを選択すべきかを判定して出力する。具体的には、ＦＦ４８の出力の最下位のビットが「０」の時にはＦＦ４１のＯＰを、「１」の時にはＦＦ４２のＯＰを選択する。上記のように、基本長のレジスタアドレッシング命令と判定された場合には、ＦＦ４１のＯＰ、すなわちＯＰ１を選択して出力する。命令デコーダ４５はセレクタ４５の出力を解読して演算制御信号を発生させる。前述のように、短縮長命令のＯＰとレジスタアドレッシング命令のＯＰ２は、類似の処理であれば同じ値であるから、命令デコーダ４５は基本長命令と同じ解読処理を行えばよい。
【００３１】
セレクタ５１は、短縮長命令で、ＦＦ４８の出力の最下位のビットが「０」の時には、ＦＦ４１のＲｓ１／Ｒｄをレジスタ５５のＤ（Ｒｓ１）に、「１」の時には、ＦＦ４２のＲｓ１／Ｒｄをレジスタ５５のＤ（Ｒｓ１）に出力する。同時に、セレクタ５１の出力は、ＦＦ５４で一旦保持された後、レジスタ５５のＤ（Ｒｄ）に入力される。これは、演算器６５と６６での処理後にその処理結果をＲｓ１／Ｒｄで指示される読み書きポートＰ（Ｒｄ）に書き込むためである。なお、基本長命令の場合には、セレクタ５１は、ＦＦ４１のＲｓ１とＲｄをそれぞれレジスタ５５のＤ（Ｒｓ１）とＤ（Ｒｄ）に出力する。
【００３２】
同様に、セレクタ５２は、短縮長命令で、ＦＦ４８の出力の最下位のビットが「０」の時には、ＦＦ４１のＲｓ２（＃４）をレジスタ５５のＤ（Ｒｓ２）に、「１」の時には、ＦＦ４２のＲｓ２（＃４）をレジスタ５５のＤ（Ｒｓ２）に出力する。基本長命令の場合には、セレクタ５２は、ＦＦ４２のＲｓ２をレジスタ５５のＤ（Ｒｓ２）に出力する。
【００３３】
また、セレクタ５３は、短縮長命令で、ＦＦ４８の出力の最下位のビットが「０」の時には、ＦＦ４１のＲｓ２（＃４）を、「１」の時には、ＦＦ４２のＲｓ２（＃４）をレジスタ５５のＤ（Ｒｓ２）に出力する。前述のように、基本長命令の場合には、セレクタ５３は、ＦＦ４２の＃１６を出力する。ただし、短縮長命令に基本長の即値アドレッシング命令を混在させることはできないので、短縮長命令を実行するモードで、セレクタ５３が＃１６を出力することは有り得ない。ＦＦ４２は、＃１６を保持して出力するので、短縮長命令の時には、Ｒｓ２（＃４）の上位に１２個の「０」を付加する。
【００３４】
図１０に示したように、短縮長命令では、９ビット目と５ビット目（２５ビット目と２０ビット目）が共に「０」の時が即値アドレッシング命令である。セレクタ４９は、２５ビット目、２０ビット目、９ビット目及び５ビット目の値、すなわち、図においてＦＦ４１とＦＦ４２で斜線で示した部分のビットが入力され、プログラムカウンタの値に応じて、２５ビット目と２０ビット目、９ビット目と５ビット目のいずれかを選択し、２つの値が共に「０」の時にＦＦ５６から出力される即値を選択し、「１」の時にレジスタ５５の読み書きポートＰ（Ｒｓ２）から出力されたＲｓ２で指示されるレジスタの値を選択するＲｓ２／即値選択信号を出力する。
【００３５】
後の処理は、基本長命令の場合と同じである。
ここで、短縮長命令では、すべての基本長命令を規定することができないため、プログラムサイズを小さくするために短縮長命令を使用している場合でも、短縮長命令セットで規定されない命令を使用する場合には、基本長命令を使用する必要がある。また、短縮長命令では、レジスタを指定するオペランドＲｓ１、Ｒｓ２及びＲｄのビット数が基本長命令より小さいため、基本長命令で使用できるレジスタをすべて使用することはできない。そのため、短縮長命令で使用できないレジスタを使用する場合には、基本長命令を使用する必要がある。本実施例では、上記の説明のように、短縮長命令を実行するモード時でも、第１の命令フィールドＯＰ１（ＦＦ４１に保持されるＯＰ）が000100又は000000である時には、自動的に基本長命令であると判定してそれに対応する処理が行われる。従って、短縮長命令を実行している途中で基本長命令（但し、レジスタアドレッシング命令のみ）を実行する場合にも、モードの切り換えを行う必要がなく、プログラムを簡単にできる。
【００３６】
【発明の効果】
以上のように、本発明によれば、命令コードの無駄を生ぜずに短縮長命令と基本長命令を混在させることができるため、プログラムサイズを効率よく圧縮することが可能になる。
また、短縮長命令モード中に、同一命令について基本長命令と短縮長命令を混在させることができるため、すべてのレジスタを有効に使用することができる。
【００３７】
更に、本発明では、命令デコーダは共通の処理内容であるため、その構成を非常に簡単にでき、パイプラインの段数を増加させる必要がなく、命令数を増加させてもデコーダのハードウエアの増加を最小限にすることができる。
【図面の簡単な説明】
【図１】レジスタ及び即値（イミーディエート）アドレッシングモードの命令コードの従来の構成例を示す図である。
【図２】プロセッサの命令制御機構の従来の構成例を示す図である。
【図３】短縮長命令を有する命令コードの従来の構成例（その１）を示す図である。
【図４】短縮長命令を有する命令コードの従来の構成例（その２）を示す図である。
【図５】短縮長命令を基本長命令に変換する従来の変換機構を示す図である。
【図６】本発明の実施例の命令コードの構造を示す図である。
【図７】実施例の基本長の即値アドレッシング命令の命令フィールドＯＰ１のセットを示す図である。
【図８】実施例の基本長のレジスタアドレッシング命令の命令フィールドのセットを示す図である。
【図９】実施例の基本長のレジスタアドレッシング命令の命令フィールドのセットを示す図である。
【図１０】実施例の短縮長命令の例を示す図である。
【図１１】実施例の命令制御機構の構成を示す図である。
【図１２】実施例の命令制御機構の構成を示す図である。
【符号の説明】
４１、４２…命令保持用フリップフロップ（ＦＦ）
４３…デコーダ
４４…セレクタ
４５…命令デコーダ
【図１】
0003781519.tif 000002
【図２】
0003781519.tif 000003
【図３】
0003781519.tif 000004
【図４】
0003781519.tif 000005
【図５】
0003781519.tif 000006
【図６】
0003781519.tif 000007
【図７】
0003781519.tif 000008
【図８】
0003781519.tif 000009
【図９】
0003781519.tif 000010
【図１０】
0003781519.tif 000011
【図１１】
0003781519.tif 000012
【図１２】
0003781519.tif 000013