(57)【特許請求の範囲】
【請求項１】
１６ビット固定長命令を処理するＣＰＵを有し、
前記固定長命令の命令セットには、アドレス空間に対するアドレス割り当ての最小単位である８ビットよりも小さなフィールドである４ビットのニブルフィールドを操作対象とする命令を含み、
前記ニブルフィールドを操作対象とする命令は、
ベースアドレスに対するニブルフィールドの位置を示す４ビットのオフセットデータの保有フィールド、
４ビットのイミディエイトデータの保有フィールド、及び
前記イミディエイトデータと前記オフセットデータで指定されるニブルフィールドの４ビットのニブルデータとを用いる演算操作を指定すると共に、前記ベースアドレスを保持する特定のレジスタを指定する８ビットのオペレーションコードの指定フィールドを含み、
前記演算操作は、オフセットデータの上位側３ビットをベースアドレスに加算したアドレスで８ビットのデータを取得し、取得したデータに対してオフセットデータの下位側１ビットでニブルフィールドを指定し、前記イミディエイトデータと前記ニブルフィールドのニブルデータとを演算し、その演算による演算結果を前記ニブルフィールドに書き戻す処理である、ことを特徴とするデータプロセッサ。
【請求項２】
前記イミディエイトデータと前記ニブルデータは同じビット数を有することを特徴とする、請求項１記載のデータプロセッサ。
【請求項３】
１６ビット固定長命令を処理するＣＰＵを有し、
前記固定長命令の命令セットには、アドレス空間に対するアドレス割り当ての最小単位である８ビットよりも小さなフィールドである４ビットのニブルフィールドを操作対象とする命令を含み、
前記ニブルフィールドを操作対象とする命令は、
ベースアドレスを保持するレジスタを指定する４ビットの指定フィールド、
ベースアドレスに対するニブルフィールドの位置を示す４ビットのオフセットデータの保有フィールド、及び
ニブルフィールドを用いる演算操作を指定すると共に、演算操作に用いる特定のレジスタを指定する８ビットのオペレーションコードの保有フィールドを含み、
前記演算操作は、オフセットデータの上位側３ビットをベースアドレスに加算したアドレスで８ビットのデータを取得し、取得したデータに対してオフセットデータの下位側１ビットでニブルフィールドを指定し、前記ニブルフィールドのニブルデータの値を判別し、判別結果に応じて前記特定のレジスタに対する操作を行った後、前記ニブルフィールドのニブルデータの値を変更して前記ニブルフィールドに書き戻す処理である、ことを特徴とするデータプロセッサ。
【請求項４】
１６ビット固定長命令を処理するＣＰＵを有し、
前記固定長命令の命令セットには、アドレス空間に対するアドレス割り当ての最小単位である８ビットよりも小さなフィールドである４ビットのニブルフィールドを操作対象とする命令を含み、
前記ニブルフィールドを操作対象とする命令は、
ベースアドレスに対するニブルフィールドの位置を示す４ビットのオフセットデータの保有フィールド、
ソースレジスタを指定する４ビットのソースレジスタ指定フィールド、及び
前記ベースアドレスを保持する特定のレジスタを指定すると共に、前記ソースレジスタとニブルフィールドを用いる演算操作を指定する８ビットのオペレーションコードの保有フィールド、を含み、
前記演算操作は、オフセットデータの上位側を３ビットベースアドレスに加算したアドレスで８ビットのデータを取得し、取得したデータに対してオフセットデータの下位側１ビットでニブルフィールドを指定し、前記ソースレジスタで指定されたデータと前記ニブルフィールドのニブルデータとを演算し、演算結果を前記ニブルフィールドの書き戻す処理である、ことを特徴とするデータプロセッサ。
【請求項５】
１６ビット固定長命令を処理するＣＰＵを有し、
前記固定長命令の命令セットには、アドレス空間に対するアドレス割り当ての最小単位である８ビットよりも小さなフィールドである４ビットのニブルフィールドを操作対象とする命令を含み、
前記ニブルフィールドを操作対象とする命令は、
ベースアドレスに対するニブルフィールドの位置を示す４ビットのオフセットデータの保有フィールド、
ディスティネーションレジスタを指定する４ビットのディスティネーションレジスタ指定フィールド、及び
前記ベースアドレスを保持する特定のレジスタを指定すると共に、前記ディスティネーションレジスタとニブルフィールドを用いる演算操作を指定する８ビットのオペレーションコードの保有フィールド、を含み、
前記演算操作は、オフセットデータの上位側３ビットをベースアドレスに加算したアドレスで８ビットのデータを取得し、取得したデータに対してオフセットデータの下位側１ビットでニブルフィールドを指定し、前記指定されたディスティネーションレジスタが保持するデータと前記オフセットデータで指定されるニブルフィールドのニブルデータとを演算し、その演算結果を前記ディスティネーションレジスタに書き戻す処理である、ことを特徴とするデータプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は固定長命令を処理するデータプロセッサに関し、特に、入出力制御レジスタや処理状態制御フィールドを操作する命令実行に係り、メモリ容量が制限されている組込みシステムに用いるデータプロセッサに適用して有効な技術に関する。
【０００２】
【従来の技術】
メモリ空間へアドレスを割り付ける単位サイズ（例えばバイト：８ビット）、および単位サイズの整数倍のサイズ（例えばワード：１６ビット）によるメモリアクセス命令を有する処理装置は従来より知られている。また、固定長命令を処理するデータプロセッサの命令として、インターフェース（１９９９年４月株式会社ＣＱ出版発行）第１０５頁に、１バイト（８ビット）メモリの内容と８ビットのイミディエイトデータを演算し、当該１バイトメモリへストアするベースレジスタ間接アドレシングモードによるバイトメモリ論理演算命令が示されている。この命令は例えば論理積演算を行う場合には、例えば“ＡＮＤ．Ｂ  ＃ｉｍｍ，＠（Ｒ０，ＧＢＲ）”と記述される。この命令コードは、８ビットのオペコードフィールド及び８ビットのイミディエイトデータフィールドから成り、演算対象の１バイトメモリはベースアドレスレジスタ（ＧＢＲ）が保有するベースアドレスと汎用レジスタ０番（Ｒ０）が保有するオフセット値によって指定される。
【０００３】
【発明が解決しようとする課題】
しかしながら、上記論理演算命令では、ベースアドレスをベースアドレスレジスタ（ＧＢＲ）にロードする命令を実行し、ベースアドレスに対するオフセット値を汎用レジスタ０番（Ｒ０）へロードする命令を実行した後でなければ、上記バイトメモリ論理演算命令を実行することができない。このように始めの１バイトのデータに対する論理演算処理には３命令を要し、同一ベースアドレスでアドレシングできる後続のバイトデータを演算する場合は、ベースアドレスレジスタへのロードは省略できるが、オフセットについては逐次汎用レジスタ０番の内容を変更する命令を実行しなければならないので、それでも演算処理毎に２命令を実行しなければならない。
【０００４】
このように従来のバイトメモリ論理演算命令では、当該演算命令以外にベースアドレス及びオフセットをレジスタへ設定する命令が必要であり、実行すべき命令数及び処理時間が増加する。
【０００５】
本発明者は更に、アドレス空間に対するアドレス割り当ての最小単位よりも小さなフィールドであるニブルフィールドを操作対象とする場合について検討した。この場合に、不要なデータビットをマスクして上記“ＡＮＤ．Ｂ  ＃ｉｍｍ，＠（Ｒ０，ＧＢＲ）”のような命令を用いることについて検討したが、その場合にもベースアドレス及びオフセットを夫々レジスタへ設定する命令が必要になることに変わりはない。
【０００６】
本発明の目的は、アドレス空間に対するアドレス割り当ての最小単位よりも小さなフィールドであるニブルフィールドを操作するために必要な命令数を減らすことができるデータプロセッサを提供することにある。
【０００７】
本発明の別の目的は、アドレス空間に対するアドレス割り当ての最小単位よりも小さなフィールドであるニブルフィールドに対する処理を高速化することができデータプロセッサを提供することにある。
【０００８】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【０００９】
【課題を解決するための手段】
〔１〕本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１０】
すなわち、固定長命令形式の命令コード内に、少なくとも、アドレス空間へアドレスを割当てる単位サイズよりも小さいビットフィールドであるニブルフィールドに対する操作内容を指定するオペコードフィールド及び前記ニブルフィールドに対するオフセットを指定するオフセットフィールドを設ける。更に前記命令コードには、固定命令長を満足する範囲で、演算処理内容に応じ、ニブルフィールドへのベースアドレスを指定するレジスタ番号フィールド、ニブルフィールドへの演算のためのソースオペランドを指定するイミディエイトデータフィールド、又はレジスタ番号フィールド等が配置されている。
【００１１】
上記より、命令には少なくともオフセットフィールドが配置されているから、複数のニブルフィールドに対する演算処理では、ベースアドレスが汎用レジスタに予め設定されば、そのベースアドレス共通の範囲では、各ニブルフィールドに対する操作を１命令で実行していくことが可能になる。
【００１２】
〔２〕本発明を更に詳述する。データプロセッサは固定長命令を処理するＣＰＵを有し、前記固定長命令の命令セットには、アドレス空間に対するアドレス割り当ての最小単位よりも小さなフィールドであるニブルフィールドを操作対象とする命令（以下単にニブル命令とも称する）を含む。
【００１３】
第１の態様のニブル命令（Ｏｐｃｏｄｅ  ＃ｉｍｍ，＠（ｏｆｆｓ，Ｒ０））は、ベースアドレスに対するニブルフィールドの位置を示すオフセットデータ（ｏｆｆｓ）の保有フィールド（２２）、イミディエイトデータ（ｉｍｍ）の保有フィールド（２１）、及び前記イミディエイトデータとニブルフィールドを用いる操作を指定するオペレーションコードの保有フィールド（２０）、を含む。
【００１４】
上記ニブル命令にはオフセットデータの保有フィールドとイミディエイトデータの保有フィールドが配置されているから、複数のニブルフィールドに対する演算処理では、ベースアドレスが汎用レジスタに予め設定されば、そのベースアドレス共通の範囲では、各ニブルフィールドに対するイミディエイトデータとの操作を１命令で実行していくことが可能になる。
【００１５】
ベースアドレスを保持するレジスタ（Ｒ０）を暗黙的に指示する情報を前記オペレーションコードに含めれば、ベースアドレスレジスタ選択の自由度は制限されるが、固定長命令という制限の下では他のフィールドを圧迫しない。
【００１６】
第１の態様のニブル命令は、例えば、イミディエイトデータとニブルフィールドのデータとを演算し、演算結果をニブルフィールドに格納する操作を指定する論理演算或は算術演算などの演算命令に適用してよい。
【００１７】
〔３〕第２の態様のニブル命令（Ｏｐｃｏｄｅ  ＠（ｏｆｆｓ，Ｒｂａｓｅ））は、ベースアドレス（ｂａｓｅ）を保持するレジスタ（Ｒｂａｓｅ）の指定フィールド（４１）、ベースアドレスに対するニブルフィールドの位置を示すオフセットデータ（ｏｆｆｓ）の保有フィールド（４２）、及びニブルフィールドを用いる操作を指定するオペレーションコードの保有フィールド（４０）を含み、前記オペレーションコードは操作対象とされるデータを暗黙的に指示する情報を含む。
【００１８】
上記ニブル命令ではベースアドレス及びオフセットで任意に指定されたニブルフィールドのデータに対してオペレーションコードによる暗黙値を用いた操作が可能であるから、個々のニブルフィールドに対する演算処理を１命令で実行していくことが可能になる。
【００１９】
第２の態様のニブル命令は、例えばニブルフィールドを前記暗黙的に指示するデータで初期化（例えば０クリア或はオール１セット）する操作を行う命令、或は、ニブルフィールドの論理値を判定し、その判定結果に応じた処理を行うテスト・アンド・セット命令等に適用してよい。
【００２０】
〔４〕第３の態様のニブル命令（Ｏｐｃｏｄｅ  Ｒｓｒｃ，＠（ｏｆｆｓ，Ｒ０））は、ベースアドレスに対するニブルフィールドの位置を示すオフセットデータ（ｏｆｆｓ）の保有フィールド（５２）、ソースレジスタ（Ｒｓｒｃ）を指定するソースレジスタ指定フィールド（５１）、及び前記ソースレジスタ指定フィールドとニブルフィールドを用いる操作を指定するオペレーションコードの格納フィールド（５０）、を含む。
【００２１】
第１の態様におけるイミディエイトデータに代えてソースレジスタ指定フィールドを有するから、複数のニブルフィールドに対する演算処理では、ベースアドレスが所定のレジスタに予め設定されば、そのベースアドレス共通の範囲では、各ニブルフィールドとソースフィールドとを用いる操作を１命令で実行していくことが可能になる。
【００２２】
第４の態様のニブル命令（Ｏｐｃｏｄｅ  ＠（ｏｆｆｓ，Ｒ０），Ｒｄｓｔ）は、ベースアドレスに対するニブルフィールドの位置を示すオフセットデータ（ｏｆｆｓ）の格納フィールド（５２）、ディスティネーションレジスタ（Ｒｄｓｔ）を指定するディスティネーションレジスタ指定フィールド（５１）、及び前記ディスティネーションレジスタ指定フィールドとニブルフィールドを用いる操作を指定するオペレーションコードの保有フィールド（５０）を含む。
【００２３】
第１の態様におけるイミディエイトデータに代えてディスティネーションレジスタ指定フィールドを有するから、複数のニブルフィールドに対する演算処理では、ベースアドレスが所定のレジスタに予め設定されば、そのベースアドレス共通の範囲では、各ニブルフィールドとディスティネーションレジスタとを用いる操作を１命令で実行していくことが可能になる。
【００２４】
第３、第４の態様において、ベースアドレスを保持するレジスタを暗黙的に指示する情報を前記オペレーションコードに含めれば、ベースアドレスレジスタ選択の自由度は制限されるが、固定長命令という制限の下では他のフィールドを圧迫しない。
【００２５】
第３の態様のニブル命令は、前記ソースレジスタ指定フィールドで指定されるデータとニブルフィールドのデータとを演算し、演算結果をニブルフィールドに格納する演算命令に適用してよい。同様に、第４の態様のニブル命令は、前記ディスティネーションレジスタ指定フィールドで指定されるフィールドのデータとニブルフィールドのデータとを演算し、演算結果を前記ディスティネーションレジスタ指定フィールドで指定されるフィールドに格納する演算命令に適用してよい。
【００２６】
前記第３の態様のニブル命令は、前記ソースレジスタ指定フィールドで指定されるデータをニブルフィールドにストアするストア命令に、また、第４の態様のニブル命令は、前記ニブルフィールドのデータを前記ディスティネーションレジスタ指定フィールドで指定されるフィールドにロードするロード命令に適用してよい。
【００２７】
〔５〕第５の態様として、ニブル命令の実行において、アクセス単位よりも小さなニブルデータをアクセス単位のデータから切出すためのインデックス動作に着目する。前記アドレス空間に対するアドレス割り当ての最小単位は２ｎビット（ｎ＞０）であり、前記ニブルフィールドは２ｉビット（ｉ＜ｎ）であり、前記オフセットデータの格納フィールドは２ｍビット（ｍ＜ｎ）であるとする。このとき、前記ＣＰＵは、前記ニブルフィールドを操作対象とする命令を実行するとき、前記ベースアドレスにオフセットデータの上位側の２ｍ−（ｎ−ｉ）ビットを加算したアドレスを前記アドレス空間に対するアクセスアドレスとし、前記オフセットデータの下位側のｎ−ｉビットをアドレス割り当ての最小単位内におけるニブルフィールド対応データのインデックス情報として利用する。
【００２８】
前記ＣＰＵは、前記ニブルフィールドを操作対象とする命令を実行するとき、前記ニブルフィールド対応データを含むアクセス単位のデータ中におけるニブルフィールド対応データ以外を０拡張又は符号拡張して、アクセス単位を最小のデータ処理単位として演算処理を行えばよい。
【００２９】
例えば、１６ビット固定長命令を想定したとき、上記第１乃至第４の態様において、前記アドレス空間に対するアドレス割り当ての最小単位をバイト、前記ニブルフィールドを４ビット、前記オフセットデータの格納フィールドを４ビットとする。この条件におけるアクセス最小単位であるバイトに対する４ビットニブルデータのインデックスを行うために、前記ＣＰＵは、前記ベースアドレスにオフセットデータの上位３ビットを加算したアドレスを前記アドレス空間に対するアクセスアドレスとし、前記オフセットデータの最下位ビットの第１論理値に応答して、前記アクセスアドレスに応ずるアクセスデータの下位４ビットをニブルフィールドのデータとし、前記オフセットデータの最下位ビットの第２論理値に応答して、前記アクセスアドレスに応ずるアクセスデータの上位４ビットをニブルフィールドのデータとして処理すればよい。
【００３０】
具体的には、メモリ又はメモリマップドレジスタからのリードデータの処理に関し、前記ＣＰＵは、前記ベースアドレスにオフセットデータの上位３ビットを加算したアドレスを前記アドレス空間に対するアクセスアドレスとし、前記オフセットデータの最下位ビットの第１論理値に応答して、前記アクセスアドレスからリードしたアクセスデータの下位４ビットをニブルフィールドのデータとして抽出し、前記オフセットデータの最下位ビットの第２論理値に応答して、前記アクセスアドレスからリードしたアクセスデータの上位４ビットをニブルフィールドのデータとして抽出し、抽出したニブルフィールドのデータ配置をバイトデータの下位４ビット又は上位４ビットの一方に揃えて処理すればよい。
【００３１】
アライニングされたデータの処理に際し、前記ＣＰＵは、前記アクセスアドレスでリードしたアクセスデータにおける４ビットのニブルフィールドのデータ以外のデータビットを論理値０に拡張し、或はその最上位ビットの符号で符号拡張して、演算を行う。
【００３２】
そして、メモリ又はメモリマップドレジスタへのライトデータの処理に関し、前記ＣＰＵは、前記ベースアドレスにオフセットデータの上位３ビットを加算したアドレスを前記アドレス空間に対するアクセスアドレスとし、前記オフセットデータの最下位ビットの第１論理値に応答して、前記アクセスアドレスにライトすべきアクセスデータの下位４ビットにニブルフィールドに格納すべきデータを配置し、前記オフセットデータの最下位ビットの第２論理値に応答して、前記アクセスアドレスにライトすべきアクセスデータの上位４ビットにニブルフィールドに格納すべきデータを配置し、ニブルフィールドに格納すべきデータを配置したアクセスデータを前記アクセスアドレスにライトすればよい。
【００３３】
【発明の実施の形態】
《ＣＰＵ》
図５には本発明に係るデータプロセッサの一例としてシングルチップのマイクロコンピュータが示される。同図に示されるマイクロコンピュータ１は、特に制限されないが、単結晶シリコンのような１個の半導体基板（半導体チップ）にＣＭＯＳ集積回路製造技術により形成される。
【００３４】
マイクロコンピュータ１は、演算制御装置としてのＣＰＵ（中央処理装置）２、ＲＡＭ３、バスステートコントローラ（ＢＳＣ）４、及びその他の内蔵回路を総称するその他モジュール７を有する。その他モジュール７としてマスクＲＯＭ８、割り込みコントローラ（ＩＮＴＣ）９、タイマ（ＴＭＲ）１０、入出力ポート（Ｉ／Ｏ）１１及びシリアルインタフェースコントローラ（ＳＣＩ）１２等を有する。それら回路モジュールはバスＩＡＢ，ＩＤＢ，ＰＡＢ，ＰＤＢ，ＣＯＮＴを介してインタフェースされる。
【００３５】
前記バスＩＡＢ，ＩＤＢは情報伝送速度の比較的速い内部アドレスバス、内部データバスである。前記バスＰＡＢ，ＰＤＢは情報伝送速度が比較的遅い周辺アドレスバス、周辺データバスである。バスＣＯＮＴはバスアクセス制御信号やタイミング制御信号等を伝達する制御信号線を総称する。内部バスＩＤＢ，ＩＡＢと周辺バスＰＤＢ，ＰＡＢとの動作速度の相違若しくはアクセス対象に固有のアクセス形態の相違に対して前記ＢＳＣ４がアクセス動作タイミング等を最適制御すると共に、前記ＢＳＣ４はアクセスアドレスに応じたチップ選択若しくはモジュール選択制御等も行なう。
【００３６】
前記ＣＰＵ２は、特に制限されないが、マスクＲＯＭ８又はＲＡＭ３から命令をフェッチし、フェッチした命令を解読して実行する。ＲＡＭ３はＣＰＵ２のワーク領域若しくはデータ又はプログラムの一時記憶領域とされる。前記マスクＲＯＭ８はプログラム又はデータテーブルなどの記憶領域とされる。割り込みコントローラ１０はマイクロコンピュータ１の外部から与えられる割込要求又はマイクロコンピュータ１内部の状態に応じて内蔵回路モジュールから発生される割込要求を受け、割り込み優先度及び割り込みマスク等に従って割込要求の受付を調停する。割込要求が受付けられると、ＣＰＵ２に割込み信号ＩＲＱが与えられ、割り込みベクタによって割り込み要因がＣＰＵ２に与えられる。ＣＰＵ２は割り込みベクタによって指示されるプログラムに処理を分岐する。Ｉ／Ｏ１１は外部アドレスバス及び外部データバスへの接続、ＳＣＩ１２の外部インタフェース、ＴＭＲ１０の外部イベント信号入力等に用いられる。
【００３７】
ＣＰＵ２のアドレス空間はＲＡＭ３やマスクＲＯＭ等が配置されるメモリ空間及びメモリマップドレジスタ空間とされる。メモリマップドレジスタ空間には、前記ＳＣＩ１２、ＴＭＲ１０、Ｉ／Ｏ１１等の周辺回路モジュール等の制御レジスタなどが配置される。
【００３８】
図６には前記ＣＰＵ２の具体例が示される。ＣＰＵ２は、特に制限されないが、シフタＳＦＴ及び算術論理演算器ＡＬＵ等の演算器と、３２ビットの汎用レジスタＲ０〜Ｒ３１、プログラムカウンタＰＣ、コンディションコードレジスタＣＣＲ及びテンポラリレジスタＴＲ等のレジスタ群、そしてリードデータバッファＲＤＢ、ライトデータバッファＷＤＢ及びアドレスバッファＡＢなどのバッファ回路を実行部に有し、それらは第１乃至第３内部バスＩＢ１〜ＩＢ３のうちの所定の内部バスに接続される。ＣＰＵ２は命令制御部として、命令レジスタＩＲ、命令デコーダＩＤＥＣ、命令シーケンスロジックＩＮＴＬを有する。
【００３９】
前記リードデータバッファＲＤＢは例えば３２ビットのデータバスＩＤＢから入力したデータを内部バスＩＢ２に供給するが、後述のニブル命令等を実行するとき、非着目ビットをマスキングするためのセレクタＳＥＬ及び拡張器ＥＸＴに接続される。セレクタＳＥＬは、リードデータバッファＲＤＢの下位バイトの上位４ビット又は下位４ビットを選択して拡張器ＥＸＴに出力する。拡張器ＥＸＴは、入力された４ビットよりも上位のビットを論理値“０”拡張して内部バスＩＢ２に出力し、或は、入力された４ビットの最上位ビットでそれより上位のビットを符号拡張して内部バスＩＢ２に出力する。
【００４０】
前記プログラムカウンタＰＣは次に実行すべき命令アドレスを保有し、その命令アドレスがアドレスバッファＡＢから内部アドレスバスＩＡＢに出力されると、ＲＡＭ３等の対応アドレスからリードされた命令が内部データバスＩＤＢを介して命令レジスタＩＲにフェッチされる。命令デコーダＩＤＥＣは命令レジスタＩＲの命令を解読して、ＣＰＵ２内部の制御信号を生成して、前記実行部による演算処理を制御する。命令シーケンスロジックＩＮＴＬは割込み信号ＩＲＱ等に応答して命令実行順序を変更する制御を行なう。
【００４１】
《第１形態のニブル命令》
図１には前記ＣＰＵの命令セットに含まれるニブル命令の第１形態が例示される。
【００４２】
ＣＰＵ２の命令セットは、固定長、例えば１６ビット固定長であり、マイクロコンピュータはＲＩＳＣ（Reduced Instruction Set Computer）型として位置付けられる。図１に示す命令の全体は１６ビットであり、その内の２０は８ビットのオペコードフィールド、２１は４ビットのイミディエイトデータフィールド、２２は４ビットのオフセットフィールドである。オペコードフィールド２０は複数のニブル命令毎にオペレーションコード（ｏｐｃｏｄｅ）が予め割付けられる。イミディエイトデータフィールド２１はイミディエイトデータ（ｉｍｍ）を保有する。オフセットフィールド２２はベースアドレスに対するニブルフィールドの位置を示すオフセットデータ（ｏｆｆｓ）を保持する。イミディエイトデータフィールド２１およびオフセットフィールド２２はプログラムされることになる。ベースアドレスレジスタにはそのオペコードフィールド２０のオペレーションコード（ｐｏｃｏｄｅ）によって暗黙的に汎用レジスタ０番（Ｒ０）が指定される。
【００４３】
第１形態のニブル命令をニーモニックで表せば、“Ｏｐｃｏｄｅ  ＃ｉｍｍ，＠（ｏｆｆｓ，Ｒ０）となる。ＣＰＵ２はこの１６ビットの命令コードを解読し、実行する。実行の手順は、汎用レジスタ０番（Ｒ０）の内容であるベースアドレスと命令コード中のオフセット（ｏｆｆｓ）によりニブルフィールドのニブルデータを読み込み、読み込んだニブルデータ（４ビット）とイミディエイトデータ（４ビット）とを演算し、演算結果をメモリ中の当該ニブルフィールドへストアする。この形態のニブル命令による具体的な演算は、例えば論理積や論理和のような論理演算、或は算術演算などである。
【００４４】
図２に前記第１形態のニブル命令の一例としてニブル論理積命令による実行内容が例示される。３０はＣＰＵのアドレス空間におけるメモリ空間を抽象的に表現する。図においてこのメモリ空間３０の左側には、１６進数表記でメモリアドレスが示され、メモリ空間３０の右側には、０ｘ１０００番地をベースアドレスとしたニブルフィールド列のオフセットが示されている。図２において、３１はバイト情報たとえばニブル論理積命令の格納領域、３２は４ビットのニブルフィールドである。図２において、ニブル論理積命令はニーモニックで表せば“Ａｎｄ  ＃３，＠（２，Ｒ０）”とされ、イミディエイトデータは２進表記でＢ’００１１（＝３）、オフセットはＢ’００１０（＝２）とされ、ベースアドレスレジスタは暗黙的に汎用レジスタ０番（Ｒ０）とされる。汎用レジスタ０番（Ｒ０）はベースアドレスとして０ｘ１０００を保有する。
【００４５】
ＣＰＵ２のアドレス空間では１バイト（８ビット）単位にアドレスが割り付けられており、バイトデータ３１の番地は０ｘ１０００、次のバイトの番地は０ｘ１００１である。ベースアドレスを０ｘ１０００とするとニブルフィールド３２のオフセットは２（＝Ｂ’００１０）である。命令中のニブルオフセットは４ビットなので、第１形態のニブル命令では１つのベースアドレスによりオフセット０から１５までの連続した１６個のニブルフィールドを指定することができる。
【００４６】
ＣＰＵ２が図２のニブル論理積命令を実行する手順を説明する。実行前のニブルフィールド３２が保有する値を例えば９（＝Ｂ’１００１）とし、汎用レジスタ０番（Ｒ０）の内容は１６進数の０ｘ１０００とする。
【００４７】
ステップ１として、ニブル論理積命令３１が命令レジスタＩＲに読みこまれ、命令デコーダＩＤＥＣで解読され、その命令コードがニブル論理積命令であることが認識される。
【００４８】
第２ステップとして、命令コード中のオフセットフィールド（４ビット）の上位３ビットの内容１（Ｂ’００１）と汎用レジスタ０番の内容０ｘ１０００を加算し、加算結果（０ｘ１００１）がメモリアクセスアドレスとしてアドレスバッファＡＢにセットされる。
【００４９】
第３ステップとして、前記メモリアクセスアドレス０ｘ１００１の１バイトをメモリから読み出し、このときのニブル論理積命令３１におけるニブルオフセットフィールの下位１ビットが“０”なので、今読み出した１バイトの下位４ビットを演算対象のニブルデータとする。ここでニブルオフセットフィールドの下位１ビットが“１”の場合には読み出した１バイトの上位４ビットを演算対象のニブルデータとする。つまりニブルオフセットの下位１ビットは１バイト内の上位４ビットか下位４ビットかを示すニブルインデックスとして機能される。このニブルインデックス処理を図６を参照して更に詳述する。前記メモリアクセスアドレス０ｘ１００１の１バイトを読み出してリードデータバッファＲＤＢに入力される。このとき、ニブルオフセットフィールの下位１ビットの内容が“０”のときは、セレクタＳＥＬで、今読み出した１バイトの下位４ビットを演算対象のニブルデータとして拡張器ＥＸＴに出力する。ニブルオフセットフィールドの下位１ビットが“１”の場合は読み出した１バイトの上位４ビットを演算対象のニブルデータとして拡張器ＥＸＴに出力する。
【００５０】
第４ステップとして、拡張器ＥＸＴは、４ビットのニブルデータを最下位に配置し、それよりも上位のビットを、論理値０に拡張し、拡張されたバイトデータがテンポラリレジスタＴＲに内部転送される。符号付き算術論理演算の場合には０拡張に代えて、そのニブルデータの最上位ビットの符号で符号拡張を行えばよい。
【００５１】
第５ステップとして、テンポラリレジスタＴＲなどにロードされたニブルデータ（値９）と命令３１中のイミディエイトデータ（値３）を論理積演算し、その演算結果がテンポラリレジスタＴＲに保持される。
【００５２】
第６ステップとして、テンポラリレジスタＴＲの保持値がライトデータバッファＷＤＢに内部転送され、そのバイトデータが前記メモリアクセスアドレス０ｘ１００１のニブルフィールドに書き込まれる。ニブルフィールドへの書き戻しに際して、書き込み単位であるバイトデータのうち、ニブルフィールド以外のビットを前の状態に維持させるには、最初にリードデータバッファＲＤＢに読み込んだニブルデータを含むバイトデータの当該ニブルデータの部分を論理値“０”として別のレジスタに退避させおく。そして、論理積演算後のニブルデータを含むバイトデータと、その退避データとの論理和を演算し、演算された論理和データをライトデータバッファＷＤＢを介する前記メモリアクセスアドレス０ｘ１００１への書き込み対象にすればよい。
【００５３】
ニブルフィールドがバイトデータの上位４ビットに配置されている場合にはニブルオフセットフィールドの下位１ビットが論理値“１”であり、このときは論理演算に際して当該ニブルデータは“０”拡張又は符号拡張されたバイトデータの下位４ビットに配置されて処理されるから、演算結果をニブルデータフィールドに書き戻すときは、演算結果の４ビットニブルデータの配置を下位から上位に変更してから、ニブルデータフィールドへの書き込みが行われる。
【００５４】
上記ニブル命令にはオフセットデータの格納フィールド２２とイミディエイトデータの格納フィールド２１が配置されているから、複数のニブルフィールドに対する演算処理では、ベースアドレスが汎用レジスタに予め設定されば、そのベースアドレス共通の範囲では、各ニブルフィールドに対するイミディエイトデータとの操作を１命令で実行していくことが可能になる。
【００５５】
ベースアドレスを保持するレジスタを暗黙的に指示する情報が前記オペレーションコード（ｐｏｃｏｄｅ）に含まれれば、ベースレジスタ選択の自由度は制限されるが、固定長命令という制限の下では他のフィールドを圧迫しない。
【００５６】
《第２形態のニブル命令》
図３には前記ＣＰＵの命令セットに含まれるニブル命令の第２形態が例示される。図３において４０は８ビットのオペコードフィールド、４１はベースアドレスレジスタを指定する４ビットのレジスタ番号フィールド、４２はニブルオフセットを指定する４ビットのオフセットフィールドである。前記オペコードフィールド４０はオペレーションコード（ｏｐｃｏｄｅ）を保持し、ベースアドレスレジスタ番号フィールド４１はベースアドレスが設定されるベースアドレスレジスタ（汎用レジスタ）の番号を保持し、オフセットフィールド４２はベースアドレスに対するニブルフィールドの位置を相対的に示すオフセットデータ（ｏｆｆｓ）を保持する。
【００５７】
第１形態のニブル命令ではベースアドレスレジスタはオペレーションコードで暗黙的に指定される一つの汎用レジスタ０番（Ｒ０）に固定されるが、図３の第２形態のニブル命令では、ベースアドレスレジスタ番号フィールド４１を有し、そのフィールドに、複数の汎用レジスタの中から１つの汎用レジスタを任意に指定できるようにされている。また、第１形態のニブル命令ではオペレーションコードによる操作の対象としてイミディエイトデータを有していたが、第２形態では、オペレーションコードは自らが操作対象とするデータを暗黙的に指示する情報を含んでおり、この情報が命令デコーダで解読されることにより、暗黙指定のデータが生成されるようになっている。前記バイト内のニブルインデックス処理に関しては図１と同様であるからその詳細な説明は省略する。
【００５８】
図３の第２形態のニブル命令をニーモニックで表せば、“Ｏｐｃｏｄｅ  ＠（ｏｆｆｓ，Ｒｂａｓｅ）となる。Ｒｂａｓｅはベースアドレスレジスタ番号フィールド４１で指定したベースアドレスレジスタ番号（汎用レジスタ番号）を意味する。
【００５９】
上記第２形態のニブル命令では、ベースアドレスレジスタ番号フィールド４１で指定されたベースアドレス及びオフセットフィールド４１で指定されたオフセットｏｆｆｓにより特定されるニブルフィールドのデータに対し、オペレーションコード（ｐｏｃｏｄｅ）による暗黙指定データを用いた操作が可能である。よって、個々のニブルフィールドに対する演算処理を１命令で実行していくことが可能になる。
【００６０】
図３の第２形態のニブル命令は、メモリ中のニブルフィールド（４ビット）の全ビットを“０”に設定するクリア処理や、逆に全ビットを“１”に設定するセット処理を行う命令に適用することができる。上記クリアやセットに用いる値“１”、“０”はオペレーションコードが暗黙的に指定する暗黙データである。要するに、ベースアドレス及びオフセットで任意に指定されたニブルフィールドのデータに対して、オペレーションコードが指定する暗黙データを用いた操作が可能になる。
【００６１】
また、第２形態のニブル命令はテスト・アンド・セットのような命令にも適用可能である。すなわち、前記オペレーションコード（ｏｐｃｏｄｅ）は、４ビットのニブルデータの値を判定し、判定結果が“０”であればコンディションコードレジスタＣＣＲのＴ（トゥルー）ビットに論理値“１”をセットし、“０”でなければＴビットに論理値“０”をセットし、その後、４ビットのニブルデータの最上位ビットを“１”にセットしてから、ニブルフィールドに書き戻す、リード・モディファイ・ライトの操作を行う。要するに、オペレーションコード（ｏｐｃｏｄｅ）は、ニブルフィールドからリードしたニブルデータの論理値を判定し、判定結果に応じて前記暗黙指定のデータを用いた操作を行う。このテスト・アンド・セット命令をニーモニックで表すと、ＴＡＳ．Ｂ＠（ｏｆｆｓ，Ｒｂａｓｅ）のように記述できる。
【００６２】
《第３形態、第４形態のニブル命令》
図４には前記ＣＰＵの命令セットに含まれるニブル命令の第３形態及び第４形態が例示される。例えばニブル命令の第３の命令形態をニーモニックで表せば、“Ｏｐｃｏｄｅ  Ｒｓｒｃ，＠（ｏｆｆｓ，Ｒ０）となり、ニブル命令の第４の命令形態をニーモニックで表せば、“Ｏｐｃｏｄｅ  ＠（ｏｆｆｓ，Ｒ０），Ｒｄｓｔとなる。Ｒｓｒｃはソースレジスタとして機能される汎用レジスタ番号、Ｒｄｓｔはディスティネーションレジスタとして機能される汎用レジスタ番号を示す。ｏｆｆｓは前述同様のベースアドレスに対するオフセット、Ｒ０はオペレーションコード（ｏｐｃｏｄｅ）で暗黙指定される汎用レジスタ０番のレジスタ（Ｒ０）を意味し、そのレジスタＲ０の値はベースアドレスとして用いられる。
【００６３】
図４において、第３形態及び第４形態のニブル命令において、５０は８ビットのオペコードフィールド、５１はソースオペランドレジスタ（Ｒｓｒｃ）またはデスティネーションレジスタ（Ｒｄｓｔ）を指定する４ビットのレジスタ番号フィールド、５２はニブルオフセット（ｏｆｆｓ）を指定する４ビットのオフセットフィールドである。
【００６４】
オペコード５０及びオフセットフィールド５２は、それぞれ図１のニブル命令形式のオペコードおよびオフセットフィールドと同様の意義を有する。図４のニブル命令形式でも、ニブルデータに対するベースアドレスレジスタはオペレーションコードにより暗黙的に汎用レジスタ０番（Ｒ０）が指定される。図１のニブル命令形式では演算のソースオペランドの一方をイミディエイトデータ（ｉｍｍ）で指定するが、図４の第３の形態の命令では、レジスタ番号フィールド５１によりソースオペランドを格納するソースオペランドレジスタ（Ｒｓｒｃ）を指定する。また図１の命令形式では演算結果はアドレス空間中のニブルフィールドへストアされるが、図４の第４形態の命令では、レジスタ番号フィールド５１で指定されるディスティネーションレジスタ（Ｒｄｓｔ）としての汎用レジスタへ格納することも可能である。即ち、図４の第３形態のニブル命令は、ＣＰＵのアドレス空間に配置されたニブルフィールドのニブルデータと、ＣＰＵ内の汎用レジスタに保持されたニブルデータとを演算し、演算結果をニブルフィールドへストアする演算命令として位置付けることができる。図４の第４形態のニブル命令は、ＣＰＵのアドレス空間に配置されたニブルフィールドのニブルデータと、ＣＰＵ内の汎用レジスタに保持されたニブルデータとを演算し、演算結果をその汎用レジスタのニブルフィールドへ格納する演算命令として位置付けることができる。汎用レジスタ中のニブルフィールドは例えば下位４ビットに固定される。前記バイト内のニブルインデックス処理に関しては図１と同様であるからその詳細な説明は省略する。
【００６５】
また、前記第３形態のニブル命令は、レジスタ番号フィールド５１により指定されるソースオペランドレジスタ（Ｒｓｒｃ）のデータを、ニブルフィールドにストアする、ニブルデータのストア命令にも適用可能である。また、第４形態のニブル命令は、前記ニブルフィールドのニブルデータをレジスタ番号フィールド５１により指定されるディスティネーションレジスタ（Ｒｄｓｔ）としての汎用レジスタにロードするロード命令に適用可能である。
【００６６】
第３形態のニブル命令によれば、第１の態様におけるイミディエイトデータに代えてソースレジスタ指定フィールドを有するから、複数のニブルフィールドに対する演算処理では、ベースアドレスが所定のレジスタに予め設定されば、そのベースアドレス共通の範囲では、各ニブルフィールドとソースレジスタとを用いる操作を１命令で実行していくことが可能になる。
【００６７】
第４形態のニブル命令によれば、第１の態様におけるイミディエイトデータに代えてディスティネーションレジスタ指定フィールドを有するから、複数のニブルフィールドに対する演算処理では、ベースアドレスが所定のレジスタに予め設定されば、そのベースアドレス共通の範囲では、各ニブルフィールドとディスティネーションレジスタとを用いる操作を１命令で実行していくことが可能になる。
【００６８】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００６９】
例えば、上記各形態のニブル命令において、命令コード中のフィールドの順番は任意である。ニブル命令以外の命令形式と調和が取れた順番を採用するのが望ましい。
【００７０】
また、上記では１６ビット固定長命令形式を前提にしたが、３２ビット固定長命令形式でも同様な命令を定義可能である。１６ビット固定長命令形式でも場合によっては同じだが、特に３２ビット固定長命令形式では命令コード中の各フィールドを長くすることが可能ならそうした方がよい。特にニブルオフセットフィールドを長くすれば１つのベースアドレスでより多くのニブルフィールドを指定でき、ベースアドレスを格納するレジスタの個数、及びベースアドレスを設定する命令を削減できる。
【００７１】
また長さの異なる複数種類のニブルフィールドを定義してもよい。例えば、２ビットニブル用のニブル命令および４ビットニブル用の命令を定義する。２ビットニブル命令でのアドレッシングはニブルオフセットフィールドの下位２ビットをバイト内インデックスとすればよい。
【００７２】
マイクロコンピュータにオンチップされる回路モジュールは図５に限定されず適宜変更可能である。例えばディジタル信号処理プロセッサや浮動小数点演算ユニットを採用し、或はフラッシュメモリなどの電気的に書き込み可能な不揮発性メモリを搭載してもよい。
【００７３】
以上の説明では主として本発明者によってなされた発明をその背景となった利用分野であるシングルチップのマイクロコンピュータに適用した場合について説明したが、本発明はそれに限定されず、プログラムＲＯＭを内蔵しないマイクロプロセッサ等の種々の形態のデータプロセッサに広く適用することができる。
【００７４】
【発明の効果】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【００７５】
すなわち、固定長命令形式のニブル命令コード内に、少なくとも、アドレス空間へアドレスを割当てる単位サイズよりも小さいビットフィールドであるニブルフィールドに対する操作内容を指定するオペコードフィールド及びこのニブルフィールドに対するオフセットを指定するオフセットフィールドを設けるから、複数のニブルフィールドに対する演算処理では、ベースアドレスが所定レジスタに予め設定されば、そのベースアドレス共通の範囲では、各ニブルフィールドに対する操作を１命令で実行していくことが可能になる。
【００７６】
したがって、ニブルフィールドを操作するためにデータプロセッサが実行すべき命令数を減らすことができ、また、データプロセッサによるニブルフィールドに対する処理を高速化することができる。
【図面の簡単な説明】
【図１】ニブル命令の第１形態を例示する説明図である。
【図２】図１のニブル命令の一例としてニブル論理積命令による実行内容を例示する説明図である。
【図３】ニブル命令の第２形態を例示する説明図である。
【図４】ニブル命令の第３形態及び第４形態を例示する説明図である。
【図５】本発明に係るデータプロセッサの一例であるシングルチップのマイクロコンピュータを示すブロック図である。
【図６】図５のマイクロコンピュータに搭載されるＣＰＵの具体例を示すブロック図である。
【符号の説明】
１  マイクロコンピュータ
２  ＣＰＵ
３  ＲＡＭ
８  マスクＲＯＭ
ＲＤＢ  リードデータバッファ
ＳＥＬ  セレクタ
ＥＸＴ  拡張器
ＷＤＢ  ライトデータバッファ
Ｒ０〜Ｒ３１  汎用レジスタ
ＣＣＲ  コンディションコードレジスタ
２０  オペコードフィールド
２１  イミディエイトデータフィールド
２２  オフセットフィールド
ｏｐｃｏｄｅ  オペレーションコード
ｉｍｍ  イミディエイトデータ
ｏｆｆｓ  オフセット
３０  ＣＰＵのアドレス空間
３２  ニブルフィールド
４０  オペコードフィールド
４１  レジスタ番号フィールド
４２  オフセットフィールド
Ｒｂａｓｅ  ベースアドレスレジスタ番号
５０  オペレーションコードフィールド
５１  レジスタ番号フィールド
５２  オフセットフィールド
Ｒｓｒｃ  ソースレジスタ番号
Ｒｄｓｔ  ディスティネーションレジスタ番号
【図１】
0004748630.tif 000002
【図２】
0004748630.tif 000003
【図３】
0004748630.tif 000004
【図４】
0004748630.tif 000005
【図５】
0004748630.tif 000006
【図６】
0004748630.tif 000007