(57)【要約】【課題】所望の処理プログラムに分岐する処理の高速化を図る。【解決手段】入力された命令をデコードすることによって制御信号を生成する制御部（１００）と、上記制御部で生成された制御信号に基づいて上記命令を実行するための実行部（２００）とを含むデータ処理装置において、所望の処理プログラムに分岐するための処理が、比較分岐（ＢＣＭＰ）命令や、分岐（ＪＭＰ）命令、比較累積（ＣＭＰ／ＡＣＣ）命令、あるいは比較転送（ＳＭＯＶ）命令が実行されることで可能とされるため、分岐処理の高速化を図ることができる。また、所望の処理プログラムに分岐するための処理が、上記比較分岐（ＢＣＭＰ）命令や、分岐（ＪＭＰ）命令、比較累積（ＣＭＰ／ＡＣＣ）命令、あるいは比較転送（ＳＭＯＶ）命令などの短い命令コードで実現することができるため、プログラムのサイズ低減を図ることができる。【選択図】　　　　図１
2004038772.tif 000002
【特許請求の範囲】
【請求項１】
入力された命令をデコードすることによって制御信号を生成する制御部と、上記制御部で生成された制御信号に基づいて上記命令を実行するための実行部とを含むデータ処理装置であって、
上記実行部は、比較分岐命令が上記制御部でデコードされることで生成された制御信号に従って、上記比較分岐命令を実行するための実行手段を有し、
上記実行手段は、入力データをレジスタ保持情報と比較する第１手段と、
上記比較が所定の状態であるときに、上記比較の回数に対応した情報に基づいて分岐のための分岐アドレスを生成する第２手段と、
上記比較の回数が、所定の最大比較回数に達したことを検出するための第３手段と、
割り込みが要求された場合に、レジスタ及びプログラムカウンタの内容を復帰可能に保持して、割り込み例外処理に遷移するための第４手段と、を含んで成ることを特徴とするデータ処理装置。
【請求項２】
入力された命令をデコードすることによって制御信号を生成する制御部と、上記制御部で生成された制御信号に基づいて上記命令を実行するための実行部とを含むデータ処理装置であって、
上記実行部は、分岐命令が上記制御部でデコードされることで生成された制御信号に従って、上記分岐命令を実行するための実行手段を有し、
上記実行手段は、使用されたレジスタの内容に従ってデータをリードするための第１手段と、
上記リードされたデータと、指定されたアドレス情報とによって、分岐テーブルをリードするための第２手段と、
上記リードしたデータに基づき、分岐アドレスを生成して分岐するための第３手段と、を含んで成ることを特徴とするデータ処理装置。
【請求項３】
入力された命令をデコードすることによって制御信号を生成する制御部と、上記制御部で生成された制御信号に基づいて上記命令を実行するための実行部とを含むデータ処理装置であって、
上記実行部は、サブルーチン分岐命令が上記制御部でデコードされることで生成された制御信号に従って、上記サブルーチン分岐命令を実行するための実行手段を有し、
上記実行手段は、使用されたレジスタの内容に従ってデータをリードするための第１手段と、
上記リードされたデータと、指定されたアドレス情報とによって、分岐テーブルをリードするための第２手段と、
上記サブルーチン分岐命令の先頭アドレスをスタックに退避し、リターン時には上記サブルーチン分岐命令を再度実行可能にサブルーチン分岐する第３手段と、を含んで成ることを特徴とするデータ処理装置。
【請求項４】
入力された命令をデコードすることによって制御信号を生成する制御部と、上記制御部で生成された制御信号に基づいて上記命令を実行するための実行部とを含むデータ処理装置であって、
上記実行部は、比較累積命令が上記制御部でデコードされることで生成された制御信号に従って上記比較累積命令を実行するための実行手段とを有し、
上記実行手段は、データの比較結果を示すフラグの記憶手段と、
上記比較累積命令のデータ比較を行い、上記フラグの直前の状態と上記比較累積命令のデータ比較結果を上記フラグに反映させることによって、上記フラグを条件分岐の分岐条件とする手段とを含んで成ることを特徴とするデータ処理装置。
【請求項５】
入力された命令をデコードすることによって制御信号を生成する制御部と、上記制御部で生成された制御信号に基づいて上記命令を実行するための実行部とを含むデータ処理装置であって、
上記実行部は、比較転送命令が上記制御部でデコードされることで生成された制御信号に従って、上記比較転送命令を実行するための実行手段を有し、
上記実行手段は、データをリードし、リードしたデータをライトする第１手段と、
リードしたデータを比較するための第２手段と、
上記比較回数が、指定された最大比較回数に達したことを検出する第３手段と、
割り込みが要求された場合に、レジスタ及びプログラムカウンタの内容を復帰可能に保持して、割り込み例外処理に遷移する第４手段と、を含んで成ることを特徴とするデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データ処理装置、さらにはそれにおける処理の高速化技術に関し、例えばシングルチップマイクロコンピュータ（以下、単に「マイクロコンピュータ」という）に適用して有効な技術に関する。
【０００２】
【従来の技術】
半導体集積回路装置の製造技術の高度化に伴って、半導体単結晶からなるシングルチップに、中央処理装置（Ｃｅｎｔｒａｌ　Ｐｒｏｃｅｓｓｉｎｇ　Ｕｎｉｔ；以下、単に「ＣＰＵ」と称する）、プログラムを格納するＲＯＭ（ＲｅａｄＯｎｌｙ　Ｍｅｍｏｒｙ）、書き換え可能に各種データを格納するＲＡＭ（Ｒａｎｄｏｍ　Ａｃｃｅｓｓ　Ｍｅｍｏｒｙ）等を含む構成素子を集積して製造したマイクロコンピュータが広範囲に普及してきており、制御モジュールとして各種機器に組み込まれている。
【０００３】
尚、マイクロコンピュータについて記載された文献の例としては、特許公開２００２−１５７１１５号公報がある。
【０００４】
【発明が解決しようとする課題】
マイクロコンピュータは、当該機器の状態を参照しつつ、処理の内容を変えていく。すなわち、データアクセスを行い、当該データの値を判定して、判定結果に従って、処理の内容を変えるために、分岐命令を実行する。このような例として、所要のインタフェースを介して、命令を受信し、この命令の内容を判定して、当該命令に対応した処理プログラムに分岐することがある。この場合、想定される命令と、順次比較を行い、比較が一致したところで、分岐を行う。命令の受信から、当該命令に対応した処理を完了するまでの時間は短い方が望ましい。例えば光ディスクドライブの制御の場合、ホストシステムからのリード命令を入力し、入力した命令がリード命令であることを認識して、光ディスクのリード処理を行い、ホストシステムにデータを出力するまでの時間が、リード動作のアクセス時間になるため、この時間を可能な限り短くすることは、ホストシステムでの処理の高速化に有効とされる。
【０００５】
近年、携帯電話やＩＣカードをはじめとする多くのマイクロコンピュータ応用分野では、ＪＡＶＡ（登録商標）などの高級言語が用いられてきている。この場合、上記応用分野で用いられるマイクロコンピュータは、その高級言語のバーチャルマシンをエミュレートすることになる。すなわち、上記高級言語のバイトコードを逐次リードし、当該バイトコードに対応した処理プログラムにサブルーチン分岐する。サブルーチンリターン後、再度、次のバイトコードをリードし、サブルーチン分岐する処理を繰り返す。従って所望の処理プログラムに分岐する処理は可能な限り短くすることは、マイクロコンピュータでの処理の高速化に有効とされる。
【０００６】
マイクロコンピュータによる機器制御においては、所定のイベントを割り込みとして入力し、所要の時間内に、当該イベントに対応する処理を行う、いわゆるリアルタイム性も重要である。そのため、イベントに対応する処理に要する時間は可能な限り短い方がよい。
【０００７】
プログラム用のメモリであるＲＯＭを内蔵した、シングルチップ型のマイクロコンピュータにあっては、内蔵ＲＯＭの容量が、外部にメモリを接続するのに比較して少ないから、そこに格納されるプログラムのサイズを小さくすることが望ましい。特に近年は、シングルチップ型のマイクロコンピュータの内蔵ＲＯＭとして、電気的に書込み消去が可能なフラッシュメモリ、ＥＥＰＲＯＭ（電気的に書込み消去可能なＲＯＭ）が用いられることが多いが、これらの電気的に書込み消去が可能なメモリは記憶素子が大きく、また、書込み消去用の高電圧発生回路などが必要とされることからその物理的規模が大きくなってしまうため、より一層、プログラムのサイズ低減を可能とすることが望ましい。
【０００８】
本発明の目的は、所望の処理プログラムに分岐する処理の高速化を図るための技術を提供することにある。
【０００９】
本発明の別の目的は、プログラムのサイズ低減を図るための技術を提供することにある。
【００１０】
本発明の上記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【００１１】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１２】
すなわち、課題を解決するための第１の手段は、入力された命令をデコードすることによって制御信号を生成する制御部と、上記制御部で生成された制御信号に基づいて上記命令を実行するための実行部とを含んでデータ処理装置が構成されるとき、上記実行部は、比較分岐（ＢＣＭＰ）命令が上記制御部でデコードされることで生成された制御信号に従って、上記比較分岐命令を実行するための実行手段を有し、さらにこの上記実行手段は、入力データをレジスタ保持情報と比較する第１手段と、上記比較が所定の状態であるときに、上記比較の回数に対応した情報に基づいて分岐のための分岐アドレスを生成する第２手段と、上記比較の回数が、所定の最大比較回数に達したことを検出するための第３手段と、割り込みが要求された場合に、レジスタ及びプログラムカウンタの内容を復帰可能に保持して、割り込み例外処理に遷移するための第４手段とを含む。
【００１３】
さらに具体的な態様では、ＢＣＭＰ命令は、第１のレジスタ（ＥＲ５）に比較データのアドレスを、第２のレジスタ（ＥＲ６）に分岐アドレステーブルのアドレスを、第３のレジスタ（Ｒ４）に最大比較数を、第４のレジスタ（Ｒ３）に、比較すべきデータを格納する。
【００１４】
最大比較数を指定し、これに達したときに、命令の実行を終了するようにする。入力した値が所望の内容でなかったときの処理を行うことができる。不所望の要因によって、無限回数を実行してしまうことがない。
【００１５】
命令コード上は、上記第１〜第４のレジスタの全てを独立に指定するフィールドを持たないようにし、固定的に指定する。マイクロコンピュータの命令セットの空間のうち、ＢＣＭＰ命令に用いる部分を最低限にして、他の命令を増やしたり、他の命令を短い命令コードにしたりでき、また、既存の命令セットと互換性を維持しつつ、本命令を追加する場合も比較的容易にできる。
【００１６】
また、命令コード長を短縮することができる。命令コードを短縮することによって、命令リード回数を削減し、処理速度を向上できる。ＢＣＭＰ命令は、他の命令と組合せる必要がないから、使用するレジスタが固定的であっても、使い勝手の低下は少ない。
【００１７】
実行途中で割り込み要求が発生した場合には、比較が所定の状態である（比較一致）ときは、分岐まで実行を完了して、割り込み例外処理を実行するようにするとともに、比較が所定の状態でない（比較不一致）ときは、第１〜第４のレジスタの途中の状態を保持し、プログラムカウンタも例外処理からの復帰後に、再実行可能なように保持して、割り込み例外処理を実行する。これによって、使い勝手を損なわず、かつ、割り込み応答時間を長くしてしまうことがない。
【００１８】
このように比較分岐（ＢＣＭＰ）命令の実行により、上記の比較分岐が行われるため、例えばパーソナルコンピュータなどのホストから命令を入力して、命令を比較すべきデータとして、比較分岐を行うようにして、命令の入力から、所要の処理の実行までの時間短縮を図ることができる。
【００１９】
課題を解決するための第２の手段は、入力された命令をデコードすることによって制御信号を生成する制御部と、上記制御部で生成された制御信号に基づいて上記命令を実行するための実行部とを含んでデータ処理装置が構成されるとき、上記実行部は、分岐（ＪＭＰ）命令が上記制御部でデコードされることで生成された制御信号に従って、上記分岐命令を実行するための実行手段を有し、上記実行手段は、使用されたレジスタの内容に従ってデータをリードするための第１手段と、上記リードされたデータと、指定されたアドレス情報とによって、分岐テーブルをリードするための第２手段と、上記リードしたデータに基づき、分岐アドレスを生成して分岐するための第３手段とを含む。
【００２０】
さらに具体的な態様としては、指定されたレジスタをアドレスとして、メモリからデータをリードし、リードしたデータを、必要に応じて拡張し、シフトし、指定されたアドレス情報（ディスプレースメント）に加算して、分岐テーブルをリードし、リードした内容を分岐先アドレスとして分岐する。
【００２１】
命令の順序に、対応する処理プログラムの先頭アドレスを格納した分岐テーブルを持つことによって、入力した命令を複数のデータと比較することなく、所要のプログラムへの分岐を可能とし、処理速度を向上できる。
【００２２】
上記シフトは、分岐テーブルの単位、すなわち、アドレス空間の大きさに相当するように行う。アドレス空間の大きさが４Ｇバイトであれば、分岐テーブルは４バイト単位であって、シフトは、×４に相当する２ビットシフトを行う。拡張・シフトを行うことで、入力した命令を、直接、分岐テーブルの検索に利用できるので、プログラムを短縮することができ、処理速度も向上できる。
【００２３】
命令コードは、データをリードするためのレジスタを指定するレジスタ指定フィールドと、分岐テーブルを示す情報とを持つ。
【００２４】
データをリードするためのアドレッシングモードとして、レジスタ間接を使用する。レジスタ間接は、実行前にアドレス計算などを行うことによって、任意のアドレスを指定できるから、多種類のデータリードのためのアドレッシングモードを持たなくても、汎用的に使用できる。上記同様に、マイクロコンピュータの命令セットの空間のうち、ＪＭＰ命令に用いる部分を最低限にできる。
【００２５】
上記同様に、リードした命令に基づき分岐テーブルを参照するようにして、命令の入力から、所要の処理の実行までの時間を短縮できる。
【００２６】
課題を解決するための第３の手段は、入力された命令をデコードすることによって制御信号を生成する制御部と、上記制御部で生成された制御信号に基づいて上記命令を実行するための実行部とを含むデータ処理装置であって、上記実行部は、サブルーチン分岐（ＪＳＲ）命令が上記制御部でデコードされることで生成された制御信号に従って、上記サブルーチン分岐命令を実行するための実行手段を有し、上記実行手段は、使用されたレジスタの内容に従ってデータをリードするための第１手段と、上記リードされたデータと、指定されたアドレス情報とによって、分岐テーブルをリードするための第２手段と、上記サブルーチン分岐命令の先頭アドレスをスタックに退避し、リターン時には上記サブルーチン分岐命令を再度実行可能にサブルーチン分岐する第３手段とを含む。
【００２７】
すなわち、データをリードし、リードデータに基づき分岐テーブルを参照して、自命令の先頭アドレスをスタックに退避し、リターン時に自命令を再度実行可能なように、サブルーチン分岐する手段を設ける。
【００２８】
バーチャルマシンをエミュレートする場合、あるいはインタープリトを行いつつ、実行する場合、プログラム全体を１命令とすることができる。
【００２９】
その他は、ＪＭＰ命令の場合と同様とされる。
【００３０】
バーチャルマシンをエミュレートする場合に、入力された命令をインタープリトする処理を１命令で実行できる。
【００３１】
課題を解決するための第４の手段は、入力された命令をデコードすることによって制御信号を生成する制御部と、上記制御部で生成された制御信号に基づいて上記命令を実行するための実行部とを含んでデータ処理装置が構成されるとき、上記実行部は、比較累積（ＣＭＰ／ＡＣＣ）命令が上記制御部でデコードされることで生成された制御信号に従って、上記比較累積命令を実行するための実行手段を有し、上記実行手段は、データの比較結果を示すフラグの記憶手段と、上記比較累積命令のデータ比較を行い、上記フラグの直前の状態と上記比較累積命令のデータ比較結果を上記フラグに反映させることによって、上記フラグを条件分岐の分岐条件とする手段とを含んで成る。
【００３２】
さらに具体的な態様としては、第４の命令ＣＭＰ／ＡＣＣ実行時に、第１のフラグ手段（Ｚ）は、直前の比較一致を示す状態と、当該命令の比較一致の結果の論理和を、前記フラグ手段（Ｚ）に反映するデータの複数回の比較結果の一致の論理和を蓄積可能で、複数の比較に対して、条件分岐命令を１個にすることができ、プログラム容量を削減でき、実行ステート数も短縮できる。さらにに詳しくは、比較累積（ＣＭＰ／ＡＣＣ）命令実行時に、第２のフラグ手段（Ｃ）は、直前の比較大小を示す第１状態と、当該命令の比較大小の結果の第２状態の論理積を、前記フラグ手段（Ｃ）に反映するデータの複数回の比較結果の一致の論理和を蓄積可能で、複数の比較に対して、条件分岐命令を１個にすることができ、プログラム容量を削減でき、実行ステート数も短縮できる。
【００３３】
課題を解決するための第５の手段は、入力された命令をデコードすることによって制御信号を生成する制御部と、上記制御部で生成された制御信号に基づいて上記命令を実行するための実行部とを含んでデータ処理装置が構成されるとき、上記実行部は、比較転送（ＳＭＯＶ）命令が上記制御部でデコードされることで生成された制御信号に従って、上記比較転送命令を実行するための実行手段を有し、上記実行手段は、データをリードし、リードしたデータをライトする第１手段と、リードしたデータを比較するための第２手段と、上記比較回数が、所定の最大比較回数に達したことを検出する第３手段と、割り込みが要求された場合に、レジスタ及びプログラムカウンタの内容を復帰可能に保持して、割り込み例外処理に遷移する第４手段とを含む。
【００３４】
すなわち、データのリード／ライトを行い、それが設定回数に達すると次の命令を実行し、途中で所定のデータを検出すると、分岐アドレスを生成して分岐する命令を実行する。
【００３５】
さらに具体的な態様としては、第１のレジスタ（ＥＲ５）にデータの転送元アドレスを、第２のレジスタ（ＥＲ６）にデータの転送先アドレスを、第３のレジスタ（Ｒ４）に最大転送数を格納する。さらに好適には、第４のレジスタ（Ｒ３）に、比較すべきデータが格納される。
【００３６】
命令コード上は、上記第１〜第４のレジスタの全てを独立に指定するフィールドを持たないようにし、固定的に指定する。上記同様に、マイクロコンピュータの命令セットの空間のうち、ＳＭＯＶ命令に用いる部分を最低限にできる。
【００３７】
また、命令コード長を短縮することができる。命令コードを短縮することによって、命令リード回数を削減し、処理速度を向上できる。ＳＭＯＶ命令は、他の命令と組合せる必要がないから、使用するレジスタが固定的であっても、使い勝手の低下は少ない。
【００３８】
実行途中で割り込み要求が発生した場合には、比較が所定の状態である（比較一致）ときは、分岐まで実行を完了して、割り込み例外処理を実行するようにするとともに、比較が所定の状態でない（比較不一致）ときは、第１〜第４のレジスタの途中の状態を保持し、プログラムカウンタも例外処理からの復帰後に、再実行可能なように保持して、割り込み例外処理を実行する。これによって、使い勝手を損なわず、かつ、割り込み応答時間を長くしてしまうことがない。
【００３９】
【発明の実施の形態】
図１２には、本発明にかかるデータ処理装置の一例であるマイクロコンピュータが示される。
【００４０】
このマイクロコンピュータ１２０は、シングルチップ型であり、全体の制御を司るＣＰＵ１２２、割込コントローラ１２４、ＣＰＵ１２２の処理プログラムなどを格納するメモリであるＲＯＭ１２８、ＣＰＵ１２２の作業領域ならびにデータの一時記憶用及びスタック用のメモリとすることができるＲＡＭ１２９、タイマ１２５、シリアルコミュニケーションインタフェース（ＳＣＩ）１２６、Ａ／Ｄ変換器１２３、第１乃至第９入出力ポート（ＩＯＰ１〜ＩＯＰ９）、クロック発振器（ＣＰＧ）１２１を含み、公知の半導体製造技術により、単結晶シリコン基板などのひとつの半導体基板上に形成される。
【００４１】
かかるマイクロコンピュータ１２０は、グランドレベル（Ｖｓｓ）、電源電圧レベル（Ｖｃｃ）、アナロググランドレベル（ＡＶｓｓ）、アナログ電源電圧レベル（ＡＶｃｃ）の各入力端子と、リセット（ＲＥＳ）、スタンバイ（ＳＴＢＹ）、モード制御（ＭＤ０、ＭＤ１）、クロック（ＥＸＴＡＬ、ＸＴＡＬ）の各端子を有する。
【００４２】
クロック端子ＥＸＴＡＬ、ＸＴＡＬに接続される水晶発振子、又は当該端子を介して直接入力される外部クロック信号に基づいて生成される基準クロック（システムクロック）信号に同期して、マイクロコンピュータは動作する。この基準クロック１周期をステートと呼ぶ。
【００４３】
マイクロコンピュータ１２０を構成する各機能ブロックは、内部バス１１９によって相互に接続さる。この内部バス１１９はバスコントローラ１２７によって制御される。内部バスはアドレスバス・データバスのほか、リード信号・ライト信号・バスサイズ信号を伝達するためのコントロールバスを含む。
【００４４】
かかる機能ブロックやモジュールは、内部バスを介して、ＣＰＵ１２２によってリード／ライト可能とされる。内部バスのデータバス幅は３２ビットとする。内蔵ＲＯＭ、ＲＡＭのリード／ライトを１ステップでリード／ライト可能とする。
【００４５】
タイマ１２５、ＳＣＩ１２６、Ａ／Ｄ変換器１２３、第１乃至第９入出力ポートＩＯＰ１〜ＩＯＰ９、割り込みコントローラ１２４、ＣＰＧ１２１などが有する制御レジスタを内部Ｉ／Ｏレジスタと総称する。
【００４６】
かかるマイクロコンピュータ１２０にリセット信号ＲＥＳが与えられると、マイクロコンピュータ１２０はリセット状態になる。このリセットが解除されると、モード制御で指定された動作モード（シングルチップ、外部バス拡張、内蔵ＲＯＭ有効など）とされ、ＣＰＵ１２２は所定のアドレス（ベクタアドレス）からスタートアドレスをリードして、このスタートアドレスから命令のリードを開始するリセット例外処理を行う。この後、ＣＰＵ１２２は逐次ＲＯＭ１２８などから命令をリードし、それを解読する。そしてその解読内容に基づいて、フラグやビットの判定や操作を含む、データの処理、あるいはＲＡＭ１２９、タイマ１２５、ＳＣＩ１２６、Ａ／Ｄ変換器１２３、入出力ポートなどとのデータ転送を行う。すなわち、ＣＰＵ１２２は、タイマ１２５、ＳＣＩ１２６、Ａ／Ｄ変換器１２３、入出力ポートＩＯＰ１〜ＩＯＰ９などから入力されるデータあるいは機器の状態や指示（スイッチ、ボリュームなど）を参照しつつ、ＲＯＭなどに記憶されている命令に基づいて処理を行い、その結果に基づいて、入出力ポートＩＯＰ１〜ＩＯＰ９、タイマ１２５などを使用しつつ、外部に信号を出力し、機器の制御を行う。
【００４７】
割り込みコントローラ１２４は、タイマ１２５、ＳＣＩ１２６、Ａ／Ｄ変換器１２３からの割り込み信号や、外部からの割り込み信号を取り込んで、割り込み要求信号をＣＰＵ１２２に出力する。
【００４８】
ＣＰＵ１２２に割込要求信号が与えられると、ＣＰＵ１２２は実行中の処理を中断して、割り込み例外処理状態を経て、所定の処理ルーチンに分岐し、所望の処理を行い、割込要因をクリアしたりする。所定の処理ルーチンの最後には、通常復帰命令がおかれ、この命令を実行することによって上記中断した処理を再開する。
【００４９】
割り込み例外処理の実行時には、後述のプログラムカウンタ（ＰＣ）やコンディションコードレジスタ（ＣＣＲ）などがＲＡＭなどに退避され、復帰命令実行時に上記プログラムカウンタ（ＰＣ）やコンディションコードレジスタ（ＣＣＲ）などが復帰される。
【００５０】
図１には、上記ＣＰＵ１２２の構成例が示される。
【００５１】
図１に示されるようにこのＣＰＵ１２２は、制御部１００と実行部２００とを含む。
【００５２】
制御部１００は、命令バッファＩＦＩＦＯ、命令変更部ＣＨＧ、命令デコーダＤＥＣ、レジスタセレクタＲＳＥＬ、割り込み制御部ＩＮＴ、及び比較器１１を含む。
【００５３】
命令バッファＩＦＩＦＯは、リードした命令を一旦格納する。実行すべき命令は、命令デコーダＤＥＣに出力される。
【００５４】
命令変更部ＣＨＧは、割り込みなどの例外処理を実行するときなどに、リードした命令以外の命令コードを、命令デコーダに与える場合に動作し、その他の場合は、命令バッファＩＦＩＦＯの内容を命令デコーダＤＥＣに与える。
【００５５】
割り込み制御部ＩＮＴは、図１２に示される割り込みコントローラ１２４の出力する割り込み要求信号（割り込み指示）ｉｎｔｆを受付ける。また、命令デコーダの出力する割り込み受付けタイミングを参照して、割り込みが受付け可能であれば、命令変更部ＣＨＧに割り込みを指示する。
【００５６】
命令デコーダＤＥＣは、例えば、マイクロＲＯＭあるいはＰＬＡ（Ｐｒｏｇｒａｍｍａｂｌｅ　Ｌｏｇｉｃ　Ａｒｒａｙ）又は布線論理で構成される。命令デコーダＤＥＣの出力の一部が命令デコーダＤＥＣにフィードバックされている。これは各命令コード内の遷移に用いるステージコード（ＴＭＧ）を含む。命令デコーダＤＥＣからの制御信号によって実行部１００が制御される。制御信号にはＡ、Ｂ、Ｃの３種類があり、それぞれ有効となるタイミングが異なる。制御信号Ａは当該ステップで有効になる。制御信号Ｂは次のステップで、制御信号Ｃは次の次のステップで、それぞれ有効になる。尚、制御信号Ｂには、コンディションコードレジスタＣＣＲを制御するための信号ｅｘｅ、ｃｍｐａｃｃが含まれる。
【００５７】
レジスタセレクタＲＳＥＬは、命令デコーダの指示と、命令コード中に含まれるレジスタ指定フィールドの情報に基づいて、レジスタ選択信号を出力する。このレジスタ選択信号によって汎用レジスタの入出力が制御される。
【００５８】
実行部２００は、特に制限されないが、汎用レジスタＥＲ０〜ＥＲ７、プログラムカウンタＰＣ、コンディションコードレジスタＣＣＲ、テンポラリレジスタＴＲ、算術論理演算器ＡＬＵ、インクリメンタＩＮＣ、リードデータバッファＤＢＲ、ライトデータバッファＤＢＷ、アドレスバッファＭＡＢを含む。これらのブロックは内部バスａｂ、ｇｂ、ｄｂ、ｗｂ１、ｗｂ２によって相互に接続されている。
【００５９】
算術論理演算器ＡＬＵは、命令によって指定される各種の演算や実効アドレスの計算などを行う。そして、この算術論理演算器ＡＬＵからは、演算結果がゼロであることを示す信号ｚ＿ｏｕｔ、演算結果にキャリ又はボローが発生したことを示す信号ｃ＿ｏｕｔが出力される。信号ｚ＿ｏｕｔは命令デコーダＤＥＣと、コンディションコードレジスタＣＣＲとの双方に伝達される。信号ｃ＿ｏｕｔはコンディションコードレジスタＣＣＲに供給される。
【００６０】
インクリメンタＩＮＣは、主としてプログラムカウンタＰＣのインクリメントに用いられる。
【００６１】
汎用レジスタＥＲ０〜ＥＲ７、プログラムカウンタＰＣ、コンディションコードレジスタＣＣＲ以外のモジュールは、プログラミング上は参照できず、マイクロコンピュータ内部の動作にのみ用いられる。すなわち、リードデータバッファＤＢＲ、ライトデータバッファＤＢＷ、アドレスバッファＭＡＢなどは、内部バスＩＡＢ、ＩＤＢとのインタフェースをとるために、一時的なデータのラッチやバッファリングに使用される。テンポラリレジスタＴＲは、マイクロコンピュータ内部の動作に適宜用いられる。
【００６２】
リードデータバッファＤＢＲは、ＲＯＭ１２８、ＲＡＭ１２９、内部Ｉ／Ｏレジスタ、あるいは外部メモリから、リードしたデータを一時的に格納する。ライトデータバッファＤＢＷはＲＯＭ１２８、ＲＡＭ１２９、内部Ｉ／Ｏレジスタ、あるいは外部メモリへのライトデータを一時的に格納する。
【００６３】
アドレスバッファＭＡＢは、割り込みコントローラ１２４から入力されたベクタ、及び内部バスａｂを入力してアドレス出力を行う。
【００６４】
コンディションコードレジスタＣＣＲは、命令デコーダから制御信号ｅｘｅ、ｃｍｐａｃｃを取り込み、算術論理演算器ＡＬＵからｚ＿ｏｕｔ、ｃ＿ｏｕｔを入力し、演算結果などを各フラグに反映（格納）する。
【００６５】
比較器１１は、比較レジスタ（ＣＯＲ）とＤＢＲの内容を入力し、比較一致を示すｍａｔｃｈを命令デコーダＤＥＣに出力する。
【００６６】
図２には、上記ＣＰＵ１２２に内蔵されている汎用レジスタと拡張レジスタ、及びコントロールレジスタの構成例（プログラミングモデル）が示される。
【００６７】
図２に示されるようにＣＰＵ１２２は、３２ビット長の汎用レジスタを８本持っている。この汎用レジスタは、すべて同機能を有し、アドレスレジスタとしてもデータレジスタとしても使用することができる。データレジスタとしては３２ビット、１６ビット及び８ビットレジスタとして使用きる。アドレスレジスタ及び３２ビットレジスタとしては、汎用レジスタＥＲ（ＥＲ０〜ＥＲ７）として使用する。１６ビットレジスタとしては、汎用レジスタＥＲを分割して汎用レジスタＥ（Ｅ０〜Ｅ７）としたり、汎用レジスタＲ（Ｒ０〜Ｒ７）として使用する。これらは同等の機能を持っており、１６ビットジスタを最大１６本まで使用することができる。８ビットレジスタとしては、汎用レジスタＲを分割して汎用レジスタＲＨ（Ｒ０Ｈ〜Ｒ７Ｈ）、汎用レジスタＲＬ（Ｒ０Ｌ〜Ｒ７Ｌ）として使用する。これらは同等の機能を持っており、８ビットレジスタを最大１６本まで使用することができる。各レジスタ独立に使用方法を選択することができる。汎用レジスタＥＲ７には、汎用レジスタとしての機能に加えて、スタックポインタ（ＳＰ）としての機能が割当てられており、例外処理やサブルーチン分岐などで暗黙的に使用される。例外処理は上記割り込み処理を含む。
【００６８】
プログラムカウンタＰＣは、３２ビットのカウンタで、ＣＰＵ１２２が実行中の命令のアドレスを示す。特に制限されないが、ＣＰＵ１２２の命令は、すべて２バイト（ワード）を単位としているため、最下位ビットは無効であり、命令リード時には最下位ビットは０とみなされる。
【００６９】
コンディションコードレジスタＣＣＲは、８ビット構成のレジスタで、ＣＰＵ１２２の内部状態を示している。割り込みマスクビット（Ｉ）とハーフキャリ（Ｈ）、ネガティブ（Ｎ）、ゼロ（Ｚ）、オーバフロー（Ｖ）、キャリ（Ｃ）の各フラグを含む８ビットで構成されている。
【００７０】
図３には、本例における命令フォーマット例が示される。
【００７１】
ＣＰＵ１２２の命令は、２バイト（ワード）を単位にしている。各命令はオペレーションフィード（ｏｐ）、レジスタ指定フィールド（ｒ）、ＥＡ拡張部（ＥＡ）、及びコンディションフィールド（ｃｃ）を含む。
【００７２】
オペレーションフィールド（ｏｐ）は、命令の機能を表し、アドレッシングモードの指定オペランドの処理内容を指定する。
【００７３】
図３（Ａ）にはオペレーションフィールド（ｏｐ）のみで命令が構成される場合の例（ＮＯＰ）が示される。
【００７４】
レジスタ指定フィールド（ｒ）は汎用レジスタを指定する。アドレスレジスタのとき３ビット、データレジスタのとき３ビット（３２ビットレジスタ）又は４ビット（８又は１６ビットレジスタ）である。
【００７５】
図３（Ｂ）にはオペレーションフィールドとレジスタ指定フィールドとを含んで命令が構成される場合の例（ＡＤＤ．Ｗ　Ｒ０，Ｒ１）が示される。
【００７６】
ＥＡ拡張部（ＥＡ）は、イミディエイトデータ、絶対アドレス又はディスプレースメンを指定し、８ビット、１６ビット、又は３２ビットで構成される。図３（Ｃ）には、オペレーションフィールドとレジスタ指定フィールドとＥＡ拡張部とを含む場合の例（ＭＯＶ．Ｗ　Ｒ２，＠（００１０，Ｒ３）が示される。また、図３（Ｄ）には、オペレーションフィールドとコンディションフィールドとＥＡ拡張部とを有する場合の例（ＢＥＱ　＄＋２０）が示される。
【００７７】
さらに本例では、所望の処理プログラムに分岐する処理を短い命令コードで実現することによって処理の高速化を図るために、図３において（Ｅ）〜（Ｉ）で示される５種類の命令が用意されている。すなわち、ＢＣＭ命令、ＪＭＰ命令、ＪＳＲ命令、ＣＭＰ／ＡＣＣ命令、及び乗算命令である。
【００７８】
ＢＣＭＰ命令は、１ワード命令であり、オペレーションフィード（ｏｐ）のみで構成され、レジスタ指定フィールド（ｒ）を持たず、使用する汎用レジスタは暗黙的（固定的）に指定される。
【００７９】
ＪＭＰ命令やＪＳＲ命令は、３ワード命令である。第１ワードはオペレーションフィード（ｏｐ）とレジスタ指定フィールド（ｒ）を含む。第２、第３ワードは、分岐テーブルの先頭アドレスを示すディスプレースメント（ｄ）である。
【００８０】
ＣＭＰ／ＡＣＣは、１ワード命令であり、オペレーションフィード（ｏｐ）、レジスタ指定フィールド（ｒ）、及びイミディエイト（ｘｘ）を含む。
【００８１】
乗算（ＳＭＯＶ）命令は、２ワード命令である。第１ワードはオペレーションフィード（ｏｐ）であり、レジスタ指定フィールド（ｒ）を持たず、使用する汎用レジスタは暗黙的（固定的）に指定される。第２ワードは、比較一致時に分岐するためのディスプレースメント（ｄ）である。
【００８２】
次に、上記５種類の命令の実行の流れについて説明する。
【００８３】
図４には、上記ＢＣＭＰ命令の実行の流れが示される。
【００８４】
図４で示される処理が順次行われるように命令デコーダＤＥＣの論理が決定される。
【００８５】
かかる命令は、以下の設定を行って実行される。すなわち、暗黙的に、以下の汎用レジスタが使用される。
【００８６】
汎用レジスタＲ３に、比較されるデータを設定する。
【００８７】
汎用レジスタＲ４に、最大の比較回数を設定する。
【００８８】
汎用レジスタＥＲ５に、比較するデータを格納した領域の先頭アドレスを設定する。
【００８９】
汎用レジスタＥＲ６に、分岐アドレスを格納した領域の先頭アドレスを設定する。
【００９０】
まず、命令の切れ目で、割り込み要求か否かを確認し、割り込みが要求されている場合は、当該命令の実行を行わずに、割り込み例外処理を実行する。割り込みが要求されていない場合には次のように処理される。
【００９１】
第１ステップ（Ｓ１）では、制御信号Ａに基づいて、汎用レジスタＥＲ５をアドレスとしてデータリードを行うとともに、汎用レジスタＥＲ５のインクリメントを行う。汎用レジスタＥＲ５を内部バスａｂ経由で内部アドレスバスＩＡＢに出力するとともに、インクリメンタＩＮＣでインクリメントし、結果を内部バスｗｂ１経由で、汎用レジスタＥＲ５に格納する。制御信号Ｂに基づいて、リードしたデータをリードデータバッファＤＢＲに格納する。汎用レジスタＥＲ５のインクリメントは、データのサイズに応じた加算である。例えば、データのサイズがバイトサイズであれば、１を加算する。
【００９２】
第２ステップ（Ｓ２）では、制御信号Ａに基づいて、バスを使用したリード／ライトを行わないこと（ｎｏｐ）が指示される。制御信号Ｂに基づいて、次のステップで上記第１ステップでリードされたデータとレジスタＲ３とを、算術論理演算器ＡＬＵに転送し、この算術論理演算器ＡＬＵで比較（減算）を行う。そして、この比較結果がゼロかどうかの判別を行う。この判別結果はｚ＿ｏｕｔで示される。
【００９３】
次のステップ（Ｓ３）は、第２ステップ（Ｓ２）の制御に基づく、ｚ＿ｏｕｔによって異なる。
【００９４】
すなわち、ｚ＿ｏｕｔ＝１（比較一致）のときは、第３ステップ（Ｓ３）であって、制御信号Ａで、汎用レジスタＥＲ６をアドレスとしてデータリードを行うとともに、汎用レジスタＥＲ６のインクリメントを行う。汎用レジスタＥＲ６を内部バスａｂ経由で内部アドレスバスＩＡＢに出力するとともに、インクリメンタＩＮＣでインクリメントし、その結果を内部バスｗｂ１経由で、汎用レジスタＥＲ６に格納する。汎用レジスタＥＲ６のインクリメントは分岐テーブルのサイズ、換言すれば、分岐アドレスのサイズに応じて、例えば、アドレス空間が４Ｇバイトのときは、４を加算する。制御信号Ｂで、リードしたデータをリードデータバッファＤＢＲに格納するとともに、レジスタＲ４の内容をＡＬＵでデクリメントする。レジスタＲ４のデクリメントは、レジスタＲ４の内容を内部バスｇｂ経由で算術論理演算器ＡＬＵに取り込み、この算術論理演算器ＡＬＵには定数値「１」を与えて減算を行い、その結果を内部バスｗｂ２経由でレジスタＲ４に格納する。
【００９５】
ｚ＿ｏｕｔ＝１（比較一致）の場合、第４ステップ（Ｓ４）では、リードの完了を待ち、第５ステップ（Ｓ５）では、制御信号Ａの制御により、リードデータバッファＤＢＲの内容を内部バスａｂ経由で内部アドレスバスＩＡＢに出力して、命令リードを行う。また、インクリメンタＩＮＣでインクリメントし、結果を内部バスｗｂ１経由で、プログラムカウンタＰＣに格納する。制御信号Ｂで、リードしたデータを命令バッファＩＦＩＦＯに格納する。第６ステップ（Ｓ６）では、制御信号Ａの制御により、プログラムカウンタＰＣの内容に従って、命令リードを行い、プログラムカウンタＰＣの内容をインクリメントする。プログラムカウンタＰＣのインクリメントは、命令がワード単位であることに対応して、２を加算する。制御信号Ｂで、リードしたデータを命令バッファＩＦＩＦＯに格納する。この後、第５ステップ（Ｓ５）でリードした分岐先命令の実行を開始する。
【００９６】
それに対して、第２ステップ（Ｓ２）での減算結果の判定において、ｚ＿ｏｕｔ＝０（比較不一致）のときは、第１３ステップ（Ｓ１３）であって、第３ステップ（Ｓ３）の動作に対して、データリードを禁止し、ｎｏｐにする。また、これに伴い、リードデータバッファＤＢＲの格納を禁止する。
【００９７】
そして、レジスタＲ４のデクリメント結果が、ｚ＿ｏｕｔ＝０（カウンタデクリメント結果が０でない）の場合、割り込み要求がなければ、第１ステップ（Ｓ１）に戻る。ｚ＿ｏｕｔ＝１（カウンタデクリメント結果が０）の場合、第６ステップ（Ｓ６）に遷移して、上記同様の動作を行い、この後、プリフェッチ済みの次の命令の実行を開始する。
【００９８】
しかし、割り込みが要求された場合は、実行途中（比較不一致の第３ステップ（Ｓ３）終了後）で割り込み例外処理に遷移する。このとき、汎用レジスタＥＲ５、ＥＲ６は次に使用する（未使用の）アドレス、汎用レジスタＲ４には残りの回数が保存されている。また、プログラムカウンタのインクリメントも行っていないので、例外処理で、スタックされるプログラムカウンタは、当該命令のアドレスになる。例外処理ルーチン実行後の復帰命令（リターン命令）によって、再度当該命令を実行する。汎用レジスタの内容は、上記の通り保存されているので、当該命令の動作を継続することができる。
【００９９】
ここで、ＢＣＭＰ命令実行中は、３ステップ毎に、割り込みを検出でき、比較一致の場合も含めて、６ステップ以内に、割り込み例外処理を実行可能である。通常、乗算命令、除算命令、複数レジスタの退避・復帰命令、ソフトウェア例外処理命令、など６ステップより実行ステップ数が長く、途中で割り込みを受付けない命令が存在するから、本命令によって、割り込み応答時間を長くしてしまうことがない。
【０１００】
また、割り込み例外処理からの復帰命令実行後に、自動的に、動作を継続するから、使い勝手を損なうことがない。
【０１０１】
図５には、上記ＢＣＭＰ命令の好適な使用例が示される。
【０１０２】
同図に示される処理では、入力されたデータを判定するため、第１〜第ｎのデータと比較し、一致したデータに対応した第１〜第ｎの処理に分岐される。入力データは、レジスタＲ３に設定され、ｎはレジスタＲ４に設定される。第１〜第ｎのデータはメモリ上に配置され、その先頭アドレスが汎用レジスタＥＲ５に格納される。また、第１〜第ｎの処理の先頭アドレスがメモリ上に配置され、その先頭アドレスが汎用レジスタＥＲ６に格納される。図１６（Ａ）には、この場合のＣソースプログラムが示される。
【０１０３】
入力データａが１であれば、関数ｆｕｎｃ＿１が実行される。この場合、ｓｗｉｔｃｈにおいて、入力データａが、指定された値（上記Ｃソースプログラムでは１〜７）であるか否かが判定されるが、ＢＣＭＰ命令では、指定された値すべてと比較して、いずれとも一致していない場合、自動的に次の命令を実行するので、値の範囲のチェックが不要になる。
【０１０４】
図６には、ＢＣＭＰ命令の第１の変形例の実行フローチャートが示される。
【０１０５】
図６に示されるフローチャートは、図５に示されるのとは、第３乃至第５ステップ、及び第１３ステップの内容が相違する。
【０１０６】
図６において、第３ステップ（Ｓ３’）では、ワード単位でリードが行われる。これに従って、第３ステップ（Ｓ３’）、第１３ステップ（Ｓ１３’）のインクリメント値は２とする。
【０１０７】
第４ステップ（Ｓ４’）では、制御信号Ｂで、リードしたデータとプログラムカウンタＰＣの内容が算術論理演算器ＡＬＵで加算される。
【０１０８】
第５ステップ（Ｓ５’）では、制御信号Ａにより、図４のリードデータバッファＤＢＲの代わりに、第４ステップの制御に従った算術論理演算器ＡＬＵの加算結果が用いられる。
【０１０９】
図４の場合と比較して、分岐アドレステーブルをワードサイズにできるから、メモリ使用量を削減することができる。また、ＰＣ相対とすることによって、分岐できる範囲の制約が少なくなるため、使い勝手を損なうことがない。
【０１１０】
別の例として、汎用レジスタＥＲ６をインクリメントせず、一致したとき、汎用レジスタＥＲ６に汎用レジスタＲ４の内容を２ビット（図６の例では１ビット）シフトし、ゼロ拡張したデータを加算して、テーブルを参照するようにしてもよい。
【０１１１】
また別の例として、汎用レジスタＥＲ５とＥＲ６を兼用することもできる。比較データと分岐アドレスと組合せて配置し、汎用レジスタＥＲ５の内容に従って同時にリードし、比較にはリードしたデータの例えば上位１６ビットを、比較が一致した場合、リードしたデータの下位１６ビットをプログラムカウンタＰＣに加算するようにすればよい。そのようにすれば、汎用レジスタＥＲ６を他の用途に使用できるし、別に分岐先テーブルをリードすることなく、直ちに分岐できるので、実行ステップ数を短縮できる。
【０１１２】
図７には、ＪＭＰ命令についての実行フローチャートが示される。
【０１１３】
上記の場合と同様に、命令の切れ目で、割り込み要求を確認し、割り込みが要求されている場合は、当該命令の実行を行わずに、割り込み例外処理を実行する。
【０１１４】
割り込みが要求されていない場合には、第１ステップ（Ｓ１）では、プログラムカウンタＰＣの内容に従って、命令リード（当該命令の第３ワード）を行い、ＰＣの内容をインクリメントする。制御信号Ｂで、リードしたデータを命令バッファＩＦＩＦＯに格納する。
【０１１５】
第２ステップ（Ｓ２）では、制御信号Ａで、命令コードで指定された汎用レジスタＥＲｎをアドレスとしてデータリードを行う。制御信号Ｂで、リードしたデータをリードデータバッファＤＢＲに格納する。
【０１１６】
第３ステップ（Ｓ３）では、制御信号Ａで、バスを使用したリード／ライトを行わないこと（ｎｏｐ）が指示される。制御信号Ｂで、リードしたデータを、アドレス空間が４Ｇバイトであることに対応して、２ビットシフトし、命令バッファＩＦＩＦＯに保持した当該命令の第２、第３ワードの内容（ＦＩＦＯ２３）を算術論理演算器ＡＬＵで加算する。
【０１１７】
第４ステップ（Ｓ４）では、制御信号Ａで、上記第３ステップの制御に従った、ＡＬＵの加算結果を内部バスａｂ経由で内部アドレスバスＩＡＢに出力して、データのリードを行う。制御信号Ｂで、リードしたデータをＤＢＲに格納する。
【０１１８】
第５ステップ（Ｓ５）では、リードの完了を待ち、第６ステップ（Ｓ６）では、制御信号Ａで、リードデータバッファＤＢＲの内容を内部バスａｂ経由で内部アドレスバスＩＡＢに出力して、命令リードを行う。また、インクリメンタＩＮＣでインクリメントし、結果を内部バスｗｂ１経由で、ＰＣに格納する。制御信号Ｂで、リードしたデータを命令バッファＩＦＩＦＯに格納する。
【０１１９】
第７ステップ（Ｓ７）では、制御信号Ａで、プログラムカウンタＰＣの内容に従って、命令リードを行い、プログラムカウンタＰＣの内容をインクリメントする。制御信号Ｂで、リードしたデータを命令バッファＩＦＩＦＯに格納する。この後、第６ステップでリードした分岐先命令の実行を開始する。
【０１２０】
好適なプログラムの実行の流れは、上記ＢＣＭＰ命令と同じである。上記ＢＣＭＰ命令に対して、比較データが多い、すなわち、入力データのとり得る値が多い場合には、比較データのテーブルを設ける必要がないので、使用するメモリ容量を節約できる。逆に、入力データのとり得る値が離散的である場合には、分岐テーブルもとびとびの領域を使用することになり、メモリの使用効率ないしは使い勝手が低下する。入力データの量やとりうる値に応じて、ＢＣＭＰ命令と、ＪＭＰ命令とを使い分ければよい。
【０１２１】
分岐テーブルの先頭アドレスは、ディスプレースメントとして命令コード中に持つほか、指定された汎用レジスタに持つようにしてもよい。また、データのリードはレジスタ間接のほか、別のアドレッシングモードであってもよい。メモリからリードせず、指定された汎用レジスタの内容を使用するようにしてもよい。レジスタ間接は、実行前にアドレス計算などを行うことによって、任意のアドレスを指定できるから、汎用的に使用できる。
【０１２２】
図８には、ＪＳＲ命令の実行の流れが示される。
【０１２３】
ＪＳＲ命令の実行においては、図７に示されるＪＭＰ命令に対して以下の点が追加されている。
【０１２４】
第２ステップ（Ｓ２）では、汎用レジスタの内容がインクリメンタＩＮＣでインクリメントされる。インクリメント値は、データのサイズに応じて決定される。例えば、バイトサイズの場合は＋１とされる。
【０１２５】
第３ステップでは、制御信号Ａで、インクリメンタＩＮＣでプログラムカウンタＰＣのデクリメントを行う。デクリメント値は、自命令の命令コード長に対応し、−６とされる。制御信号Ｂで、スタックポインタＳＰをデクリメントする。デクリメント値は、スタックするプログラムカウンタＰＣのサイズに対応して、−４とされる。
【０１２６】
第４ステップ（Ｓ４）では、制御信号Ａで、上記デクリメントした結果を算術論理演算器ＡＬＵから内部アドレスバスＩＡＢに出力し、ロングワードのライトを指示する。制御信号Ｂで、上記の通り、自命令の先頭アドレスとしたプログラムカウンタＰＣの内容をスタックに退避する。
【０１２７】
このため、サブルーチン分岐からの復帰命令（リターン命令）実行時、再度この命令を実行する。
【０１２８】
ＪＳＲ命令は、上記高級言語のバイトコードをインタープリトする場合になどに好適である。所望の汎用レジスタＥＲｎに、バイトコードの格納したアドレスを格納する。図８に示されるように、リードしたバイトコードを判定して、当該バイトコードをＣＰＵ１２２で実行（エミュレート）するためのプログラムに分岐することができる。
【０１２９】
分岐したプログラムにおいて、当該バイトコードが複数のバイト長であれば、汎用レジスタＥＲｎをインクリメントする。また、実行を終了すべきバイトコードに対応したプログラムでは、スタックに退避されたプログラムカウンタＰＣをＪＳＲ命令のワード数に対応してインクリメントした後に、リターンすれば、当該ＪＳＲ命令の次の命令から、実行を再開できる。
【０１３０】
インタープリトは、例えば、Ｃソースプログラムにより、図１６（Ｂ）に示されるように記述できる。
【０１３１】
図１６（Ｂ）において、ｇｅｔｂｙｔｅ（）は、上記高級言語のプログラムカウンタ（例えば、汎用レジスタＥＲ６に割当てる）の示すアドレスからバイトデータをリードし、上記高級言語のプログラムカウンタを更新する関数である。
【０１３２】
すなわち、図１６（Ｂ）に示されるプログラムは、上記高級言語のバイトコードをリード（ｃｏｄｅ＝ｇｅｔｂｙｔｅ（））し、ｃｏｄｅに従って分岐（ｓｗｉｔｃｈ（ｃｏｄｅ））し、最後に合流（ｃｏｎｔｉｎｕｅ）する処理を繰り返す（ｗｈｉｌｅ）、というものである。
【０１３３】
上記の通り、ＪＳＲ命令によれば、上記高級言語のバイトコードについて、リード、分岐、合流、繰返し、を実現することができる。
【０１３４】
尚、ｓｗｉｔｃｈ文の値の範囲のチェックは、分岐テーブル上で、値の範囲外に対応する部分に、範囲外の場合の処理を行うプログラムの先頭アドレスを持つようにすればよい。
【０１３５】
図９には、ＣＭＰ／ＡＣＣ命令の実行の流れが示される。
【０１３６】
第１ステップ（Ｓ１）では、制御信号Ａで、プログラムカウンタＰＣの内容に従って、命令リードを行い、プログラムカウンタＰＣの内容をインクリメントする。制御信号Ｂで、リードしたデータを命令バッファＩＦＩＦＯに格納する。また、指定した汎用レジスタＲｄと命令コード中に含まれるイミディエイトデータ（ＦＩＦＯ１）を、ＡＬＵに転送し、ＡＬＵで比較（減算）を行う。
【０１３７】
この比較命令は、比較結果の一致を示すＺフラグの動作が相違されており、制御信号ｃｍｐａｃｃを活性状態にすることで指示される。
【０１３８】
すなわち、直前のＺフラグが１にセットされているときは保持し、直前のＺフラグが０にクリアされているときは、比較結果が一致している場合、１にセットされ、不一致の場合、０にクリアされる。コンディションコードレジスタＣＣＲのＺフラグ論理は、図１７（Ａ）に示されるように既述できる。
【０１３９】
このＣＣＲのＺフラグは、演算ないし転送の実行時、制御信号ｅｘｅが活性状態になって、クロック（ｃｌｋ）の立上りエッジで更新される。第４の命令ＣＭＰ／ＡＣＣ実行時には、制御信号ｅｘｅ、ｃｍｐａｃｃが活性状態になって、直前のＺフラグの状態と、算術論理演算器ＡＬＵの出力する結果ｚ＿ｏｕｔの論理和を格納する。その他の命令では、算術論理演算器ＡＬＵの出力する結果ｚ＿ｏｕｔを格納する。
【０１４０】
いうまでもなく、所要のその他の命令の条件を、ｅｌｓｅ　ｉｆなどとして加えることができる。
【０１４１】
図１０には、ＣＭＰ／ＡＣＣ命令の好適な使用方法であるプログラムの流れが示される。
【０１４２】
入力したデータを判定するため、第１〜第ｎのデータと比較する。例えば、第１〜第３のデータと一致すれば、第１の処理に分岐し、同様の比較分岐を繰返し、第ｎ−ｋ〜第ｎのデータと一致すれば、第ｍの処理に分岐するものである。
【０１４３】
ここで、第１〜第ｎのデータと比較し、例えば、第１〜第３のデータと一致すれば、第１の処理に分岐する処理は、入力データをレジスタＲ３に保持するものとし、第１の処理の先頭アドレスをＬ１として、従来技術に従えば、図１８（Ａ）に示されるようになる。
【０１４４】
これに対して本例によれば、図１８（Ｂ）に示されるようになる。
【０１４５】
すなわち、第１のデータとの比較は通常の比較命令を実行し、比較結果をＺフラグに格納する。第２、第３のデータとの比較は、ＣＭＰ／ＡＣＣ命令を実行し、直前のＺフラグと、比較結果の論理和をＺフラグに格納する。最後に、比較結果の論理和に従って、いずれかの比較が一致していれば、条件分岐命令の条件が成立して、アドレスＬ１に分岐する。それによれば、複数の比較命令に対して条件分岐命令を１個にすることができ、プログラム容量を削減できる。
【０１４６】
従来技術で、第１のデータｄａｔａ１に一致する場合は実行ステップが短くできるが、本例では、第１〜第３のデータのいずれに一致しても実行ステップ数が均等で、全体的に実行ステップ数を短縮することができる。
【０１４７】
上記フローチャートは、例えば、Ｃソースプログラムで実現すると、図１６（Ｃ）に示されるようになる。
【０１４８】
また、ＣＭＰ／ＡＣＣ命令では、Ｃフラグの動作を逆にするようにするとよい。このとき、コンディションコードレジスタＣＣＲのＣフラグの論理記述は、図１７（Ｂ）に示されるようになる。
【０１４９】
直前のＣＭＰ命令で、Ｃフラグが１にセットされ、ＣＭＰ／ＡＣＣ命令で、ＣＭＰ命令ではＣフラグが０にクリアされる条件（〜ｃ＿ｏｕｔ）であれば、Ｃフラグを１にセットするようにする。
【０１５０】
この場合のプログラム例が図１８（Ｃ）に示される。
【０１５１】
すなわち、ＣＭＰ命令で、Ｒ３＜ｄａｔａ２で検出し、Ｃフラグを１にセットされ、ＣＭＰ／ＡＣＣ命令で、Ｒ３≧ｄａｔａ１を検出すれば、Ｃフラグが１にセットされる。この結果を、Ｃフラグが１にセットされていることを条件に分岐する条件分岐命令ＢＣＳを用いて判断する。
【０１５２】
尚、従来技術では、２つの条件に当てはまることを直接判定できないので、図１８（Ｄ）に示されるように、個々に判定される。
【０１５３】
また、Ｃソースプログラムの例としては、図１６（Ｄ）に示されるｉｆ文とされる。
【０１５４】
図１１には、ＳＭＯＶ命令の実行の流れが示される。
【０１５５】
第１ステップ（Ｓ１）では、制御信号Ａで、ＥＲ５をアドレスとしてデータリードを行うとともに、ＥＲ５インクリメントを行う。制御信号Ｂで、リードしたデータをリードデータバッファＤＢＲに格納する。Ｒ３の内容を比較レジスタ（ＣＯＲ）に転送する。リードしたデータとの比較に供される。
【０１５６】
第２ステップ（Ｓ２）では、制御信号Ａで、汎用レジスタＥＲ６をアドレスとしてデータリードを行うとともに、ＥＲ６インクリメントを行う。制御信号Ｂで、第１ステップで、ＤＢＲに格納したデータをＩＤＢに出力する。また、Ｒ４の内容をＡＬＵでデクリメントする。
【０１５７】
次のステップは、第１ステップ（Ｓ１）の制御に基づく、比較結果（ｍａｔｃｈ）によって異なる。
【０１５８】
ｍａｔｃｈ＝１（比較一致）のときは、第３ステップであって、制御信号Ａで、バスをｎｏｐにする。制御信号Ｂで、命令コードの第２ワード（ＦＩＦＯ２）を符号拡張して、ＰＣの内容とＡＬＵで加算する。第４ステップ、第５ステップで、分岐先リードを行う。これは、図６における第４ステップ（Ｓ４’）、第５ステップ（Ｓ５’）と同様である。
【０１５９】
ｍａｔｃｈ＝０（比較不一致）の場合、さらに、第２ステップ（Ｓ２）の制御に基づくＲ４のデクリメント結果ｚ＿ｏｕｔによって異なる。
【０１６０】
ｚ＿ｏｕｔ＝０（カウンタデクリメント結果が０でない）の場合、割り込み要求がなければ、上記第１ステップ（Ｓ１）に戻る。割り込み要求があれば、第３ステップ（Ｓ２３）を経て、割り込み例外処理を実行する。
【０１６１】
ｚ＿ｏｕｔ＝１（カウンタデクリメント結果が０）の場合、第３ステップ（Ｓ１３）を経て、上記第５ステップ（Ｓ５）に遷移して、上記同様の動作を行い、この後、プリフェッチ済みの次の命令を実行する。
【０１６２】
上記同様に、割り込み例外処理に遷移するとき、汎用レジスタＥＲ５、ＥＲ６は次に使用する（未使用の）アドレス、汎用レジスタＲ４には残りの回数が保存されている。また、プログラムカウンタのインクリメントも行っていないので、例外処理で、スタックされるプログラムカウンタは、当該命令のアドレスになる。例外処理ルーチン実行後の復帰命令（リターン命令）によって、再度当該命令を実行する。汎用レジスタの内容は、上記の通り保存されているので、当該命令の動作を継続することができる。
【０１６３】
比較器１１を用いず、固定的なデータと比較するようにしてもよい。例えば、Ｈ’００などを検出するようにすることもできる。文字列を転送する場合に、終端を示すＮＵＬＬ（Ｈ’００）を検出するのに好適である。
【０１６４】
図１３には、本発明が適用されたマイクロコンピュータの別の構成例が示される。
【０１６５】
図１３に示されるマイクロコンピュータ１３０は、スマートカードやＩＣカードに適用される。
【０１６６】
図１３に示されるマイクロコンピュータ１３０は、特に制限されないが、外部との間で信号の入出力を可能とする入出力回路（Ｉ／Ｏ）１３１、読み出し専用のＲＯＭ（リード・オンリー・メモリ）１３２、ＥＥＰＲＯＭ（エレクトリカリ・イレーザブル・アンド・プログラマブル・リード・オンリ・メモリ）１３３、ランダムアクセス可能なＲＡＭ（ランダム・アクセス・メモリ）１３４、暗号処理を行うための暗号処理回路１３５、及びプログラムに従って所定の演算処理を行うためのＣＰＵ１３６を含み、それらがバス１３７によって互いに信号のやり取りが可能に結合される。また、リセット（ＲＥＳ）信号の入力端子、クロック（ＣＬＫ）信号の入力端子、電源（Ｖｃｃ、Ｖｓｓ）の各入力端子が設けられている。
【０１６７】
アプリケーションプログラムである上記高級言語のプログラムが入出力回路１３１を介して外部から入力される。通常、入力時には上記高級言語のプログラムは暗号化されている。このため、入力されたプログラムは、暗号処理回路１３５で解読され、その結果がＥＥＰＲＯＭ１３３に格納される。ＲＯＭ１３２上に格納されたインタープリタ用プログラムによって、上記高級言語のプログラムが実行される。
【０１６８】
上記のＣソースプログラムを、従来技術による命令で記述すれば、図１８（Ｅ）に示されるようになる。
【０１６９】
例えば、ＭＯＶ．Ｂ命令を２バイト、ＳＨＬＬ命令を２バイト、ＭＯＶ．Ｌ命令を８バイト、ＪＳＲ命令を２バイト、ＢＲＡ命令を２バイト、合計１６バイトなどとなる。
【０１７０】
これに対して、本例におけるＪＳＲ命令を用いれば、上記の通り、６バイトで実現できる。
【０１７１】
また、同時に実行ステップ数も短縮できる。この処理は、上記高級言語のプログラムの実行１ステップ毎に繰返されるから、これによって、ＩＣカードないしスマートカードとしての応答時間を短縮できる。
【０１７２】
図１４には、本例のＣＰＵ１２２，１３６の開発環境が示される。
【０１７３】
使用者は、各種エディタなどを用いて、Ｃ言語乃至アセンブリ言語でプログラムを作成する。これは通常、複数のモジュールに分割して作成される。
【０１７４】
Ｃコンパイラ１４１は、使用者の作成したそれぞれのＣ言語ソースプログラムを入力し、アセンブリ言語ソースプログラム乃至オブジェクトモジュールを出力する。
【０１７５】
アセンブラ１４２は、アセンブリ言語ソースプログラムを入力し、オブジェクトモジュールを出力する。
【０１７６】
リンケージエディタ１４３は、上記Ｃコンパイラ１４１やアセンブラ１４２によって生成された複数のオブジェクトモジュールを取り込んで、各モジュールの外部参照や相対アドレスなどの解決を行い、１つのプログラムに結合して、ロードモジュールを出力する。
【０１７７】
ロードモジュールは、シミュレータデバッガ１４３に入力され、パーソナルコンピュータなどのシステム開発装置上で、ＣＰＵの動作がシミュレーションされる。このシミュレーション結果を見ながらプログラムの解析や評価を行うことができる。また、エミュレータに入力して、実際の応用システム上などで動作する、いわゆるインサーキットエミュレーションを行い、マイクロコンピュータ全体としての、実動作の解析や評価を行うことができる。
【０１７８】
さらに、ロードモジュールをＰＲＯＭライタ１４５に入力して、マイクロコンピュータの内蔵ＲＯＭがフラッシュメモリなどの場合や、外部のフラッシュメモリなどに、作成したプログラムをロードすることができる。必要に応じて、オブジェクトコンバータなどによって、所望のフォーマットに変換する。
【０１７９】
このほかに、ライブラリアンとして、汎用的なサブルーチンなどを提供することもできる。本発明の命令を適用することで、従来は、ライブラリとして提供していた処理を容易にインライン展開して、高速化できる。
【０１８０】
図１５には、上記マイクロコンピュータ１２０が適用されたシステムの第１の例である光ディスクドライブシステムが示される。
【０１８１】
６０１はＣＤ又はＤＶＤなどの光ディスクであり、この光ディスク６０１はスピンドルモータ６０２の回転駆動によって所定の速度で回転される。６０３はドライバであり、このドライバ６０３は、上記スピンドルモータを駆動する。６０４はピックアップであり、このピックアップ６０４は、回転する上記光ディスク６０１から記憶情報を読み取る。６０７は、リードチャネルであり、このリードチャネル６０７は、上記ピックアップ６０１の読み取り情報を増幅するアンプを含む。６０５はアクチュエータモータであり、このアクチュエータモータ６０５は、上記ピックアップ６０４の位置を移動させる。６０８はドライバであり、このドライバ６０８は、上記アクチュエータモータ６０５のを駆動する。６０６はスレッドモータであり、このスレッドモータ６０６は、上記ピックアップ６０４とアクチュエータモータ６０５とをスライドさせる。６０９はドライバであり、このドライバ６０９は、上記スレッドモータ６０６を駆動する。６１０は信号処理用半導体集積回路であり、この信号処理用半導体集積回路６１０は、上記光ディスク６０１から読み出された信号を処理したり、上記ドライバ６０３，６０８，６０９を制御する機能を有する。６１１はバッファメモリであり、このバッファメモリ６１は、リードチャネル６０７を介して取り込まれたデータを格納することによってデータのバッファリングを行う。６１３はマイクロコンピュータであり、このマイクロコンピュータ６１３は、この光ディスクドライブ装置６００の全体的な動作制御を司る。このマイクロコンピュータ６１３には、図１２に示されるマイクロコンピュータ１２０が適用される。
【０１８２】
信号処理用半導体集積回路６１０は、光ディスク６０１のサーボ制御に用いられ、トラッキングエラー信号（ＴＥ）や、フォーカスエラー信号（ＦＥ）などをサーボ用Ａ／Ｄ変換器で検出して、サーボ用Ｄ／Ａ変換器でアクチュエータモータ６０５、スレッドモータ６０６などの制御を行うとともに、読み出したデータを復調及び復号化し、ホストインタフェースを介して、パーソナルコンピュータなどのホストシステムへ、復調及び復号化したデータを出力する。
【０１８３】
光ディスク６０１の記憶情報は、ピックアップによって読み取られる。ピックアップ６０４は、発光素子（レーザダイオード）によってレーザ出力を行い、光ディスク６０４からの反射光を受光素子（フォトダイオード）で検出する。ピックアップ６０４の位置は、アクチュエータモータ６０５と、スレッドモータ６０６によって制御される。ピックアップ６０４から出力された信号は、リードチャネル６０７で増幅された後にディジタル信号に変換される。マイクロコンピュータ６１３は、シリアルコミュニケーションインタフェースＳＣＩ及び入出力ポートＩＯＰを介してリードチャネル６０７の動作を制御する。
【０１８４】
アクチュエータモータ６０５に対しては、サーボ用Ｄ／Ａ変換器の出力（ＳＶＤＡ）で、ドライバ６０８を介して制御する。アクチュエータモータ６０５は２軸分を備え、光ディスク６０４に垂直方向のフォーカス制御と、半径方向のトラッキング制御を行うため、サーボ用Ｄ／Ａ出力を２本用いる。検出信号と基準信号との誤差が検出され、それに基づいて、スピンドルモータ６０２の制御が行われる。
【０１８５】
信号処理用半導体集積回路６１０に内蔵されるホストインタフェースは、特に制限されないが、上記ＡＴＡＰＩインタフェースが採用される場合には、エンハンスドＩＤＥバスなどのバスを介して、パーソナルコンピュータなどのホストシステムと接続され、命令及びパケット命令などの取り込みが可能とされる。マイクロコンピュータ６１３は、上記命令及びパケット命令を読み出して解析し、それに基づく所定の動作制御、例えばステータスなどの表示と、データの入出力などを行う。また、信号処理用半導体集積回路６１０に内蔵されるタスクファイルレジスタのリード又はライトを検出して、低消費電力状態を解除したりする。
【０１８６】
光ディスク６０１がＣＤの場合、ピックアップ６０４で読み出された信号は、リードチャネル６０７で増幅された後、ディジタル波形に整形される。この出力（ＤＩＮ）は、本信号処理用半導体集積回路６１０の復調回路で、ディジタル復調されてからデインタリーブされることで、その配列が元に戻され、エラー訂正や補間が実施される。読み出された信号がデータの場合には、さらにデスクランブルされて誤り訂正などが行われ、バッファメモリ６１１に蓄えられた後、本信号処理用半導体集積回路６１０内のホストインタフェースから出力される。光ディスク６０１から読み出された信号がオーディオデータの場合は、それがバッファメモリに蓄えられた後、本信号処理用半導体集積回路６１０内のオーディオ用Ｄ／Ａ変換器でアナログ信号に変換され、後段のアンプ６１２で増幅された後にヘッドフォン駆動用のオーディオ信号として出力される。また、ディジタルオーディオデータの出力も可能にされる。
【０１８７】
光ディスク６０１がＤＶＤの場合にも、上記ＣＤの場合と同様に、復調回路及び復号回路で処理が施された後、ホストインタフェースを介して出力される。
【０１８８】
マイクロコンピュータ６１３は、システムコントロール用であり、所定のレジスタのリード又はライトや、シリアルコミュニケーションインタフェースＳＣＩによる命令出力、入出力ポートＩＯＰからの出力などによって、各部の動作を制御する。
【０１８９】
また、光ディスク６０１を載置するためのトレイ（図示せず）に対しては、オープンスイッチ信号、クローズスイッチ信号などが入出力ポートＩＯＰを介して伝達される。イジェクトスイッチの操作情報が割り込み要求信号としてマイクロコンピュータ６１３に入力される。上記トレイを動かすためのローディングモータは、マイクロコンピュータ６１３に内蔵されているパルス幅変調タイマの出力信号ＰＷＭによって駆動される。
【０１９０】
さらに、ＬＥＤ（発光ダイオード）６１６は、入出力ポートＩＯＰの出力信号で駆動され、このドライブが組み込まれるパーソナルコンピュータなどのシステムに適合するように、入出力ポートＩＯＰやアナログ入力によって、オプション選択用の各種設定（ＯＰＴ）情報６１５がマイクロコンピュータ６１３に取り込まれ、シリアルコミュニケーションインタフェースＳＣＩによって評価用のシステム（ＥＱＰ）６１４などとのインタフェースがとられる。
【０１９１】
ホストインタフェース３０による、ホストシステムからのデータ転送命令入力時の動作は概略以下の通りである。
【０１９２】
まず、ホストシステムはタスクファイルレジスタに所定のパラメータを設定し、「Ａ０」命令を命令レジスタにライトし、ホストインタフェースからの要求によって、パケット命令をライトする。パケット命令は、所定のパケット命令レジスタに格納される。
【０１９３】
このとき、割り込み要求が発生し、これに呼応して、マイクロコンピュータ６１３は、命令をリードして、その内容を解析する。データ転送命令の場合は以下の通りになる。
【０１９４】
要求されたデータが、バッファメモリ６１１上に存在するか否かを判定する。バッファメモリ上に存在しない場合は、ディスクの再生を行う。
【０１９５】
バッファメモリ６１１にデータが準備できると、ホストデータ転送の設定を行った後、データ転送を起動する。バッファメモリからデータをリードし、一時ＦＩＦＯに蓄え、ホストインタフェースに出力する。
【０１９６】
データ転送が完了したか確認し、データ転送が終了すると、タスクファイルレジスタにステータスの表示を行う。
【０１９７】
ホストシステムは、ステータスの確認を行う。必要に応じて、次の命令を発行する。これを繰り返す。
【０１９８】
上記命令の解析は、命令として定義されているコード（ＣＭＤ０、ＣＭＤ１、…）と順次比較され、一致していれば、当該命令の処理プログラムに分岐することによって行われる。
【０１９９】
ここで従来技術に従えば、図１９（Ａ）に示されるような命令記述になる。
【０２００】
このとき、ＣＭＰ命令、ＢＥＱ命令がそれぞれ２バイト、４バイトの命令長であれば、比較分岐に、命令の種類×６バイトの命令を必要とする。
【０２０１】
これに対して、本例の命令をＢＣＭＰ命令として、これを適用すれば、図１９（Ｂ）に示されるようになる。
【０２０２】
上記の通り、ＢＣＭＰ命令の後に、入力した値が範囲外であった場合の処理プログラムを記述する。上記のほかに、ＢＣＭＰ命令が汎用レジスタＥＲ５、ＥＲ６で指定するデータテーブルが必要である。これは例えば、図１９（Ｃ）に示されるように既述することができる。
【０２０３】
上記の通り、ＢＣＭＰ命令は、使用する汎用レジスタを固定しており、汎用レジスタの指定フィールドを持たないから、２バイトの命令長とすることができ、データテーブルが別に配置されるので、Ｒ４、ＥＲ５、ＥＲ６の設定命令コード長を１６バイトとして、１８バイト＋命令の種類×５バイト、で実現できる。
【０２０４】
ＢＣＭＰ命令の第１の変形例は、分岐テーブルが２バイト単位にできるから、１８バイト＋命令の種類×３バイト、で実現できる。
【０２０５】
１つの分岐テーブルを複数回使用する場合は前者、１つの分岐テーブルを１回のみ使用する場合は後者を使用すればよい。
【０２０６】
実行ステップ数は、いずれの場合も、命令フェッチの回数を抑止できるので、従来技術に対して、短縮可能である。
【０２０７】
上記動作において、転送データがバッファメモリに存在する（連続リード）場合など、本発明によって、命令解析が高速化できれば、光ディスクドライブのアクセス時間の短縮に寄与できる。
【０２０８】
上記の例によれば、以下の作用効果を得ることができる。
【０２０９】
（１）ＢＣＭＰ命令の実行により、比較分岐が行われるため、例えばパーソナルコンピュータなどのホストから命令を入力して、命令を比較すべきデータとして、比較分岐を行うようにして、命令の入力から、所要の処理の実行までの時間短縮を図ることができる。
【０２１０】
（２）ＪＭＰ命令の実行において、指定されたレジスタをアドレスとして、メモリからデータをリードし、リードしたデータを必要に応じて拡張し、シフトし、指定されたアドレス情報（ディスプレースメント）に加算して、分岐テーブルをリードし、リードした内容を分岐先アドレスとして分岐する。命令の順序に、対応する処理プログラムの先頭アドレスを格納した分岐テーブルを持つことによって、入力した命令を複数のデータと比較することなく、所要のプログラムへの分岐を可能とし、処理速度を向上できる。
【０２１１】
（３）ＪＳＲ命令の実行を可能とするため、データをリードし、リードデータに基づき分岐テーブルを参照して、自命令の先頭アドレスをスタックに退避し、リターン時に自命令を再度実行可能なように、サブルーチン分岐する手段が設けられる。バーチャルマシンをエミュレートする場合、あるいはインタープリトを行いつつ、実行する場合、プログラム全体を１命令とすることができる。その他は、ＪＭＰ命令の場合と同様とされる。バーチャルマシンをエミュレートする場合に、入力された命令をインタープリトする処理を１命令で実行できる。
【０２１２】
（４）入力された命令をデコードすることによって制御信号を生成する制御部１００と、この制御部１００で生成された制御信号に基づいて上記命令を実行するための実行部２００とを含んでデータ処理装置が構成されるとき、上記実行部１００は、ＣＭＰ／ＡＣＣ命令が上記制御部１００でデコードされることで生成された制御信号に従って、上記比較累積命令を実行するための実行手段を有する。この実行手段は、データの比較結果を示すフラグの記憶手段と、上記比較累積命令のデータ比較を行う。上記フラグの直前の状態と上記比較累積命令のデータ比較結果は上記フラグに反映されることによって、上記フラグを条件分岐の分岐条件とされる。データの複数回の比較結果の一致の論理和を蓄積可能で、複数の比較に対して、条件分岐命令を１個にすることができ、プログラム容量を削減でき、実行ステップ数も短縮できる。
【０２１３】
（５）ＳＭＯＶ命令の実行においては、データのリード／ライトが行われ、設定回数に達すると次の命令が実行され、途中で所定のデータを検出すると、分岐アドレスを生成して分岐する命令が実行される。実行途中で割込み要求が発生した場合には、比較が所定の状態である（比較一致）ときは、分岐まで実行を完了して、割込み例外処理を実行するようにするとともに、比較が所定の状態でない（比較不一致）ときは、汎用レジスタの途中の状態を保持し、プログラムカウンタも例外処理からの復帰後に、再実行可能なように保持して、割込み例外処理が実行される。このため、使い勝手が損なわれることもなく、割込み応答時間が長くなることもない。
【０２１４】
以上本発明者によってなされた発明を具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【０２１５】
例えば、命令の動作の流れは一例を示したものであって、パイプライン構成など基本アーキテクチャに則して、種々変更可能である。
【０２１６】
また、命令コードの基本単位１６ビットに限定する必要はなく、８ビットあるいは３２ビットなど任意のビット幅とできる。その他、アドレス空間の大きさ、プログラムカウンタのビット数、コンディションコードの構成、フラグの種類、汎用レジスタのビット数・本数、命令体系や命令セットすなわち、命令の種類やアドレッシングモードの種類及びこれらの組合せなども任意にできる。命令フォーマットは任意に変形できる。
【０２１７】
ＪＭＰ命令、ＪＳＲ命令の分岐テーブルの先頭を示すディスプレースメントは、３２ビットである必要はなく、例えば１６ビットなどでもよい。ＢＣＭＰ命令、ＣＭＰ／ＡＣＣ命令、ＳＭＯＶ命令のデータサイズは、バイト、ワード、ロングワードなど任意に変更できる。
【０２１８】
簡単のために、バス幅を３２ビットとし、命令リードを１６ビット単位としたが、命令リードを３２ビット単位にして高速化することができる。このような例は、特願平１１−１６７８１２に記載されている。また、バス幅を１６ビットとして、ロングワードのリード／ライトを、ワード単位の２回のリード／ライトで実行するようにしてもよい。このような例は、特願平１１−３２０５１８に記載されている。
【０２１９】
命令バッファＩＦＩＦＯのＦＩＦＯの容量や、詳細な構造は任意にすることができる。ＦＩＦＯ構造である必要はなく、命令プリフェッチバッファとしてもよい。
【０２２０】
演算器や比較器の構成、制御信号の種類、内部バスの本数や種類なども任意にできる。
【０２２１】
以上の説明では主として本発明者によってなされた発明をその背景となった利用分野であるシングルチップマイクロコンピュータに適用した場合について説明したが、本発明はそれに限定されるものではなく、各種データ処理装置に広く適用することができる。
【０２２２】
本発明は、少なくとも入力された命令をデコードすることによって制御信号を生成し、その制御信号に基づいて命令を実行することを条件に適用することができる。
【０２２３】
【発明の効果】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【０２２４】
すなわち、所望の処理プログラムに分岐するための処理が、比較分岐（ＢＣＭＰ）命令や、分岐（ＪＭＰ）命令、比較累積（ＣＭＰ／ＡＣＣ）命令、あるいは比較転送（ＳＭＯＶ）命令が実行されることで可能とされるため、所望の処理プログラムに分岐するための処理の高速化を図ることができる。また、所望の処理プログラムに分岐するための処理が、上記比較分岐（ＢＣＭＰ）命令や、分岐（ＪＭＰ）命令、比較累積（ＣＭＰ／ＡＣＣ）命令、あるいは比較転送（ＳＭＯＶ）命令などの短い命令コードで実現することができるため、プログラムのサイズ低減を図ることができる。
【図面の簡単な説明】
【図１】本発明にかかるデータ処理装置の一例とされるマイクロコンピュータに含まれるＣＰＵの構成例ブロック図である。
【図２】上記ＣＰＵに内蔵される汎用レジスタと拡張レジスタ及びコントロールレジスタの構成例説明図である。
【図３】上記マイクロコンピュータにおける命令フォーマット例の説明図である。
【図４】上記マイクロコンピュータでのＢＣＭＰ命令の実行の流れを示すフローチャートである。
【図５】上記ＢＣＭＰ命令の好適な使用例の説明図である。
【図６】上記マイクロコンピュータでのＢＣＭＰ命令の実行の別の流れを示すフローチャートである。
【図７】上記マイクロコンピュータでのＪＭＰ命令の実行の流れを示すフローチャートである。
【図８】上記マイクロコンピュータでのＪＳＲ命令の実行の流れを示すフローチャートである。
【図９】上記マイクロコンピュータでのＣＭＰ／ＡＣＣ命令の実行の流れを示すフローチャートである。
【図１０】上記ＣＭＰ／ＡＣＣ命令の好適な使用例の説明図である。
【図１１】上記マイクロコンピュータでのＳＭＯＶ命令の実行の流れを示すフローチャートである。
【図１２】本発明にかかるデータ処理装置の一例であるシングルチップマイクロコンピュータの構成例ブロック図である。
【図１３】本発明にかかるデータ処理装置の一例であるシングルチップマイクロコンピュータの別の構成例ブロック図である。
【図１４】上記ＣＰＵの開発環境の説明図である。
【図１５】上記マイクロコンピュータが適用された光ディスクドライブシステムの構成例ブロック図である。
【図１６】上記マイクロコンピュータで実行されるＣソースプログラムの説明図である。
【図１７】上記マイクロコンピュータのＣＰＵのコンディションコードレジスタのＺ及びＣフラグ論理の説明図である。
【図１８】上記マイクロコンピュータで実行されるアセンブリプログラム及び比較対象とされるアセンブリプログラムの説明図である。
【図１９】上記マイクロコンピュータで実行されるアセンブリプログラム及びその比較対象とされるアセンブリプログラムとの説明図である。
【符号の説明】
１１　比較器
１００　制御部
１２０　マイクロコンピュータ
１２１　クロック発振器
１２２　ＣＰＵ
１２３　Ａ／Ｄ変換器
１２４　割り込みコントローラ
１２５　タイマ
１２６　シリアルコミュニケーションインタフェース
１２７　バスコントローラ
１２８　ＲＯＭ
１２９　ＲＡＭ
２００　実行部
【図１】
2004038772.tif 000003
【図２】
2004038772.tif 000004
【図３】
2004038772.tif 000005
【図４】
2004038772.tif 000006
【図５】
2004038772.tif 000007
【図６】
2004038772.tif 000008
【図７】
2004038772.tif 000009
【図８】
2004038772.tif 000010
【図９】
2004038772.tif 000011
【図１０】
2004038772.tif 000012
【図１１】
2004038772.tif 000013
【図１２】
2004038772.tif 000014
【図１３】
2004038772.tif 000015
【図１４】
2004038772.tif 000016
【図１５】
2004038772.tif 000017
【図１６】
2004038772.tif 000018
【図１７】
2004038772.tif 000019
【図１８】
2004038772.tif 000020
【図１９】
2004038772.tif 000021