(57)【要約】【課題】論理的・物理的規模の増大を最小限とし、既存のＣＰＵと互換性を維持しつつ、メモリ上の任意のアドレスのデータのビットの状態を判定して、分岐及びサブルーチン分岐を可能にする。【解決手段】メモリ上のデータのビットの状態に応じた分岐を行なう命令を、動作を規定するオペレーションフィールドを複数に分割し、これを命令コードの基本単位上の別のワードで実現し、かかるワードを、独立して使用可能な別の命令の命令コード、乃至、別の命令の命令コードの一部と共通にする。この命令コードの第１のワードはプログラム上解放されていないラッチ手段（ＴＲＤ）とメモリの間でデータ転送を行なう。第２のワードは前記ラッチ手段の所望のビットの状態を判定して分岐を行なう。上記ラッチ手段には、指定されたビットの状態を判定する手段(３８)を設け、ＡＬＵなどに読み出したりすることなく、所定のビットの状態を判定できるようにする。【選択図】図５３
2006313561.tif 000002
【特許請求の範囲】
【請求項１】
命令セットに含まれる命令コードを読み込んで動作するデータ処理装置であって、
アドレス空間上のデータを読み込んで、前記データの所定のビットが所定の状態であることに呼応して分岐を行なう分岐命令を前記命令セットに含み、
前記分岐命令は、命令コードの基本単位の複数倍の情報を含んで構成され、
前記分岐命令の第１の基本単位情報は、アドレス空間上の指定されたデータを読み込んで、プログラミング上解放されていないラッチ手段に格納する処理を指示し、
前記分岐命令の第２の基本単位情報は、前記ラッチ手段に格納したデータの所定のビットを検査して、検査結果に従って分岐するかしないかの処理を指示するデータ処理装置。
【請求項２】
前記第１の基本単位情報は、アドレス空間上のデータの指定方法に応じて複数種類の中から使用可能とされ、
前記第２の基本単位情報は、分岐先アドレスの指定方法に応じて複数種類の中から使用可能とされ、
前記分岐命令は、前記第１の基本単位情報と第２の基本単位情報の種類の組合せに応じた動作を指示する請求項１記載のデータ処理装置。
【請求項３】
演算結果を反映するフラグ手段を更に有し、
前記第２の基本単位情報は、独立した条件分岐命令として機能することが可能であって、前記独立した条件分岐命令として機能する時には、前記フラグ手段の所定の単数又は複数のビットを検査し、その検査結果に従って分岐する指示を与える請求項１又は２記載のデータ処理装置。
【請求項４】
命令セットに含まれる命令コードを読み込んで動作するデータ処理装置であって、
メモリとレジスタ間のデータ転送を行う転送命令と、レジスタに格納したデータの所定のビットを検査して、検査結果に従って分岐するかしないかの動作を行う分岐命令とを前記命令セットに含み、
前置命令コード、前記転送命令の命令コード、及び前記分岐命令の命令コードを順次読み込んで、1つの命令として解釈し、アドレス空間上の指定されたデータを読み込んで、プログラミング上解放されていないラッチ手段に格納し、前記ラッチ手段に格納したデータの所定のビットを検査して、検査結果に従って分岐するかしないかの動作を行うデータ処理装置。
【請求項５】
演算結果を反映するフラグ手段を更に有し、前記前置命令コードと共に一つの命令として解釈された前記転送命令は、前記フラグ手段の変化を抑止する請求項４記載のデータ処理装置。
【請求項６】
前記ラッチ手段に結合されたビット検査手段を有し、
前記ビット検査手段は、前記前置命令コードと共に一つの命令として解釈される前記分岐命令の所定のビットに従って、検査結果の出力を行い、
前記前置命令コードと共に一つの命令として解釈される前記分岐命令は、前記検査結果の出力に呼応して、分岐するかしないかの判定を行う請求項４又は５項記載のデータ処理装置。
【請求項７】
命令コードをデコードするデコード手段を有し、
前記デコード手段は、前記前置命令コードと共に一つの命令として解釈される前記転送命令を解読して、後続の分岐命令の命令コードに対して動作の変更を指示する制御信号を発生する請求項４乃至６の何れか1項記載のデータ処理装置。
【請求項８】
前記前置命令コードと共に一つの命令として解釈される前記転送命令及び分岐命令を実行するとき、前記転送命令の命令コードで規定される処理と前記分岐命令の命令コードで規定される処理との間に割込み処理の挿入を禁止する請求項４乃至７の何れか１項記載のデータ処理装置。
【請求項９】
命令セットに含まれる命令コードを読み込んで動作するデータ処理装置であって、
アドレス空間上のデータを読み込み、読み込んだデータを用いてデータ処理を行う複合命令を前記命令セットに含み、
前記複合命令は、命令コードの基本単位の複数倍の情報を含んで構成され、
前記複合命令の第１の基本単位情報は、アドレス空間上の指定されたデータを読み込んで、プログラミング上解放されていないラッチ手段に格納する処理を指示し、
前記複合命令の第２の基本単位情報は、前記ラッチ手段に格納したデータを用いた所定のデータ処理を指示するデータ処理装置。
【請求項１０】
前記ラッチ手段はテンポラリデータレジスタ又はテンポラリアドレスレジスタである請求項９記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコンピュータ、マイクロプロセッサ、データプロセッサ、ＣＰＵ（セントラル・プロセッシング・ユニット）等のデータ処理装置に係り、詳しくは、レジスタアーキテクチャ、上位互換性、演算性能の拡張等に関し、例えば、シングルチップマイクロコンピュータにおけるソフトウェア資産の有効活用と演算性能の拡張、使い勝手の向上等に適用して有効な技術に関するものである。
【背景技術】
【０００２】
半導体集積回路化されたマイクロコンピュータは、アドレス空間の拡張や、命令セットの拡大、高速化などが図られてきた。マイクロコンピュータのＣＰＵ（中央処理装置）は、ソフトウェアによって、その機能が定義されているから、アドレス空間の拡張や、命令セット拡大、高速化などを図ったマイクロコンピュータにおいても、既存のマイクロコンピュータのソフトウェア資産を有効に利用できることが望ましい。
【０００３】
このため、オブジェクトレベルで互換性を保ちつつ、アドレス空間の拡張や、命令セット拡大を実現した例として、例えば、特開平６−５１９８１号公報に記載のマイクロコンピュータ等がある。この中で、いわゆるＲＩＳＣ（Reduced Instruction Set Computer）アーキテクチャのようなロードストア型アーキテクチャを採用することが、命令セットの拡張を図る上で有効であることが示されている。
【０００４】
ロードストア型アーキテクチャでは、演算処理は、ＣＰＵの汎用レジスタを用いて行なう。すなわち、メモリ上のデータを直接的に用いて演算は行なわず、一旦メモリ上のデータを汎用レジスタに転送し、転送されたデータに演算を行なった後、汎用レジスタ上の演算結果をメモリ上に書き戻す。したがって、その処理で使用していない汎用レジスタがあれば、当該汎用レジスタにメモリ上のデータを転送すればよい。しかしながら、汎用レジスタの数には限りがあり、マイクロコンピュータ内部の処理状況によっては、全ての汎用レジスタを使用している場合もある。全ての汎用レジスタを使用している場合、換言すれば、全ての汎用レジスタの内容が保持されなければならないとき、前記メモリ上のデータに対する演算を行なう前に、汎用レジスタの内容をスタック領域などに退避してから、所要の処理を行ない、この処理を終了した後は、中断した処理を再開する為に、前記退避した汎用レジスタの内容を復帰しなければならない。
【０００５】
【特許文献１】特開平６−５１９８１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
《検討課題Ａ》
本発明者は、検討課題Ａとして互換性を維持して、ソフトウェア資産を有効に利用できるようにしつつ、ＣＰＵの汎用レジスタを増加することを検討した。尚、この検討課題Ａに関する事項は、本願における国内優先権主張の第１の基礎出願である特願平１１−１２３４５０号の明細書に既に開示した内容であるが、未だ公知ではない。この検討課題Ａについて述べる。
【０００７】
前記ロードストアアーキテクチャを採用したＣＰＵにおいては、データ処理はＣＰＵの汎用レジスタが中心になるから、汎用レジスタが多いことは都合がよい。これによって、プログラムの容易性や高速化を図ることができる。
【０００８】
しかしながら、何れの汎用レジスタに対して処理を実行するかは、一般に、命令コードで指定するから、汎用レジスタ数に対応したレジスタ指定フィールドを命令コード中に保持することが必要である。例えば、汎用レジスタ１６本に対しては、レジスタ指定フィールド４ビットを必要とする。汎用レジスタを増加しようとすれば、レジスタ指定フィールドが増加する。汎用レジスタを４倍の６４本とすれば、レジスタ指定フィールド６ビットが必要になる。処理対象は一般に２つ（ソースとデスティネーション）のデータになるから、レジスタ指定フィールドは２倍のビット数が必要になる。
【０００９】
命令の基本単位を例えば１６ビット（以下ワードと呼ぶ）とすれば、レジスタ指定フィールドで占有されるビット数のわりあいが多くなり、結局、命令コード長を増加させなければならなくなる。命令コードを長くすれば、処理速度を低下させることにつながってしまう。ＣＰＵは命令をリードして実行するが、リードすべき命令のワード数（ビット数）が大きくなれば、命令自体のリード回数も増加するからである。また、レジスタ指定フィールドを拡大することは、既存のＣＰＵの既存の命令と相容れず、既存のＣＰＵとの互換性を保つことを困難にしてしまう。
【００１０】
汎用レジスタを見掛上増やす技術として、汎用レジスタをバンクと呼ばれるグループに分け、いずれかのバンクを排他的に選択するようにする、レジスタバンク方式がある。いずれのバンクを選択するかは、制御レジスタや制御命令などによって指定する。このため、命令コードには、バンク内の汎用レジスタに対応するレジスタ指定フィールドのみを持ち、命令コード長の増加を抑止できる。しかし、前記レジスタバンクを切り替えるための命令が必要になり、また、プログラム作成に当っては、どのバンクを選択しているかを意識しなければならず、プログラムの容易性を損いやすい。同時に使用できる汎用レジスタ数は増えていないので、データ量の多いタスクや少ないタスクなどがある場合に、相互に汎用レジスタの割当てを融通し合うなどのことがし難い。
【００１１】
検討課題Ａに関する本発明の目的は、上位互換性を維持しつつ、汎用レジスタの数を増加させることができるデータ処理装置を提供することにある。
【００１２】
検討課題Ａに関する本発明の別の目的は、全体的な命令コードを増加させることなく、汎用レジスタ数を増加させることができるデータ処理装置を提供することにある。
【００１３】
検討課題Ａに関する本発明のその他の目的は、ソフトウェア資産に対して上位互換性を維持しつつ、汎用レジスタ数の増加によるプログラム作成の容易化とＣＰＵの処理性能の向上とを実現できるデータ処理装置を提供することにある。
【００１４】
《検討課題Ｂ》
本発明者は、検討課題Ｂとして、ロードストア型等のアーキテクチャに対する互換性を維持してそのソフトウェア資産を有効に利用（ソフトウェア資産に対する上位互換を達成）できるようにし、また、ロードストアアーキテクチャ若しくはＲＩＳＣアーキテクチャが動作速度の改善に有利であるというような、既存のＣＰＵの利点を保ちながら、メモリ上のデータを直接的に演算可能とすることについて検討した。尚、この検討課題Ｂに関する事項は、本願における国内優先権主張の第２の基礎出願である特願平１１−１５１８９０号の明細書に既に開示したが、その内容は未だ公知ではない。この検討課題Ｂについて述べる。
【００１５】
メモリ上のデータを直接的に演算可能とすることによって得られると考えられる利点は以下の通りである。
【００１６】
汎用レジスタにデータをロードして演算を行なうだけでなく、汎用レジスタへのデータロードを経ることなくメモリ上のデータに対して演算が可能であれば、ＣＰＵ若しくはマイクロコンピュータが使用可能な全てのデータ、換言すれば、マイクロコンピュータのユーザがプログラム上で指定可能な全てのデータに対して、演算が可能になるから、マイクロコンピュータの使い勝手、即ち機能が向上することになる。
【００１７】
この場合、ＣＰＵが実行する命令は、データの所在と、その処理内容を指定する。データの所在を指定する仕方をアドッレシングモードと呼ぶ。特定のアドッレシングモードでのみメモリ上のデータの演算を可能にするのでは、プログラミング上の制約が発生し、使い易さを十分に向上し得ない。既存のＣＰＵでデータをアクセスするアドレッシングモードの任意の組合せによってメモリ上のデータを演算できることが望ましいと考えられる。
【００１８】
また、メモリ上のデータを直接演算可能とすることができたとしても、使用頻度の高いデータは汎用レジスタ上に配置して処理することが望ましい。汎用レジスタは、物理的にＣＰＵの一部として構成されるから、メモリに比べて高速にアクセスでき、メモリ上のデータに比べて高速に処理できる。使用頻度の低いデータはメモリ上に配置したまま、処理すればよい。ＣＰＵの処理に直接関係のない汎用レジスタの退避／復帰を行なわなくてよい。それらによって、ＣＰＵの処理速度を全体として向上させることができると考えられる。
【００１９】
通常、ＣＰＵやマイクロコンピュータによって処理されるデータの量は、ＣＰＵの汎用レジスタの数よりも多い。また、タスクの数は複数存在し、これを時分割で実行することになるから、タスクを切り替えたとき、メモリ上のデータを直接的に演算できれば、退避／復帰したりすることなく、メモリに対して即座に処理を実行することが可能になる。退避・復帰の処理を伴いながらも汎用レジスタを用いて演算を高速に行なう処理手法と織り交ぜながら、都合のよい手法を選択することができる。同様に、割込み処理の時も、汎用レジスタを退避したりすることなく、即座にメモリに対して処理を実行することが可能になり、割込みに応答して所望の処理を行なうまでの応答時間を短縮することも可能になる。割込みの応答時間を短縮することによって、種々の機器を制御する場合の時間的な精度、いわゆるリアルタイム性を向上することが可能になる。
【００２０】
同一の処理ルーチンをループする（繰り返す）ようなプログラムを作成した場合、ループ内の演算処理に必要な汎用レジスタを確保し、また、全体的なプログラム容量を縮小したり、処理時間を短縮したりするために、ループ外で使用するデータを割り当てるレジスタを確保したりすることによって、汎用レジスタに余裕がない場合も、随時、メモリに対して演算処理を行なうことが可能になる。これによって、プログラムの作成が容易になる。また、ループ内の処理を短縮することによって、全体的には、繰り返し回数に比例して処理時間を短縮することが可能になると、予想される。
【００２１】
また、Ｃコンパイラなどの開発装置の開発には、かかる種々の条件を考慮する必要があり、メモリに対する演算を可能とすることによって、所望のＣコンパイラの性能を達成するために必要な開発期間や資源を節約することも可能になると考えられる。
【００２２】
また、上記のような、機器の高速化や高機能化、小型化は、アドレス空間が比較的小さく命令セットが比較的小さいＣＰＵ若しくはマイクロコンピュータにおいても要求されるから、前記特開平６−５１９８１号公報などに記載されるアドレス空間の広いＣＰＵとアドレス空間の狭いＣＰＵが存在する場合には、その双方に対してメモリ上のデータに対する演算を追加することが望ましい。
【００２３】
しかしながら、前記ソフトウェア資産に対する上位互換の達成と、メモリのデータを直接的に演算可能とするに当たって、以下の問題点のあることが本発明者によって明らかにされた。
【００２４】
既存の命令セットは、その仕様内で最適化されているから、メモリ上のデータを直接的に演算可能にする種々の演算等の処理に新規の命令コードを割り当てる余地は少ない。すなわち、加算や論理積などの所望の演算について、データをアクセスするアドレッシングモードの任意の組合せでメモリ上のデータを演算できるようにするというような、新規の命令コードを、割り付けることは現実には考え難い。
【００２５】
また、新規命令コードや新規アドレシングモードの追加によって命令コードの体系を変更することは、既存のＣＰＵにおける既存の命令と相容れず、既存のＣＰＵとの互換性を保つことが困難になってしまう。また、既存のＣＰＵのメリットを損なってしまう。
【００２６】
また、マイクロコンピュータを使用したシステムを開発する場合には、エミュレータと呼ばれる開発装置が用いられる。エミュレータには、マイクロコンピュータの機能を包含するエミュレーション用プロセッサが搭載されており、エミュレーション用プロセッサは、マイクロコンピュータの動作状態をエミュレータによって解析可能にするためのエミュレーション用信号を出力する。エミュレータ及びエミュレーション用プロセッサについては、特開平８−２６３２９０号公報に記載されている。前述のメモリ上のデータを直接演算可能とするためにマイクロコンピュータの構成を変更するとき、前記エミュレーション用信号も変更になれば、エミュレータのハードウェア自体を変更しなければならず、エミュレータ自体も新たに開発しなければならなくなって、マイクロコンピュータの開発装置若しくは開発環境の提供も遅くなるという問題点が明らかにされた。
【００２７】
検討課題Ｂに関する本発明の目的は、論理的・物理的規模の増大を最小限とし、ロード・ストア型の命令セットを持つ既存のＣＰＵ若しくはマイクロコンピュータ等と互換性を維持しつつ、見掛け上、メモリ上のデータに対する直接的な演算を可能とするデータ処理装置を提供することにある。
【００２８】
検討課題Ｂに関する本発明の別の目的は、見掛け上、メモリ上のデータに対する演算を可能とすることによって、プログラミングを容易にすると共に、不所望の汎用レジスタの退避／復帰を抑止して、ＣＰＵの処理性能を向上させることによる。
【００２９】
《検討課題Ｃ》
本発明者は、前記検討課題Ａとして検討した前記ソフトウェア資産に対する上位互換と、前記検討課題Ｂとして検討したメモリのデータを直接的に演算可能とすることを実現するに当たり、更に検討課題Ｃとして以下を明らかにした。尚、この検討課題Ｃに関する事項は、本願における国内優先権主張の第３の基礎出願である特願平１１−１９１６０８号の明細書に既に開示したが、その内容は未だ公知ではない。この検討課題Ｃについて述べる。
【００３０】
既存の命令セットは、その仕様内で最適化されているから、メモリ上のデータを直接的に演算可能にする種々の演算等の処理に新規の命令コードを割り当てる余地は少ない。すなわち、加算や論理積などの所望の演算について、データをアクセスするアドレッシングモードの任意の組合せでメモリ上のデータを演算できるようにするというような、新規の命令コードを、割り付けることは現実には考え難い。
【００３１】
また、新規命令コードや新規アドレシングモードの追加によって命令コードの体系を変更することは、既存のＣＰＵにおける既存の命令と相容れず、既存のＣＰＵとの互換性を保つことが困難になってしまう。また、既存のＣＰＵのメリットを損なってしまう。
【００３２】
そこで本発明者は、既存の、メモリ・レジスタ間の転送命令の単数または複数、レジスタ・レジスタ間の演算命令、の内、複数の命令コードを組合せ、これを結合させる前置命令コードを用いて、メモリ上の演算を可能にすることの有用性を先に見出した。これによれば、メモリ・レジスタ間の転送命令、レジスタ・レジスタ間の演算命令などの命令コードは既存のものであるから、単独では従来同様に動作し、既存の命令実行を阻害することがない。また、既存の命令のみを使用していれば、既存のソフトウェア資産を有効に利用できる。汎用レジスタ方式やロードストアアーキテクチャなどの既存のＣＰＵが持つメリットを損なうことなく、前記演算性能を拡張することができる。
【００３３】
更に本発明者は、応用分野の広いマイクロコンピュータに対する多種多様の要求についても検討した。例えば、アドレス空間の広い応用分野とアドレス空間の小さい応用分野、高級言語によるプログラミングを主に用いる応用分野とアセンブリ言語によるプログラミングを主に用いる応用分野、データ処理が重要な応用分野とビット操作などの制御が必要な応用分野、或いは、処理性能が必要な応用分野と処理性能より費用低減が必要な応用分野などがあり、これらに対して、一貫したアーキテクチャによるＣＰＵ（中央処理装置）を提供し、アセンブラ、Ｃコンパイラなどのソフトウェア開発装置（クロスソフトウェア）などの開発装置を共通に利用したりできるようにすることが望ましい。
【００３４】
そこで、本発明者は、下位互換性をもつＣＰＵについて検討した。前記の通り、本発明者による先の提案によれば、既存の、アドレス空間の小さいＣＰＵに対しても、互換性を維持しながら汎用レジスタを追加したり、メモリに対する演算を追加することができる。機能を追加していく場合には、例えば、費用低減の追求などといった、前記のマイクロコンピュータに対する多種多様な要求に十分には応えられるようにする考慮の必要性が本発明者によって見出された。
【００３５】
また、アセンブリ言語によるプログラミングでは、ＣＰＵの命令セットに依存する部分が大きく、また、使用者の経験などによる好みといったものも存在するから、一つの命令セットでは、全ての要求に応えていくことはできない。例えば、別のＣＰＵや、使用者の好み合った命令セットを持つＣＰＵであれば移行しやすいが、同じ命令セットを持ったＣＰＵでは、限界が生じてしまう。
【００３６】
マイクロコンピュータ或いはＣＰＵのアーキテクチャには、汎用レジスタ方式、アキュムレータ方式などがあるから、それぞれに類似した命令セットを持つＣＰＵを持てば、大部分の使用者の命令セットについての要求には応えられると考えられる。少なくとも、一つの命令セットであるよりは、異なる種類の命令セットを持つＣＰＵを用意することにより、対応できる範囲を飛躍的に大きくできる。
【００３７】
このとき、これらのＣＰＵは、独立したものを多数用意しても、互換性やソフトウェアの移植性が損なわれては、使用者にとっては、ソフトウェアの移植ができず、ソフトウェアを変更したりすることになってしまい、全体的な開発費用を不所望に増加させてしまったり、開発期間を不所望に増大させてしまいやすい。一方、ＣＰＵ乃至はマイクロコンピュータの提供者にとっては、独立したＣＰＵでは、使用する技術も異なってしまい、一つのＣＰＵで得られた技術を他のＣＰＵに適用でき難くなったりして、開発効率を低下させ、機能や性能の向上を図り難くしてしまう。
【００３８】
また、マイクロコンピュータを使用したシステムを開発する場合には、ソフトウェア開発装置及びエミュレータと呼ばれる開発装置が用いられる。
【００３９】
アセンブラやＣコンパイラ、シミュレータデバッガなどのソフトウェア開発装置については、前記のような互換性を持った複数のＣＰＵを、互いに一方が他方を包含する命令セットを持たないようなＣＰＵも含めて、共通に利用できることが望ましい、ということが本発明者によって明らかにされた。利用者も、ソフトウェア開発装置を共通にして、異なるＣＰＵに適用できれば、ＣＰＵを変更する際に、不所望な費用を発生させなくてよい。提供者も、一つの開発装置を開発すればよく、開発効率を向上できるし、適宜、開発装置の機能の向上や、使い勝手の向上などを図り易い。アセンブリ言語によるプログラミングのしやすさを享受しつつ、順次、高級言語へ移行することも可能になる。
【００４０】
前記特開平９−１９８２７２号公報には、特に一方が、他方の命令セットやレジスタ構成を包含するような複数のＣＰＵに対応可能なエミュレータ及びエミュレーション用プロセッサについての記述があるが、前記の通り、このような複数のＣＰＵでは、応用分野などの多様な要求に十分に応えられない。一方が他方の命令セット等を包含しないような複数のＣＰＵに対して、両方の機能を包含する上位のＣＰＵを用意することも考えられるが、全く異なる複数のＣＰＵについては、命令コードが異なったり、アドレス空間や実効アドレス計算方法が異なったりして、これを包含する上位のＣＰＵを構成することは困難である。また、可能であったとしても、このために大きな開発資源が必要と考えられ、開発に必要な各種資源を節約するといった目的を達成できない。さらに、上位のＣＰＵが、異なる複数のＣＰＵの機能を包含するがために、冗長な回路を持つようになり、実際の製品に用いることが困難になってしまうし、個別のＣＰＵに切り替えて使用するのでは、新規のＣＰＵとは言えず、応用分野などの多様な要求に応えるといった目的を達成できない。
【００４１】
検討課題Ｃに関する本発明の目的は、第１に、応用分野や使用者の広範な要求に応えることができるデータ処理装置を提供することにある。具体的には、半導体集積回路としての製造費用を低減して、ひいては、使用者の半導体集積回路についての費用を低減すること、応用分野のソフトウェア上の要求に応え易くすること、又はアセンブリ言語によるプログラミングも容易にするなど、使用者のマイクロコンピュータに対する好みに合わせたり、或いは、他のＣＰＵから移行し易くすること、を実現することである。
【００４２】
検討課題Ｃに関する本発明の目的は、第２に、総体的なマイクロコンピュータのようなデータ処理装置製品群の開発費用を低減し、開発効率を向上することである。換言すれば、個別の応用分野やシステムに適した複数のＣＰＵを提供するとともに、複数のＣＰＵの総体的な開発費用を低減したり、開発効率を向上したりすることである。具体的には、互換性やソフトウェア資産の継承性を維持し、使用者のソフトウェア開発効率を向上すること、機能や性能の向上の要求に応え、更に継続して、機能や性能の向上の要求に応え易くすること、ＣＰＵの移行に当たって、使用者の不所望の費用を抑止すること、ソフトウェア開発装置やエミュレータなどの開発環境を共通に利用可能にして使用者の不所望の費用の増大を抑止すること、又は、開発環境の開発効率を向上すると共に適宜改善していくことを容易に実現すること、である。
【００４３】
検討課題Ｃに関する本発明の目的は、第３に、プログラム容量は比較的大きいが、データ容量は比較的小さい、シングルチップマイクロコンピュータなどに好適なアドレス空間を持ったＣＰＵのようなデータ処理装置、即ち、アドレス空間は広く、論理的な規模を縮小したＣＰＵのようなデータ処理装置を提供することである。
【００４４】
《検討課題Ｄ》
本発明者は、検討課題Ｂに関連する新たな検討課題Ｄとして、分岐命令の観点より、命令コード長の短縮や処理性能の向上に寄与する複合的な命令について検討した。この検討課題Ｄについて述べる。
【００４５】
一般的なマイクロコンピュータシステムにおいて、ＣＰＵの処理は、外部入力状態に適合するようになされる。これは、入出力ポートの状態に応じたり、これらに基づいて、内蔵ＲＡＭなどに保持したビットの状態に応じて、プログラムを分岐することによってなされる。
【００４６】
このような外部入力状態に対応したＣＰＵの処理を実現するための手段として、ＵＳＰ４３３４２６８号に記載されてるように、所謂ビットテスト・アンド・ブランチなどの命令を持つデータプロセッサがある。これにおいては、８ビットの絶対アドレスと３ビットのビット番号で、テストするビットを指定すると共に、分岐条件が前記指定ビットの論理値“１”状態又は論理値“０”状態の何れであるのかを1ビットで指定し、更に、８ビットのディスプレースメントで、分岐先のアドレスを指定する。この場合、３バイト長の命令コードでは、命令の指定を４ビットで行わなければならない。この例では、命令コードの先頭４ビットが論理値“０”になっているものがビットテスト・アンド・ブランチである。したがって、これ以外の命令は先頭４ビットを値１〜Ｆのとしなければならず、全体的な命令コード長の増加を招き易い。
【００４７】
このような命令は、指定ビットのリードと判定、及び分岐アドレスの生成など、命令実行制御が複雑で論理規模の増加を招き易く、また、不所望の論理回路の遅延によって、動作周波数の向上の障害になり易い事が本発明者によって明らかにされた。
【００４８】
更に、８ビット絶対アドレスで指定できるのは、２５６バイトに限定されるから、マイクロコンピュータの高機能化に伴って、内部Ｉ／Ｏレジスタなどが増加されるときに、指定可能な範囲に所望のビットが存在しなかったり、また、マイクロコンピュータの仕様設計上、アドレス配置が困難になったりしてしまう。すなわち、マイクロコンピュータは汎用的に利用可能とされるが、応用分野や使用者毎に判定対象となるビットが複数に亘り、相違されることになり、判定対象となるビットに対する所望の組合せの全ての要求に応えることは難しい。
【００４９】
また、制御が複雑になると、８ビットの相対アドレスでは、分岐できない場合が生じてくる。当該命令の存在するアドレス又は次の命令の存在するアドレスを基準に、＋１２７〜−１２８バイトの範囲でしか分岐できないから、判定対象のビットが論理値“１”のとき、または論理値“０”のときに実行する処理プログラムの少なくとも一方（分岐条件が成立しない場合に実行する処理プログラム）は、１２７バイト未満にする必要がある。これが満足できない場合は、別の分岐命令をも用いて、２段階の分岐命令の実行によって、所要のアドレスに分岐しなければならない。これはプログラムを複雑化し、処理速度も低下させてしまう、ということが本発明者によって明らかにされた。
【００５０】
そうかといって、絶対アドレスやディスプレースメントを１６ビットなどとすると、必然的に命令コード長の増加を招き、処理速度も低下するし、命令実行制御も更に複雑になる。絶対アドレスとディスプレースメントのビット長の組合せを複数にしようとすると、命令実行制御が更に複雑になる。これらは、追加すべき命令の種類を増やすことになり、既存のＣＰＵの上位互換性を維持することを困難にしてしまう。既存のＣＰＵの利点（論理構成の簡潔さや高速性など）を維持することを困難にしてしまう。
【００５１】
検討事項Ｄに関する本発明の目的は、論理的・物理的規模の増大を最小限とし、既存のＣＰＵと互換性を維持しつつ、メモリ上の任意のアドレスのデータのビットの状態を判定して、分岐及びサブルーチン分岐を可能にすることにある。更に、ＣＰＵの使い勝手の向上、命令コード長の短縮、及び処理性能の向上を実現することを目的とする。
【００５２】
《検討課題Ｅ》
本発明者は、検討課題Ｅとして、単一の命令で複数の汎用レジスタ等に対してリード／ライトを行うようにすることについて検討した。尚、この検討課題Ｅに関する事項は、本願における国内優先権主張の第４の基礎出願である特願平１１−３２０５１８号の明細書に既に開示したが、その内容は未だ公知ではない。この検討課題Ｅについて述べる。
【００５３】
データ転送時のパケットコマンドなどの情報は、複数の情報の集合で、例えば１６バイトなどであって、ＣＰＵのデータ処理単位よりは大きい。ＣＰＵは、これに含まれる個別の情報（コマンド、転送バイト数、転送ロケーションなど）をリードして、解析する。例えば、コマンドは８ビット、転送バイト数は３２ビット、転送ロケーション（アドレス）は３２ビットなどとされ、これらの個別の情報は、多くの場合、ＣＰＵの操作可能なデータ長である。
【００５４】
また、プリンタの印刷データなどは、ＣＰＵの操作するデータ長より大きい。これらは個別のビット（ドット、ピクセルなど）の集合である。これを操作する場合には、算術的な処理ではなく、ビット単位の処理であり、論理的な処理が主に必要である。かかるデータを処理する場合には、ＣＰＵの操作するデータの単位に複数回に分けて行なう。即ち、メモリからデータをリードし、汎用レジスタ上で処理を行い、結果をメモリへライトする処理を行なうことを繰り返す。
【００５５】
本発明者は、汎用レジスタの利用態様を更に検討した。前記パケットコマンドや印刷データはワードのようなＣＰＵによるデータ処理のデータ単位より大きい。このようなＣＰＵによるデータ処理のデータ単位より大きいデータ単位についても、一括してレジスタからリード或いはレジスタにライトできるようにすれば、データ処理の高速化を図る上で好都合であることを本発明者は見出した。具体的には、いわゆるフォンノイマン型のＣＰＵにおいては、転送命令の実行にあたっては、命令コードをリードし、これをデコードし、データをリード／ライトする必要があるから、バイト或いはワード単位でそのようなデータのレジスタ転送を複数回繰り返すよりは、単一の命令で、複数の汎用レジスタのリード／ライトを行なうようにすれば、データ転送の為に命令コードをリードする回数を低減することができるからである。
【００５６】
更に、前記省略可能なワードによって汎用レジスタを拡張する技術と組み合わせれば、それによって汎用レジスタを拡張して、複数の汎用レジスタを一括してリード／ライトするためにそれらレジスタを空けることも容易になることを見出した。
【００５７】
一方、本発明者らが先に提案した特開平８−２６３２９０号公報に記載のＣＰＵは、命令を実行する実行手段を制御するための制御手段に対して指定可能な複数の汎用レジスタの組み合わせを固定にし、それら複数の汎用レジスタのスタックに対する退避／復帰命令を有し、前記複数の汎用レジスタを順次待避／復帰するようにしている。これは、サブルーチンや例外処理などの、処理の切れ目で、それ以前の処理の状態を保存することを目的とする処理に限られている。従って、アドレッシングモードも、スタックポインタのプリデクリメント（待避）／ポストインクリメント（復帰）に限定されている。また、汎用レジスタの待避／復帰毎に、アドレス演算器を用いてアドレス計算を行なっている。
【００５８】
前記特開平８−２６３２９０号公報に記載の技術を他のアドレッシングモードに適用しようとすると、例えば、４本の汎用レジスタとメモリの間の転送命令では、レジスタ間接のリードの場合、２番目以降の汎用レジスタ毎に、アドレスレジスタの内容に＋４、＋８、＋１２のアドレス演算処理を行なって実効アドレスを生成する必要がある。逆に、ライトの場合、最後以外の汎用レジスタ毎に、アドレスレジスタの内容に−１２、−８、−４の演算処理を行なって実効アドレスを生成する必要がある。このため、レジスタ毎に実効アドレスの演算が必要になるので、不所望な内部動作ステートが発生してしまう。
【００５９】
更に、ディスプレースメント付きレジスタ間接では、ディスプレースメントとアドレスレジスタの内容を加算した結果を内部に保持した上で、この加算結果に上記レジスタ間接同様のアドレス計算を行なう必要がある。これらは、ＣＰＵの内部動作を複雑にし、論理的規模の増大を招き易い。
【００６０】
一般に、マイクロコンピュータは、汎用的に使用できる（１種類のチップで複数の応用分野に対応できる）ことが、その開発効率などの点で望ましい。特に、ＣＰＵについては、アセンブラやＣコンパイラといったソフトウェア開発装置、及びインサーキットエミュレータといったハードウェア開発装置が必要であるから、マイクロコンピュータのアーキテクチャの変更は容易ではないし、また、変更する場合も、既存のＣＰＵとの互換性を保ち、上記ソフトウェア乃至ハードウェア開発装置を共通に利用できるようにし、開発効率を向上することが望ましい。
【００６１】
なお、ブロック転送命令などといった、複数単位のデータをメモリ上で連続的に転送する命令を命令セットにマイクロコンピュータもある。このような命令では、転送データは、ＣＰＵの汎用レジスタに格納されないので、当該データに対して、直接操作できなかったり、少なくとも、汎用レジスタに対するほど高速には操作できない。
【００６２】
検討課題Ｅに関する本発明の目的は、マイクロコンピュータなどのデータ処理装置またはデータ処理システムにおいて、その論理的規模の増加を最小限にしつつ、ＣＰＵの処理するデータ長、例えば、バイト、ワード、ロングワードなどより大きいデータを処理する必要がある場合に、ＣＰＵ処理プログラムの短縮、ＣＰＵによるデータ処理速度の高速化を実現することにある。詳しくは、本発明は、データのリード／ライトに対して、命令のリードの頻度を低減して、データ処理の高速化を図ることができるようにしようとするものである。
【００６３】
検討課題Ｅに関する本発明の別の目的は、既存ＣＰＵのソフトウェア資産を有効に利用でき、新たなシステムの開発効率を向上させることができ、既存のＣＰＵのシステム発装置を流用でき、開発環境をいち早く手依拠することが可能なデータ処理装置を提供することにある。
【００６４】
検討課題Ｅに関する本発明の更に別の目的は、既存のＣＰＵに対して汎用レジスタ数の増加をソフトウェアで指定でき、これを利用して、プログラム作成の容易化と、レジスタリード・レジスタライト動作の高率化によってＣＰＵの処理性能を向上させることができるデータ処理装置を提供することにある。
【００６５】
検討課題Ｅに関する本発明のその他の目的は、オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵが存在する場合には、オブジェクトレベルで互換性を保ちつつ、上記ＣＰＵ処理プログラムの短縮、ＣＰＵによる処理の高速化等の目的を達成することができるデータ処理装置を提供することにある。
【００６６】
上記検討課題Ａ乃至検討課題Ｅに関する本願発明は、データ処理装置の演算性能の拡張と使い勝手の向上という点において、解決しようとする共通の課題を有している。また、高速であるが、数に限りがある汎用レジスタのデータの待避／復帰などを行なうことなく、処理を可能にするという共通の課題を有している。
【００６７】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００６８】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００６９】
《検討課題Ａの解決手段》
この検討課題Ａに関する解決手段として、レジスタを指定するレジスタ指定情報を、２つの部分に分割する。この２つの部分を命令コードの基本単位上の別々の基本単位に配置する。一方の命令コードを省略可能とし、省略可能な命令コードを省略すると、所定レジスタ指定情報を暗黙的に想定してレジスタ選択動作を行うようにする。
【００７０】
省略可能な命令コードは、レジスタ指定情報の一部を保持するためのフィールドを有し、演算の種類などは指定しないような命令コードにすれば良い。例えば、省略不可能な命令コードを、既存のＣＰＵと共通にし、省略可能な命令コードを既存のＣＰＵの未定義のワードに割当てればよい。
【００７１】
省略可能な命令コードに含まれるレジスタ指定フィールドの情報を保持する手段を設け、前記省略可能な命令が実行されると、前記省略可能な命令コードに含まれるレジスタ指定フィールドの情報を前記保持手段に格納する。更に、命令の実行終了時に、前記保持手段を、前記暗黙的な指定に対応する所定の値に設定する。
【００７２】
上記した手段によれば、暗黙的に指定可能な汎用レジスタ（既存の汎用レジスタ）のみを使用していれば、省略可能の命令コードを省略できるから、命令コード長を増加させることがない。少なくとも従来同等の汎用レジスタを使用する場合は、従来同等の命令コードでよい。命令コード長を増加させないことよって、処理速度を低下させることがない。
【００７３】
前記省略可能な命令コードを付加することによって、命令によって直接汎用レジスタの全てを選択できるから、プロラムの容易性を損うことなく、利用可能な汎用レジスタの数を増やすことができる。また、任意の量の汎用レジスタの一部を、所望のタスク毎や所望の割込み処理などに確保しておく（他のタスクや処理では使用しない）ことによって、前記タスクや割込み処理において汎用レジスタを待避したりする必要がなく、高速化が図れる。また、前記タスクや割込み処理に確保する汎用レジスタ数は任意にできるから、タスクや処理の間で、使用する汎用レジスタを相互に融通し合うことも容易である。
【００７４】
前記省略可能な命令コードを付加することによって、指定できる汎用レジスタのアクセスは、ＲＡＭなどのメモリのアクセスより、一般に高速にできるから、汎用レジスタ数を増加することにより、高速に処理できるデータ量を増加させ、ひいてはＣＰＵの処理速度を向上できる。また、いわゆるロードストア型の命令セットを持ち、メモリの内容に対して直接演算できないようなプロセッサについては、汎用レジスタを増加することにより、直接処理できるデータ量を増加でき、また、メモリのアクセス頻度を低減することができ、処理速度を向上することができる。
【００７５】
オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵが存在する場合には、アドレス空間の広いＣＰＵで、前記省略可能な命令コードを付加できれば、下位互換性をもつ、アドレス空間の小さいＣＰＵにも前記ワードを付加できることになるから、オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵに汎用レジスタを追加できる。オブジェクトレベルで互換性を保つことによる利点と汎用レジスタを追加することの利点の双方を享受することができる。
【００７６】
上記手段の更に詳細な態様について言及する。命令コードを読み込んで動作し、データまたはアドレスを格納可能なレジスタ（ＥＲ０〜ＥＲ３１）を複数個持つデータ処理装置は、命令コードを保持する第１の命令コード保持手段（ＩＲ１）及び第２の命令コード保持手段（ＩＲ２）と、命令コードをデコードする命令デコード手段（ＤＥＣ）と、前記レジスタを選択する選択手段（ＲＳＥＬ）とを含む。前記第１の命令コード保持手段の出力は、前記第２の命令コード保持手段、前記命令デコード手段及び前記レジスタ選択手段に結合され、前記第２の命令コード保持手段の出力は、レジスタ選択手段に結合され、前記命令デコード手段の出力は、レジスタ選択手段及び前記第２の命令コード保持手段に結合され、前記命令デコード手段の前記第２の命令コード保持手段への出力は、前記第２の命令コード保持手段に対するラッチ信号（ＬＧＲＣＬ）と、所定の値へのセット信号（ＲＳＬＧＲ）を含む。前記第２の命令コード保持手段に対するラッチ信号は、前記命令デコード手段が所定の命令コードをデコードしたとき発生し、前記第２の命令コード保持手段に対する所定の値へのセット信号は、前記所定の命令コードによって指定されたレジスタを用いる処理が終了された後にセット動作が行われる様に発生する。
【００７７】
前記第２の命令コード保持手段に対する前記所定の値へのセット信号は、例えば、前記命令デコード手段が、命令の実行終了に呼応して発生すればよい。あるいは、前記所定の値を保持するためのデータ保持手段を更に含め、そのデータ保持手段の出力を前記第２の命令コード保持手段に結合し、前記所定の値へのセット信号の発生に呼応して、前記第２の命令コード保持手段が、前記データ保持手段の値に応じた値にセットされるようにしてもよい。
【００７８】
《検討事項Ｂの解決手段》
本願発明は前記検討課題Ｂに関する解決手段を与えるものである。検討課題Ｂに関する解決手段として、既存の、メモリ・レジスタ間の転送命令や、レジスタ・レジスタ間の演算命令の内、複数の命令コードを組合せ、例えば、これを結合させる前置命令コードを用いて、メモリ上の演算を可能にする。要するに、所定の前置命令コードが付加された場合、これに続く複数の命令コードを１つの命令として解釈し、実行する。ここで、１つの命令とは、例えばリセット以外の要因で処理が分断されない、或いは、リセットなどの特定の要因を除いて途中で割り込み（例外処理）を受け付けない、等のように定義することができる。このとき、ＣＰＵ内の、テンポラリレジスタの様な、プログラム上解放されていないラッチ手段を、汎用レジスタに代えて、若しくは汎用レジスタと共に利用することが、メモリ上のデータに対する直接的な演算（若しくは直接的なデータ転送）を可能とする。ここで、メモリ上のデータに対する直接的な演算とは、前記命令コードには明示されないデータラッチ手段へメモリからデータをロードし、当該データラッチ手段にロードしたデータを用いて行なう演算処理である。また、メモリとの間の直接的なデータ転送とは、前記命令コードには明示されないデータラッチ手段へメモリからデータをロードし、当該データラッチ手段のデータを前記メモリにストアする処理である。
【００７９】
詳しくは、前記前置命令コードに続いて、第１番目に、メモリ・レジスタ間転送命令コードを実行する場合は、汎用レジスタではなく、ＣＰＵ内の、テンポラリレジスタの様な、プログラム上解放されていない第１のラッチ手段とメモリの間でデータ転送を行なう。更に、第２番目として、引き続きレジスタ・レジスタ間の演算命令コードを実行する場合は、演算対象の内の単数または複数のデータを前記第１のラッチ手段から読み出すようにする。ここで、プログラム上解放されていないラッチ手段とは、プログラム上ユーザが指定できないラッチ手段、ＣＰＵ若しくはマイクロコンピュータ上においてユーザから見えないテンポラリレジスタやバッファレジスタを意味する。そのようなラッチ手段は、プログラム上解放されていないから、当然その記憶情報が退避されることは想定されておらず、多くの場合、演算の途中結果などを格納するのに用いることが想定されており、１命令実行中にその使用状態を終えることが前提になっている。したがって、その前提の下では、前記ラッチ手段を使うとき退避を全く考えなくてもよい。その前提を保証する為に、前置命令コードとこれに続く所定の命令を１命令とみなし、途中に割り込みなどが入らないように考慮され、ラッチ手段に対する退避の必要性を排除している。
【００８０】
前記第２番目の演算命令コードが、演算結果をメモリに格納する処理を要求する命令コードの場合には、前記転送命令コードで使用したメモリのアドレスは、別のテンポラリレジスタなどの別のラッチ手段（第２のラッチ手段）に格納する。前記演算命令の演算結果は前記第１のラッチ手段に格納する。引き続き、メモリ・レジスタ間の転送命令コードをマイクロコンピュータ自ら生成し、前記アドレスを格納した第２のラッチ手段の内容をアドレスとして、前記演算結果を格納した第１のラッチ手段の内容をデータとして、メモリへの書込みを行なう。
【００８１】
更に説明を加える。前置命令コードによって１命令とみなされる命令が、メモリ上のデータと汎用レジスタ上のデータの演算を行い、結果を汎用レジスタ上に格納する命令の場合には、前置命令コード、メモリ・レジスタ転送命令コード、演算命令コードを実行し、メモリ・レジスタ転送命令コードの実行時には、汎用レジスタではなく、転送データをラッチ手段に格納し、演算命令コードは、前記ラッチ手段に格納したデータと汎用レジスタ上のデータとの演算を行い、結果を汎用レジスタに格納する。
【００８２】
前置命令コードによって１命令とみなされる命令が、汎用レジスタ上のデータとメモリ上のデータの演算を行い、結果をメモリ上に格納する命令の場合には、前置命令コード、メモリ・レジスタ転送命令コード、演算命令コード、及び内部で生成されたメモリ・レジスタ転送命令コードを実行し、メモリ・レジスタ転送命令コードの実行時には、汎用レジスタではなく、転送データをラッチ手段に格納し、演算命令コードは、前記ラッチ手段に格納したデータと汎用レジスタ上のデータとの演算を行い、結果をラッチ手段に格納する。メモリ・レジスタ転送命令コードは、前記アドレスを格納したラッチ手段の内容をアドレスとして、前記演算結果を格納したラッチ手段の内容をデータとして、メモリへの書込みを行なう。インクリメントなどのように、１つのメモリ上のデータに対する演算を行なう場合もこれと同様にする。また、メモリ・レジスタ転送命令コード実行時には、換言すれば、１つの命令とみなされる命令による処理の途中には、演算結果等を反映するフラグの変化を抑止し、前の演算命令による演算結果のフラグの状態を保持する。この理由は以下の通りである。演算命令コードの実行においては前の演算命令の実行によってフラグに反映された状態を参照しなければならない場合が有り、このとき、転送命令若しくは転送命令コードの実行によっても前記フラグの状態変化を全て許容した場合には不都合を生ずるからである。更に詳しくは当該命令としてのフラグの変化と、転送命令自体のフラグの変化が異なることによって不都合を生じさせないということである。具体的には、その演算が算術演算であるとき、算術演算結果で生じたオーバフローフラグが転送命令コードによってクリアされたりしないようにするということである。
【００８３】
前置命令コードによって１命令とみなされる命令が、メモリ上の２つのデータを用いて演算し、演算結果をメモリ上に格納する命令である場合には、前置命令コード、第１、第２のメモリ・レジスタ転送命令コード、演算命令コード、及び内部で生成したメモリ・レジスタ転送命令コードを実行し、第１、第２のメモリ・レジスタ転送命令コードの実行時には、汎用レジスタではなく、転送データをラッチ手段に格納し、演算命令コードは、前記ラッチ手段に格納したデータの演算を行い、結果をラッチ手段に格納する。メモリ・レジスタ転送命令コードは、前記アドレスを格納したラッチ手段の内容をアドレスとして、前記演算結果を格納したラッチ手段の内容をデータとして、メモリへの書込みを行なう。
【００８４】
一方、前置命令コードによって１命令とみなされる命令が、メモリ上のデータを、別のメモリに転送する命令の場合には、前置命令コード、メモリ・レジスタ転送命令コード、メモリ・レジスタ転送命令コードを実行し、メモリ・レジスタ転送命令コードの実行時には、汎用レジスタではなく、転送データをラッチ手段に格納し、メモリ・レジスタ転送命令コードは、前記演算結果を格納したラッチ手段の内容をデータとして、メモリへの書込みを行なう。
【００８５】
前置命令コードによって１命令とみなされる命令が、イミディエイトデータとメモリ上のデータとの演算の場合は、概略、汎用レジスタ上のデータとメモリ上のデータの演算を行い、結果をメモリ上に格納する命令と同様にできる。
【００８６】
前置命令コードによって１命令とみなされる命令が、イミディエイトデータを、メモリに転送する命令の場合には、前置命令コード、イミディエイト・レジスタ転送命令コード、メモリ・レジスタ転送命令コードを実行し、イミディエイト・レジスタ転送命令コードの実行時には、汎用レジスタではなく、イミディエイトデータをラッチ手段に格納し、メモリ・レジスタ転送命令コードは、前記演算結果を格納したラッチ手段の内容をデータとして、メモリへの書込みを行なう。
【００８７】
複数の命令コードを組合せて一連のものとして実行する場合には、それぞれの命令コードの間に、割込みなどの不所望の処理が挿入されることを禁止する。そのための制御信号は前記前置命令コードをデコードして生成すればよい。前置命令コードには、そのほかのデータサイズなどの情報を持たせることも可能である。
【００８８】
前置命令コードにひき続いて、メモリ−レジスタ転送命令コードを実行する場合、独立したメモリ−レジスタ転送命令の命令コードと全く同一の命令コードである必要はなく、アドレッシングモードといったメモリの指定方法を示すビットのみを共通にし、その他のビットは適宜変更することができる。
【００８９】
上記した手段によれば、メモリ・レジスタ間の転送命令、レジスタ・レジスタ間の演算命令などの命令コードは既存のものであるから、単独では従来同様に動作し、既存の命令実行を阻害することがない。また、既存の命令のみを使用していれば、既存のソフトウェア資産を有効に利用できる。
【００９０】
汎用レジスタ方式やロード・ストア・アーキテクチャなどの既存のＣＰＵが持つメリットを損なうことなく、前記演算性能を拡張することができる。
【００９１】
前記前置命令コードは、アドレッシングモードや演算の内容によらず共通に使用できるから、追加する命令コードを最低限にすることができる。また、前置命令コードに、そのほかのデータサイズなどの情報を持たせることによって、全体的な命令コード長を短縮できる。
【００９２】
メモリからラッチ手段へのデータ読み込み、演算、ラッチ手段の内容に基づくメモリへのライトは既存の命令と、使用するレジスタが相違なるのみであるから、既存の命令動作を大きく変更することなく、利用できる。これによって、メモリ上のデータへの演算を可能にすることによる論理規模の増加を最小限にすることができる。
【００９３】
メモリ上のデータを直接的に演算可能とすることによって、直接処理できるデータ量を増加でき、また、汎用レジスタの退避／復帰などを省くことができ、処理速度を向上することができる。
【００９４】
メモリ上のデータと汎用レジスタ上のデータの演算を行い、結果を汎用レジスタ上に格納する命令の場合は、前置命令コードを含むため、メモリ・レジスタ転送命令コード、演算命令コードを個別に実行した場合の合計の処理時間より遅いが、汎用レジスタの退避や復帰を行なわないので、全体的な処理時間は向上することができる。また、メモリ上のデータと汎用レジスタ上のデータの演算を行い、結果をメモリ上に格納する命令の場合は、レジスタ・メモリ転送命令コードを内部で発生し、命令コードのリードを行なわないこと、前記別のラッチ手段（第２のラッチ手段）を利用して、リード時に計算したメモリアドレスを再利用可能とすること、によって、メモリ・レジスタ転送命令コード、演算命令コード、レジスタ・メモリ転送命令コードを個別に実行した場合の合計の処理時間よりも処理時間を短縮することができる。
【００９５】
オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵが存在する場合には、アドレス空間の広いＣＰＵで、前記前置命令コードを付加し、存在する転送命令、演算命令を組合せることによって、下位互換性をもつ、アドレス空間の小さいＣＰＵでもメモリ上のデータに対する直接的な演算を可能にできる。換言すれば、同一の方法で、オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵでもメモリ上のデータを直接的に演算可能にできる。オブジェクトレベルで互換性を保つことによる利点とメモリ上のデータを直接的に演算可能にすることの利点の双方を享受することができる。
【００９６】
既存の命令を組合せ、新規の命令機能を実現しているので、命令セットの更なる拡張や、更なる高速化に当たって、既存のＣＰＵに対して新たなる課題を生じることが少ない。換言すれば、既存のＣＰＵに対して、更なる命令セットの拡張や、更なる高速化を行なう技術が存在する（発明された）場合には、本発明を適用して、既存のＣＰＵに対して命令セットを拡大したＣＰＵに対しても、同様の技術を適用することができる。新規の命令機能を実現するために用いている、既存の命令のそれぞれに、前記技術を適用して、再度組合せればよい。前置命令コードは動作が単純であり、また、既存の命令に類似した動作とすることによって、変更は容易である。
【００９７】
また、既存の命令を組合せ、新規の命令機能を実現しているので、既存のＣＰＵとエミュレーション用インタフェースを共通化することができ、ひいては、同じエミュレータのハードウェアを共通に利用できる。エミュレータのハードウェアを共通化することによって、早く開発環境を整えることができ、また、エミュレータの開発に必要な資源を最小限にすることができる。
【００９８】
《検討事項Ｃの解決手段》
前記検討課題Ｃに関する解決手段として、〔１〕レジスタ構成、又は命令とアドレッシングモードとの組合せ、或いは前記双方の点に関し、一方が他方を包含しないような異なる命令セットを含む複数のデータ処理装置例えば複数の下位ＣＰＵを想定する。このとき、一方が他方の命令セットを包含しない、複数の下位ＣＰＵに対して、何れの下位ＣＰＵをも包含する命令セットを持った上位のＣＰＵを構成して提供する。
【００９９】
開発に当たっては、既存のＣＰＵ（前記下位ＣＰＵの一つ）に対して、汎用レジスタの構成を拡張し、また、命令とアドレッシングモードの組合せを拡張した、上位のＣＰＵを開発する。前記下位ＣＰＵは前記上位ＣＰＵのサブセットの構成若しくは命令セットを持つことになる。前記汎用レジスタの拡張、命令とアドレッシングモードの組合せの拡張については後述する。
【０１００】
更に、前記上位ＣＰＵの別のサブセットの態様を以って、下位ＣＰＵの他方を実現する。
【０１０１】
前記のように異なる命令セットを含む複数の下位ＣＰＵと、適宜適当な上位ＣＰＵとを提供することによって、応用分野のソフトウェア上の要求に応えたり、利用者の様々な好みに応えたり、更に別のＣＰＵのアセンブリ言語によるプログラムからも、比較的近い命令セットのＣＰＵを選択可能にでき、高位のＣＰＵへの移行を容易にすることができる。
【０１０２】
前記の、一方が他方の命令セットを包含しない、複数の下位ＣＰＵに対して、いずれのＣＰＵをも包含する命令セットを持った上位のＣＰＵを準備することにより、ソフトウェア資産の有効利用を可能にしつつ、性能／機能の向上したＣＰＵを用意することができる。ソフトウェア資産の有効利用によって、使用者のソフトウェア開発の開発効率を向上することができる。
【０１０３】
開発に当たっては、既存の下位ＣＰＵに対して、汎用レジスタ乃至は、命令とアドレッシングモードの組合せを拡張した上位ＣＰＵを開発し、このサブセットを持つ別の下位のＣＰＵを開発することによって、上位ＣＰＵの論理的規模の増大を最小限にしつつ、性能・機能・使い勝手などを向上することができると共に、前記別の下位ＣＰＵの開発を容易にし、開発効率を向上できる。前記上位のＣＰＵの、更に上位のＣＰＵを開発する場合には、前記上位のＣＰＵに対する互換性を維持すれば、前記複数のＣＰＵとの互換性を、自動的に維持することができるから、ソフトウェア資産の有効利用を実現しつつ、将来的な機能や性能の向上を図ったＣＰＵを実現し易くなる。
【０１０４】
下位ＣＰＵのために開発されたプログラムは、少なくとも、ソースプログラムのレベル（アセンブリ言語での記述レベル）で本発明に係る上位ＣＰＵに利用可能になる。なお、ここで下位ＣＰＵとは、そのレジスタ構成並びにその命令セットが本発明に係る上位ＣＰＵなどのＣＰＵのレジスタ構成及び命令セットに包含されるようなＣＰＵをいう。
【０１０５】
更に、オブジェクトプログラムレベルでの上位互換を実現するには、有効なアドレスのビット数と、ベクタ及びスタックの単位サイズとを、前記レジスタの利用形態に応じて切り替える動作モード、例えばマキシマムモードとミニマムモードを用意しておけばよい。ミニマムモードにおいてＣＰＵは少なくとも一つの下位ＣＰＵと全く同様に動作する。マキシマムモードにおいてＣＰＵはそれに備えられた最大限の機能を以って上位ＣＰＵとして動作される。
【０１０６】
〔２〕汎用レジスタを拡張するためには、前記検討課題Ａに関する手段で述べたように、レジスタを指定するレジスタ指定情報を、２つの部分に分割する。この２つの部分を命令コードの基本単位上の別々の基本単位に配置する。一方の命令コードを省略可能とし、省略可能な命令コードを省略すると、所定レジスタ指定情報を暗黙的に想定してレジスタ選択動作を行うようにする。
【０１０７】
〔３〕命令とアドレッシングモードの組合せを拡張するためには、前記検討課題Ｂに関する手段で述べたように、既存の、メモリ・レジスタ間の転送命令やレジスタ・レジスタ間の演算命令の内、複数の命令コードを組合せ、例えばこれを結合させる前置命令コードを用いて、メモリのデータを直接的に用いた演算を可能にする。要するに、所定の前置命令コードが付加された場合、これに続く複数の命令コードを１つの命令として解釈し、実行する。
【０１０８】
〔４〕アドレス空間が広く、論理的な規模を縮小したＣＰＵを実現するには、アドレス空間全体に対応するビット長のプログラムカウンタを設けて、プログラム用としてはアドレス空間全体、少なくとも大部分をリニアに利用可能にするとともに、比較的小規模なデータを扱える程度に、データ転送のアドレッシングモードを縮小したり、転送データのデータサイズを限定して、データアクセス時に、使用できるアドレス空間を小さくし、かかるアドレス空間を２つに分割する。
【０１０９】
前記によれば、アドレス空間全体に対応するビット長のプログラムカウンタを設けて、プログラム用としてはアドレス空間全体、少なくとも大部分をリニアに利用可能にするとともに、比較的小規模なデータを扱える程度に、データ転送のアドレッシングモードを縮小したり、転送データのデータサイズを限定したりして、所望の応用分野などでの使い勝手を損なわずに、論理的規模を縮小できる。
【０１１０】
データアクセス時に、使用できるアドレス空間を小さくし、かかるアドレス空間を２つに分割することによって、使い勝手を損なわずに、上位ＣＰＵとのアドレス空間上の互換性を維持するとともに、上位ＣＰＵに実効アドレス計算方法などを切り替える動作モードを予め用意しておくことにより、ソフトウェア上の互換性を維持することができる。
【０１１１】
プログラム用のアドレス空間を広げることにより、Ｃ言語などの高級言語を使用したプログラミングなどに対する適性を向上できる。また、スタックポインタを切替え可能にすることによって、ＯＳなどのタスク管理時のスタックの容量の不所望の増加を抑止できる。内蔵のメモリなどのみを用いて動作するシングルチップマイクロコンピュータ乃至マイクロコンピュータシステムでも、高級言語やＯＳなどを容易に利用可能にし、使用者のソフトウェアの開発効率を向上することができる。
【０１１２】
〔５〕また、開発装置については、前記上位のＣＰＵの命令セットについてのソフトウェア開発装置を用意し、更に、一方が他方の命令セットを包含しない、複数のＣＰＵに対しても共通に利用可能にし、利用者がＣＰＵを選択できるようにする。
【０１１３】
ソフトウェア開発装置上で、アセンブリ言語などの、汎用的な機能を持つ汎用レジスタの記述を、複数種類許すようにする。
【０１１４】
エミュレータについては、搭載するエミュレーション用プロセッサのエミュレーション用インタフェースを共通化する。ＣＰＵの解析を行なうために、エミュレータ上で、対象のＣＰＵを選択する手段を設ける。特に、逆アセンブラの対象ＣＰＵを選択可能にする。
【０１１５】
前記上位ＣＰＵの命令セットについてのソフトウェア開発装置を用意し、更に、一方が他方の命令セットを包含しない、複数のＣＰＵに対しても共通に利用可能にし、利用者がＣＰＵを選択できるようにすることによって、ソフトウェア開発装置の開発効率を向上することができる。使用者にとっては、前記、複数のＣＰＵを使用してもソフトウェア開発装置が共通であるから、不所望な費用を発生させなくてよい。前記、複数のＣＰＵの内の一つのＣＰＵから、別のＣＰＵへの移行が容易になり、開発効率を向上することができる。
【０１１６】
また、上位ＣＰＵと下位ＣＰＵとエミュレーション用インタフェースを共通化することができ、また、上位ＣＰＵのエミュレーション用論理回路を開発することによって、これを下位ＣＰＵにも利用でき、エミュレーション用プロセッサを含めた開発効率を向上できる。また、同じエミュレータのハードウェアを共通でき、これによって、逸早く開発環境を整えることができるとともに、また、エミュレータの開発に必要な資源を最小限にすることができる。エミュレータに搭載する逆アセンブラは、上位ＣＰＵのものを開発するとともに、エミュレータ上で対象のＣＰＵを選択する手段を設けることによって、実質的に一つの逆アセンブラでよいことになるから、開発効率を更に向上できる。
【０１１７】
〔６〕検討課題Ｃに関して以上に述べた手段を、互換性、エミュレーション用プロセッサ、エミュレータ、ソフトウェア開発装置、上位ＣＰＵのようなデータ処理装置、下位ＣＰＵのようなデータ処理装置の観点より整理することができる。
【０１１８】
〔６−１〕互換性の観点のデータ処理装置は、命令を所定の手順にしたがって実行するものであって、第１の別のデータ処理装置の命令実行機能を包含することによって当該第１の別のマイクロコンピュータの命令コードと同一の命令コードを実行可能であり、第２の別のデータ処理装置の命令実行機能を包含することによって当該第２の別のデータ処理装置の命令コードと同一の命令コードを実行可能である。そして、前記第１の別のデータ処理装置の命令実行機能に包含されず、前記第２の別のデータ処理装置の命令実行機能に包含されるところの、オペランド指定とオペレーション指定との双方又は何れか一方に関し、複数の前記指定を組み合わせた命令と、前記第２の別のデータ処理装置の命令実行機能に包含されず、前記第１の別のデータ処理装置の命令実行機能に包含されるところの、オペランド指定とオペレーション指定との双方又は何れか一方に関し、複数の前記指定を組み合わせた命令と、を実行する命令実行手段を含む。
【０１１９】
前記オペランド指定は、例えば、実効アドレスの演算、汎用レジスタ、又はアドレス空間に関する指定である。
【０１２０】
前記データ処理装置が、有効なアドレスのビット数とベクタ及びスタックの単位サイズとが相違される第１動作モードと第２の動作モードとを切替え可能に有するなら、前記第１の動作モードにおける有効なアドレスのビット数と、ベクタ及びスタックの単位サイズは、前記第１の別のデータ処理装置と同等である。前記第２の動作モードにおける有効なアドレスのビット数と、ベクタ及びスタックの単位サイズは、前記第２の別のデータ処理装置と同等である。
【０１２１】
互換性に着目した更に別の観点のデータ処理装置は、命令を所定の手順にしたがって実行するデータ処理装置であって、データ情報の保持には全体又は２分割した領域を利用可能であり、且つ、２分割された下位側のビット数よりも多いビット数を以ってアドレス情報の保持にも利用可能な汎用レジスタを複数有する。命令実行手段は、前記２分割した下位側のビット数に相当する汎用レジスタを、所定の複数有する第１の別のデータ処理装置の命令のコードと同一ビット数の命令のコードを実行可能なように当該第１の別のデータ処理装置の命令実行機能を包含した上で、前記２分割可能な汎用レジスタの全体を利用する命令を実行し、また、前記２分割可能な汎用レジスタを前記所定の複数よりも少ない数だけ有する第２の別のデータ処理装置の命令のコードと同一ビット数の命令コードを実行可能なように当該第２の別のデータ処理装置の命令実行機能を包含する。
【０１２２】
互換性に着目したデータ処理装置の開発方法の観点によると、第１のデータ処理装置における未定義の命令のコードを前置命令コードとし、前記前置命令コードは、これに続く、第１のデータ処理装置の命令コードの定義を変更して、第１のデータ処理装置では定義されていない、オペランド指定とオペレーション指定との双方又は何れか一方に関し、複数の前記指定を組合せた命令を定義することにより、前記第１のデータ処理装置の命令を包含する命令を有する第２のデータ処理装置の命令を実現する。前記第２のデータ処理装置の命令の一部によって第３のデータ処理装置の命令を実現する。
【０１２３】
前記前置命令コードは、例えば、これに続く命令コードによって指定される汎用レジスタの指定を変更可能にするものである。また、別の前置命令コードは、これに続く転送命令コードと、別の転送命令のコードまたは演算命令のコードの内の２つ以上の命令コードによって、メモリ上のデータの操作を定義するものである。
【０１２４】
〔６−２〕エミュレーション用プロセッサの観点によると、前記互換性の観点で説明したデータ処理装置と、エミュレーションインタフェースとを含み、前記データ処理装置の命令実行によって、前記第１、第２の別のデータ処理装置の命令実行を代行可能なようにエミュレーション用プロセッサを構成する。
【０１２５】
〔６−３〕エミュレータの観点によると、前記エミュレーション用プロセッサを搭載し、ユーザプログラムを実行するエミュレーション用プロセッサにその内部状態を制御させる為の制御プログラムを格納可能なエミュレーションプログラム領域と、エミュレーションプログラム領域に前記制御プログラムを格納するコントロールプロセッサとを含んでエミュレータを構成する。
【０１２６】
エミュレーション用プロセッサは、前記制御プログラムに従った内部の設定状態に応じて前記第１、第２の別のデータ処理装置の命令実行を代行させることが可能である。
【０１２７】
〔６−４〕ソフトウェア開発装置（クロスソフトウェア）の観点によると、生成すべきプログラムの対象となるデータ処理装置を選択する手段を設け、前記前記互換性の観点で説明したデータ処理装置、第１の別のデータ処理装置又は第２の別のデータ処理装置のプログラムを生成可能にソフトウェア開発装置を構成する。
【０１２８】
〔６−５〕上位ＣＰＵの観点によると、データ処理装置は、データまたはアドレスを格納可能なレジスタを複数個備え、命令コードを読み込んで制御手段で解読して動作する。前記命令コードは基本単位から構成され、前記レジスタを指定するレジスタ指定情報は複数の命令コード基本単位に分割して保持させることが可能にされる。メモリとレジスタ間のデータ転送を行なう転送命令コードと、レジスタ上のデータに対して演算を行なう演算命令コードとを命令セットに含む。前記制御手段は、前記命令コードが保有する前記レジスタ指定情報の解読結果に基づいてレジスタを選択し、分割された一方のレジスタ指定情報を持つ前置命令コードが省略された場合には、省略されたレジスタ指定情報に代わって所定のレジスタ指定情報を暗黙的に想定してレジスタを選択し、また、前置命令コードと、前記転送命令コードと、前記演算命令コードとを、順次読み込んで、一つの命令として解釈し、メモリ上のデータに対する直接的な演算を実行させる。
【０１２９】
前記メモリ上のデータに対する直接的な演算とは、例えば、前記命令コードには明示されないデータラッチ手段へメモリからデータをロードし、当該データラッチ手段にロードしたデータを用いて行なう演算処理である。
【０１３０】
また、上位ＣＰＵの別の観点によるデータ処理装置は、データまたはアドレスを格納可能なレジスタを複数個備え、命令コードを読み込んで制御手段で解読して動作する。前記命令コードは基本単位から構成され、前記レジスタを指定するレジスタ指定情報は複数の命令コード基本単位に分割して保持させることが可能にされる。メモリとレジスタ間のデータ転送を行なう転送命令コードを命令セットに含む。前記制御手段は、前記命令コードが保有する前記レジスタ指定情報の解読結果に基づいてレジスタを選択し、分割された一方のレジスタ指定情報を持つ前置命令コードが省略された場合には、省略されたレジスタ指定情報に代わって所定のレジスタ指定情報を暗黙的に想定してレジスタを選択し、また、前置命令コードと、前記転送命令コードと、別の転送命令コードとを、順次読み込んで、一つの命令として解釈し、メモリとの間の直接的なデータ転送を実行させる。
【０１３１】
前記メモリとの間の直接的なデータ転送とは、例えば、前記命令コードには明示されないデータラッチ手段へメモリからデータをロードし、当該データラッチ手段のデータを前記メモリにストアする処理である。
【０１３２】
〔６−６〕下位ＣＰＵの観点によるデータ処理装置は、アドレス空間のビット数に相応するビット数のプログラムカウント手段と、データ情報の保持には全体又は２分割した領域を利用可能であり、且つ、２分割された前記一方のビット数よりも多いビット数を以ってアドレス情報の保持にも利用可能な複数の汎用レジスタと、命令実行手段とを有する。前記命令実行手段は、データ情報の保持に前記汎用レジスタの全体を利用する命令と、前記汎用レジスタと別の記憶装置との間のデータ転送命令とを実行可能であって、前記データ転送命令の転送データのビット数を、前記汎用レジスタの２分割した前記一方のビット数以下とすることが可能であり、また、アドレス空間上のデータを指定するためのアドレッシングモードの一部をアドレス空間上で複数に分離された部分で有効とする。
【０１３３】
前記アドレス空間上で複数に分離された一方の部分には、命令実行の開始アドレスを指定するベクタを含め、他方の部分には、リード・ライト可能な別の記憶装置のアドレスをマッピング可能である。
【０１３４】
《検討課題Ｄの解決手段》
前記検討課題Ｄに関する解決手段として、メモリ上のデータのビットの状態に応じた分岐を行なう命令を、動作を規定するフィールド（オペレーションフィールド）を複数に分割し、これを命令コードの基本単位上の別のワードで実現し、かかるワードを、独立して使用可能な別の命令の命令コード、乃至、別の命令の命令コードの一部と共通にする。かかる命令コードの第１のワードは、テンポラリレジスタの様な、プログラム上解放されていないラッチ手段とメモリの間でデータ転送を行なう。第２のワードは、前記ラッチ手段の所望のビットの状態を判定して分岐を行なう。上記テンポラリレジスタの様なラッチ手段には、指定されたビットの状態を判定する手段を設け、ＡＬＵなどに読み出したりすることなく、所定のビットの状態を判定できるようにする。上記命令コードの第１のワードは、コンディションコードなどの変化を禁止し、また、その終了時点で割込み例外処理を禁止するようにする。
【０１３５】
第１の例は、テンポラリレジスタの様な、プログラム上解放されていないラッチ手段とメモリの間でデータ転送を行なう転送命令コード（第１のワード）と、条件分岐命令コード（第２のワード）を組合せて、上記転送命令コードに続いて、上記条件分岐命令を実行する場合には、条件を、コンディションコードに代えて、ビット番号と当該ビットの状態とするようにし、メモリ上のデータのビットの状態に応じた分岐を可能にする。更に、上記転送命令コードは、ビットテスト命令などの一部と共通化するとよい。
【０１３６】
第１の例の別の観点では、ビットテスト命令などの命令コードと共通の、テンポラリレジスタの様な、プログラム上解放されていないラッチ手段とメモリの間でデータ転送を行なう転送命令コードと、条件分岐命令の命令コードを組合せて、アドレス空間上のデータの所定のビットの状態を判定して分岐する分岐命令を実現する。
【０１３７】
第２の例は、既存の、メモリ−レジスタ間の転送を行なう命令コード、条件分岐命令を組合せ、これを結合させる前置命令コードを持って、メモリ上のデータのビットの状態に応じた分岐を可能にする。即ち、前記前置命令コードに続いて、メモリ−レジスタ間命令を実行する場合は、汎用レジスタではなく、ＣＰＵ内の、テンポラリレジスタの様な、プログラム上解放されていないラッチ手段とメモリの間でデータ転送を行なう。
【０１３８】
上記第２の例は、未だ公知でない本発明者の先願に記載されている、ソースをメモリ上のデータとした命令の実現方法と、共通化し、演算命令コードを、分岐命令コードに置き換えることによって、実現することができる。
【０１３９】
詳細には、メモリ上のデータと汎用レジスタ上のデータの演算を行い、結果を汎用レジスタ上に格納する命令の場合には、前置命令コード、メモリ−レジスタ転送命令コード、演算命令コードを実行し、メモリ−レジスタ転送命令コードの実行時には、汎用レジスタではなく、転送データをラッチ手段に格納し、演算命令コードは、前記ラッチ手段に格納したデータと汎用レジスタ上のデータとの演算を行い、結果を汎用レジスタに格納する。
【０１４０】
汎用レジスタ上のデータとメモリ上のデータの演算を行い、結果をメモリ上に格納する命令の場合には、前置命令コード、メモリ−レジスタ転送命令コード、演算命令コード、及び内部で生成したメモリ−レジスタ転送命令コードを実行し、メモリ−レジスタ転送命令コードの実行時には、汎用レジスタではなく、転送データをラッチ手段に格納する。演算命令コードは、前記ラッチ手段に格納したデータと汎用レジスタ上のデータとの演算を行い、演算結果をラッチ手段に格納する。メモリ−レジスタ転送命令コードは、前記アドレスを格納したラッチ手段の内容をアドレスとして、前記演算結果を格納したラッチ手段の内容をデータとして、メモリへの書込みを行なう。インクリメントなどのように、１つのメモリ上のデータに対する演算を行なう場合もこれと同様にする。また、メモリ−レジスタ転送命令コード実行時には、フラグの変化を抑止し、演算結果のフラグの変化を保持する。
【０１４１】
２つのメモリ上のデータの演算を行い、結果をメモリ上に格納する命令の場合には、前置命令コード、第１、第２のメモリ・レジスタ間転送命令コード、演算命令コード、及び内部で生成したメモリ・レジスタ間転送命令コードを実行し、第１、第２のメモリ・レジスタ間転送命令コードの実行時には、汎用レジスタではなく、転送データをラッチ手段に格納する。演算命令コードは、前記ラッチ手段に格納したデータの演算を行い、結果をラッチ手段に格納する。メモリ・レジスタ間転送命令コードは、前記アドレスを格納したラッチ手段の内容をアドレスとして、前記演算結果を格納したラッチ手段の内容をデータとして、メモリへの書込みを行なう。
【０１４２】
一方、メモリ上のデータを、別のメモリに転送する命令の場合には、前置命令コード、メモリ・レジスタ間転送命令コード、メモリ・レジスタ間転送命令コードを実行し、メモリ・レジスタ間転送命令コードの実行時には、汎用レジスタではなく、転送データをラッチ手段に格納し、メモリ・レジスタ間転送命令コードは、前記演算結果を格納したラッチ手段の内容をデータとして、メモリへの書込みを行なう。
【０１４３】
イミディエイトデータとメモリ上のデータとの演算の場合は、概略汎用レジスタ上のデータとメモリ上のデータの演算を行い、結果をメモリ上に格納する命令と同様にできる。
【０１４４】
イミディエイトデータを、メモリに転送する命令の場合には、前置命令コード、イミディエイト・レジスタ間転送命令コード、メモリ・レジスタ間転送命令コードを実行し、イミディエイト・レジスタ間転送命令コードの実行時には、汎用レジスタではなく、イミディエイトデータをラッチ手段に格納し、メモリ・レジスタ間転送命令コードは、前記演算結果を格納したラッチ手段の内容をデータとして、メモリへの書込みを行なう。
【０１４５】
上記した手段によれば、第１のワード、第２のワード（条件分岐命令）などの命令コードは既存のものであるから、単独では従来同様に動作し、既存の命令実行を阻害することがない。また、既存の命令のみを使用していれば、既存のソフトウェア資産を有効に利用できる。汎用レジスタやロードストアアーキテクチャなどの既存のＣＰＵのメリットを損なうことがない。第１のワード、第２のワード（条件分岐命令）に、それぞれ、絶対アドレスのビット長、ディスプレースメントのビット長などに複数の種類があれば、同じ方法によって、これらを組合せることができる。これらの組合せを可能にすることによって、プログラム上の制約をなくし、使い勝手を向上することができる。また、同じ方法によって、サブルーチン分岐命令と組合せることが可能となり、使い勝手を向上することができる。
【０１４６】
テンポラリレジスタの様なラッチ手段には、指定されたビットの状態を判定する手段を設け、ＡＬＵなどに読み出したりすることなく、所定のビットの状態を判定できるようにすることにより、条件分岐命令の全体的な動作を変更することなく、実現できるから、変更する部分を小さくし、また論理的規模の増加を最小限にすることができる。
【０１４７】
前記前置命令コードは、アドレッシングモードや演算の内容によらず共通に使用できるから、追加する命令コードを最低限にすることができる。また、前置命令コードに、そのほかのデータサイズなどの情報を持たせることによって、全体的な命令コード長を短縮できる。
【０１４８】
メモリからラッチ手段へのデータ読み込み、演算、ラッチ手段の内容に基づくメモリへのライトは既存の命令と、使用するレジスタが相違なるのみであるから、既存の命令動作を大きく変更することなく、利用できる。これによって、メモリ上のデータへの演算を可能にすることによる論理規模の増加を最小限にすることができる。
【０１４９】
オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵが存在する場合には、アドレス空間の広いＣＰＵで、前記命令を実現することで、下位互換性をもつ、アドレス空間の小さいＣＰＵでもメモリ上のデータの演算を可能にできる。換言すれば、同一の方法で、オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵでもメモリ上のデータの演算を可能にできる。オブジェクトレベルで互換性を保つことによる利点とメモリ上のデータの演算を可能にすることの利点の双方を享受することができる。
【０１５０】
既存の命令を組合せ、新規の命令機能を実現しているので、命令セットの更なる拡張や、更なる高速化に当たって、既存のＣＰＵに対して新たなる課題を生じることが少ない。換言すれば、既存のＣＰＵに対して、更なる命令セットの拡張や、更なる高速化を行なう技術が存在し、若しくは新たに開発された場合には、本発明を適用して、既存のＣＰＵに対して命令セットを拡大したＣＰＵに対しても、同様の技術を適用することができる。新規の命令機能を実現するために用いている、既存の命令のそれぞれに、前記技術を適用して、再度組合せればよい。前置命令コードは動作が単純であり、また、既存の命令に類似した動作とすることによって、変更は容易である。
【０１５１】
また、既存の命令を組合せ、新規の命令機能を実現しているので、既存のＣＰＵとエミュレーション用インタフェースを共通化することができ、ひいては、同じエミュレータのハードウェアを共通できる。エミュレータのハードウェアを共通化することによって、逸早く開発環境を整えることができ、また、エミュレータの開発に必要な資源を最小限にすることができる。
【０１５２】
前述の検討課題Ｂ及びＤを、まとめれば、前置コードとデータを読み込む転送命令コードと、処理を指定する命令コード（転送命令コード：メモリ間転送の場合、演算命令コード：メモリ間演算の場合、分岐命令コード：ビット条件分岐命令）を組合せて、新規の命令コードを定義するものである。既に、前置コードとデータを読み込む転送命令コードを組合せた命令コード（メモリからテンポラリレジスタなどへのリード、と制御信号の発生）を有する場合は、これと処理を指定する命令コードを組合せて、新規の命令コードを定義するものである。
【０１５３】
《検討課題Ｅの解決手段》
前記検討課題Ｅに関する解決手段として、〔１〕データ処理装置は、命令を実行する実行手段を制御する制御手段に対して指定可能な複数の汎用レジスタの組み合わせを固定にし、当該組み合わせが固定の複数の汎用レジスタとアドレス空間上のアドレスとの間でデータ転送を行う為の転送命令を命令セットに含んでいる。これによって、汎用レジスタのビット長より大きいデータであっても、容易に扱うことができ、使い勝手を向上するとともに、データのリード／ライトに対して、命令のリードの頻度を低減して、データ処理の高速化を図ることができる。
【０１５４】
アドレス演算器による上記転送命令の実効アドレスの計算は１回だけとし、アドレスバッファにインクリメントまたはデクリメント機能とインクリメント結果を保持する機能を持たせることにより、命令動作を単純にし、既存の転送命令の制御と共通化を図ることができ、命令デコーダ等の論理的な規模の増加を最小限にすることができる。また、種々のアドレッシングモードに共通に、利用することができる。
【０１５５】
〔２〕汎用レジスタが分割可能で、かつ分割した部分に機能上の相違がある場合などには、汎用レジスタ全体を使用する転送命令と、分割された一部分を使用する転送命令とを備えるとよい。これにより、データ処理上、使用し易い汎用レジスタとの転送ができるから、その処理を容易にし、高速化することができる。
【０１５６】
〔３〕汎用レジスタに対する演算命令などの実行ステート数などが、汎用レジスタ毎に相違する場合などには、所定の組合せの複数の汎用レジスタと、別の複数の汎用レジスタとの転送命令を備えるとよい。このとき、汎用レジスタを増加し、汎用レジスタを指定するレジスタ指定フィールドを、２つの部分に分割し、この２つの部分を命令コードの基本単位上の別のワードに配置するとともに、一方のワードを省略可能とし、省略可能なワードを省略すると、暗黙的に所定のレジスタ指定情報が指定されるようにしてもよい。省略可能なワードには、レジスタ指定フィールドの一部のみを持つようにし、演算の種類などは指定しないようにする。省略可能なワードに含まれるレジスタ指定フィールドを保持する手段を設け、前記省略可能なワードが実行されると、前記省略可能なワードに含まれるレジスタ指定フィールドを前記保持手段に格納する。更に、命令の実行終了時に、前記保持手段を、前記暗黙的な指定に対応する所定の値に設定する。省略不可能なワードを、既存のＣＰＵと共通にし、省略可能なワードを既存のＣＰＵの未定義のワードに割当てるとよい。
【０１５７】
暗黙的に指定可能な汎用レジスタ（例えば既存の下位ＣＰＵの汎用レジスタ）のみを使用していれば、省略可能なワードを省略できるから、命令コードを増加させることがない（少なくとも従来同等の汎用レジスタを使用する場合は、従来同等の命令コードでよい）。命令コードを増加させないことよって、処理速度を低下させることがない。
【０１５８】
前記省略可能なワードを付加することによって、命令によって直接汎用レジスタの全てを選択できるから、プロラムの容易性を損う部分が少ない。また、任意の量の汎用レジスタの一部を、所望のタスク毎や所望の割込み処理などに確保しておく（他のタスクや処理では使用しない）ことによって、前記タスクや割込み処理において汎用レジスタを待避したりする必要がなく、高速化が図れる。また、前記タスクや割込み処理に確保する汎用レジスタ数は任意にできるから、タスクや処理の間で、使用する汎用レジスタを相互に融通し合うことも容易である。
【０１５９】
前記ワードを付加することによって、指定できる汎用レジスタのアクセスは、ＲＡＭなどのメモリのアクセスより、一般に高速にできるから、汎用レジスタ数を増加するとともに、複数の汎用レジスタとメモリとの転送を高速に実行可能にすることにより、ＣＰＵの処理速度を向上できる。また、いわゆるロードストア型の命令セットを持ち、メモリの内容に対して直接演算できないようなプロセッサについては、直接処理できるデータ量を増加でき、また、メモリのアクセスを高速化することができ、処理速度を向上することができる。
【０１６０】
〔４〕オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵが存在する場合には、アドレス空間の広いＣＰＵにおいて、アドレス空間に対応する汎用レジスタに対する上記転送命令と、アドレス空間の小さいＣＰＵのアドレス空間に対応するサイズ（例えば１６ビット）の汎用レジスタに対する上記転送命令とを備える。
【０１６１】
オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵが存在する場合には、アドレス空間の広いＣＰＵにおいて、アドレス空間に対応するサイズ（例えば３２ビット）の汎用レジスタに対する上記転送命令と、アドレス空間の小さいＣＰＵのアドレス空間に対応するサイズ（例えば１６ビット）の汎用レジスタに対する上記転送命令とを備えることによって、後者のサイズの上記転送命令を、下位互換性をもつ、アドレス空間の小さいＣＰＵでも容易に実現可能にできる。換言すれば、同一の方法で、オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵでも複数汎用レジスタの転送命令を実現可能にできる。オブジェクトレベルで互換性を保つことによる利点と前記転送命令を追加することの利点の双方を享受することができる。
【発明の効果】
【０１６２】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【０１６３】
すなわち、検討課題Ｂに関する解決手段によれば、論理的・物理的規模の増大を最小限とし、ロード・ストア型の命令セットを持つ既存のＣＰＵ若しくはマイクロコンピュータ等と互換性を維持しつつ、見掛け上、メモリ上のデータに対する直接的な演算を可能とすることができる。
【０１６４】
さらに、見掛け上、メモリ上のデータに対する演算を可能とすることによって、プログラミングを容易にすると共に、不所望の汎用レジスタの退避／復帰を抑止して、ＣＰＵの処理性能を向上させることができる。
【発明を実施するための最良の形態】
【０１６５】
《検討課題Ａ乃至Ｃの解決手段に関する実施の形態》
先ず、前記検討課題Ａ乃至Ｃの解決手段に関する発明の具体例を説明する。図２には、本発明に係るデータ処理装置の一例であるシングルチップマイクロコンピュータが示される。
【０１６６】
同図に示されるシングルチップマイクロコンピュータ１は、全体の制御を司るＣＰＵ２、割込コントローラ（ＩＮＴ）３、ＣＰＵ２の処理プログラムなどを格納するメモリであるＲＯＭ４、前記ＣＰＵ２の作業領域並びにデータの一時記憶に用いられるメモリであるＲＡＭ５、タイマ〔Ａ〕６、タイマ〔Ｂ〕７、シリアルコミュニケーションインタフェース（ＳＣＩ）８、Ａ／Ｄ変換器９、第１乃至第９入出力ポート（ＩＯＰ〔１〕〜ＩＯＰ〔９〕）１１〜１９、クロック発振器（ＣＰＧ）２０、システムコントローラ（ＳＹＳＣ）２１及びＤＭＡＣ（ダイレクトメモリアクセスコントローラ）３３の機能ブロック乃至はモジュールから構成され、公知の半導体製造技術により単結晶シリコンのような１つの半導体基板上に形成される。ＣＰＵＣＲ２２はシステムコントローラ２１に配置されたコントロールレジスタである。
【０１６７】
前記ＣＰＵ２は主にＲＯＭ４から命令をフェッチし、これを解読して演算動作や制御動作を行う。前記ＤＭＡＣ３３はＣＰＵ２とバス３０を共有し、ＣＰＵ２から設定されたデータ転送制御条件に従って、ＣＰＵ２に代わってデータ転送制御を行う事ができる。ＤＲＥＱはマイクロコンピュータ１の外部からＤＭＡＣ３３に与えられるデータ転送要求信号である。ＤＭＡＣ３３はデータ転送要求信号ＤＲＥＱによるデータ転送要求を受け付けるとき、データ転送要求承認信号ＤＡＣＫを要求元に返す。
【０１６８】
かかるシングルチップマイクロコンピュータ１は、電源端子として、グランドレベル（Ｖｓｓ）、電源電圧レベル（Ｖｃｃ）、アナロググランドレベル（ＡＶｓｓ）、アナログ電源電圧レベル（ＡＶｃｃ）、アナログ基準電圧（Ｖｒｅｆ）の入力端子を有する。そして、専用制御端子として、リセット（ＲＥＳ）、スタンバイ（ＳＴＢＹ）、モード制御（ＭＤ０、ＭＤ１、ＭＤ２）、クロック入力（ＥＸＴＡＬ、ＸＴＡＬ）等の各端子を有する。
【０１６９】
シングルチップマイクロコンピュータ１は、前記ＣＰＧ２０の端子ＥＸＴＡＬ、ＸＴＡＬに接続される水晶発振子またはＥＸＴＡＬ端子に入力される外部クロックに基づいて生成される基準クロック（システムクロック）に同期して、動作を行う。この基準クロックの１周期をステートと呼ぶ。
【０１７０】
シングルチップマイクロコンピュータ１の機能ブロックは、内部バス３０によって相互に接続さる。シングルチップマイクロコンピュータ１は、バスの制御を行なう、図示を省略したバスコントローラを内蔵している。内部バス３０は内部アドレスバス・内部データバスの他、リード信号・ライト信号等のコントロールバスを含み、コントロールバスはさらにバスサイズ信号を含んだり、これらをコード化したバスコマンドなどとしてもよい。或いはシステムクロックなどを含んでもよい。
【０１７１】
特に図示はしないが、内部アドレスバスはその位相によって、ＩＡＢ、ＰＡＢの２種類があり、内部データバスもその位相によって、ＩＤＢ、ＰＤＢが存在する。例えば、リードの場合、ＩＡＢの後、ＰＡＢは０．５ステート遅延する。ＰＡＢとＰＤＢは同期している。ＰＤＢの後、ＩＤＢは０．５ステート遅延する。ＩＡＢとＰＡＢ、ＩＤＢとＰＤＢのインタフェースは、前記バスコントローラが行なう。
【０１７２】
かかる機能ブロックやモジュールは内部バス３０を介して、ＣＰＵ２によってリード／ライトさる。内部バス３０のデータバス幅は１６ビットとする。ＣＰＵ２は、内蔵ＲＯＭ４、ＲＡＭ５を１ステートでリード／ライトすることができる。
【０１７３】
なお、タイマ〔Ａ〕６、タイマ〔Ｂ〕７、ＳＣＩ８、Ａ／Ｄ変換器９、ＩＯＰ〔１〕１１〜ＩＯＰ〔９〕１９、ＣＰＧ２０が有す制御レジスタを総称して、内部Ｉ／Ｏレジスタと呼ぶ。
【０１７４】
各入出力ポート１１〜１９は、アドレスバス、データバス、バス制御信号、あるいはタイマ６，７、ＳＣＩ８、Ａ／Ｄ変換器９の入出力端子と兼用されている。すなわち、タイマ６、７、ＳＣＩ８、Ａ／Ｄ変換器９は、それぞれ入力信号を有し、入出力ポートと兼用にされた端子を介して、外部と入出力されるものである。例えばＩＯＰ〔５〕、ＩＯＰ〔６〕、ＩＯＰ〔７〕は、タイマ６，７の入出力端子と兼用され、ＩＯＰ〔８〕はＳＣＩ８の入出力端子と兼用にされている。アナログデータの入力端子は、ＩＯＰ〔９〕と兼用にされている。
【０１７５】
かかるシングルチップマイクロコンピュータ１にリセット信号ＲＥＳが与えられると、ＣＰＵ２を始めとし、シングルチップマイクロコンピュータ１はリセット状態になる。このリセットが解除されると、ＣＰＵ２は所定のアドレスからスタートアドレスをリードして、このスタートアドレスから命令のリードを開始するリセット例外処理を行う。この後、ＣＰＵ２は逐次、ＲＯＭ４などから命令をリードし、解読して、その解読内容に基づいてデータの処理或はＲＡＭ５、タイマ６，７等とのデータ転送を行う。即ち、ＣＰＵ２は、入出力ポート１１〜１９等から入力されるデータ、或はＳＣＩ８などから入力される指示を参照しつつ、ＲＯＭ４などに記憶されている命令に基づいて処理を行い、その結果に基づいて、入出力ポート１１〜１９、タイマ６，７等を使用しつて、外部に信号を出力し、各種外部接続機器の制御を行う。
【０１７６】
タイマ６，７、ＳＣＩ８、外部信号などの状態を割込み信号として、ＣＰＵ２に伝達することができる。割込信号は、Ａ／Ｄ変換器９、タイマ〔Ａ〕６、タイマ〔Ｂ〕７、ＳＣＩ８、入出力ポート１１〜１９が出力し、割込コントローラ３はこれを入力して、所定のレジスタなどの指定に基づいて、ＣＰＵ２に割込要求信号３１を与える。割込要因が発生すると、ＣＰＵ割込要求が発生され、ＣＰＵ２は実行中の処理を中断して、例外処理状態を経て、所定の処理ルーチンに分岐し、所望の処理を行い、割込要因をクリアしたりする。所定の処理ルーチンの最後には、通常復帰命令が実行され、この命令を実行することによって前記中断した処理を再開する。
【０１７７】
図３には、本発明の適用された前記ＣＰＵ２の汎用レジスタ及びコントロールレジスタの構成例（プログラミングモデル）として上位のＣＰＵ２のプログラミングモデルが示される。
【０１７８】
ＣＰＵ２は、３２ビット長の汎用レジスタを３２本持っている。汎用レジスタＥＲ０〜ＥＲ３１は、すべて同機能を持っており、アドレスレジスタとしてもデータレジスタとしても使用することができる。
【０１７９】
データレジスタとしてしては３２ビット（ロングワード）、１６ビット（ワード）および８ビット（バイト）のレジスタとして使用きる。アドレスレジスタおよび３２ビットレジスタとしては、一括して汎用レジスタＥＲ（ＥＲ０〜ＥＲ３１）として使用する。１６ビットレジスタとしては、汎用レジスタＥＲを分割して汎用レジスタＥ（Ｅ０〜Ｅ３１）、汎用レジスタＲ（Ｒ０〜Ｒ３１）として使用する。これらは同等の機能を持っており、１６ビットジスタを最大６４本まで使用することができる。８ビットレジスタとしては、汎用レジスタＲを分割して汎用レジスタＲＨ（Ｒ０Ｈ〜Ｒ３１Ｈ）、汎用レジスタＲＬ（Ｒ０Ｌ〜Ｒ３１Ｌ）として使用する。これらは同等の機能を持っており、８ビットレジスタを最大６４本まで使用することができる。各レジスタ独立に使用方法を選択することができる。
【０１８０】
汎用レジスタＥＲ７、ＥＲ１５、ＥＲ２３、ＥＲ３１には、汎用レジスタとしての機能に加えて、スタックポインタ（ＳＰ）としての機能が割り当てられており、例外処理やサブルーチン分岐などで暗黙的に使用される。例外処理は前記割込み処理を含む。図示されない制御レジスタなどの設定によって、サブルーチン分岐用のスタックポインタと、例外処理用のスタックポインタを、独立して選択することができる。
【０１８１】
なお、内部論理構成上はＥＲ０〜ＥＲ７をグループ０、ＥＲ８〜ＥＲ１５をグループ１、ＥＲ１６〜ＥＲ２３をグループ２、ＥＲ２４〜ＥＲ３１をグループ３としている。グループ０が既存のＣＰＵ（下位のＣＰＵ）と同一とされる。
【０１８２】
それらの汎用レジスタは、プログラミング仕様上は相違なく、すべて同等に使用できる。少なくとも、アセンブリ言語で書く場合には、グループを意識せず、例えば、Ｒ０Ｈ、Ｅ８、Ｒ１６、ＥＲ３１、などと記述できる。例えば平成７年３月（株）日立製作所発行『Ｈ８Ｓ／２６００シリーズＨ８Ｓ／２０００シリーズプログラミングマニュアル』のアセンブラフォーマットに従って記述すれば、“ＭＯＶ．Ｌ   ＥＲ０，ＥＲ３１”或いは、“ＡＤＤ．Ｗ  Ｅ８，Ｒ１６”などとレジスタ番号のみで記述できる。
【０１８３】
図３において、ＰＣで示されるものは２４ビットのカウンタ（プログラムカウンタ）で、ＣＰＵ２が次に実行する命令のアドレスを示す。特に制限されないが、ＣＰＵ２の命令は、全て２バイト（ワード）を単位としているため、最下位ビットは無効であり、命令リード時には最下位ビットは０とみなされる。
【０１８４】
ＣＣＲで示されるものは８ビットのレジスタ（コンディションコードレジスタ）で、ＣＰＵ２の内部状態を示している。割込みマスクビット（Ｉ）とハーフキャリ（Ｈ）、ネガティブ（Ｎ）、ゼロ（Ｚ）、オーバフロー（Ｖ）、キャリ（Ｃ）の各フラグを含む８ビットで構成されている。
【０１８５】
ＥＸＲで示されるものは８ビットのレジスタで、割込みなどの例外処理の制御を行なう。割込みマスクビット（Ｉ２〜Ｉ０）とトレース（Ｔ）の各ビットを含んでいる。
【０１８６】
汎用レジスタ上のデータ構成例、メモリ空間上のデータ構成、アドレッシングモードと実効アドレスの計算方法などについては、平成７年３月（株）日立製作所発行『Ｈ８Ｓ／２６００シリーズＨ８Ｓ／２０００シリーズプログラミングマニュアル』記載のＣＰＵと同様であり、アドレス空間１６ＭＢ（乃至データ用４ＧＢ）を利用できる。マキシマムモード／ミニマムモード（前記平成７年３月（株）日立製作所発行『Ｈ８Ｓ／２６００シリーズＨ８Ｓ／２０００シリーズプログラミングマニュアル』の記載ではアドバンスト／ノーマルモード）を持って、それぞれ、アドレス空間６４ｋバイト／１６Ｍバイト（乃至データ用４Ｇバイト）を選択できる。
【０１８７】
図４にはＣＰＵ２に対する第１の下位互換のＣＰＵのプログラミングモデルが示される。同図に示されるプログラミングモデルは、平成元年７月（株）日立製作所発行『Ｈ８／３００シリーズプログラミングマニュアル』記載のＣＰＵと同様である。
【０１８８】
第１の下位互換のＣＰＵは、１６ビット長の汎用レジスタを８本持っている。汎用レジスタは、全て同機能を持っており、アドレスレジスタとしてもデータレジスタとしても使用することができる。
【０１８９】
データレジスタとしてしては１６ビットおよび８ビットレジスタとして使用できる。アドレスレジスタおよび１６ビットレジスタとしては、一括して汎用レジスタＲ（Ｒ０〜Ｒ７）として使用する。８ビットレジスタとしては、汎用レジスタＲを分割して汎用レジスタＲＨ（Ｒ０Ｈ〜Ｒ７Ｈ）、汎用レジスタＲＬ（Ｒ０Ｌ〜Ｒ７Ｌ）として使用する。これらは同等の機能を持っており、８ビットレジスタを最大１６本まで使用することができる。各レジスタ独立に使用方法を選択することができる。
【０１９０】
汎用レジスタＲ７には、前記同様に、汎用レジスタとしての機能に加えて、スタックポインタ（ＳＰ）としての機能が割り当てられており、例外処理やサブルーチン分岐などで暗黙的に使用される。
【０１９１】
アドレス空間として、６４ｋバイトのアドレス空間を利用でき、ベクタやスタックの構造などが前記上位ＣＰＵのミニマムモードと同等の動作になる。
【０１９２】
前記図３のプログラミングモデルを有する上位のＣＰＵ２は、図４の第１の下位互換のＣＰＵの汎用レジスタ及び命令セットを包含している。すなわち、上位ＣＰＵ２が第１の下位ＣＰＵと互換を保つ為に、詳細を後述するように、汎用レジスタの拡張、命令セットやアドレシングモードの組み合わせの拡張が行われている。
【０１９３】
図５にはＣＰＵ２に対する第２の下位互換のＣＰＵのプログラミングモデルが示される。
【０１９４】
前記図３のプログラミングモデルを有する上位のＣＰＵ２は、図５の第２の下位互換（下位互換を単に下位とも称する）のＣＰＵの汎用レジスタ及び命令セットを包含している。すなわち、上位ＣＰＵ２が第１の下位ＣＰＵと互換を保つ為に、詳細を後述するように、汎用レジスタの拡張、命令セットやアドレシングモードの組み合わせの拡張が行われている。一方、図４の第１の下位ＣＰＵに対しては、図５の第２の下位ＣＰＵは、汎用レジスタ、命令セットを包含したり、包含されたりしない関係を有する。例えば、図４の第１の下位ＣＰＵに対して、図５の第２の下位ＣＰＵは汎用レジスタのビット長が大きいし、図５の第２の下位ＣＰＵに対して、図４の第１の下位ＣＰＵは汎用レジスタの本数が大きい。
【０１９５】
第２の下位互換のＣＰＵは、３２ビット長の汎用レジスタを４本持っている。汎用レジスタは、全て同機能を持っており、アドレスレジスタとしてもデータレジスタとしても使用することができる。
【０１９６】
データレジスタとしてしては３２ビット、１６ビットおよび８ビットレジスタとして使用きる。アドレスレジスタおよび３２ビットレジスタとしては、一括して汎用レジスタＥＲ（ＥＲ０、ＥＲ１、ＥＲ７、ＥＲ１５）として使用する。１６ビットレジスタとしては、汎用レジスタＥＲを分割して汎用レジスタＥ（Ｅ０、Ｅ１、Ｅ７、Ｅ１５）、汎用レジスタＲ（Ｒ０、Ｒ１、Ｒ７、Ｒ１５）として使用する。これらは同等の機能を持っており、１６ビットレジスタを最大８本まで使用することができる。８ビットレジスタとしては、汎用レジスタＲを分割して汎用レジスタＲＨ（Ｒ０Ｈ、Ｒ１Ｈ、Ｒ７Ｈ、Ｒ１５Ｈ）、汎用レジスタＲＬ（Ｒ０Ｌ、Ｒ１Ｌ、Ｒ７Ｌ、Ｒ１５Ｌ）として使用する。これらは同等の機能を持っており、８ビットレジスタを最大８本まで使用することができる。各レジスタ独立に使用方法を選択することができる。
【０１９７】
汎用レジスタＥＲ７、ＥＲ１５には、汎用レジスタとしての機能に加えて、スタックポインタ（ＳＰ）としての機能が割り当てられており、例外処理やサブルーチン分岐などで暗黙的に使用される。前記同様に、図示されない制御レジスタなどの設定によって、サブルーチン分岐用のスタックポインタと、例外処理用のスタックポインタを、独立して選択することができる。
【０１９８】
汎用レジスタのビット長などは、前記上位ＣＰＵ２と同等であり、同等のアドレス空間１６Ｍバイト（乃至データ用４Ｇバイト）を利用できる。第２の下位ＣＰＵはマキシマムモードに相当するモードのみを持つ。
【０１９９】
なお、プログラム上、ＥＲ０、Ｒ０、Ｒ０Ｈ、Ｒ０Ｌ、ＥＲ１、Ｒ１、Ｒ１Ｈ、Ｒ１Ｌはそれぞれ、ＥＡＸ、ＡＸ、ＡＨ、ＡＬ、ＥＢＸ、ＢＸ、ＢＨ、ＢＬとしても記述できるようにしている。これらは、汎用レジスタの機能を示すものではなく、本発明とは関係のない、更に別のＣＰＵの記述に合わせたものである。このため、前記更に別のＣＰＵでは単独で使用できないＥ０、Ｅ１は、そのままの記述のみを用いる。この場合、例えば、“ＡＤＤ．Ｗ  Ｅ１，ＢＸ”と、“ＡＤＤ．Ｗ  Ｅ１，Ｒ１”は同一の命令コードに対応する。
【０２００】
図６にはＣＰＵのアドレス空間が示される。なお、シングルチップマイクロコンピュータのアドレスマップとしては、ＲＯＭは０番地から、一方、ＲＡＭ及び内部Ｉ／ＯレジスタはＨ’ＦＦＦＦまたはＨ’ＦＦＦＦＦＦ番地まで、それぞれアドレス空間の両端になるように配置されるようにする。
【０２０１】
上位のＣＰＵ２は、前記の通り、１６ＭＢのアドレス空間のマキシマムモードと６４ｋＢのアドレス空間のミニマムモードを持つ。マキシマムモード／ミニマムモードの選択はモード選択信号ＭＤ０〜ＭＤ２の状態によって決定される。
【０２０２】
マキシマムモードでは、絶対アドレス２４ビット（上位に８ビットの予約ビットを付加して、命令コード中は３２ビット）で全空間を、絶対アドレス１６ビットで０〜 Ｈ’７ＦＦＦ及びＨ’ＦＦ８０００〜Ｈ’ＦＦＦＦＦＦを指定する。
【０２０３】
また、例外処理時のベクタは２４ビット（メモリ上は３２ビットとされ、上位８ビットは無視される）、サブルーチン分岐などにおいて待避／復帰されるＰＣも２４ビットとされる。
【０２０４】
ミニマムモードでは、絶対アドレスとレジスタ間接のアドッレシングモードのいずれも、下位１６ビットのみを使用し、上位ビットは無視する。例外処理時のベクタは１６ビット、サブルーチン分岐などにおいて待避／復帰されるＰＣも１６ビットとされる。
【０２０５】
第１の下位ＣＰＵは、ミニマムモードに相当する６４ｋＢのアドレス空間を持つ。絶対アドレスは１６ビットのみを持ち、また、レジスタ間接では１６ビットレジスタで、それぞれ全空間を指定する。例外処理時のベクタは１６ビット、サブルーチン分岐などにおいて待避／復帰されるＰＣも１６ビットとされる。
【０２０６】
第２の下位ＣＰＵは、マキシマムモードに相当する１６ＭＢのアドレス空間を持つ。絶対アドレスは１６ビットのみを持ち、０〜 Ｈ’７ＦＦＦ及びＨ’ＦＦ８０００〜Ｈ’ＦＦＦＦＦＦを指定する。一方、レジスタ間接では３２ビットレジスタで、全空間を指定する。絶対アドレスは１６ビットでは、ＲＡＭと内部Ｉ／Ｏレジスタを合わせて３２ｋＢまで、及びＲＯＭを３２ｋＢまで指定できる。内蔵ＲＡＭと内部Ｉ／Ｏレジスタを合わせて３２ｋＢの容量は、バスを拡張しない応用分野はこのシングルチップマイクロコンピュータでは十分な容量といえる。また、内蔵ＲＡＭと内部Ｉ／Ｏレジスタを合わせて３２ｋＢを超える場合には、それ自体の論理的・物理的規模が大きくなるから、敢えて論理的規模の小さい下位ＣＰＵを使用する必要性は少なく、上位ＣＰＵを使うのが適当と言える。少なくとも、第２の下位ＣＰＵを使用して、絶対アドレスで指定できないＲＡＭ乃至内部Ｉ／Ｏレジスタを設けて、論理的・物理的規模の縮小を追求するか、上位ＣＰＵを使用して、全ての空間を絶対アドレスで指定可能にして、使い勝手を追求するかを選択することができる。
【０２０７】
絶対アドレス１６ビットで指定できるＲＯＭのアドレスが限定されてしまうが、ＲＯＭに割り当てる定数などについては、Ｃコンパイラなどで記述した場合も、モジュール間最適化で、再配置することができる。なお、モジュール間最適化は、各プログラムモジュールをリンクする際に、メモリ配置や関数の呼び出し関係に依存した最適化を行なうものであり、平成９年８月（株）日立製作所発行『Ｈ８Ｓ，Ｈ８／３００シリーズＣコンパイラユーザーズマニュアル』（第４版）などに記載されている。
【０２０８】
なお、例外処理時のベクタは２４ビット（メモリ上は３２ビットとされ、上位８ビットは無視される）、サブルーチン分岐などにおいて待避／復帰されるＰＣも２４ビットとされる。
【０２０９】
図７及び図８には実効アドレスの計算方法として、上位ＣＰＵ２のマキシマムモードにおける実効アドレス計算方法が例示されている。
【０２１０】
図７の（１）に示されるレジスタ間接では命令コード中にレジスタを指定する部分を含み、この命令コードで指定された汎用レジスタＥＲの内容の合計３２ビットをアドレスとしてメモリ上のアドレスを指定する。アドレスは２４ビットでよいため、上位８ビットは無視する。
【０２１１】
図７の（２）、（３）に示されるディスプレースメント付レジスタ間接は、前記レジスタ間接と同様に得られた３２ビットのアドレスに、命令コード中に含まれるディスプレースメントを加算した結果をアドレスとしてメモリ上のアドレスを指定する。加算結果はアドレスの指定のみに使用され、汎用レジスタＥＲの内容には反映されない。特に制限はされないものの、ディスプレースメントは３２ビットまたは１６ビットであり、１６ビットディスプレースメントは加算する場合には上位１６ビットは符号拡張される。すなわち、ディスプレースメントの上位１６ビットは１６ビットディスプレースメントのビット１５と同じ値であるとして加算が行われる。この場合、３２ビットディスプレースメントの上位８ビットは、予約領域とされ、無視される。
【０２１２】
図７の（４）に示されるポストインクリメントレジスタ間接は、前記レジスタ間接と同様に得られた３２ビットのアドレスでメモリ上のアドレスを指定する。その後、このアドレスに１または２または４を加算し、その加算結果が汎用レジスタＥＲに格納される。メモリ上のバイトデータを指定する場合１が、ワードデータを指定する場合２が、アドレスデータを指定する場合４が、それぞれ加算される。加算結果の上位８ビットも拡張レジスタに格納される。
【０２１３】
図７の（５）に示されるプリデクリメントレジスタ間接は、前記レジスタ間接と同様に得られた３２ビットのアドレスから１または２または４を減算した結果の２４ビットのアドレスでメモリ上のアドレスを指定する。その後、その減算結果が汎用レジスタＥＲに格納される。メモリ上のバイトデータを指定する場合１が、ワードデータを指定する場合２が、アドレスデータを指定する場合４が、それぞれ減算される。前記同様に、アドレスが２４ビットでよい場合には、特に制限はされないものの、減算結果の上位８ビットも拡張レジスタに格納される。
【０２１４】
図８の（６）、（７）、（８）に示される絶対アドレスは命令コード中に含まれる、８ビット、１６ビットまたは２４ビットの絶対アドレスをアドレスとしてメモリ上のアドレスを指定する。８ビット絶対アドレスは、上位１６ビットが１拡張される。すなわちアドレスのビット２３〜８は全ビット１とされる。従って使用可能なアドレスはＨ’ＦＦＦＦ００〜Ｈ’ＦＦＦＦＦＦの２５６バイトである。また、１６ビット絶対アドレスは、上位８ビットが符号拡張される。すなわち、１６ビット絶対アドレスのビット１５が０であればアドレスのビット２３〜１６は全ビット０とされ、ビット１５が１であればアドレスのビット２３〜１６は全ビット１とされる。従って使用可能なアドレスはＨ’００００００〜Ｈ’００７ＦＦＦ及びＨ’ＦＦ８０００〜Ｈ’ＦＦＦＦＦＦの６４ｋバイトである。
【０２１５】
図８の（９）、（１０）に示されるプログラムカウンタ相対は、プログラムカウンタの内容の２４ビットのアドレスに命令コード中に含まれるディスプレースメントを加算した結果をアドレスとしてメモリ上のアドレスを指定する。加算結果はプログラムカウンタに格納される。特に制限はされないものの、ディスプレースメントは１６ビットまたは８ビットであり、これらのディスプレースメントは加算する場合には上位８ビットまたは１６ビットは符号拡張される。すなわち、ディスプレースメントの上位８ビットは１６ビットディスプレースメントのビット１５と、または上位１６ビットは８ビットディスプレースメントのビット７と同じ値であるとみなして加算が行われる。プログラムカウンタ相対は分岐命令のみで使用される。
【０２１６】
尚、ミニマムモードでは、実効アドレスの上位８ビットが無視される。前記の他にイミディエイト、レジスタ直接、メモリ間接などのアドレッシングモードを実行するが、これらは本発明に直接は関係しないので詳細な説明は省略する。
【０２１７】
第１の下位ＣＰＵのデータ転送命令では、レジスタ間接、１６ビットディスプレースメント付レジスタ間接、ポストインクリメント／プリデクリメントレジスタ間接、８／１６ビット絶対アドレス、が使用可能である。実効アドレスの計算方法は上位ＣＰＵ２と同様であるが、上位８ビットが無視され、下位１６ビットが有効である。
【０２１８】
第２の下位ＣＰＵのデータ転送命令では、レジスタ間接、１６ビットディスプレースメント付レジスタ間接、ポストインクリメント／プリデクリメントレジスタ間接、８／１６ビット絶対アドレス、が使用可能である。なお、絶対アドレス２４ビットは分岐命令で使用可能とされる。
【０２１９】
図９には本発明に係るＣＰＵ２の機械語の命令フォーマットが例示されている。前記第１の下位ＣＰＵ、第２の下位ＣＰＵの命令セットは上位ＣＰＵ２の命令セットのサブセットとされる。
【０２２０】
ＣＰＵ２の命令は、２バイト（ワード）を単位にしている。各命令はオペレーションフィード（ｏｐ）、レジスタフィールド（ｒ、ｇｒ）、ＥＡ拡張部（ＥＡ）、およびコンディションフィールド（ｃｃ）を含む。特に制限はされないものの、前記平成７年３月（株）日立製作所発行『Ｈ８Ｓ／２６００シリーズＨ８Ｓ／２０００シリーズプログラミングマニュアル』記載のＣＰＵと同じ命令フォーマットとしている。
【０２２１】
オペレーションフィールド（ｏｐ）は、命令の機能を表し、アドレッシングモードの指定オペランドの処理内容を指定する。命令の先頭４ビットを必ず含む。２つのオペレーションフィールドを持つ場合もある。
【０２２２】
レジスタフィールド（ｒ、ｇｒ）は汎用レジスタを指定する。レジスタフィールド（ｒ）はアドレスレジスタのとき３ビット、データレジスタのとき３ビット（３２ビットレジスタ）または４ビット（８または１６ビットレジスタ）である。２つのレジスタフィールドを持つ場合、またはレジスタフィールドを持たない場合もある。
【０２２３】
レジスタフィールド（ｇｒ）はグループ０〜グループ３の何れのレジスタセットを選択するかを指定する情報を保持することになる。レジスタフィールド（ｇｒ）は４ビット存在するが、図３のレジスタ構成に従えば、特に制限はされないものの、下位２ビットを有効にする。レジスタフィールド（ｇｒ）を含むワードは省略可能とされ、省略された場合は、０が与えられたものと想定され、グループ０のレジスタセットが指定されたものと見做され、レジスタフィールド（ｒ）で指定されるレジスタはレジスタ番号が０〜７とされ、汎用レジスタＥＲ０〜ＥＲ７が選択できる。
【０２２４】
例えば、レジスタ番号ｎ＝ｇｒ［１：０］＜＜３＋ｒ［２：０］で求められる（＜＜３は３ビット左シフトを示す）。即ち、ｇｒを上位とし、ｒの下位３ビットｒ［２：０］を下位とした５ビットで指定される番号のレジスタを指定する。例えば、ｇｒ＝０、ｒ＝１の場合はレジスタ番号ｎ＝１、となり、ｇｒ＝２、ｒ＝３の場合はレジスタ番号ｎ＝１９、となる。このレジスタ番号ｎに対応する汎用レジスタＥＲｎの、命令コードのサイズを指定する部分や、ｒ［３］の内容によって、レジスタＥ、レジスタＲ、レジスタＲＨ、レジスタＲＬが指定される。例えば、データサイズがロングワード、ワード、バイトの何れであるかは命令コードのオペレーションフィールドの所定のビットで指定される。データサイズがワード又はバイトのとき、利用するレジスタ位置はｒ［３］で指定される。ｒ［３］は、ｒの下位から４ビット目のビットデータを意味する。データサイズがワードのときｒ［３］＝１のときはレジスタＥを指定し、ｒ［３］＝０のときはレジスタＲを意味する。データサイズがバイトのときｒ［３］＝１のときはレジスタＲＬを指定し、ｒ［３］＝０のときはレジスタＲＨを意味する。
【０２２５】
尚、ｇｒ１、ｒ１はソースレジスタまたはアドレスレジスタのレジスタ指定フィールドを意味し、ｇｒ２、ｒ２はデスティネーションレジスタまたはデータレジスタのレジスタ指定フィールドを意味する。ｇｒ１（命令コードの基本ワード中のビット７〜４）はｒ１（命令コードの基本ワード中のビット７〜４またはビット６〜４）に、ｇｒ２（命令コードの基本ワード中のビット３〜０）はｒ２（命令コードの基本ワード中のビット１１〜８またはビット３〜０）に対応する。
【０２２６】
ＥＡ拡張部（ＥＡ）は、イミディエイトデータ、絶対アドレスまたはディスプレースメントを指定する。８ビット、１６ビット、または３２ビットである。
【０２２７】
コンディションフィールド（ｃｃ）は条件分岐命令（Ｂｃｃ命令）の分岐条件を指定する。
【０２２８】
図９にはＣＰＵ２の機械語の命令フォーマットを示している。レジスタフィールド（ｇｒ）を持つ前置命令コード（レジスタ拡張用前置命令コード）を省略すると、既存の命令コードになるようになっている。レジスタフィールド（ｇｒ）をグループ指定フィールド（ｇｒ）とも記す。例えば、図９の（２）に例示される命令コード“Ｈ'０９０１”を単独で使用する場合、ＡＤＤ．Ｗ Ｒ０，Ｒ１となり、図９の（３）に例示されるように、それに、グループ指定フィールドを持つ前置命令コード“Ｈ'００１２”を付加すると、命令コード“ Ｈ'００１２０９０１”は、 ＡＤＤ．Ｗ Ｒ８，Ｒ１７となる。
【０２２９】
また、暗黙的に使用されるグループ０のレジスタセットを指定する前置命令レコード“Ｈ'００００”は、特に制限されないが、ＮＯＰ（無操作）命令とされている。 命令コード“Ｈ'００ｘｘ”（ｘｘは０１〜ＦＦ）は、レジスタセットのグループを指定し、連続する次の命令コードを実行する（割込みを禁止する）他は、ＮＯＰ命令と同様に、ＰＣのインクリメントを行い、最小のステート数で実行される。
【０２３０】
グループ指定フィールド（ｇｒ）は、４ビットあるので、論理的には汎用レジスタグループを１６に拡張することができる。この場合では３２ビット汎用レジスタ１２８本（または１６ビット汎用レジスタ２５６本）を利用できる。
【０２３１】
グループ指定フィールド（ｇｒ）に対応するオペレーションフィールドは複数種類あってもよい。例えば、単純にレジスタ指定のみを行うものと、そのほかの機能（データサイズなど）を切り換える機能とを併せ持つオペレーションコードとを用意してもよい。
【０２３２】
上位ＣＰＵ２の命令コードのサブセットを、前記第１の下位ＣＰＵ、第２の下位ＣＰＵは持つ。具体的には、前記第１の下位ＣＰＵは、レジスタ指定フィールド（ｇｒ）を持たない。前記第２の下位ＣＰＵは、スタックポインタＥＲ１５を指定するときのみ、レジスタ指定フィールド（ｇｒ）を使用する。
【０２３３】
図１０にはＣＰＵ２のメモリに対する転送命令の詳細な命令フォーマットを例示する。
【０２３４】
ここでは、レジスタ間接、ポストインクリメント／プリデクリメントレジスタ間接、１６ビットディスプレースメント付きレジスタ間接、１６ビット絶対アドレスについて示す。このほかのアドレッシングモードも持つが、詳細な説明は省略する。
【０２３５】
レジスタ間接（＠ＥＲｎ）は、命令コードのレジスタフィールド（ｒ）で指定されるアドレスレジスタ（ＥＲｎ）の内容をアドスとしてメモリ上のオペランドを指定する。
【０２３６】
ディスプレースメント付きレジスタ間接（＠（ｄ：１６，ＥＲｎ））は、命令コードのレジスタフィールド（ｒ）で指定されるアドレスレジスタ（ＥＲｎ）の内容に命令コード中に含まれる１６ビットディスプレースメント（ｄ）を加算した内容をアドレスとしてメモリ上のオペランドを指定する。加算に際して、１６ビットディスプレースメントは符号拡張される。
【０２３７】
ポストインクリメントレジスタ間接（＠ＥＲｎ＋）は、命令コードのレジスタフィールドで指定されるアドレスレジスタ（ＥＲｎ）の内容をアドスとしてメモリ上のオペランドを指定する。その後、アドレスレジスタの内容に１、２または４が加算され、加算結果がアドレスレジスタに格納される。バイサイズでは１、ワードサイズでは２、ロングワードサイズでは４がそれぞれ加算される。
【０２３８】
プリデクリメントレジスタ間接（＠−ＥＲｎ）は、命令コードのレジスタフィールドで指定されるアドレスレジスタ（ＥＲｎ）の内容から１，２又は４を減算した内容をアドレスとしてメモリ上のオペランドを指定する。その後、減算結果がアドレスレジスタに格納される。バイトサイズでは１、ワーサイズでは２、ロングワードサイズでは４がそれぞれ減算される。
【０２３９】
絶対アドレス（＠ａａ：１６）は、命令コード中に含まれる絶対アドレス（ａａ）で、メモリ上のオペランドを指定する。特に制限はされないものの、１６ビット絶対アドレスの場合、上位１６ビットは符号拡張される。この場合ビット８〜１０がアドレッシングモードを指定するフィールドになっている。
【０２４０】
図１１乃至図１４には上位ＣＰＵ２によるメモリに対する直接的な演算命令の命令フォーマットにおける命令コードの組合せが例示される。メモリに対する直接的な演算命令とは、既存の命令セットに対して拡張された演算命令である。同図に示される命令フォーマットは、命令拡張用前置命令コードを先頭に、転送命令のコード、演算命令のコード等が付加された、１命令として処理されるべき命令のフォーマットである。尚、図示はしないが、第１の下位ＣＰＵ、第２の下位ＣＰＵは上位ＣＰＵ２の命令セットのサブセットの命令セットを有する。
【０２４１】
前記メモリに対する直接的な演算命令は、制御コード（命令拡張用前置命令コード）、ＥＡ１コード、ＥＡ２コード、及び演算コードの組合せによって構成される。
【０２４２】
ＥＡ１、ＥＡ２は、図１０に示される各アドレッシングモードの転送命令の命令コードと同一にされる。転送方向はリード方向、使用しないレジスタフィールド（ｒ２）は、特に制限はされないが、０とする。
【０２４３】
演算コードは、汎用レジスタ間の演算命令の命令コードと同一にされる。ＥＡ１コード、ＥＡ２コード、演算コードの組合せは意味があるものについては任意にできる。即ち、所望の処理の内容に従って、ＥＡ１コード、ＥＡ２コード、演算コードの必要なものを組合せる。
【０２４４】
例えば、インクリメント処理などは、デスティネーション側データだけしか必要としないから、ソース側データをリードするためのＥＡ１コードは不要である。したがって、インクリメント処理のフォーマットは、前置命令コード、ＥＡ２コード、演算コードを組合せて構成される。
【０２４５】
加算処理などは、ソース側、デスティネーション側の、メモリを使用する方のＥＡ１，ＥＡ２を組合せればよい。ソース側のみをメモリ上のデータとする場合（例えば、ＡＤＤ．Ｗ ＠ＥＲ１，Ｒ０）は、命令拡張用前置命令コード、ＥＡ１コード（ＭＯＶ．Ｗ ＠ＥＲ１，Ｒｘと同一。Ｒｘは意味を持たないが、前記の通りＲ０とする）、演算コード（ＡＤＤ．Ｗ Ｒｘ，Ｒ０と同一）を組合せる。デスティネーション側のみをメモリ上のデータとする場合は（ＡＤＤ．Ｗ Ｒ１，＠ＥＲ０）、命令拡張用前置命令コード、ＥＡ２コード、演算コードを組合せる。ソース側、デスティネーション側の両方をメモリ上のデータとする場合（ＡＤＤ．Ｗ ＠ＥＲ１，＠ＥＲ０）は、図１１に例示されるように、命令拡張用前置命令コード、ＥＡ１、ＥＡ２コード、演算コードを組合せる。なお、ソース側、デスティネーション側の両方を汎用レジスタ上のデータとする場合（ＡＤＤ．Ｗ Ｒ１，Ｒ０）は、既存の命令であり、演算コードのみでよい。換言すれば、前置命令コードは不要である。
【０２４６】
イミディエイトデータとメモリ上のデータとの演算（例えば、ＡＤＤ．Ｗ ＃ｘｘ，＠ＥＲ１）も、同様であるが、イミディエイトデータはソース側とされるから、図１３に例示されるようにＥＡ１コードは必要なく、また、演算コードとして、レジスタ間演算の代わりに、イミディエイト・レジスタ間の演算コード（ＡＤＤ．Ｗ ＃ｘｘ，Ｒｘと同一）を用いる。
【０２４７】
メモリ間の転送命令（例えば、ＭＯＶ．Ｗ  ＠ＥＲ１，＠ａａ：１６）は、前記メモリ間の演算同様に、命令拡張用前置命令コード、ＥＡ１コード、ＥＡ２コード、及びレジスタ間の転送命令コードを組合せてもよいが、この例では、図１２に例示されるように命令拡張用前置命令コード、ＥＡ１コード（ＭＯＶ．Ｗ  ＠ＥＲ１，Ｒｘと同一）、ＥＡ２コード（ＭＯＶ．Ｗ  Ｒｘ，＠ａａ：１６と同一）を組合せる。演算コードは不要とし、ＥＡ１コードの転送方向はリード方向、ＥＡ２コードの転送方向はライト方向とする。これによって、命令コード長を短縮（演算コード分）し、実行ステート数（演算コードのリード、デスティネーション側データのリード）も短縮できる。
【０２４８】
イミディエイトデータのメモリへの転送（例えば、 ＭＯＶ．Ｗ ＃ｘｘ，＠ＥＲ１）は、前記イミディエイトデータとメモリ上のデータとの演算同様に、命令拡張用前置命令コード、ＥＡ２コード、演算コードを組合せてもよいが、ここでの例では、図１４に例示されるように命令拡張用前置命令コード、イミディエイト・レジスタ間の転送命令コード（ＭＯＶ．Ｗ ＃ｘｘ，Ｒｘと同一）、ＥＡ２コード（ＭＯＶ．Ｗ Ｒｘ，＠ａａ：１６と同一）を組合せる。これによって、実行ステート数（デスティネーション側データのリード）も短縮できる。
【０２４９】
図１５には命令拡張用前置命令コード（制御コード）のフォーマットが例示される。同図に示される命令拡張用前置命令コードはソース側、デスティネーション側がメモリであるか否かを夫々示す為のビットを有している。対応ビットが例えば論理値“１”であればメモリ、論理値“０”であれば汎用レジスタを指定するものとする。ＥＡ１とＥＡ２の転送命令コードは同一としているため、ソース側がメモリであれば、デスティネーション側に拘らず、命令拡張用前置命令コードに続くものが、ＥＡ１コードと判断される。一方、ソース側が汎用レジスタとされ、デスティネーション側がメモリであれば、ＥＡ２コードと判断される。そのほか、ロングワードサイズを示す情報を持っている。
【０２５０】
また、ＥＡ１、ＥＡ２の転送命令コードの動作を変更させる情報を持っている。例えば、ポストインクリメント／プリデクリメントレジスタ間接が、メモリのリード／ライトの方向によって一義的に指定されてしまう場合、即ち、ポストインクリメントはライト時、プリデクリメントはリード時などと固定されている命令セットの場合、前記変更情報によって、リード時にポストインクリメント動作を行なったり、ライト時にプリデクリメントを行なったりすることを可能にしている。
【０２５１】
図１６及び図１７にはＣＰＵのアドレッシングモードの組合せについて示される。図１６はデータ転送命令について示し、図１７は加算命令について示す。加算以外の演算命令も、加算命令と同様にされる。
【０２５２】
図１６及び図１７の“ソース”の各欄における上段、中段、下段には、それぞれ、上位ＣＰＵ２、第１の下位ＣＰＵ、第２の下位ＣＰＵの、それぞれ、実行可能なデータサイズが示されている。Ｂはバイト（８ビット）、Ｗはワード(１６ビット)、Ｌはロングワード(３２ビット)を意味する。
【０２５３】
アドレッシングモードには図１６及び図１７に示された他に、分岐命令のみに使用する、プログラムカウンタ相対や、メモリ間接のアドレッシングモードもあるが、ここでは図示を省略している。
【０２５４】
上位のＣＰＵ２は、データ転送命令、加算命令ともに、ソース／デスティネーションとデータサイズのアドレッシングモードの組合せを任意にできる。但し、８ビット絶対アドレスについては、短縮形としての特性上、また、１６ビット単位の命令コードの特性上、バイトサイズのみが実行可能である。
【０２５５】
第１の下位ＣＰＵは、アドレッシングモードは、アドレス空間６４ｋＢであることに対応して限定され、３２ビットディスプレースメント付レジスタ間接、３２ビット絶対アドレスは実行できない。データサイズは、バイト及びワードである。データ転送命令は、ソース側またはデスティネーション側の一方が、レジスタ直接の場合のみ実行可能である。また、加算命令は、ソース側はイミディエイトまたは汎用レジスタ、デスティネーション側は汎用レジスタに限定されている。即ち、メモリのリード／ライトはデータ転送命令で行い、データの処理は汎用レジスタ上で行なう、いわゆるロードストア型の命令セットを持つ。
【０２５６】
第２の下位ＣＰＵは、アドレス空間１６ＭＢであるものの、プログラムの大容量化に対応することを主目的とし、大規模データの高速処理などが必要とされないような応用分野を考え、アドレッシングモードについては、３２ビットディスプレースメント付レジスタ間接、３２ビット絶対アドレスは実行できない。データサイズは、メモリ上のデータを指定する場合、バイト及びワードである。ソース側がイミディエイトまたは汎用レジスタ、デスティネーション側が汎用レジスタの場合に限り、ロングワードも可能である。
【０２５７】
第２の下位ＣＰＵにおいては、汎用レジスタの本数は少ないものの、データ転送命令、加算命令ともに、ソース／デスティネーションのアドレッシングモードの組合せを任意にできる。汎用レジスタとメモリ間の転送命令のデータサイズは、マイクロコンピュータの機能ブロックのデータサイズが８ビット乃至１６ビット長であったり、内部データバスが１６ビットであったり、またシングルチップマイクロコンピュータの応用されるマイクロコンピュータシステムに必要な分解能などの特性上、１６ビット（ワード）または８ビット（バイト）でよい応用分野を考え、３２ビット（ロングワード）は持たない。当然、３２ビット（ロングワード）のデータについては、１６ビット（ワード）のデータ転送を２回行なうことによって、実現できる。
【０２５８】
一方、第２の下位ＣＰＵでは、汎用レジスタが３２ビット構成であり、ＣＰＵの内部構成が３２ビットであるため、メモリ上のデータのリード／ライトを行なう必要のない、イミディエイト及びレジスタ直接については、３２ビット（ロングワード）も実行可能としている。
【０２５９】
以上の、上位ＣＰＵ、第１の下位ＣＰＵ２、第２の下位ＣＰＵは、例えば以下の通り、応用分野やマイクロコンピュータシステムの要求に合わせて選択できる。
【０２６０】
シングルチップマイクロコンピュータに内蔵されている機能モジュール、即ち、ＲＯＭ、ＲＡＭ、タイマＡ、タイマＢ、ＳＣＩ、Ａ／Ｄ変換器、入出力ポートのみを使用して動作するようなマイクロコンピュータシステムについては、プログラム容量が６０ｋＢ程度（ＲＡＭ、内部Ｉ／Ｏレジスタを合わせて６４ｋＢ）以下であれば、第１の下位ＣＰＵを内蔵するのが都合がよい。
【０２６１】
また、プログラム容量がログラム容量が６０ｋＢ程度（ＲＡＭ、内部Ｉ／Ｏレジスタを合わせて６４ｋＢ）以上であれば、第２の下位ＣＰＵを内蔵するのが都合がよい。データとして扱うのは、ＲＡＭ、内部Ｉ／Ｏレジスタ、及び一部のＲＯＭであり、アドレス空間の一部（Ｈ’８０００〜Ｈ’ＦＦ７ＦＦＦ）に、データ転送／演算命令でのアクセスに制約があっても、この部分はＲＯＭ及び未使用の領域とされるから、問題ない。むしろ、ＣＰＵの不必要な機能を削除して、論理的規模を縮小し、費用を縮小する方が望ましい。
【０２６２】
かかるシングルチップマイクロコンピュータに内蔵されている機能モジュールのみを使用して動作するようなマイクロコンピュータシステムとしては、カメラなどがあり、例えば、平成６年１１月写真工業社発行『写真工業』ｐｐ５８〜７１に記載がある。なお、プログラム容量が大きいことは、そのマイクロコンピュータシステムの機能が高いことを示すと言える。
【０２６３】
或いは、シングルチップマイクロコンピュータに内蔵されている機能モジュールに加えて、比較的少ないアドレスを有する専用半導体集積回路などを、シングルチップマイクロコンピュータの外部バスに接続して動作するようなマイクロコンピュータシステムも同様であり、この例としては、光ディスクドライブなどがあり、例えば、平成８年２月日立マイコンシステム社発行『日立マイコン技報』ｐｐ３８〜３９に記載がある。
【０２６４】
一方、シングルチップマイクロコンピュータに内蔵されている機能モジュール、即ち、ＲＯＭ、ＲＡＭ、タイマＡ、タイマＢ、ＳＣＩ、Ａ／Ｄ変換器、入出力ポート以外に、プログラム格納用のＲＯＭや、データ格納用のＤＲＡＭ、キャラクタジェネレートＲＯＭ（ＣＧＲＯＭ）や、入出力回路や制御回路などを接続して動作するような場合は、大規模なデータを扱うことになり、例えば配列の処理なども考えられるので、全アドレス空間を制限なく使用可能な上位ＣＰＵ２を内蔵するのが都合がよい。また、外部のメモリなどを効率的に利用するための高機能のバスコントローラや、高速のデータ転送を行なうためのＤＭＡコントローラなども必要とされるから、相対的に論理的規模の大きい上位ＣＰＵ２を使用しても、全体的な論理的規模に対する影響が小さいと考えられる。かかるマイクロコンピュータシステムとしては、プリンタなどがある。
【０２６５】
図１には上位ＣＰＵ２の詳細な一例が示される。このＣＰＵ２は制御部ＣＯＮＴと実行部ＥＸＥＣから構成される。ＩＤＢ、ＩＡＢは前記内部バス３０に含まれる内部データバス、内部アドレスバスである。
【０２６６】
制御部ＣＯＮＴは、命令レジスタＩＲ１、命令レジスタＩＲ２、命令変更部ＣＨＧ、命令デコーダＤＥＣ、レジスタセレクタＲＳＥＬ、割込み制御部ＩＮＴＣを有する。特に制御部ＣＯＮＴは、命令拡張用前置命令コードの有無に応じた第１の制御、レジスタ拡張用前置命令コードの有無に応じた第２の制御を行なうようになっている。第１の制御は、メモリデータの直接的演算処理制御であり、命令拡張用前置命令コードに後続するデータ転送命令等の複数の命令コードを１個の命令として処理することにより、メモリ上のデータを直接的に演算可能とする制御を行なう。第２の制御は、上位互換を考慮したレジスタ指定制御であり、一方では拡張された汎用レジスタをレジスタ拡張用前置命令コードを用いて指定するようにし、他方では、省略可能なレジスタ指定フィールドｇｒ（ｇｒ１、ｇｒ２）が省略されたとき省略不可能なレジスタ指定フィールドｒ（ｒ１、ｒ２）によるレジスタ指定を暗黙的にレジスタグループ０に含まれるレジスタ指定とみなす制御を行なう。
【０２６７】
前記命令デコーダＤＥＣは、例えば、マイクロＲＯＭ或はＰＬＡ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ａｒｒａｙ）または布線論理で構成される。命令デコーダＤＥＣの出力の一部が命令デコーダＤＥＣにフィードバックされている。そのようなフィードバック信号は、各命令コード内の遷移に用いるステージコード（ＴＭＧ）と、命令コード間に用いる制御信号（ＭＯＤＳ、ＭＯＤＤ）を含む。命令デコーダにおける前記第１の制御の全体的な機能を概説すれば、命令拡張用前置命令コードは制御信号（ＭＯＤＳ、ＭＯＤＤ）を発生し、ＥＡ１コード、ＥＡ２コードは、前記制御信号を参照しつつ動作し、更に制御信号を発生したりする。演算コードも制御信号を参照して、データの入出力元／先を切替え、演算処理を行なう。制御信号に従って内部で命令コードも発生する。
【０２６８】
命令デコーダＤＥＣのそのような第１の制御機能を更に詳述する。図１には命令デコーダＤＥＣの一部の機能を概念的に示しており、命令拡張用前記前置命令コード（ｐｆ）の解読論理２００は、制御信号（ｍｏｄ： ＭＯＤＳ、ＭＯＤＤを含む）、割込みマスク信号（ｍｓｋｉｎｔ）を出力する。そのほかは、ＮＯＰ（無操作）命令などと同じでよく、実質的な動作を何も行なわない。要するに、制御信号ｍｏｄは、後続の命令コードが命令拡張用前置命令コードに付加された命令コードであることを明示する信号として位置付けられる。
【０２６９】
転送命令コード（ｍｏｖ）の解読論理２０１は、ステートコード信号（ｎｘｔｔｍｇ）、割込みマスク信号（ｍｓｋｉｎｔ）、汎用レジスタライト信号（Ｒｄｗｒ）、テンポラリレジスタライト信号（ＴＲＤｗｒ）を出力する。これらの信号の状態は、前記制御信号（ｍｏｄ：ＭＯＤＳ、ＭＯＤＤ）によって相違される。例えば、ＭＯＤＳ＝１のときはテンポラリレジスタライト信号（ＴＲＤｗｒ）が、 ＭＯＤＳ＝０のときは汎用レジスタライト信号（Ｒｄｗｒ）が、それぞれ選択される。そのほかの動作は、メモリ・汎用レジスタ間の転送命令の場合と同様とされる。
【０２７０】
演算命令コード（ｅｘｅ）の解読論理２０２は、割込みマスク信号（ｍｓｋｉｎｔ）、ソース汎用レジスタリード信号（Ｒｓｒｄ）、デスティネーション汎用レジスタリード信号（Ｒｄｒｄ）、デスティネーション汎用レジスタライト信号（Ｒｄｗｒ）、リードデータバッファリード信号（ＲＤＢｒｄ）、テンポラリレジスタリード信号（ＴＲＤｒｄ）、テンポラリレジスタライト信号（ＴＲＤｗｒ）を出力する。信号Ｒｓｒｄはソースレジスタとして汎用レジスタをリード、Ｒｄｒｄはディスティネーションレジスタとして汎用レジスタをリード、Ｒｄｗｒはディスティネーションレジスタとして汎用レジスタをライト、することを指示する。信号ＲＤＢｒｄは実行部ＥＸＥＣの後述するリードデータバッファをリード、信号ＴＲＤｒｄは後述する実行部ＥＸＥＣのテンポラリレジスタをリード、信号ＴＲＤｗｒは後述する実行部ＥＸＥＣの後述するテンポラリレジスタをライト、することを指示する。それらの信号の状態は、前記制御信号（ｍｏｄ：ＭＯＤＳ、ＭＯＤＤ）によって相違される。即ち、ソース汎用レジスタリード信号（Ｒｓｒｄ）とテンポラリレジスタリード信号（ＴＲＤｒｄ）、デスティネーション汎用レジスタリード信号（Ｒｄｒｄ）とリードデータバッファリード信号（ＲＤＢｒｄ）、デスティネーション汎用レジスタライト信号（Ｒｄｗｒ）とテンポラリレジスタライト信号（ＴＲＤｗｒ）、がそれぞれ排他的に選択され、汎用レジスタを使用するかテンポラリレジスタ等のラッチ手段を使用するかを選択する。また、デスティネーション側メモリの場合は、ＣＰＵ内部でライト型転送命令を実行するのと同等の動作を行なうための命令コードを発生させる信号（ｍｋｍｏｖ）を出力する。そのほかの動作は、汎用レジスタに対する演算命令と同様にされる。
【０２７１】
命令レジスタＩＲ１、ＩＲ２は、リードした命令を一旦格納する。命令デコーダＤＥＣには命令レジスタＩＲ１に格納された命令コードが供給されることになる。命令変更部ＣＨＧは、リードした命令以外の命令コードを、命令デコーダＤＥＣに与える場合に動作し、そのほかの場合は、命令レジスタＩＲ１の内容を命令デコーダＤＥＣに与える。リードした命令以外の命令コードは、割込み制御部ＩＮＴＣの指示によって、割込みなどの例外処理を実行するとき、或いは、命令デコーダＤＥＣのからの制御信号ｍｋｍｏｖによる指示によって前記内部でライト型転送命令と同等の動作を行なう命令コードを発生させるとき、などに用いる。即ち、デスティネーション側をメモリ上のデータとする場合に、ＥＡ２コードで生成したアドレスでメモリライト動作を行なう為の命令コードをＣＰＵ内部で自動生成して、命令デコーダＤＥＣに供給することによって、本発明の命令の命令コード長を短縮し、実行ステート数も短縮できる。
【０２７２】
割込み制御部ＩＮＴＣは、図２の割込みコントローラ（ＩＮＴ）３の出力する割込み要求信号３１を受け付ける。また、命令デコーダＤＥＣの出力する割込みマスク信号ｍｓｋｉｎｔを参照して、割込みがマスクされていなければ、命令変更部ＣＨＧに割込みを指示する。この場合、命令変更部ＣＨＧは、割り込み例外処理の為の所定の命令コードをそのハードウェアに従って生成する。
【０２７３】
図１１乃至図１４で説明したように、複数の命令コードを一連のものとして実行する場合には、それぞれの命令コードが割込みマスクを制御信号ｍｓｋｉｎｔを介して指示して、所定の組合せの命令コードの実行が途切れないようにされる。
【０２７４】
レジスタセレクタＲＳＥＬは、命令デコーダＤＥＣからの信号Ｒｓｒｄ，Ｒｄｒｄ，Ｒｄｗｒ等による指示、命令コード中に含まれるレジスタフィールドｒ１、ｒ２、ｇｒ１、ｇｒ２の情報に基づいて、汎用レジスタを選択する。
【０２７５】
実行部ＥＸＥＣには、汎用レジスタＥＲ０〜ＥＲ７、プログラムカウンタＰＣ、コンディションコードレジスタＣＣＲ、テンポラリレジスタＴＲＡ、ＴＲＤ、算術論理演算器ＡＬＵ、インクリメンタＩＮＣ、リードデータバッファＲＤＢ、ライトデータバッファＷＤＢ、アドレスバッファＡＢを含む。これらのブロックは内部バスＧＢ、ＤＢ、ＷＢによって相互に接続されている。
【０２７６】
前記実行部ＥＸＥＣに含まれる前記レジスタの内、図３にも示される汎用レジスタＥＲ０〜ＥＲ３１、プログラムカウンタＰＣ、コンディションコードレジスタＣＣＲ以外は、プログラミング上は参照できず、ＣＰＵ２の内部の動作にのみ用いられる。即ち、リードデータバッファＲＤＢ、ライトデータバッファＷＤＢ、アドレスバッファＡＢなどは、内部バスＩＡＢ、ＩＤＢとのインタフェースをとるために、一時的にデータをラッチする。テンポラリレジスタＴＲＡ、ＴＲＤは、マイクロコンピュータ内部の動作に適宜用いられ、例えば演算の途中結果などを一時的に貯える。
【０２７７】
リードデータバッファＲＤＢは、ＲＯＭ４、ＲＡＭ５、内部Ｉ／Ｏレジスタ、或は図示はされない外部メモリから、リードした命令コードやデータを一時的に格納する。ライトデータバッファＷＤＢはＲＯＭ４、ＲＡＭ５、内部Ｉ／Ｏレジスタ、或は外部メモリへのライトデータを一時的に格納する。
【０２７８】
アドレスバッファＡＢは、ＣＰＵ２がリード／ライトするアドレスを一時的に格納する他に、格納した内容に対するインクリメント機能を有している。インクリメント機能を有するアドレスバッファは特開平４−３３３１５３号公報などに記載されている。
【０２７９】
前記算術論理演算器ＡＬＵは、命令によって指定される各種の演算や実効アドレスの計算などに用いられる。前記インクリメンタＩＮＣは、主にプログラムカウンタＰＣの加算に用いられる。また、尚、図１では実行部ＥＸＥＣは汎用レジスタＥＲ０〜ＥＲ３１を単位として算術論理演算器ＡＬＵやインクリメンタＩＮＣが設けられていように図示されているが、実際は、汎用レジスタのＥ（１６ビット）、Ｈ（８ビット）、Ｌ（８ビット）の各分割部分毎に分割されて設けられている。
【０２８０】
前記命令拡張用前置命令コードに後続する命令コードを用いてメモリ上のデータを直接的に演算する場合には、テンポラリレジスタＴＲＡ、ＴＲＤ及びリードデータバッファＲＤＢなどを用いる。テンポラリレジスタＴＲＡは、デスティネーション側データがメモリになる演算命令の場合に、デスティネーションアドレスのリード時にリードアドレス（実効アドレス）を格納し、データのデスティネーション側メモリへのライト時に、デスティネーションアドレス（リードアドレスと同じアドレス）を出力する。
【０２８１】
テンポラリレジスタＴＲＤは、ソース側データがメモリになる演算命令の場合などに、ソース側データを一時格納し、演算命令コードの実行時にソース側データを出力する。また、デスティネーション側データがメモリになる演算命令の場合に、演算結果を一時格納し、データのデスティネーション側メモリへのライト時に、ライトデータを出力する。
【０２８２】
リードデータバッファＲＤＢは、更に、デスティネーション側データがメモリになる演算命令の場合に、デスティネーション側データを一時格納し、演算コードの実行時にソース側データを出力する。
【０２８３】
前記レジスタＴＲＡ、ＴＲＤ、ＲＤＢ等は既存の命令実行においても適宜利用されるが、その詳細な内容は本発明とは直接関係ないので説明を省略する。
【０２８４】
ＣＰＵ２は前記第２の制御を実現するために、前述のように２個の命令レジスタＩＲ１，ＩＲ２を有している。レジスタセレクタＲＳＥＬには、前記命令デコーダＤＥＣの出力信号、命令レジスタＩＲ１，ＩＲ２の出力信号、そして前記ＳＹＳＣ２１に含まれる内部Ｉ／Ｏレジスタ（ＣＰＵＣＲ）２２の出力信号が供給される。
【０２８５】
前記命令レジスタＩＲ１は内部データバスＩＤＢから命令が供給される。前記命令レジスタＩＲ１の出力は、もう一つの命令レジスタＩＲ２に、前記命令変更部ＣＨＧを介して命令デコーダＤＥＣに、そして、前記レジスタセレクタＲＳＥＬに結合される。前記命令レジスタＩＲ２の出力は前記レジスタセレクタＲＳＥＬに結合される。前記命令デコーダＤＥＣの出力はレジスタセレクタＲＳＥＬ及び前記命令レジスタＩＲ２に結合される。命令デコーダＤＥＣは命令レジスタＩＲ１にフェッチされた命令のオペレーションフィールドのオペレーションコードを解読する。命令レジスタＩＲ１にフェッチされた命令コードが前記レジスタ拡張用前置命令コードであるとき、命令デコーダＤＥＣがこれを解読することによって、当該レジスタ拡張用前置命令のレジスタグループ指定フィールド（ｇｒ）のレジスタ指定情報を命令レジスタＩＲ２にラッチさせる。その時のラッチ信号は命令デコーダＤＥＣから出力される。命令レジスタＩＲ２にラッチされたレジスタフィールド指定情報、及び続けて命令レジスタＩＲ１にフェッチされた後続の命令に含まれるレジスタフィールド（ｒ）のレジスタ指定情報は、レジスタセレクタＲＳＥＬで解読され、それら情報で直接的に指定されたレジスタグループの中のレジスタが選択され、選択されたレジスタを利用して当該後続の命令が実行される。この命令実行後、前記命令デコーダＤＥＣは前記命令レジスタＩＲ２のラッチ情報を全ビット値“０”（レジスタグループ０の指定情報）にクリアするためのセット信号を命令レジスタＩＲ２に供給する。したがって、その後に、レジスタ拡張用前置命令コードを省いた命令が命令レジスタＩＲ１にフェッチされても、命令レジスタＩＲ２の出力はレジスタグループ０の指定情報を維持する結果、レジスタセレクタＲＳＥＬは暗黙的にレジスタグループ０が指定されていると見做して、命令レジスタ３１からのレジスタ指定情報に従ったレジスタをレジスタグループ０から選択する。
【０２８６】
前記第２の下位ＣＰＵは、図１の構成から、その命令セットに必要のない機能ブロックや論理回路を削除して開発することができる。汎用レジスタはＥＲ０、ＥＲ１、ＥＲ７、ＥＲ１５のみとし、レジスタセレクタＲＳＥＬも、これに対応して削除することができる。アドレスバッファのインクリメント機能も、メモリに対するロングワードサイズのデータ転送命令を削除したことに対応して、削除できる。
【０２８７】
命令デコーダＤＥＣも、３２ビットディスプレースメント付レジスタ間接、３２ビット絶対アドレス、メモリ間接などを削除して、これに必要な論理回路を削除できる。かかるアドレッシングモードによる命令は、長い命令コードを持ち、必然的に、実行ステート数も大きくなるし、また、ロングワードサイズのデータ転送命令なども、内部データバスが１６ビットであることに対応して、２回のワードサイズデータ転送を行なうことになどして、制御論理も複雑になりやすいから、これらのアドレッシングモードやロングワードサイズデータ転送命令を削除できれば、論理的規模の縮小を図ることができる。
【０２８８】
論理回路の削除に当たっては、汎用レジスタなどの、不必要な機能ブロックを削除し、削除された機能ブロックが出力している信号は非活性のレベルに固定し、また、削除されたブロックが入力している信号は、非接続または解放とすればよい。残りの論理回路は、前記の通り、非活性レベルへの固定や、非接続または解放とした状態で、論理再合成を行なえば、自動的に論理的規模の縮小を実現できる。どのような方法を採るにしても、上位ＣＰＵのサブセットとすることにより、新規の開発を行なうより、開発効率を向上できる。
【０２８９】
図１８には前記レジスタセレクタＲＳＥＬの一部と命令レジスタＩＲ２の詳細なブロック図が示される。
【０２９０】
命令レジスタＩＲ２は、保持手段としてのラッチ回路（ＬＧＲ１）３２１及びラッチ回路（ＬＧＲ２）３２２を有する。これらラッチ回路（ＬＧＲ１、ＬＧＲ２）３２１，３２２は、前述の通りレジスタグループ指定フィールドｇｒ１、ｇｒ２のレジスタグループ指定情報をラッチする。
【０２９１】
図１８に従えば、前記ラッチ回路３２１，３２２は、いわゆるリセット付きＤ型フリップフロップによって構成されている。リセット信号ＲＳＬＧＲとして、命令デコーダＤＥＣから指定される命令実行終了信号ＲＳＬＧＲを入力する。ラッチクロックとして、命令デコーダＤＥＣから指定されるＬＧＲＣＬを入力し、また、データとして、命令レジスタＩＲ１が保持する命令コードのビット７〜４、３〜０（グループ４個の場合は、ビット５、４、１、０のみでもよい）を入力する。ラッチクロックＬＧＲＣＬは、レジスタグループを指定する命令コード（省略可能なレジスタ拡張用前置命令コード）を実行したときに活性状態になって、そのときのレジスタフィールド（ｇｒ）である、ビット７〜４、３〜０をラッチさせる。ラッチ回路３２１，３２２は、命令の実行終了時点で、命令デコーダＤＥＣからの制御信号（リセット信号ＲＳＬＧＲ）に基づいて、所定の値に設定される。本実施例では、全ビット値“０”にクリアされる。
【０２９２】
汎用レジスタグループを指定するレジスタ拡張用前置命令コードを持たない命令は、ラッチ回路（ＬＧＲ１、ＬＧＲ２）３２１、３２２が値“０”にクリアされたままになっているから、命令実行が行われるとき、レジスタグループ０の汎用レジスタが指定されることになる。
【０２９３】
レジスタセレクタＲＳＥＬのデスティネーションレジスタ指定側には、ラッチ回路（ＬＧＲ２）３２２から出力されるレジスタグループ指定フィールド（ｇｒ２）の情報を保持するラッチ回路３３１と、命令レジスタＩＲ１から出力されるレジスタ指定フィールド（ｒ２）の情報をラッチするラッチ回路３３２が設けられている。それらラッチ回路３３１，３３２は、システムクロックφの反転クロックφ＃でラッチされるようになっており、ソースレジスタの選択動作より遅くデスティネーションレジスタの選択動作が行なわれる。これによって、デスティネーション側のレジスタ指定情報のラッチタイミング即ちデスティネーションレジスタ選択タイミングがソースレジスタ選択タイミングよりも０．５ステート遅くなるようにされる。ソースレジスタはアドレスレジスタとして先行して選択され、デスティネーションレジスタはデータの書込みのために遅れて選択されることが可能になっている。
【０２９４】
図１９及び図２０には汎用レジスタＥＲ８に相当するレジスタセレクタＲＳＥＬの論理記述の一部が例示されている。図２０の記述は図１９の後に続く残りの論理記述である。
【０２９５】
図１９及び図２０に示された論理記述は、ＲＴＬ（Register Transfer Level）若しくはＨＤＬ（Hardware Description Language）記述と呼ばれ、公知の論理合成ツールによって、論理回路に論理展開できる。ＨＤＬはＩＥＥＥ１３６４として標準化されている。これに示される論理記述の構文は、ケース（ｃａｓｅ）文に準拠しており、ａｌｗａｙｓ＠の次の（）内で定義された値若しくは信号に変化が有ったとき、それ以下の記述行の処理を行う、という記述内容になっている。尚、記号「！」は論理的な和を示し、「＆」は論理的な積を示す。「３’ｂ００１」は３ビット長の００１を意味する。
【０２９６】
前記論理記述は、ａｌｗａｙｓ＠（ｇｒ１，ｒ１，ｇｒ２，ｒ２）ｂｅｇｉｎで始まるレジスタ選択記述部分、ａｌｗａｙｓ＠（ｒｓ８ ｏｒ ｒｓｇｂ ｏｒ ｒｓｄｂ ｏｒ ｗｂｒｓ ｏｒ ｒｄ８ ｏｒ ｒｄｇｂ ｏｒ ｒｄｄｂ ｏｒ ｗｂｒｄ）ｂｅｇｉｎで始まるバス選択記述部分、ａｌｗａｙｓ＠（ｗｂｒ８ ｏｒ ｒ２［３］ ｏｒ ｂｙｔｅ ｏｒ ｗｏｒｄ ｏｒ ｌｏｎｇ）ｂｅｇｉｎで始まるレジスタサイズ指定記述部分に大別される。
【０２９７】
前記レジスタ選択記述部分では、レジスタフィールドｒ［２：０］＝０、レジスタフィールドｇｒ［１：０］＝１のとき、汎用レジスタＥＲ８を選択する記述となっている。
【０２９８】
即ち、ソースレジスタのグループフィールドがｇｒ１＝１（ｇｒ１＝４'ｂ０００１）でソースレジスタのレジスタフィールドがｒ１＝０（ｒ１＝３'ｂ０００）のときレジスタＥＲ８をソースレジスタとして選択するための信号ｒｓ８が活性化される（ｒｓ８＝１）。そうでなければ、信号ｒｓ８は非活性状態を維持する（ｒｓ８＝０）。
【０２９９】
また、デスティネーションレジスタのグループフィールドがｇｒ２＝１（ｇｒ２＝４'ｂ０００１）でデスティネーションレジスタのレジスタフィールドがｒ２＝０（ｒ２＝３'ｂ０００）のときレジスタＥＲ８をデスティネーションレジスタとして選択するための信号ｒｄ８が活性化される（ｒｄ８＝１）。そうでなければ、信号ｒｄ８は非活性状態を維持する（ｒｄ８＝０）。
【０３００】
前記バス選択記述部分のａｌｗａｙｓ文におけるｒｓｇｂはソースレジスタの内容をバスＧＢに出力することを指示する信号、ｒｓｄｂはソースレジスタの内容をバスＤＢに出力することを指示する信号、ｗｂｒｓはバスＷＢの内容をソースレジスタに出力することを指示する信号、ｒｄｇｂはデスティネーションレジスタの内容をバスＧＢに出力することを指示する信号、ｒｄｄｂはデスティネーションレジスタの内容をバスＤＢに出力することを指示する信号、ｗｂｒｄはバスＷＢの内容をデスティネーションレジスタに出力することを指示する信号である。
【０３０１】
命令デコーダ（ＤＥＣ）３３によって、ソースレジスタを指示するレジスタ指定フィールド（ｇｒ１、ｒ１）のレジスタの内容を内部バスＧＢへ出力することが指示された（ｒｓｇｂ＝１）ときに信号ｒｓ８が活性化されている場合、又は、デスティネーションレジスタを指示するレジスタ指定フィールド（ｇｒ２、ｒ２）のレジスタの内容を内部バスＧＢへ出力することが指示された（ｒｄｇｂ＝１）ときに信号ｒｄ８が活性化されている場合、汎用レジスタＥＲ８から内部バスＧＢへのデータ出力を指示する信号ｒ８ｇｂが活性化される（ｒ８ｇｂ＝１）。
【０３０２】
同様に、命令デコーダＤＥＣによって、ソースレジスタを指示するレジスタ指定フィールド（ｇｒ１、ｒ１））のレジスタの内容を内部バスＤＢへ出力することが指示された（ｒｓｄｂ＝１）ときに信号ｒｓ８が活性化されている場合、又は、デスティネーションレジスタを指示するレジスタ指定フィールド（ｇｒ２、ｒ２）のレジスタの内容を内部バスＤＢへ出力することが指示された（ｒｄｄｂ＝１）ときに信号ｒｄ８が活性化されている場合、汎用レジスタＥＲ８から内部バスＤＢへの出力を指示する信号ｒ８ｄｂが活性化される（ｒ８ｄｂ＝１）。
【０３０３】
更に、命令デコーダＤＥＣによって、ソースレジスタを指示するレジスタ指定フィールド（ｇｒ１、ｒ１）のレジスタへ内部バスＷＢからデータを入力させることが指示された（ｗｂｒｓ＝１）ときに信号ｒｓ８が活性化されている場合、又は、デスティネーションレジスタを指示するレジスタ指定フィールド（ｇｒ２、ｒ２）のレジスタへ内部バスＷＢからデータを入力させることが指示された（ｗｂｒｄ＝１）ときに信号ｒｄ８が活性化されている場合、汎用レジスタＥＲ８へ内部バスＷＢからの入力を指示する信号ｗｂｒ８が活性化される（ｗｂｒ８＝１）。
【０３０４】
前記レジスタサイズ選択の論理記述部分のａｌｗａｙｓ文において、ｒ２［３］はレジスタフィールドｒ２の下位から４ビット目の値を意味する。
【０３０５】
汎用レジスタＥＲ８へ内部バスＷＢからデータの入力が指示された場合、データサイズがロングワードサイズ（ｌｏｎｇ＝１）であれば、汎用レジスタＥＲとして３２ビットで書込まれる（ｗｂ８ｅ＝ｗｂ８ｈ＝ｗｂ８ｌ＝１）。信号ｗｂ８ｅは図３の１６ビット分のレジスタＥ部分の入力ゲート信号、信号ｗｂ８ｈは図３の８ビット分のレジスタＲＨ部分の入力ゲート信号、信号ｗｂ８ｌは図３の８ビット分のレジスタＲＬ部分の入力ゲート信号を意味する。
【０３０６】
また、ワードサイズ（ｗｏｒｄ＝１）の場合、ｒ２のビット３の値に対応して、汎用レジスタＥとして１６ビットで書込まれる（ｗｂ８ｅ＝１、ｗｂ８ｈ＝ｗｂ８ｌ＝０）か、汎用レジスタＲ（ＲＨ，ＲＬ）として１６ビットで書込まれる（ｗｂ８ｅ＝０、ｗｂ８ｈ＝ｗｂ８ｌ＝１）かが指定される。更に、バイトサイズの場合、ｒ２のビット３の値に対応して、汎用レジスタＲＨとして８ビットで書込まれる（ｗｂ８ｅ＝０、ｗｂ８ｈ＝１、ｗｂ８ｌ＝０）か、汎用レジスタＲＬとして８ビットで書込まれる（ｗｂ８ｅ＝ｗｂ８ｈ＝０、ｗｂ８ｌ＝１）かが指定される。
【０３０７】
そのほかのレジスタ番号についても前記論理記述におけるｇｒ、ｒの部分が相違するだけで、そのほかは同様とされる。レジスタセレクタ３４は前記既存の下位ＣＰＵのレジスタセレクタに対して、ｇｒのデコード論理が追加され、また、新規の汎用レジスタＥＲ８〜ＥＲ３１に対応する部分のデコード論理が追加されたことになる。
【０３０８】
レジスタセレクタ３４の出力先を、ｇｒの内容に従って、汎用レジスタ８本単位で切り分けるだけなので、任意の命令に対して、同様の方法で、指定可能な汎用レジスタ本数を増やすことが可能になる。
【０３０９】
図２１及び図２２にはスタックポインタにも使用可能なレジスタＥＲ７に関するレジスタセレクタの選択論理の一例を論理記述で示す。図２２の記述は図２１の後に続く残りの論理記述である。記述形態は図１９、図２０と同じである。特に制限はされないものの、ｓｓｐｇｒはサブルーチン分岐命令用のスタックポインタとして使用するレジスタのグループを指定する情報とされ、ｉｓｐｇｒは例外処理用のスタックポインタのとして使用するレジスタのグループを指定する情報とされる。それらの情報ｓｓｐｇｒ、ｉｓｐｇｒはシステムコントローラ（ＳＹＳＣ）２１に含まれる制御レジスタ（ＣＰＵＣＲ）２２からレジスタセレクタＲＳＥＬに供給される。
【０３１０】
前記図１９と同様のレジスタ選択のための論理記述の他、命令デコーダからの制御信号（ｓｓｐｇｂ、ｗｂｓｓｐ、ｉｓｐｇｂ、ｗｂｉｓｐ）と、スタックポインタ指定制御ビットｓｓｐｇｒ、ｉｓｐｇｒによって、レジスタ選択信号を生成する。信号ｓｓｐｇｂはサブルーチン用スタックポインタに利用されるレジスタの値をバスＧＢに出力することを指示し、信号ｗｂｓｓｐはバスＷＢからサブルーチン用スタックポインタに利用されるレジスタにデータを供給することを指示し、信号ｉｓｐｇｂは例外処理用スタックポインタに利用されるレジスタの値をバスＧＢに出力することを指示し、信号ｗｂｉｓｐはバスＷＢから例外処理用スタックポインタに利用されるレジスタにデータを供給することを指示する。従来、サブルーチン分岐と割込み例外処理のスタックポインタとを独立に設けていた場合には、これをサブルーチン分岐用（ ｓｓｐｇｂ、ｗｂｓｓｐ ）、割込み例外処理用（ｉｓｐｇｂ、ｗｂｉｓｐ）とに分離して、命令デコーダを構成する必要がある。これは本来別々の処理に対する機能をまとめていたものを分離するようにしたものであるので、論理的な規模の増大などは少ない。
【０３１１】
これ以外に例外処理のスタックポインタとなり得るレジスタＥＲ１５、ＥＲ２３，ＥＲ３１も同様に構成することができる。即ち、レジスタＥＲ１５は、ｓｓｐｇｒ＝１またはｉｓｐｇｒ＝１のとき選択される。同様に、レジスタＥＲ２３は、ｓｓｐｇｒ＝２またはｉｓｐｇｒ＝２のとき選択され、レジスタＥＲ３１は、ｓｓｐｇｒ＝３またはｉｓｐｇｒ＝３のとき選択される。
【０３１２】
制御レジスタ（ＣＰＵＣＲ）２２の構成は、公知の技術であるので詳細な説明は省略する。制御レジスタ（ＣＰＵＣＲ）２２はリセット時にレジスタグループ０が選択される（ｓｓｐｇｒ＝ｉｓｐｇｒ＝０）ようにするとよい。
【０３１３】
また、カレントグループ選択ビットを設けるようにしてもよい。即ち、レジスタ拡張用前置命令コードが付加されない場合、レジスタグループ０とせずに、スタックポインタグループ選択ビットと同様の制御レジスタに前記カレントグループ選択ビットを設け、ＲＳＬＧＲ信号によって、前記カレントグループ選択ビットの内容を命令レジスタＩＲ２（ＬＧＲ１、ＬＧＲ２）にロードするようにする。
【０３１４】
カレントグループ選択ビットに０以外が設定されている場合、ＮＯＰ命令（Ｈ'００００）は、レジスタグループ０の前置命令コードとされる。この命令コードの実行後は、割込みを受付けたりすることなく、次の命令コードを実行するようにすればよい。
【０３１５】
レジスタグループ０を指定するために、Ｈ'００００を使用することになり、既存のＮＯＰ命令と同じコードであり、ＮＯＰ命令は使用しないようにすればよい。ＮＯＰ命令の代りに、ＢＲＡ ＄＋２などを使用するようにすればよい（「＄＋２」はその命令の存在するアドレスに対して２番地先、即ち次の命令のアドレスであることを示す）。
【０３１６】
各時点でのプログラムの実行内容によって、主に使用する汎用レジスタの対象は異なるから、主に使用するグループの処理を高速にし、ひいてはＣＰＵの処理速度を向上することができる。例えば、レジスタグループ３の汎用レジスタを所定の割込み処理に割り当て、他の処理では使用しない様にしておき、当該割込みが発生したときに、カレントグループを３に変更して、レジスタ拡張用前置命令コードなしで、汎用レジスタグループ３に対する処理を高速に実行することができる。
【０３１７】
例えば、割込み優先順位を４レベルとした場合、通常、割込みのネストは４階層になる。即ち、割込みの優先順位を３（高位）〜０（低位）とした場合、同じ優先順位の割込みは同時には受け付けないから、最初に優先順位０の割込みはマスクされ、メインプログラム実行途中に優先順位１の割込みが発生し、この処理途中に優先順位２の割込みが発生し、この処理途中に優先順位３の割込みが発生した場合が、最大のネスト４になる。
【０３１８】
例えば、グループ３を優先順位３の割込み用の処理に確保し、グループ２を優先順位２の割込み用の処理に確保しておき、そのほかの割込みと一般の処理ではグループ０と１を使用するようにプログラムを組めば、優先順位３の割込み発生時には、汎用レジスタを待避することなく、汎用レジスタグループ３を使用できるから、割込み応答速度を向上することができる。優先順位２の割込み発生時も同様にでき、より優先度の高い割込み処理を高速に処理することができる。
【０３１９】
オペレーティングシステム（ＯＳ）などによって、ＣＰＵの処理を制御する場合、ＣＰＵの処理はいわゆるタスクに分割され、各タスクは独立に管理される。例えば、スタック領域も各タスク毎に独立に管理することになる。
【０３２０】
タスクを切り替える場合、スタック領域も切り替えることになり、従来は、使用中のスタックポインタの内容を待避し、スタックポインタの内容を更新しなければならない。更新する場合には、当該タスクが前回待避したスタックポインタの内容を復帰する必要がある。
【０３２１】
かかるタスク切替えの場合、前記の例では、前記レジスタ（ＣＰＵＣＲ）２２の内容を書き換えるのみでよい。切り替える前のスタックポインタの内容は保持することができるから、待避したり、復帰したりする必要がない。ＣＰＵの処理に直接影響のない処理を省くことによって、実質的な処理性能を向上することができる。
【０３２２】
また、割込みはタスクの実行と独立に発生し、タスクからは予期できない。各タスクで割込みを許可している場合は、発生し得る多重割込みの数分（一般には、割込み優先順位の数に相当する）スタック領域を確保しなければならない。従来は、これを各タスク毎に行なければならず、スタック使用量を不所望に増加させていた。本実施例においては、例外処理用のスタックポインタを用いて、例外処理用のスタックを独立して管理できるから、各タスクは割込み用のスタック領域を確保する必要がない。これによって、スタックの使用量を抑止することができる。スタックはＲＡＭで構成され、また、シングルチップマイクロコンピュータにおいては内蔵できるＲＡＭの容量はチップサイズなどによって制限されるから、例外処理用のスタックポインタを使用可能にすることによって、シングルチップマイクロコンピュータにおいてもＯＳの適用を容易にする。
【０３２３】
また、制御レジスタ（ＣＰＵＣＲ）２２の初期値を、レジスタグループ０に相当するようにし、初期状態で、既存の下位ＣＰＵと同一のスタックポインタの使用方法を可能とすることにより、既存のソフトウェア資産も有効に利用できる。
【０３２４】
ＥＲ７、ＥＲ１５、ＥＲ２３、ＥＲ３１をスタックポインタとして使用しない場合は、その他の汎用レジスタとして使用できるから、利用効率や使い勝手を向上できる。
【０３２５】
図２３乃至図２５には前記命令デコーダＤＥＣに含まれる転送命令コード（ｍｏｖ）の解読論理２０１を論理記述で例示する。図２３乃至図２５に示された論理記述は、図１９と同じＲＴＬ（Register Transfer Level）若しくはＨＤＬ（Hardware Description Language）によって記述されている。尚、記号「！」は論理的な和を示し、「＆」は論理的な積を示す。「３’ｂ００１」は３ビット長のバイナリデータ００１を意味する。ＩＲ［８］はインストラクションレジスタＩＲの最下位から９ビット目の論理値を意味する。
【０３２６】
図２３乃至図２５の論理記述は、１６ビット絶対アドレスによるワードサイズの転送命令（ＭＯＶ．Ｗ ＠ａａ：１６，Ｒｎ）のコードを解読するための論理記述に相当する。図２３乃至図２５の論理記述において、ｃａｓｅｘ（ＩＲ）の次行に記述された１６’ｂ０１１０＿１０１？＿？？００＿？？？？がその転送命令のコードを意味する。ＩＲ［８］＝０のときバイトサイズ、 ＩＲ［８］＝１のときワードサイズ、ＩＲ［７］＝０のときメモリ→汎用レジスタ（リード型）、ＩＲ［７］＝１のとき汎用レジスタ→メモリ（ライト型）、の転送を意味する。その命令を、独立した転送命令として実行するか、メモリ上のデータに対する直接的な処理命令の一部として実行するかは、信号ＭＯＤＳ、ＭＯＤＤの値によって指示される。即ち、図２３乃至図２５の論理記述では、ステートコードＴＭＧに従って制御信号を生成するようになっており、現時点でのステートコードＴＭＧの値とその時のＭＯＤＳ、ＭＯＤＤの値等にしたがって、次のステートコードＮＥＸＴＴＭＧの値を決定するようになっている。ＭＯＤＳ、ＭＯＤＤ信号によって、独立した転送命令として実行するか、メモリ上のデータに対する直接的な処理命令の一部として実行するかの制御が大別されることになる。具体的には、ＭＯＤＳ＝ＭＯＤＤ＝０の場合は、独立した転送命令として実行される。既存の転送命令と同様の動作になる。特に図示していない部分については、独立した転送命令と同様にできる。
【０３２７】
ＭＯＤＳ＝１の場合は、ソース側データのリード動作として実行される。リードデータは、汎用レジスタに書込まず、テンポラリレジスタＴＲＤに書込む。
【０３２８】
ＭＯＤＤ＝１で、ＭＯＤＳ＝０またはＭＯＤＳＥ＝１の場合は、デスティネーション側データのリード動作として実行される。リードアドレスを、テンポラリレジスタＴＲＡに書込む。リードデータは、リードデータバッファＲＤＢに取り込んだ後、１ステート早く実行を終了する。なお、ＭＯＤＳＥはソース側のリード型転送命令コードの実行が終了したことを示す信号であり、解読論理２０１で生成される。
【０３２９】
リードデータのテンポラリレジスタＴＲＤへの書込み及びリードアドレスのテンポラリレジスタＴＲＡへの書込みは、いずれの場合も区別なく、実行してもよい（利用されることはなくても、動作に影響しない。区別しないことによって、論理的な無駄を省くことができる）。
【０３３０】
従って、独立した転送命令（既存の転送命令）に比較して、ＭＯＤＳ＝１のとき、汎用レジスタへの書込み禁止、ＭＯＤＤ＝１のとき、１ステート短縮の相違が存在するのみにできる。論理的な規模の増加を最小限とすることができる。
【０３３１】
なお、図１５に示される通り、命令拡張用前置命令コードのロングワードサイズの指定によって、ＭＯＤＳ、ＭＯＤＤと同様に、ロングワードサイズがＬＮＧ信号によって指示される。
【０３３２】
また、図において、小文字の信号は、命令デコーダＤＥＣで生成され、出力される信号とし、大文字の信号は命令デコーダＤＥＣに入力された信号とする。
【０３３３】
図２３に示される論理記述の第１の部分（１−１）でステートコードＴＭＧが生成される。ステートコードＴＭＧは１→２→３と進行するが、デスティネーション側データのリード動作（ＭＯＤＤ＝１でＭＯＤＳ＝０またはＭＯＤＳＥ＝１）の場合ＴＭＧは１→２で終了するようになっている。
【０３３４】
なお、ＮＥＸＴＴＭＧ［５］＝０の場合における次ステートコードは単純に下位ビットの値になっている。ＮＥＸＴＴＭＧ［５］＝１の場合における次ステートコードは５’ｂ００００１とされる様に構成されている。
【０３３５】
図２３に示される論理記述の第２の部分（１−２）でバス制御を行なう。ｎｏｐ＝０はバスアクセス開始、 ｎｏｐ＝１はバスアクセス禁止を指示する。ｄａｔａ＝０は命令リード、ｄａｔａ＝１はデータアクセスを指示する。ｌｏｎｇ＝１はロングワードサイズ、 ｌｏｎｇ＝０のとき、ｂｙｔｅ＝０はワードサイズ、ｂｙｔｅ＝１はバイトサイズを指示する。 ｗｒｉｔｅ＝０はリード、 ｗｒｉｔｅ ＝１はライトを指示する。
【０３３６】
本転送命令の場合、ステートコード１、３で命令リードを行い、ステートコード２で、データアクセスを行なうようになっている。データアクセスのリード／ライトはＩＲ［７］によって指示される。命令リードの場合は所定のタイミングで内部データバスＩＤＢの内容がインストラクションレジスタＩＲとリードデータバッファＲＤＢに格納される。データリードの場合は所定のタイミングで内部データバスＩＤＢの内容がリードデータバッファＲＤＢに格納される。データライトの場合は所定のタイミングでライトデータバッファＷＤＢの内容が内部データバスＩＤＢに出力される。
【０３３７】
図２４に示される論理記述の第３の部分（１−３）で実効アドレスを計算する。本転送命令の場合、ステートコード２（＝５’ｂ０００１０）で、リードデータバッファＲＤＢに保持している命令コードのＥＡ拡張部１６ビットを、ｄｂｒｅｘｔ信号によって３２ビットに符号拡張した上、内部バスＧＢに出力する。バスＧＢの内容はアドレスバッファＡＢに毎ステート格納されるようにされており、特に制御は必要ない。
【０３３８】
図２４に示される論理記述の第４の部分（１−４）で、転送データを制御する。リード型（ＩＲ［７］＝０）の場合は、ステートコード３で、リードデータをリードデータバッファＲＤＢからバスＤＢへ出力し、ＭＯＤＳ＝０の場合は汎用レジスタへ、ＭＯＤＳ＝１の場合はテンポラリレジスタＴＲＤへ格納する。
【０３３９】
ライト型（ＩＲ［７］＝１）の場合は、ステートコード２で、 ＭＯＤＳ＝０の場合は汎用レジスタから、ＭＯＤＳ＝１の場合はテンポラリレジスタＴＲＤから内部バスＤＢへ出力し、いずれの場合もライトデータバッファＷＤＢを経由して、内部データバスＩＤＢに出力する。
【０３４０】
図２５に示される論理記述の第５の部分（１−５）で、割込みマスク信号を制御する。また、ソース側のデータのリードが終了した場合には、制御信号ＭＯＤＳＥを発生する。
【０３４１】
図２３及び図２５においてＭＯＤＳ＝１またはＭＯＤＤ＝１の場合には入力されたオペレーションレコードの一部が転送命令と異なる様にしてもよい。例えばオペコードのビット１５は別の定義に使用する様にしてもよい。
【０３４２】
論理規模の縮小のためにはアドレッシングモードなどのメモリの指定方法を決めるビット（オペコードのビット８〜１０）は共通にする。
【０３４３】
図２６及び図２７には前記命令デコーダＤＥＣに含まれる演算命令コード（ｅｘｅ）の解読論理２０２を論理記述で例示する。図２６及び図２７の双方によって示される論理記述は、レジスタ間加算命令（ＡＤＤ．Ｗ Ｒｍ，Ｒｎ）のコードを解読する為の論理記述に相当する。
【０３４４】
前記同様に、独立した転送命令として実行するか、メモリ上のデータに対する処理命令の一部として実行するかは、ＭＯＤＳ、ＭＯＤＤ信号によって指示される。特に図示していない部分（ＡＬＵの制御など）については、独立した演算命令と同様にできる。
【０３４５】
図２６に示される論理記述の第１の部分（２−１）でステートコードＴＭＧが生成される。ステートコードＴＭＧは１（＝５’ｂ００００１）で終了する。図２６に示される論理記述の第２の部分（２−２）でバス制御を行なう。ステートコード１で命令リードを終了する。
【０３４６】
図２７に示される論理記述の第３の部分（２−３）で、演算データを制御する。ＭＯＤＳ＝０の場合には、ソース側データを汎用レジスタとし、汎用レジスタの内容をＤＢに読み出す（ｒｓｄｂ）。ＭＯＤＳ＝１の場合には、ソース側データをメモリとし、テンポラリレジスタＴＲＤの内容をＤＢに読み出す（ｔｒｄｄｂ）。
【０３４７】
ＭＯＤＤ＝０の場合には、デスティネーション側データを汎用レジスタとし、汎用レジスタの内容をＧＢに読み出す（ｒｄｇｂ）とともに、演算結果を汎用レジスタに書込む（ｗｂｒｄ）。ＭＯＤＤ＝１の場合には、デスティネーション側データをメモリとし、リードデータバッファの内容をバスＤＢに読み出す（ｒｄｂｄｂ）とともに、演算結果をテンポラリレジスタＴＲＤに書込む（ｗｂｔｒｄ）。
【０３４８】
図２７に示される論理記述の第４の部分（２−４）で、割込みマスク信号を制御する。また、デスティネーション側がメモリの場合には、制御信号ｍｋｍｏｖを発生して、ライト型転送命令と同等の動作を行なう命令コードの発生を、命令変更部ＣＨＧに指示する。また、ロングワードサイズ信号ＬＮＧ、バイトサイズ信号ＢＹＴＥを継続する。
【０３４９】
図２８乃至図３０には前記命令デコーダＤＥＣに含まれる演算命令コード（ｅｘｅ）の解読論理２０２のうち、内部で生成されるライト型転送命令と同等の動作を行なう命令コードを生成する論理の論理記述が例示されている。
【０３５０】
前記内部で生成されるライト型転送命令と同等の動作を行なう命令コードは、常に同一の動作を行なうものとし、ＭＯＤＳやＭＯＤＤの制御信号は参照していない。
【０３５１】
図２８に示される論理記述の第１の部分（３−１）でステートコードＴＭＧが生成される。ステートコードＴＭＧは１→３と進行する。図２８に示される論理記述の第２の部分（３−２）でバス制御を行なう。ステートコード１（＝５’ｂ００００１）で、データライトを行い、ステートコード３（＝５’ｂ０００１１）で命令リードを行なう。データサイズは演算命令コードの発生した、制御信号ＬＮＧ、ＢＹＴＥによって指示される。
【０３５２】
図２９に示す論理記述の第３の部分（３−３）で実効アドレスを再利用する。ステートコード１で、テンポラリレジスタＴＲＡに保持している実効アドレスを、内部バスＧＢに出力する。図２９に示す論理記述の第４の部分（３−４）で、転送データを制御する。ステートコード３で、テンポラリレジスタＴＲＤから内部バスＤＢへ出力し、ライトデータバッファＷＤＢを経由して、内部データバスＩＤＢに出力する。
【０３５３】
図３０に示される論理記述の第５の部分（３−５）で、制御信号はいずれも初期化する。割込みも許可し、割込みが要求すれば、引き続き割込み例外処理を行なうことができる。
【０３５４】
命令拡張用前置命令コード（ｐｆ）を解読する論理回路の論理記述については特に図示しないが、図１５の命令拡張用前置命令コードの解読結果に応じたｍｏｄやｍｓｋｉｎｔなどの制御信号を生成し、ＭＯＤＳ，ＭＯＤＤ等によって図２３乃至図３０に例示されるような論理動作を制御し、命令デコーダＤＥＣ全体として、メモリのデータに対する直接的な演算制御を可能にする。
【０３５５】
図３１にはレジスタ拡張用前置命令コードを伴わない第１の加算命令（ＡＤＤ．Ｌ  ＥＲ０，ＥＲ１）の実行タイミングが示される。
【０３５６】
ＡＤＤ．Ｌ ＥＲ０，ＥＲ１は、グループ０の汎用レジスタのみを使用するので、汎用レジスグループを指定するレジスタ拡張用前置命令コードを必要とせず、前記既存の下位ＣＰＵ、例えば、前記平成７年３月（株）日立製作所発行『Ｈ８Ｓ／２６００シリーズＨ８Ｓ／２０００シリーズプログラミングマニュアル』に記載のＣＰＵと同じ１ワードの命令とされる。
【０３５７】
特に制限はされないものの、内部データバス（ＩＤＢ）は１６ビットであって、内蔵ＲＯＭ４、ＲＡＭ５のリード／ライトを１ステートで行うことができるものとして説明する。また、ＣＰＵは命令フェッチ、デコード、実行の３段パイプラインで命令を実行するものとする。
【０３５８】
サイクルＴ０のスロットＣ２（φ＃同期：クロック信号φの反転クロックであるφ＃同期）で、ＣＰＵ２のアドレスバッファＡＢからアドレスがバスＩＡＢに出力される。また、命令デコーダＤＥＣから、命令フェッチ（ｉｆ）を示す、バスコマンド（ＢＣＭＤ）が出力される。
【０３５９】
サイクルＴ１のスロットＣ１（φ同期）で、アドレスバスＩＡＢの内容が周辺アドレスバス（ＰＡＢ）に出力され、バスコマンドに基づき、リードサイクルが開始され、周辺データバス（ＰＤＢ）にデータが出力される。スロットＣ２で周辺データバス（ＰＤＢ）のリードデータが内部データバスＩＤＢに得られ、これをサイクルＴ２のスロットＣ１で命令レジスタＩＲ１にラッチする。以上の動作は以前の命令の実行の制御によって行われる。前記周辺データバス（ＰＤＢ）及び周辺アドレスバス（ＰＡＢ）は内部データバス（ＩＤＢ）及び内部アドレスバス（ＩＡＢ）に接続された周辺回路用の図示を省略するバスである。内蔵ＲＯＭ４、ＲＡＭ５はそのモジュール内で周辺アドレスバス、周辺データバス相当の動作を行う。
【０３６０】
直前の命令の実行が終了すると、最も早く命令の実行が開始される場合には、サイクルＴ２のスロットＣ１で命令コードが制御部ＣＯＮＴの命令デコーダＤＥＣに入力されて、命令の内容が解読される。命令デコーダＤＥＣは、解読結果に従って、制御信号を出力して、各部の制御を行う。命令の一部（レジスタ指定フィールドの情報：ＳＥＬ１）がレジスタセレクタＲＳＥＬに与えられる。図においてソース側レジスタ指定フィールドの情報ＳＥＬ１＝０、デスティネーション側レジスタ指定フィールドの情報ＳＥＬ２＝１になっている。ＳＥＬ１は、図１８のＲＳＥＬのｒ１[３：０]、ＳＥＬ２は、ｒ２[３：０]に相当する。
【０３６１】
レジスタ間演算命令では、サイクルＴ２のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスＩＡＢにアドレス信号が出力される。レジスタセレクタ３４に制御信号を与える。このとき、ラッチ回路（ＬＧＲ１、ＬＧＲ２）３２１，３２２が何れも０にクリアされているので、レジスタフィールドＳＥＬ１、ＳＥＬ２からの信号と制御部ＣＯＮＴの出力する制御信号Ａ（Ｒｓ−ＤＢ、Ｒｄ−ＧＢ）とに基づいて、レジスタ選択信号Ｂ（Ｒ０−ＤＢ、Ｒ１−ＧＢ）が生成される。
【０３６２】
サイクルＴ３から、次の次の命令がリードされる。サイクルＴ３のスロットＣ１で、インクリメンタＩＮＣでインクリメント（＋２）された結果が、内部バスＷＢを経由してプログラムカウンタＰＣにライトされる。入力信号ＳＥＬ２と制御信号Ｂ（ＷＢ−Ｒｄ）とに基づいて、レジスタ選択信号Ｃ（ｓｅｌｅｃｔＣ：ＷＢ−Ｒ１）が生成される。前記レジスタ選択信号Ｂはレジスタを選択して、ソース側、デスティネーション側のレジスタ（Ｒｓ、Ｒｄ）のデータを算術論理演算器ＡＬＵに入力する。算術論理演算器ＡＬＵの演算内容は制御部ＣＯＮＴが制御信号Ｃ（ｃｏｎｔｒｏｌＣ）によって指示する。加算・論理演算・シフトなどは１クロックで演算を行うことができる。例えば、前記命令では３２ビットの加算を行う。次の命令の制御部ＣＯＮＴへのロードを指示する。
【０３６３】
制御信号Ｂ（ＲＳＬＧＲ）によって、ラッチ回路（ＬＧＲ１、ＬＧＲ２）３２１，３２２のクリアが指示される。ラッチ回路（ＬＧＲ１）３２１はサイクルＴ３のスロットＣ１で、ラッチ回路（ＬＧＲ２）３２２はサイクルＴ３のスロットＣ２でクリアされた結果が伝達される。
【０３６４】
サイクルＴ３のスロットＣ２で、算術論理演算器ＡＬＵの演算結果が、内部バスＷＢを経由して、レジスタ選択信号が選択したデスティネーション側のレジスタ（ＥＲ１）にライトされる。図示はされないが、制御信号Ｃによって、コンディションコードレジスタＣＣＲの更新を行う。
【０３６５】
図３１の例ではレジスタグループ０同士のレジスタ間演算は実質的に１ステートで実行されている。
【０３６６】
図３２にはレジスタ拡張用前置命令コードが付加された第２の加算命令（ＡＤＤ．Ｌ ＥＲ８，ＥＲ１）の実行タイミングを示す。
【０３６７】
汎用レジスタグループを指定するレジスタ拡張用前置命令コードを付加して２ワード命令とする。第２ワードは前記ＡＤＤ．Ｌ Ｒ０，Ｒ１と同一である。すなわち、ｇｒ１＝１であるため、同じｒ１＝０に対して、レジスタ番号ｎ＝８と解釈される。
【０３６８】
サイクルＴ０のスロットＣ２で、ＣＰＵ２のアドレスバッファＡＢかアドレスがアドレスバスＩＡＢに出力される。
【０３６９】
サイクルＴ１のスロットＣ１（φ同期）で、アドレスバスＩＡＢの内容が周辺アドレスバス（ＰＡＢ）に出力され、リードサイクルが開始される。スロットＣ２でリードデータが内部データバスＩＤＢに得られ、これをサイクルＴ２のスロットＣ１で命令レジスタＩＲ１にラッチする。これは、レジスタグループフィールドを持つ省略可能なレジスタ拡張用前置命令コードのワードである。
【０３７０】
引き続き、サイクルＴ２のスロットＣ２で次のアドレス（＋２された内容）がアドレスバスＩＡＢに出力され、このリードデータがサイクルＴ３のスロットＣ１で命令レジスタＩＲにラッチされる。以上の動作は以前の命令の実行の制御によって行われ、相対的な関係が異なる場合もある。
【０３７１】
直前の命令の実行が終了すると、最も早く命令の実行が開始される場合には、サイクルＴ２のスロットＣ１で命令コード（レジスタ拡張用前置命令コード）が制御部ＣＯＮＴに入力されて、命令の内容が解読される。解読結果に従って、制御信号を出力して、各部の制御を行う。グループフィールドラッチ信号ＬＧＲＣＬが発行されて、レジスタグループ指定フィールド（ＩＲ１のビット７〜０）がラッチ回路（ＬＧＲ１、ＬＧＲ２）３２１，３２２にラッチされる。
【０３７２】
サイクルＴ２のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレス信号がアドレスバスＩＡＢに出力される。
【０３７３】
サイクルＴ３から、次の次の命令がリードされる。サイクルＴ３のスロットＣ１で、インクリメンタＩＮＣでインクリメント（＋２）された結果が、内部バスＷＢを経由してプログラムカウンタＰＣにライトされる。第１ワードと第２ワード以降が分割されないための制御信号Ｂ（ｃｏｎｔｒｏｌＢ）で連続命令信号（割込み禁止信号：ｃｏｎｔｉｎｕｅ＝ｍｓｋｉｎｔ）を割込み受け付け回路に出力する。本信号によって、割込み要求などが発生していても、命令の実行を継続することができる。また、ラッチ回路（ＬＧＲ１、ＬＧＲ）３２１，３２２の内容が保持される。
【０３７４】
一方、サイクルＴ２のスロットＣ１で命令コード（加算命令を指示）が命令デコーダ（ＤＥＣ）３３に入力されて、命令の内容が解読される。解読結果に従って、制御信号を出力して、各部の制御を行う。ＬＧＲ１＝１及びＬＧＲ２＝０であるため、ＳＥＬ１（及びＳＥＬ２）と命令デコーダＤＥＣの出力する制御信号Ａ（Ｒｓ−ＤＢ、Ｒｄ−ＧＢ）とに基づいて、レジスタ選択信号Ｂ（Ｒ８−ＤＢ、Ｒ１−ＧＢ）が生成される。これ以外の第２ワードによる動作は第１の加算命令（ＡＤＤ．Ｌ ＥＲ０，ＥＲ１）と同一にできる。第１の加算命令同様に、制御信号Ｂ（ＲＳＬＧＲ）によって、ラッチ回路（ＬＧＲ１、ＬＧＲ２）３２１，３２２のクリアが指示される。ラッチ回路（ＬＧＲ１）３２１はサイクルＴ４のスロットＣ１で、ラッチ回路（ＬＧＲ２）３２２はサイクルＴ４のスロットＣ２でクリアされた結果が伝達される。
【０３７５】
第１ワード（レジスタ拡張用の前置命令コード）に対応するラッチ回路（ＬＧＲ１、ＬＧＲ２）３２１，３２２のラッチ信号、連続命令信号を出力以外は、命令デコーダＤＥＣの内容を、既存のＣＰＵの命令デコーダと同等にできる。命令デコーダＤＥＣのレジスタ拡張用前置命令コードに対応する部分は、相対的に小さいことは言うまでもない。すなわち、論理的な規模の追加を最小限にできる。また、命令デコーダＤＥＣの大部分を既存のＣＰＵの命令デコーダと同等にできるから、従来の設計資産を有効に利用することができる。
【０３７６】
また、そのほかの命令についても、同様のレジスタ拡張用前置命令コードを付加することによって、汎用レジスタのいずれも指定できる。前記命令コードはレジスタ指定フィールドを持つ命令コードの命令について適用できる。
【０３７７】
図３３にはメモリ・レジスタ型の加算命令（ＡＤＤ．Ｗ  ＠ａａ：１６，Ｒ９）の実行タイミングを示す。すなわち、レジスタグループフィールドを持つレジスタ拡張用前置命令コード、メモリ・レジスタ型演算の命令拡張用前置命令コード、ＭＯＶ．Ｗ ＠ａａ：１６，Ｒ０に相当する命令コード、ＡＤＤ．Ｗ Ｒ０，Ｒ１に相当する命令コードを組合せて１命令とみなされる命令を実行したときのタイミングが示される。
【０３７８】
レジスタグループフィールドを持つレジスタ拡張用前置命令コードは、グループ１の汎用レジスタを指定するように、Ｈ’０００１とされる。すなわち、ｇｒ２＝１であるため、同じｒ２＝１に対して、レジスタ番号ｎ＝９と解釈される。
【０３７９】
また、メモリ・レジスタ型の命令拡張用前置命令コードは、図１５に従い、Ｈ’０１０８とされ、ＭＯＤＳ信号によって、ソース側がメモリであることを指示する。本命令では、直接の関係はないが、ＥＡ１命令コードの実行時には、ｇｒ１とｒ１が組み合わされて、汎用レジスタが選択される。また、演算命令コードの実行時には、ｇｒ２とｒ２が組み合わされて、汎用レジスタが選択される。
【０３８０】
転送命令コードは、既存の転送命令と同様に、メモリのリードを行なうが、前置命令コードによるソース側をメモリとする指示に基づき、リードデータをテンポラリレジスタＴＲＤに格納する。ソース側をメモリとする指示を継続する。
【０３８１】
演算命令コードは、ソース側をメモリとする指示に従い、ソース側データを汎用レジスタではなく、テンポラリレジスタ（ＴＲＤ）から読み出す。そのほかの動作は、既存の演算命令と同様になる。
【０３８２】
サイクルＴ０のスロットＣ２（φ＃同期。＃は反転論理を示す）で、ＣＰＵ２のアドレスバッファＡＢからアドレスがＩＡＢに出力される。
【０３８３】
サイクルＴ１のスロットＣ１（φ同期）で、ＩＡＢの内容がＰＡＢに出力され、リードサイクルが開始される。サイクルＴ１のスロットＣ２でリードデータが内部データバスに得られ、これをサイクルＴ２のスロットＣ１でＩＲ（ＩＲ１）にラッチする。これは、レジスタグループフィールドを持つ省略可能な命令ワード（レジスタ拡張用前置命令コード）である。
【０３８４】
引き続き、サイクルＴ２のスロットＣ２で次のアドレス（＋２された内容）がＩＡＢに出力され、このリードデータがサイクルＴ３のスロットＣ１でＩＲ（ＩＲ１）にラッチされる。以上の動作は以前の命令の実行の制御によって行われ、相対的な関係が異なる場合もある。
【０３８５】
直前の命令の実行が終了すると、最も早く命令の実行が開始される場合には、サイクルＴ２のスロットＣ１で命令コード（レジスタ拡張用前置命令コード）が命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、制御信号を出力して、各部の制御を行う。グループフィールドラッチ信号ＬＧＲＣＬが発行されて、レジスタグループ指定フィールド（ＩＲ１のビット７〜０）がラッチＬＧＲ１、ＬＧＲ２にラッチされる。
【０３８６】
サイクルＴ２のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレス情報が出力される。
【０３８７】
サイクルＴ１のスロットＣ２で、ＣＰＵ２のアドレスバッファＡＢかアドレス情報がアドレスバスＩＡＢに出力される。
【０３８８】
サイクルＴ２のスロットＣ１（φ同期）で、アドレスバスＩＡＢの内容がＰＡＢに出力され、リードサイクルが開始される。サイクルＴ２のスロットＣ２でリードデータが内部データバスに得られ、これをサイクルＴ２のスロットＣ１でＩＲにラッチする。これは、メモリに対する演算を示す命令拡張用前置命令コード（ｐｆ）である。
【０３８９】
サイクルＴ３のスロットＣ２で次のアドレス（＋２された内容）がアドレスバスＩＡＢに出力され、このリードデータがサイクルＴ４のスロットＣ１で命令レジスタＩＲ（ＩＲ１）にラッチされる（ＭＯＶ命令の第１ワード（ｍｏｖ−１））。
【０３９０】
サイクルＴ３のスロットＣ１で命令コード（命令拡張用前置命令コードｐｆ）がデコーダＤＥＣに入力されて、命令の内容が解読され、かかる命令拡張用前置命令コードの場合には、ソース側データがメモリ上に存在することを指示する。即ち、制御信号ＣとしてＭＯＤＳ信号を１にセットし、デコーダＤＥＣにフィードバックする。
【０３９１】
サイクルＴ３のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレス情報がアドレスバスＩＡＢに出力される。
【０３９２】
サイクルＴ４のスロットＣ１で命令コード（ＭＯＶ命令の第１ワード（ｍｏｖ−１））が命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、制御信号を出力して、各部の制御を行う。絶対アドレスのアドレッシングモードであるので、引き続き、ＥＡ拡張部である絶対アドレスをリードした後、この絶対アドレスに基づき、ソースデータのリードを行い、リード結果をテンポラリレジスタＴＲＤに格納する。
【０３９３】
サイクルＴ４のスロットＣ１で、インクリメンタＩＮＣでインクリメント（＋２）された結果が、内部バスＷＢを経由してプログラムカウンタＰＣにライトされる。サイクルＴ４のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレス情報がアドレスバスＩＡＢに出力される。
【０３９４】
サイクルＴ４から、リードサイクルが開始され、このリードデータがサイクルＴ５のスロットＣ１でリードデータバッファＲＤＢにラッチされる（ＭＯＶ命令の第２ワード（ｍｏｖ−２）、即ち、ＥＡ拡張部である絶対アドレス）。
【０３９５】
サイクルＴ５のスロットＣ１で、インクリメンタＩＮＣでインクリメント（＋２）された結果が、内部バスＷＢを経由してプログラムカウンタＰＣにライトされる。サイクルＴ５のスロットＣ２で、リードデータバッファＲＤＢの内容（絶対アドレス）を内部バスＧＢに読み出して、アドレスバッファＡＢに入力する。アドレスバッファＡＢからアドレス情報がアドレスバスＩＡＢに出力される。
【０３９６】
サイクルＴ６から、ソースデータがリードされる。また、サイクルＴ５のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレス情報がアドレスバスＩＡＢに出力される。
【０３９７】
サイクルＴ７のスロットＣ１で前記リードデータ（ソースデータ）が、リードデータバッファＲＤＢに格納される。更に、リードデータバッファＲＤＢから内部バスＤＢに出力され、算術論理演算器ＡＬＵに入力する。算術論理演算器ＡＬＵの動作は無操作とする。
【０３９８】
サイクルＴ７のスロットＣ２で、リードデータが、算術論理演算器ＡＬＵから内部バスＷＢに出力され、信号ＭＯＤＳが１にセットされているので、汎用レジスタではなく、テンポラリレジスタＴＲＤに格納される。
【０３９９】
サイクルＴ７のスロットＣ１で、命令コード（ＡＤＤ命令（ａｄｄ））が命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、制御信号を出力して、各部の制御を行う。信号ＭＯＤＳが１にセットされているので、ソース側データを汎用レジスタではなく、テンポラリレジスタＴＲＤから読み出す。デスティネーション側は、汎用レジスタから読み出し、演算結果は汎用レジスタに格納する。
【０４００】
サイクルＴ７のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレス情報がアドレスバスＩＡＢに出力される。
【０４０１】
サイクルＴ８のスロットＣ１で、インクリメンタＩＮＣでインクリメント（＋２）された結果が、内部バスＷＢを経由してプログラムカウンタＰＣにライトされる。また、デスティネーション側は変更なく、レジスタグループフィールド（ｇｒ２＝１）と、レジスタフィールド（ｒ２＝１）に従って、汎用レジスタ（ＥＲ９）から、デスティネーションデータが内部バスＧＢに出力され、ソース側データが、信号ＭＯＤＳに従って、テンポラリレジスタＴＲＤから内部バスＤＢに出力され、いずれも算術論理演算器ＡＬＵに入力される。算術論理演算器ＡＬＵは加算動作とされる。
【０４０２】
サイクルＴ８のスロットＣ２で、演算結果が、算術論理演算器ＡＬＵから内部バスＷＢに出力され、汎用レジスタ（ＥＲ９）に格納される。
【０４０３】
なお、第１ワードと第２ワード以降が分割されないための制御信号Ｂで連続命令信号を出力する。本信号によって、割込み要求などが発生していても、命令の実行を継続することができる。
【０４０４】
即ち、命令拡張用前置命令コードに対応する信号ＭＯＤＳの出力と連続命令信号の出力、転送命令コードに対応する信号ＭＯＤＳに従ったデータ格納先の選択と連続命令信号の出力、加算命令コードに対する信号ＭＯＤＳに従ったデータ読み出し元の選択以外は、命令デコーダＤＥＣの論理構成を、下位ＣＰＵの命令デコーダと同等にできる。これらに対応する部分は、相対的に小さいことは言うまでもない。すなわち、論理的な規模の追加と変更を最小限にできる。また、命令デコーダＤＥＣの大部分を既存下位ＣＰＵの命令デコーダと同等にできるから、従来の設計資産を有効に利用することができる。
【０４０５】
また、そのほかの演算命令（加算、減算、乗算、除算、比較、論理積、論理和、排他的論理和など）についても、同様の命令拡張用前置命令コードと転送命令コードを付加することによって、メモリと汎用レジスタの演算を実現できる。
【０４０６】
また、ソース側のアドレッシングモードをレジスタ間接などとする場合、レジスタグループフィールドを持つレジスタ拡張用前置命令コードを、前記命令の先頭に付加し、ｇｒ１＝１〜３のいずれかとすることによって、ソース側の汎用レジスタを、グループ１〜３とすることができる。即ち、レジスタグループフィールドを持つレジスタ拡張用前置命令コードのｇｒ１がソース側、ｇｒ２がデスティネーション側に対応する。
【０４０７】
図３４にはレジスタ・メモリ型の加算命令（ＡＤＤ．Ｗ  Ｒ１，＠ａａ：１６）の実行タイミングを示す。すなわち、命令拡張用前置命令コード、ＭＯＶ．Ｗ  ＠ａａ：１６，Ｒ０に相当する命令コード、及びＡＤＤ．Ｗ  Ｒ１，Ｒ０に相当する命令コードを組合せて、１命令とみなされる命令を実行したときのタイミングが示される。この時の命令拡張用前置命令コードは、図１５に従い、Ｈ’０１０４とされ、信号ＭＯＤＤによって、ソース側は汎用レジスタ、デスティネーション側がメモリであることを指示する。
【０４０８】
転送命令コードは、既存の転送命令と同様に、サイクルＴ４のスロットＣ２から、メモリのリードを行ない、命令拡張用前置命令コードによるデスティネーション側をメモリとする指示（ＭＯＤＤ）に基づき、生成した実効アドレス（メモリアドレス）をテンポラリレジスタＴＲＡに格納する。また、サイクルＴ６のスロットＣ１で、リードデータをリードデータバッファＤＢＲに格納した時点で、既存の転送命令またはソース側のデータのリードの場合より１ステート早く実行を終了する。このため、命令フェッチとＰＣのインクリメントは行なわない。デスティネーション側をメモリとする指示を継続する。演算命令コード（ａｄｄ）を、サイクルＴ５のスロットＣ１から命令デコーダＤＥＣに入力する。
【０４０９】
演算命令コードは、デスティネーション側をメモリとする指示（ＭＯＤＤ）に従い、サイクルＴ６のスロットＣ１で、デスティネーション側データを、汎用レジスタではなく、リードデータバッファＲＤＢから、バスＧＢに読み出し、算術論理演算器ＡＬＵに入力する。ソース側は汎用レジスタが暗黙的に指示されているので、汎用レジスタＲ１の内容を、バスＤＢに読み出し、算術論理演算器ＡＬＵに入力する。サイクルＴ６のスロットＣ２で、演算結果をテンポラリレジスタＴＲＤに格納する。さらに、制御信号ｍｋｍｏｖによって、ＭＯＶ．Ｗ  Ｒ０，＠ＥＲ０に類似する命令コード（ｍｏｖ−ｓｔ：１６’ｂ０１１１＿１０００＿１？？？＿？？？？）をＣＨＧで発生し、サイクルＴ６のスロットＣ１から命令デコーダＤＥＣに入力する。のビットは任意でよい。
【０４１０】
発生された命令コード（ｍｏｖ−ｓｔ）は、 テンポラリレジスタＴＲＡをアドレスレジスタとし、テンポラリレジスタＴＲＤをデータレジスタとする転送命令同様の動作を行う。即ち、サイクルＴ６のスロットＣ２で、テンポラリレジスタＴＲＡに格納されている実効アドレスをバスＧＢに読み出し、アドレスバッファＡＢを経由して内部アドレスバスＩＡＢに出力するとともに、ワードデータライトのバスコマンドを発行する。サイクルＴ７のスロットＣ２で、テンポラリレジスタＴＲＤに格納されている演算結果をバスＤＢに読み出し、ライトデータバッファＷＤＢを経由して、内部データバスＩＤＢに出力して、デスティネーションのメモリアドレスに演算結果を書込む。サイクルＴ７のスロットＣ２から命令フェッチを行なうとともに、プログラムカウンタＰＣのインクリメントを行なう。これによって、転送命令コード（ｍｏｖ−１）の実行を短縮し、命令フェッチとプログラムカウンタＰＣのインクリメントを行なわなかった分を回復する。
【０４１１】
デスティネーション側メモリにライトする場合、命令コード（ｍｏｖ−ｓｔ）をＣＰＵ２内部で発生することにより、命令コードを短縮し、処理時間を短縮することができる。テンポラリレジスタＴＲＡの内容を参照することによって、再度実効アドレスの計算を行なう必要がなく、更に、処理時間を短縮することができる。 ＭＯＶ．Ｗ Ｒ０，＠ＥＲ０に類似する命令コードを使用することにより、設計を容易にし、論理的な規模の増加を抑止することができる。
【０４１２】
比較命令の場合は、デスティネーション側メモリにライトする必要がない。この場合も、前記同様に動作させ、サイクルＴ６のスロットＣ２のバスコマンドを無操作に変更するのみに止めるとよい。即ち、比較命令の命令コードを実行した場合に、制御信号を発行し、デスティネーション側メモリにライトする命令コードにライト動作を禁止させるようにするものである。制御方式を共通化し、論理的な規模の増加を抑止することができる。或いは、内部で発生する命令コードを無操作（ＮＯＰ）命令の命令コードに相当するものにしてもよい。この場合は、処理時間を更に短縮することができる。
【０４１３】
また、そのほかの２つのデータに対する演算命令（加算、減算、乗算、除算、比較、論理積、論理和、排他的論理和など）についても、同様の命令拡張用前置命令コードと転送命令コードを付加することによって、メモリと汎用レジスタの演算を実現できる。更に、１つのデータに対する演算命令（符号反転、論理反転、シフト、ローテートなど）についても、同様の命令拡張用前置命令コードと転送命令コードを付加することによって、メモリ上のデータの演算を実現できる。
【０４１４】
尚、図３４で説明した命令の実行においても、演算命令の実行に至るまでの途中の演算結果によるコンディションコードレジスタＣＣＲの変更抑止と、制御信号ｍｓｋｉｎｔによる割り込み抑止の制御は前記と同様に行われる。
【０４１５】
図３５にはメモリ・メモリ型の加算命令（ＡＤＤ．Ｗ ＠ＥＲ１，＠ａａ：１６）の実行タイミングを示す。即ち、命令拡張用前置命令コード（ｐｆ）、 ＭＯＶ．Ｗ ＠ＥＲ１，Ｒ０に相当する命令コード（ｍｏｖ−１）、ＭＯＶ．Ｗ ＠ａａ：１６，Ｒ０に相当する命令コード（ｍｏｖ２）、及びＡＤＤ．Ｗ Ｒ０，Ｒ１に相当する命令コード（ａｄｄ）を組合せて、１命令とみなされる命令を実行したときのタイミングが示される。
【０４１６】
図３５の場合、命令拡張用前置命令コードは、図１５に従い、Ｈ’０１０Ｃとされ、ＭＯＤＳ，ＭＯＤＤ信号によって、ソース側、デスティネーション側がいずれもメモリであることを指示する。
【０４１７】
転送命令コード（ｍｏｖ−１）は、サイクルＴ３のスロットＣ２から、メモリのリードを行ない、命令拡張用前置命令コードによるソース側をメモリとする指示（ＭＯＤＳ）に基づき、生成した実効アドレス（メモリアドレス）をテンポラリレジスタＴＲＡに格納する。また、サイクルＴ５のスロットＣ１で、リードデータ（ｄａｔａ１）をリードデータバッファＲＤＢを経由して、バスＧＢに出力する。算術論理演算器ＡＬＵを経由してバスＷＢに出力され、サイクルＴ５のスロットＣ２でテンポラリレジスタＴＲＤに格納される。ソース側及びデスティネーション側をメモリとする指示を継続すると共に、ソース側データの終了を指示する（ＭＯＤＳＥ）。
【０４１８】
転送命令コード（ｍｏｖ−２）は、図３４の転送命令コードと同様に、サイクルＴ６のスロットＣ２から、メモリのリードを行ない、命令拡張用前置命令コードによるデスティネーション側をメモリとする指示（ＭＯＤＤ）とソース側データの終了指示（ＭＯＤＳＥ）に基づき、生成した実効アドレス（メモリアドレス）をテンポラリレジスタＴＲＡに格納する。また、サイクルＴ８のスロットＣ１で、リードデータをリードデータバッファＲＤＢに格納した時点で、既存の転送命令またはソース側のデータのリードの場合より１ステート早く実行を終了する。ソース側及びデスティネーション側をメモリとする指示を継続する。
【０４１９】
演算命令コードは、ソース側及びデスティネーション側をメモリとする指示（ＭＯＤＳ、ＭＯＤＤ）に従い、サイクルＴ８のスロットＣ１で、デスティネーション側データをリードデータバッファＲＤＢから、バスＧＢに読み出し、算術論理演算器ＡＬＵに入力する。ソース側データをテンポラリレジスタＴＲＤから、バスＤＢに読み出し、算術論理演算器ＡＬＵに入力する。サイクルＴ８のスロットＣ２で、演算結果をテンポラリレジスタＴＲＤに格納する。さらに、ＭＯＶ．Ｗ Ｒ０，＠ＥＲ０に類似する命令コード（ｍｏｖ−ｓｔ）を発生し、サイクルＴ６のスロットＣ１から命令デコーダＤＥＣに入力する。
【０４２０】
発生された命令コード（ｍｏｖ−ｓｔ）は、テンポラリレジスタＴＲＡをアドレスレジスタとし、テンポラリレジスタＴＲＤをデータレジスタとする転送命令同様の動作を行う。
【０４２１】
ここで、ソース側及びデスティネーション側をメモリとする指示（ＭＯＤＳ、ＭＯＤＤ）がなされている場合、転送命令コードは、１回目はＭＯＤＳＥ信号が０にクリアされており、ソース側のデータのリードを行ない、２回目はＭＯＤＳＥ信号が１にセットされており、デスティネーション側のリードを行なうものとする。
【０４２２】
尚、図３５で説明した命令の実行においても、演算命令の実行に至るまでの途中の演算結果によるコンディションコードレジスタＣＣＲの変更抑止と、制御信号ｍｓｋｉｎｔによる割り込み抑止の制御は前記と同様に行われる。
【０４２３】
図３６にはメモリ・メモリ型の転送命令（ＭＯＶ．Ｗ  ＠ＥＲ１，＠ａａ：１６）の実行タイミングを示す。即ち、命令拡張用前置命令コード、ＭＯＶ．Ｗ  ＠ＥＲ１，Ｒ０に相当する命令コード、ＭＯＶ．Ｗ  Ｒ０，＠ａａ：１６に相当する命令コードを組合せて、１命令とみなされる命令を実行したときのタイミングが示される。この時の命令拡張用前置命令コードは、図１５に従い、Ｈ’０１０８とされる。
【０４２４】
メモリ・メモリ間の転送命令は前記加算命令と同様にし、ＡＤＤ．Ｗ  Ｒ０，Ｒ１に相当する命令コードの代わりに、ＭＯＶ．Ｗ  Ｒ０，Ｒ１に相当する命令コードを用いて、実現することもできる。この場合は、デスティネーション側のリードを行なってしまうが、転送命令の性質上、デスティネーション側のリードは必要なく、処理時間が無駄になってしまう。
【０４２５】
この例では、命令拡張用前置命令コードと、リード型の転送命令コードと、ライト型の転送命令コードを組合せ、命令拡張用前置命令コードは、ソース側がメモリであることを指示する。
【０４２６】
リード型転送命令コードは、メモリのリードを行なって、命令拡張用前置命令コードの指示に基づき、リードデータをテンポラリレジスタＴＲＤに格納する。ソース側をメモリとする指示を継続する。
【０４２７】
ライト型転送命令コードは、既存の転送命令と同様に、メモリのライトを行なうが、ソース側をメモリとする指示（ＭＯＤＳ）に従い、ライトデータを汎用レジスタではなく、テンポラリレジスタＴＲＤから取り出す。
【０４２８】
前記加算命令と同等の実現方法を採用した場合に比べて、演算命令コードを省略できる。結果的に、命令コード長を１ワード短縮し、実行ステート数を３ステート短縮できる。
【０４２９】
図３７にはイミディエイト−メモリ型の加算命令（ＡＤＤ．Ｗ  ＃ｘｘ，＠ａａ：１６）の実行タイミングを示す。同図の内容は、図３４と同様に、命令拡張用前置命令コード、ＭＯＶ．Ｗ  ＠ａａ：１６，Ｒ０に相当する命令コード、及びＡＤＤ．Ｗ  ＃ｘｘ，Ｒ０に相当する命令コードを組合せて定義されて、１命令とみなされる命令を実行したときのタイミングが示されている。デスティネーション側がメモリであるが、イミディエイトデータの場合は、リードデータを一旦テンポラリレジスタＴＲＤに格納する。このため、命令拡張用前置命令コードは、図１５に従い、Ｈ’０１０８とされ、ソース側をメモリとする制御信号（ＭＯＤＳ）を発行する。
【０４３０】
命令拡張用前置命令コード、転送命令コードの動作は、サイクルＴ６のスロットＣ１で、リードデータがリードデータバッファＲＤＢからバスＧＢに読み出される。算術論理演算器ＡＬＵを経由して、バスＷＢに出力され、サイクルＴ６のスロットＣ２でテンポラリレジスタＴＲＤに格納される。
【０４３１】
命令拡張用前置命令コードの指示（ＭＯＤＳ）に対して、イミディエイトデータの演算命令コードは、サイクルＴ８のスロットＣ１で、デスティネーション側データを、汎用レジスタではなく、テンポラリレジスタＴＲＤから、バスＧＢに読み出し、算術論理演算器ＡＬＵに入力する。ソース側はイミディエイトデータがリードデータバッファＲＤＢから、内部バスＤＢに読み出し、算術論理演算器ＡＬＵに入力する。サイクルＴ８のスロットＣ２で、演算結果をテンポラリレジスタＴＲＤに格納する。さらに、命令拡張用前置命令コードの指示（ＭＯＤＳ）に基づいて、サイクルＴ６のスロットＣ２からワードサイズライトを開始する。アドレスはテンポラリレジスタＴＲＡから、サイクルＴ６のスロットＣ２で読み出し、バスＧＢ及びアドレスバッファＡＢを経由して内部アドレスバスＩＡＢに出力する。データは、サイクルＴ８のスロットＣ１で、演算結果を、テンポラリレジスタＴＲＤから読み出して、バスＤＢ及びライトデータバッファＷＤＢを経由して内部データバスＩＤＢに出力する。命令拡張用前置命令コードの指示（ＭＯＤＳ）に従って、イミディエイトデータの演算命令にライト動作が加えられることになる。
【０４３２】
ＡＤＤ．Ｗ  ＃ｘｘ，＠ａａ：１６の場合は、演算命令コードが２ワードであるため、図３４と相違されているが、バイトサイズのイミディエイトの場合、演算命令コードが１ワードであれば、図３４と同じ動作タイミングとすればよい。
【０４３３】
尚、図３７で説明した命令の実行においても、演算命令の実行に至るまでの途中の演算結果によるコンディションコードレジスタＣＣＲの変更抑止と、制御信号ｍｓｋｉｎｔによる割り込み抑止の制御は前記と同様に行われる。
【０４３４】
図３８にはイミディエイト・メモリ型の転送命令（ＭＯＶ．Ｗ  ＃ｘｘ，＠ａａ：１６）の実行タイミングを示す。すなわち、命令拡張用前置命令コード、ＭＯＶ．Ｗ  ＃ｘｘ，Ｒ０に相当する命令コード、及びＭＯＶ．Ｗ  Ｒ０，＠ａａ：１６に相当する命令コード（ライト型転送命令コード）を組合せて１命令とみなされる命令を実行したときにタイミングが示される。このとき、命令拡張用前置命令コードは、図１５に従い、Ｈ’０１０４とされる。
【０４３５】
図３８におけるサイクルＴ４のスロットＣ１で、イミディエイトデータをリードデータバッファＲＤＢからバスＤＢに読み出し、算術論理演算器ＡＬＵを経由して、サイクルＴ４のスロットＣ２で、バスＷＢに出力する。このイミディエイトデータを、命令拡張用前置命令コードの指示（ＭＯＤＤ）に基づき、テンポラリレジスタＴＲＤに格納する。
【０４３６】
ライト型転送命令コードは、既存の転送命令と同様に、メモリのライトを行なうが、サイクルＴ７のスロットＣ２で、命令拡張用前置命令コードの指示（ＭＯＤＤ）に従い、ライトデータを汎用レジスタではなく、テンポラリレジスタＴＲＤから取り出す。
【０４３７】
イミディエイトデータを、内部Ｉ／Ｏレジスタを含むメモリに設定することは、比較的出現頻度が高いと考えられるので、命令コード長の短縮、及び処理時間の短縮は望ましい。
【０４３８】
図３９乃至図４１には、命令デコーダＤＥＣに含まれる演算命令コード（ｅｘｅ）の解読論理２０１の一部に関する論理記述の別の例が示される。同図に示される論理記述は、１６ビットイミディエイトデータのワードサイズの加算命令（ＡＤＤ．Ｗ  ＃ｘｘ：１６，Ｒｎ）に相当する。
【０４３９】
ＭＯＤＳ信号に対応して、実行ステートが延長され、ライト動作が挿入される。図３９に示される論理記述の第１の部分（４−１）でステートコードＴＭＧが生成される。単独の命令としては、ステートコードＴＭＧは１→３と進行する。イミディエイトデータとメモリ上のデータとを演算する場合は、ＭＯＤＳ＝１とされ、ステートコードＴＭＧは１→１７→３と進行する。
【０４４０】
図３９に示される論理記述の第２の部分（４−２）でバス制御を行なう。ＭＯＤＳ＝０の場合は、２回の命令リードを行なう。ＭＯＤＳ＝１の場合は、ステートコード１で、データライトを行い、ステートコード１７、３で命令リードを行なう。データサイズは演算命令コードの発生した、当該命令（ＡＤＤ．Ｗ  ＃ｘｘ：１６，Ｒｎ）のデータサイズであるワードサイズとされる。
【０４４１】
図４０に示される論理記述の第３の部分（４−３）で実効アドレスを計算する。ＭＯＤＳ＝１の場合は、ステートコード１で、テンポラリレジスタＴＲＡに保持している実効アドレスを、内部バスＧＢに出力する。
【０４４２】
図４０に示される論理記述の第４の部分（４−４）で、転送データを制御する。ステートコード１で演算を行なう。ＭＯＤＳ＝０の場合は、汎用レジスタとリードデータバッファＲＤＢからデータを読み出し、演算結果を汎用レジスタに格納する。ＭＯＤＳ＝１の場合は、テンポラリレジスタＴＲＤとリードデータバッファＲＤＢからデータを読み出し、演算結果をテンポラリレジスタＴＲＤに格納する。
【０４４３】
図４１に示される論理記述の第５の部分（５）で、制御信号はいずれも初期化する。割込みも許可し、割込みが要求すれば、引き続き割込み例外処理を行なうことができる。
【０４４４】
ここで、前記命令拡張用前置命令コードを省略してもそれと同様に命令の拡張を行うことができる複合命令について説明する。例えば、図３８に基づいて説明したＭＯＶ．Ｗ  ＃ｘｘ，Ｒ０の命令コードに余裕があり、メモリに対する転送か、汎用レジスタに対する転送かのデスティネーション情報を持つことができれば、命令拡張用前置命令コードを設けなくてもよい。要するに、命令コードに実質的な空き領域があり、その空き領域にメモリに対する転送か、汎用レジスタに対する転送かの情報を組み込んでも、その他の命令コードと区別が付けばよい。このような前記デスティネーション情報に基づき、イミディエイトデータをテンポラリレジスタＴＲＤに格納するとともに、デスティネーション側をメモリとする制御信号を発生すればよい。そのような前記デスティネーション情報を付加した転送命令コードと演算命令コードを結合して1命令として実行可能な複合命令を採用すれば、命令拡張用前置命令コードを設けた場合と同様の機能を実現でき、更に当該命令拡張用前置命令コードを設けない分だけ、命令コード長を短縮でき、命令実行時間を短縮することができる。
【０４４５】
図５２には命令拡張用前置命令コード、ＭＯＶ．Ｗ  ＃ｘｘ，Ｒ０に相当する命令コードに前記ディスティネーション情報を付加した命令コードを組合せて１命令とみなされる命令を実行したときのタイミングが示される。図３８と比較すれば明らかなように、命令拡張用前置命令コード（ｐｆ＝Ｈ’０１０４）に対する処理はない。
【０４４６】
図４２には本発明に係るＣＰＵの開発環境の概略が示される。開発環境の使用者は、各種エディタなどを用いて、Ｃ言語乃至アセンブリ言語でプログラムを作成する。これは通常、複数のモジュールに分割して作成される。
【０４４７】
Ｃコンパイラ４００は、使用者の作成したそれぞれのＣ言語ソースプログラムを入力し、アセンブリ言語ソースプログラム乃至オブジェクトモジュールを出力する。
【０４４８】
アセンブラ４０１は、アセンブリ言語ソースプログラムを入力し、オブジェクトモジュールを出力する。
【０４４９】
リンケージエディタ４０２は、前記Ｃコンパイラ４００やアセンブラ４０１の生成した、複数のオブジェクトモジュールを入力して、各モジュールの外部参照や相対アドレスなどの解決を行い、１つのプログラムに結合して、ロードモジュールを出力する。
【０４５０】
ロードモジュールは、シミュレータデバッガ４０３に入力され、パーソナルコンピュータなどのシステム開発装置上で、ＣＰＵ２の動作をシミュレーションし、実行結果を表示し、プログラムの解析や評価を行なうことができる。また、ロードモジュールはエミュレータ４０４に入力され、実際の応用システム上などで動作する、いわゆるインサーキットエミュレーションを行ない、ＣＰＵ２を有するマイクロコンピュータ全体としての、実動作の解析や評価を行なうことができる。
【０４５１】
このほかに、ライブラリアンとして、汎用的なサブルーチンなどを提供することもできる。
【０４５２】
図４３には本発明に係るＣＰＵ２のシステム開発装置におけるＣＰＵ選択方法を示す。
【０４５３】
ここでは、上位ＣＰＵ２のマキシマムモードを選択する場合を例示してある。（ａ）の場合、パーソナルコンピュータなどのシステム開発装置上のディスプレイでプロンプトが表示された状態で、“ＳＥＴ ＣＰＵ＝ ＣＰＵ−ＵＭＡＸ”と入力すればよいようにする。（ｂ）の場合は、プロンプトが表示された状態で、“ＳＥＴ ＣＰＵ”とコマンドを入力し、これに対して、ＣＰＵの種類及び動作モードのメニューを、例えば“ＣＰＵ ＮＡＭＥ （１．ＣＰＵ−ＵＭＡＸ、２．ＣＰＵ−ＵＭＩＮ、３．ＣＰＵ−Ｌ１、４．ＣＰＵＬ２）”と表示するとともに、メニュー番号の入力を要求し、使用者がメニューの番号１〜４のいずれかを入力すればよいようにする。ここで、ＣＰＵ−ＵＭＡＸは前記上位ＣＰＵ２のマキシマムモード、ＣＰＵ−ＵＭＩＮは前記上位ＣＰＵのミニマムモード、ＣＰＵ−Ｌ１は前記第１の下位ＣＰＵ、ＣＰＵＬ２は前記第２の下位ＣＰＵ、を示すものとする。
【０４５４】
このほか、ウィンドウのドロップダウンメニューで選択可能にしてもよいし、ワークステーションなどであれば、Ｃシェルコマンドとして入力することもできる。
【０４５５】
更に、アセンブラ４０１やＣコンパイラ４００などの、ソースプログラムの制御命令として、ＣＰＵの種類及び動作モードを入力するようにしてもよい。
【０４５６】
アセンブラ４０１は、選択されたＣＰＵの種類及び動作モードに従って、入力されたアセンブリ言語ソースプログラム上の記述を解釈し、オブジェクトモジュールを生成したり、エラーがあればそれを表示したりする。下位ＣＰＵを選択し、上位ＣＰＵに存在して、下位ＣＰＵに存在しない命令を記述するとエラーになる。命令コード自体は上位ＣＰＵが包含しているから、このためのアセンブラを開発し、下位ＣＰＵについては、上位ＣＰＵに存在して、下位ＣＰＵに存在しない命令を検出するような追加を行なうなどして、容易に開発できる。
【０４５７】
Ｃコンパイラ４００は、選択されたＣＰＵの種類及び動作モードに従って、使用可能な、オペレーション、データサイズ、アドレッシングモードの組合せで示される命令や、汎用レジスタ、アドレス空間を判別して、Ｃ言語によるプログラムを、ＣＰＵの命令に変換し、アセンブリ言語プログラムやオブジェクトモジュールとして出力する。
【０４５８】
Ｃコンパイラ４００自体には、Ｃ言語によるプログラムを、ＣＰＵの命令に変換する場合に、そのプログラム自体の解析を最適化するステップとその結果を当該ＣＰＵの命令で実現するステップとを有する。また、Ｃ＋＋言語によるプログラムのコンパイルや、モジュール間最適化などといった、ＣＰＵの命令セットとは直接関係のない機能の向上が図られているが、ＣＰＵ毎の個別のコンパイラでは、これらのＣＰＵに依存しない機能向上を全ての個別のコンパイラに適用しなければならない。本発明のように、互いに互換性のないＣＰＵを含めて、共通のＣコンパイラとしておけば、前記、ＣＰＵの命令セットとは直接関係のない機能向上を図ることが容易になり、また、開発効率などを向上することができる。
【０４５９】
前記シミュレータデバッガ４０３は、入力されたロードモジュールのプログラムを解釈して、ＣＰＵの動作をシミュレーションし、その中で、エラーがあればそれを表示したりする。例えば、下位ＣＰＵを選択し、上位ＣＰＵに存在して、下位ＣＰＵに存在しない命令を記述するとエラーになる。命令コード及び命令実行機能自体は上位ＣＰＵが包含しているから、このためのシミュレータデバッガを開発し、下位ＣＰＵについては、上位ＣＰＵに存在して、下位ＣＰＵに存在しない命令を検出するような追加を行なうなどして、容易に開発できる。
【０４６０】
図４４には本発明のＣＰＵ２のアセンブラが出力するリストを例示する。リストには、行番号、ロケーションカウンタ、オブジェクトコード、ソース行番号、ソースステートメントが表示される。
【０４６１】
図４４の（ａ）に示されるプログラムでは、制御命令（．ＣＰＵ）で、ＣＰＵ−ＵＭＡＸ、即ち、前記上位ＣＰＵのマキシマムモードを指定している。なお、ソースプログラム上で「．」で始まる命令は制御命令であり、マイクロコンピュータのプログラムには直接の関係はない。
【０４６２】
ＳＰはＥＲ７を表す。これはスタックポインタとしての機能の表記である。更に、本発明では、前記図５の通り、Ｒ０ＬをＡＬと、ＥＲ１をＥＢＸと表記してもよいとしている。いずれの表記を用いても、エラーとはされず、同一のオブジェクトコードに変換される。
【０４６３】
また、ＳＴＡＣＫなどのラベルは、本プログラムのみでは解決されないので、オブジェクトコード上の相当するフィールドは０とされている。これらは、前記の通り、リンケージエディタで解決される。
【０４６４】
図４４の（ｂ）に示されるプログラムでは、同一のプログラムを、第１の下位ＣＰＵ（ＣＰＵ−Ｌ１）を指定してアセンブルした例を示す。第１の下位ＣＰＵには、ＭＯＶ．Ｌ命令が存在しないため、エラーが表示され、オブジェクトコードは生成されない。図４４のリストに関する更に詳細な内容は本発明と直接の関係ないので説明を省略する。
【０４６５】
図４５には本発明に係るＣＰＵ２を有するマイクロコンピュータのためのエミュレータを示す。
【０４６６】
エミュレーション用プロセッサ４１０は、マイクロコンピュータ部分にエミュレーション用インタフェースを加えて構成される。前記マイクロコンピュータ部分は、例えば図２のマイクロコンピュータ１の構成に相当される。
【０４６７】
コネクタ部４１１がシングルチップマイクロコンピュータの代わりに応用システム（ターゲットシステム又はユーザシステムとも称する）４１２のターゲットマイクロコンピュータ搭載領域４１３に装着される。エミュレーション用プロセッサ４１０は前記コネクタ部４１１とインタフェースケーブル４１４を介し、前記ターゲットシステムインタフェースを用いて前記応用システムと信号の入出力を行う。
【０４６８】
特に制限はされないものの、前記応用システム４１２に、ユーザバス４１５が存在し、ユーザメモリ４１６を接続することも可能とされる。この場合、エミュレーション用プロセッサ４１０が出力し、インタフェースケーブル４１４を介して供給されるユーザストローブ信号に従って、ユーザメモリ４１６はリード／ライトされる。
【０４６９】
一方、エミュレーション用プロセッサ４１０は前記エミュレーションインタフェースを用いてエミュレーションバス４２０に接続される。エミュレーションバス４２０には図示はされない状態信号・制御信号などを含む。前記エミュレーションバス４２０を用いて、エミュレーション用プロセッサ４１０から、応用システム４１２とエミュレーション用プロセッサ４１０の内部状態に応じた情報などが出力され、また、エミュレーション用プロセッサ４１０に対し、エミュレーションのための各種信号が入力される。エミュレーション用プロセッサ４１０の、図示はされないエミュレートモード端子が電源レベルに固定され、エミュレーション用プロセッサ４１０内部ではエミュレートモードが設定される。
【０４７０】
さらに、前記エミュレーションバス４２０には、エミュレーションメモリ４２１、ブレーク制御回路４２２、リアルタイムトレース回路４２３などが接続される。前記エミュレーションメモリ４２１は、特に制限はされないものの、ＲＡＭなどによって構成され、前記のユーザプログラムを格納した領域と、エミュレーションのためのプログラムを格納した領域とを持つ。前記ブレーク制御回路４２２は、エミュレーション用プロセッサ４１０による制御状態やエミュレーションバス４２０の状態を監視して、その状態が予め設定された状態に達した時に、前記エミュレータ専用割込みを入力して、エミュレーション用プロセッサ４１０のＣＰＵ（便宜上ＣＰＵ２と記す）によるユーザプログラムの実行を停止させ、エミュレーション用プログラム実行状態に遷移させる（ブレークする）。前記リアルタイムトレース回路４２３は、前記ＣＰＵ２のリード動作またはライト動作を示す信号、命令リード動作を示す信号（ＣＰＵステータス信号）、エミュレーションバスに与えられるアドレスやデータさらには制御信号を逐次蓄える。
【０４７１】
前記エミュレーションメモリ４２１、ブレーク制御回路４２２、リアルタイムトレース回路４２３はコントロールバス４２４にも接続され、コントロールバス４２４を介してコントロールプロセッサ４２５の制御を受けるようになっている。前記コントロールバス４２４は、前記コントロールプロセッサ４２５に接続されるとともに、ホストインタフェース回路４２６を介して、特に制限はされないものの、前記パーソナルコンピュータなどのシステム開発装置４２７に接続される。
【０４７２】
例えば、システム開発装置４２７から入力されたプログラム（ロードモジュール）をエミュレーションメモリ４２１のユーザプログラム格納領域に転送し、内蔵ＲＯＭ上に配置されるべきかかるプログラムをＣＰＵ２がリードすると、エミュレーションメモリ４２１上のプログラムがリードされ、実行される。また、ブレーク条件や、リアルタイムトレース条件などもシステム開発装置４２７から与えることができる。
【０４７３】
コントロールプロセッサ４２５は、応用システム４１２で本来使用するＣＰＵの種類の選択を行うためのプログラムを、エミュレーションメモリ４２１のエミュレーションプログラム格納領域に格納する。ＣＰＵ２は、かかるプログラムを、所定の条件でブレークした状態で、実行し、エミュレーションインタフェース４４２内の制御レジスタ４４９の設定を行なうことで、エミュレーション上の必要な設定を行なう。この場合は、エミュレーション用プログラムの実行モード、いわゆるブレークモードでのみライト可能にすると都合がよい。開発途上にあるユーザのソフトウェアの誤動作によって、誤った設定を行なってしまうことを抑止できる。また、制御レジスタを用いることによって、応用システム４１２で本来使用するＣＰＵの種類の選択対象が増えたりしても、制御レジスタの構成のみを変更すればよく、エミュレーション用インタフェースを変更する必要がなく、エミュレータのハードウェアを変更しなくてよい。
【０４７４】
エミュレーション用プロセッサ４１０およびエミュレータを複数のＣＰＵをサポート可能にすることによって、実際のマイクロコンピュータのみを開発すればよく、開発効率を向上することができる。
【０４７５】
エミュレータにおいても、前記同様に、ＣＰＵの種類を選択可能にする。選択方法は、パーソナルコンピュータなどのシステム開発装置上で、図４２と同様に、行なえばよい。選択された内容は、コントロールプロセッサ４２５を介して、所定のプログラムとして、エミュレーションメモリ４２１のエミュレーションプログラム格納領域に格納され、ＣＰＵ２は、かかるプログラムを実行し、エミュレーションインタフェース内の制御レジスタの設定を行なうことで、前記選択が実行される。
【０４７６】
このとき、同時に、シングルチップマイクロコンピュータの動作モードなどを同時に指定してもよい。シングルチップマイクロコンピュータの動作モードは、例えば、シングルチップモード、内蔵ＲＯＭ有効拡張モード、内蔵ＲＯＭ無効拡張モードなどがあり、これに、ＣＰＵ２の動作モードを組合せて指定することができる。また、汎用レジスタの表示方法も合わせて選択するようにしてもよい。トレースリスト上などの逆アセンブル時に、ＥＲ０と表示するか、ＥＡＸと表示するかなどを切り替えるようにする。
【０４７７】
応用システム４１２で本来使用するＣＰＵの種類を指定可能にすることにより、同一のエミュレーション用プロセッサ乃至同一のエミュレータを以って、内蔵機能モジュールや内蔵メモリの容量の組合せなどで、多数の種類のシングルチップマイクロコンピュータをエミュレーションできる。エミュレーション用プロセッサ乃至エミュレータの開発後でも、内蔵している機能の組合せで実現できれば、エミュレーション用プロセッサ乃至エミュレータの開発を行なうことなく、応用分野などの動向に合わせた、シングルチップマイクロコンピュータのみを開発していくことができる。開発効率を向上することができる。
【０４７８】
エミュレータに占めるエミュレーション用プロセッサの費用は、少ないから、エミュレーション用プロセッサにはなるべく多くの機能モジュールなどを内蔵しておけばよい。
【０４７９】
図４６には本発明に係るＣＰＵのためのエミュレータによるトレースリストを例示する。
【０４８０】
トレースリストは、行番号（ＢＰ）、アドレスバス（ＡＢ）、データバス（ＤＢ）、アドレスデコード（ＭＡ）、リード／ライト（Ｒ／Ｗ）、ステータス（ＳＴ）、割込み信号（ＮＭＩ、ＩＲＱ）を表示するとともに、実行した命令のアセンブリ言語によるリストを示す。これは、データバスの状態と、図示はされないＣＰＵ命令実行状態信号を解析して、逆アセンブラが表示する。なお、行番号は、トレースリストの最後は０になる。また、アドレスデコード（ＭＡ）のＲＯＭは内蔵ＲＯＭへのアクセス、リード／ライト（Ｒ／Ｗ）のＲはリードサイクル、ステータス（ＳＴ）のＰＲＧは命令を示す。
【０４８１】
更に、（ａ）で示されている、ＬＩＲ、ＬＩＤ信号は、エミュレーション用インタフェースに含まれている、命令解析用の信号のトレース結果である。通常、かかる信号は、トレースリスト上には表示されないが、トレースメモリには格納され、逆アセンブラなどの解析に用いられる。また、使用者には、通常公開されないコマンドなどによって、表示することができる。
【０４８２】
ＬＩＲ信号は当該バスサイクルが、命令リードであることを示す。ＬＩＤ信号は命令実行開始を示す。
【０４８３】
例えば、２００行目は、１００番地から、命令リードを行い、命令コードＨ’７Ａ０７を読み出したことを示す。１９９、１９８行目と合わせて、ＭＯＶ．Ｌ ＃ＦＦＦＦＦＦ０Ｅ：３２，ＥＲ７を実行したことが表示されている。逆アセンブラは、ＬＩＤ信号で命令の第１ワードを判定して、Ｈ’７Ａ０７ＦＦＦＦＦＦ０Ｅを、前記ＭＯＶ．Ｌ ＃ＦＦＦＦＦＦ０Ｅ：３２，ＥＲ７と解釈して表示するものである。
【０４８４】
下位ＣＰＵのエミュレーション時に、逆アセンブラは、上位ＣＰＵは持つが、下位ＣＰＵが持たない命令を実行すると、未定義の命令として、表示する。未定義の命令として表示する場合は、データとして、命令コードを表示する。
【０４８５】
図４６では、上位ＣＰＵの“ＭＯＶ．Ｌ  ＥＲ０，＠ＥＲ１”に相当する命令コードを、８０、７９行目で、２００番地から、命令リードを行い、第２の下位ＣＰＵで未定義の命令（ＤＡＴＡ．Ｌ  Ｈ’０１００６９９０）として表示する例が示されている。
【０４８６】
図４７には本発明を適用したマイクロコンピュータのエミュレーション用プロセッサのブロック図を示す。
【０４８７】
エミュレーション用プロセッサ４１０は、図２のシングルチップマイクロコンピュータ１の部分（マイクロコンピュータコア４４１）と、エミュレーションインタフェース４４２から構成される。なお、図２のタイマや入出力ポートなどは、Ｉ／Ｏとして代表させ、また、内部バスの詳細とバスコントローラを図示している。なお、図２のタイマ６，７や入出力ポート１１〜１９などは、Ｉ／Ｏ４４３、ユーザバッファ（ユーザＢＵＦ）４４４として代表させ、また、図２ではその詳細な図示を省略した内部バスＩＤＢ，ＩＡＢ，ＰＤＢ，ＰＡＢの詳細とバスコントローラ（ＢＳＣ）４４５を図示している。ユーザインタフェース４４６は前記Ｉ／Ｏ４４３、ユーザバッファ４４４、及び図示を省略する入出力バッファなどを含む、ユーザシステム（エミュレーション対象システムであるターゲットシステム）に接続されるインタフェース回路を総称する。
【０４８８】
マイクロコンピュータコア４４１は、図２のマイクロコンピュータ１に対して未定義命令検出回路４４８が追加されている。エミュレーションインタフェース４４０は、制御レジスタ４４９を含む。制御レジスタ４４９は、ブレークモードでのみライト可能とされる。エミュレーションインタフェース４４０から入出力される信号は、アドレスバス、データバス、リード信号、ライト信号、データサイズ信号、命令フェッチ信号などバスの状態を表示するバスステータス信号、命令の実行開始を示す信号、割込み処理の実行開始を示す信号などのＣＰＵ２の実行状態を示すＣＰＵステータス信号、などを含み、エミュレータによる、マイクロコンピュータの動作解析に使用される。
【０４８９】
未定義命令検出回路４４８は、ＣＰＵ２に入力される命令コードを解析し、選択されているＣＰＵ２に存在しない命令が実行を開始したことを検出すると、ＣＰＵ２にブレーク割込みを要求する。ＣＰＵ２に何れの機能が選択されるかは、制御レジスタ４４９から指示される。例えば、第１の下位ＣＰＵが選択されている場合には、レジスタグループフィールドを持つ前置命令コードを実行すると、未定義命令として検出される。具体的には、命令コードを前記ＬＩＲ信号でラッチして、解析し、未定義と解読された場合、前記ＬＩＤ信号が発生した時点で、ブレーク割込みを要求するようにすればよく、容易である。
【０４９０】
エミュレーション用プロセッサ４１０は、前記の通り、上位ＣＰＵ２（ＣＰＵ−Ｕ）を内蔵して、これを用いて、サブセットの機能を持つ、第１の下位ＣＰＵ、第２の下位ＣＰＵの代行をさせる。これによって、下位ＣＰＵにエミュレーション用の機能を持たせる必要がなく、開発効率を向上したり、下位ＣＰＵは、エミュレーション用の論理回路を含む必要がなく、論理的規模を縮小したりできる。上位ＣＰＵ２についても、未定義命令検出回路４４８を独立した機能ブロックとして持つことにより、ＣＰＵ２を変更する必要がなく、開発効率を損なうことはない。
【０４９１】
いずれにせよ、エミュレーション用インタフェースを共通化しておけば、ＣＰＵ乃至そのほかの機能ブロックが変更になった場合にも、エミュレータ側のハードウェアの変更をする必要がなく、エミュレーション用プロセッサ４１０のみを変更して、命令の動作を解析して表示する際の逆アセンブラに、いずれのＣＰＵを対象にするかを指示すればよい。逆アセンブラに対する指示は、使用者がシステム開発装置から指定することもできるし、アセンブラからの入力情報によって、自動的に選択されるようなものであってもよい。これによってエミュレータの開発効率を向上し、逸早くエミュレータの開発環境を提供することができる。
【０４９２】
図４８には第２の下位ＣＰＵの別のプログラミングモデルが示される。このプログラミングモデルにおいても、汎用レジスタの総ビット数は同等としているが、汎用レジスタのみ４本としている。汎用レジスタの機能自体は、前記同様である。前記図５と同様に、Ｒ０、Ｒ１、Ｒ２、Ｒ３をＡＸ、ＢＸ、ＣＸ、ＤＸなどと表記できるようにしている。また、ＰＣは２４ビットで同等である。図示はされないものの、レジスタ直接やイミディエイトも含めて、ロングワードサイズのデータは扱わないようにする。汎用レジスタを１６ビット構成にすることにより、算術論理演算器ＡＬＵなど、ＣＰＵの実効部の構成を、プログラムカウンタＰＣとインクリメンタを除いて、１６ビット構成にでき、論理的規模を更に縮小できる。
【０４９３】
図４９にはＣＰＵのアドレスマップの別の例が示される。第２の下位ＣＰＵのアドレスマップは、マキシマムモードに相当する１６ＭＢのアドレス空間を持つ。データアクセス時は実効アドレスを１６ビットで生成し、０〜Ｈ’７ＦＦＦ及びＨ’ＦＦ８０００〜Ｈ’ＦＦＦＦＦＦを指定する。従って、ＲＡＭと内部Ｉ／Ｏレジスタを合わせて３２ｋＢまで、及びＲＯＭを３２ｋＢまで指定できる。前記の通り、ＲＡＭと内部Ｉ／Ｏレジスタを合わせて３２ｋＢの容量は、内蔵された機能モジュールのみで動作する、シングルチップマイクロコンピュータ乃至はマイクロコンピュータシステムでは十分な容量といえる。
【０４９４】
データアクセス時で指定できるＲＯＭのアドレスが限定されてしまうが、前記の通り、ＲＯＭに割り当てる定数などについては、Ｃコンパイラなどで記述した場合も、モジュール間最適化で、再配置することができる。
【０４９５】
プログラムカウンタＰＣは２４ビット構成であり、命令リード時は、２４ビットでアドレスを生成し、１６ＭＢのアドレス空間を利用できる。分岐命令について、プログラムカウンタ相対と、メモリ間接または絶対アドレス２４ビットを実行可能にするとよい。分岐命令は、レジスタフィールドを持たないから、２ワードの命令長で、絶対アドレス２４ビットを持つことは可能である。１６ＭＢのアドレス空間を連続したものとして、ソフトウェアの負荷なく、利用できる。
【０４９６】
また、例外処理時のベクタは２４ビット（メモリ上は３２ビットとされ、上位８ビットは無視される）、サブルーチン分岐などにおいて待避／復帰されるプログラムカウンタＰＣも２４ビットとされる。
【０４９７】
一方、上位ＣＰＵについても、準マキシマムモードを追加し、マキシマムモードに相当するアドレスマップを持つ第２の下位ＣＰＵと同等の動作を行なうことができるようにしている。
【０４９８】
図５０及び図５１には図４９に示される第２の下位ＣＰＵのアドレスマップにおける実効アドレスの計算方法が例示されている。
【０４９９】
実効アドレスの計算方法は、図７、図８とほぼ同様であるが、データアクセス時には、全て、実効アドレスは１６ビットで計算した上で、上位８ビットを符号拡張して、０〜Ｈ’７ＦＦＦ及びＨ’ＦＦ８０００〜Ｈ’ＦＦＦＦＦＦを指定する。
【０５００】
プログラムカウンタ相対は、分岐命令に使用し、前記同様に２４ビットで計算する。また、図示はされないものの、分岐命令に、メモリ間接または絶対アドレス２４ビットが使用可能な場合は、２４ビットで実効アドレスを計算する。
【０５０１】
上位ＣＰＵの、前記準マキシマムモードにおいては、図４９に第２の下位ＣＰＵのアドレスマップと同様にする。実際には、実効アドレスの計算自体は図７、図８と同様にしておき、ポストインクリメント／プリデクリメントレジスタ間接の汎用レジスタＥへの書込みを抑止するとともに、実効アドレスを利用する際に、上位８ビットを符号拡張すればよい。個別のアドレッシングモードによらず、統一的な制御を可能にして、論理的規模を縮小できる。一方、実効アドレスの計算には、仕様上、汎用レジスタＲのみを使用することになるから、汎用レジスタＥをデータ用に使用でき、実質的に汎用レジスタを増加させたことになる。
【０５０２】
第２の下位ＣＰＵの場合には、上位ＣＰＵに比較して、汎用レジスタ本数が限定されているから、プログラム用のアドレス空間を縮小せず、実質的に汎用レジスタを増加させるメリットが相対的に大きい。
【０５０３】
以上説明した第１の下位ＣＰＵ及び第２の下位ＣＰＵと共に上位ＣＰＵ２を提供することにより、以下の作用効果を得る。
【０５０４】
〔１−１〕異なる命令セットを持つ複数のＣＰＵが、それぞれ論理的規模を縮小しつつ、それぞれ固有の特徴を以って、応用分野乃至使用者の多様な要求に応えることを可能にする。
【０５０５】
〔１−２〕下位ＣＰＵのレジスタ構成、命令セット、並びに下位ＣＰＵの命令実行機能を包含することにより、下位ＣＰＵのために開発されたプログラムは、少なくとも、ソースプログラムのレベルで上位ＣＰＵに利用可能になり、少なくとも、ソースプログラムレベルでの上位互換を実現することができる。
【０５０６】
〔１−３〕有効なアドレスのビット数と、ベクタ及びスタックの単位サイズとを切り替える動作モードを予め用意しておくことにより、オブジェクトプログラムレベルでの上位互換も簡単に実現できるようになる。
【０５０７】
〔１−４〕第１、第２の下位ＣＰＵの双方に対して、ソースプログラムレベルまたはオブジェクトプログラムレベルでの上位互換を実現した、上位ＣＰＵを提供することにより、第１、第２の下位ＣＰＵのそれぞれの上位互換のＣＰＵを開発することに比較して、開発効率を向上できる。更に、機能乃至性能を向上する場合にも、上位ＣＰＵに対する互換性を維持すれば、自ずから、第１、第２の下位ＣＰＵに対しても上位互換を維持できるから、将来拡張性を維持できるし、また開発効率も向上することができる。例えば、上位ＣＰＵについて、内部データバスを３２ビット化するなどして高速化できれば、第１、第２の下位ＣＰＵのソフトウェア資産を有効に利用しつつ、高速化を享受できることになる。
【０５０８】
〔１−５〕内部構成を共通化することによって、第１の下位ＣＰＵの上位互換で、上位ＣＰＵの下位互換となるようなＣＰＵ、或いは、第２の下位ＣＰＵに、更に下位互換のＣＰＵなど、種々の互換性のあるＣＰＵを提供することが容易にできる。
【０５０９】
〔１−６〕第２の下位ＣＰＵの命令セットを上位ＣＰＵのサブセットとし、削除した命令セットに対応する論理回路などを、上位ＣＰＵから削除して、第２の下位ＣＰＵを開発することにより、開発効率を向上することができる。
【０５１０】
〔１−７〕第１の下位ＣＰＵに対して、上位ＣＰＵで追加された命令セットの部分の一部を、第２の下位ＣＰＵで継承することによって、第１、第２の下位ＣＰＵを互いに包含しない命令セットにして、総体的に、多様な要求に応えることができる。
【０５１１】
〔１−８〕ソースプログラムレベルまたはオブジェクトプログラムレベルでの上位互換を実現することによって、ソフトウェア資産を有効に利用することができ、使用者のソフトウェア開発効率を向上することができる。
【０５１２】
〔１−９〕異なる命令セットを持つ複数のＣＰＵを含めて、ソフトウェア開発装置を共通に利用可能にし、ＣＰＵを選択する手段を設けることによって、ソフトウェア開発費用を減少させることができる。また、アセンブラなどは上位ＣＰＵについて開発して、そのほかのＣＰＵについては、未定義の命令を検出すればよいから、ソフトウェア開発装置の開発効率を向上することができる。開発効率を向上することによって、開発に必要な資源を削減し、削減した資源を以って、機能向上の頻度を高めることも可能になる。
【０５１３】
〔１−１０〕ソフトウェア開発装置及び、アセンブリ言語での記述フォーマットを、第１、第２の下位ＣＰＵで共通に利用可能にし、第１、第２の下位ＣＰＵ間でのソフトウェア資産の移植を、比較的容易にすることができる。いずれかの下位ＣＰＵを使用することにより、上位のＣＰＵに移行するほど費用を増加させない。
【０５１４】
〔１−１１〕ソフトウェア開発装置上の、汎用的な機能のみを有する汎用レジスタの記述を複数使用可能にすることにより、他のＣＰＵからのプログラムの移植を、比較的容易に行なうことができる。
【０５１５】
〔１−１２〕複数のＣＰＵに対応させてエミュレーション用プロセッサのエミュレーション用インタフェースを共通化することにより、同じエミュレータのハードウェアを共有できる。エミュレーション用インタフェースを共通化したり、エミュレータのハードウェアを共通化することによって、逸早く開発環境を整えることができ、また、エミュレータの開発に必要な資源を最小限にすることができる。
【０５１６】
〔１−１３〕上位ＣＰＵに対するエミュレーション用論理を持ち、かかる上位ＣＰＵに対するエミュレーション用論理を以って、第１、第２の下位ＣＰＵのエミュレーション用プロセッサを構成することができ、エミュレーション用プロセッサの開発効率を向上することができる。
【０５１７】
以上説明した上位ＣＰＵ２によれば以下の作用効果を得る。
【０５１８】
〔２−１〕レジスタ拡張用前置命令コードで、レジスタグループを指定し、このレジスタ拡張用前置命令コードを省略可能とし、更にはレジスタ拡張用前置命令コードを付加しない場合の命令コードを既存のＣＰＵの命令コードと同一とすることにより、互換性を損なわずに、汎用レジスタを増加させることができる。ソフトウェア資産を有効に利用可能とするとともに、使い勝手を向上し、処理速度を向上することができる。レジスタ拡張用前置命令コードを用いることにより、全ての汎用レジスタは同時に指定可能であるから、汎用レジスタ上のデータの配置などを考慮する必要がなく、プログラムの作成を容易にすることができる。
【０５１９】
〔２−２〕グループ指定フィールドを既存の命令コードの前に配置することにより、汎用レジスタを使用する全ての命令について、汎用レジスタを増加させることができる。この指定方法を共通化することにより、必要な論理的・物理的規模の増加を抑止し、ひいては製造費用の増加も抑止することができる。既存の論理と大部分を共通にできるから、設計資産を有効に利用して、設計品質を向上したり、開発期間を短縮したりできる。また、互換性を保った、アドレス空間の広いＣＰＵと狭いＣＰＵがある場合、双方に、互換性を維持しつつ汎用レスタを追加することも可能である。
【０５２０】
〔２−３〕下位ＣＰＵにおける既存のレジスタグループを指定するものに相当するオペレーションコード（レジスタ拡張用前置命令コード）を、ＮＯＰ（ノーオペレーション）命令と同一にすることにより、オペレーションコードマップを有効に利用するとともに、論理構成を共通化し、論理的規模の増加を抑止することができる。
【０５２１】
〔２−４〕グループ指定フィールドに余裕を持たせることにより、半導体製造プロセスの進展などに対応して、互換性を維持しつつ、汎用レジスタを増加させることができる。使い勝手を更に向上し、処理速度を向上することができる。方式的には同一にできるので、開発効率を向上することができる。また、アセンブラやＣコンパイラ、シミュレータ、逆アセンブラなどのソフトウェアツールなどを、前記拡張を考慮して設計しておく、乃至、予め、前記拡張に対応させておくことにより、開発効率を向上することができる。
【０５２２】
〔２−５〕ＣＰＵＣＲのような制御レジスタを設けて、これによって暗黙的に使用されるスタックポインタなどのグループを指定することにより、スタックポインタを変更可能になり、スタックの再配置などを容易に行ことができる。レジスタ拡張用前置命令コードを付加できない割込例外処理についても、スタックポインタを変更することができる。サブルーチン分岐と割込みなどの例外処理のスタックポインタを分離することができる。サブルーチン用のスタック領域と、割込用のスタック領域とを別に持つことができる。これによって、サブルーチン分岐などで実現される各タスクが、予期し得ない割込み例外処理に対応するためにスタックを確保する必要がなくなり、スタックの使用量を抑止することができる。
【０５２３】
〔２−６〕上位ＣＰＵは、第１の下位ＣＰＵに既存の、転送命令コード、演算命令コードを命令拡張用前置命令コードと共に組合せて1命令として実行し、前記各命令コード単独では既存の動作を行なうから、既存の命令実行を阻害することがない。また、第１の下位ＣＰＵで作成した、既存の命令のみを使用した既存のソフトウェア資産をそのまま利用できる。換言すれば、第１の下位ＣＰＵとの互換性を損なわずに、メモリ上のデータに対する直接的な演算を可能とすることができる。メモリとレジスタ間の演算のみならず、メモリ間の直接的なデータ転送を可能とすることができる。ソフトウェア資産を有効に利用可能とするとともに、不所望な汎用レジスタの待避／復帰動作などを抑止して、使い勝手を向上するとともに、プログラム容量を縮小し、処理速度を向上することができる。プログラム容量を縮小することによって、ひいては、プログラム格納用のＲＯＭなどのメモリ容量を縮小し、費用を節約することができる。
【０５２４】
〔２−７〕第１の下位ＣＰＵに既存の、転送命令の命令コード、演算命令の命令コードを命令拡張用前置命令コードと共に組合せて、動作するから、命令デコーダの、従来の設計資産を有効に利用することができ、論理的な規模の追加と変更を最小限にし、論理的・物理的規模の増大を最小限にできる。また、開発に必要な期間を短縮し、資源を節約することができる。既存のデータアクセスのためのアドレッシングモードを全てサポートできるから、任意のアドレッシングモードの組合せを可能にして、プログラムの作成を容易にすることができる。
【０５２５】
〔２−８〕第１の下位ＣＰＵの命令セットに追加する命令コードをレジスタ拡張用及び命令拡張用前置命令コードに止めることができるから、命令セットの変更を最小限にして上位ＣＰＵ２の命令セットを構成することができる。
【０５２６】
〔２−９〕デスティネーションがメモリである場合に、デスティネーションデータのリード時の実効アドレスをテンポラリレジスタに確保し、演算結果のデスティネーションデータのライト時の実効アドレスの計算を不要にし、直ちにライト動作を実行可能にして、実行時間を短縮することができる。また、デスティネーションデータのライトを行なう命令コードを、ＣＰＵ内部で自動的に生成し、命令長を短縮するとともに、かかる命令コードに、データサイズを指示することによって、必要な命令コードを節約し、かかる命令コードを転送命令の動作と類似にすることによって、設計を容易にし、制御回路の論理規模を縮小することができる。比較命令のように、デスティネーションデータのライト動作を必要としない命令においては、ライトサイクルを空きサイクルとすることによって、他の命令との動作を共通化し、設計を容易にし、制御回路の論理規模を縮小することができる。設計を容易にすることによって、ひいては、開発期間を短縮することができる。
【０５２７】
〔２−１０〕命令拡張用前置命令コードと、メモリをリードする転送命令の命令コードと、メモリに対する転送命令の命令コードを組合せることによって、メモリ・メモリ間の転送を実現できる。
【０５２８】
〔２−１１〕イミディエイトデータの転送命令の命令コードと、メモリに対する転送命令の命令コードを組合せることによって、イミディエイト・メモリ間の転送を実現できる。
【０５２９】
〔２−１２〕命令拡張用前置命令コードに他の情報を含めることによって、命令コード長を短縮し、実行時間を短縮することができる。例えば、既存のＣＰＵにおいて、メモリに対する演算以外の指示を行なう前置命令コードと演算コードとを組合せて実現されている命令が存在する場合、前記メモリに対する演算以外の指示を、前記メモリに対する演算を指示する命令拡張用前置命令コードに含めることによって、命令コード長を短縮し、実行時間を短縮することができる。
【０５３０】
〔２−１３〕既存の命令を組合せ、新規の命令機能を実現しているので、既存のＣＰＵと比較して、将来拡張余裕を同等程度に保持することができる。例えば、既存のＣＰＵに対して、更なる命令セットの拡張や更なる高速化が可能になった場合には、かかる技術を、本発明を適用したＣＰＵにも用いることができる。新規の命令機能を実現している、既存の命令に、前記技術を用い、これを組合せて、前記新規の命令機能を実現することができる。
【０５３１】
以上説明した第２の下位ＣＰＵによれば以下の作用効果を得る。
【０５３２】
〔３−１〕第２の下位ＣＰＵにおいて、アドレス空間とプログラムカウンタを上位ＣＰＵと同等にし、プログラムの大容量化に応えるとともに、比較的小規模なデータを扱える程度に、データ転送のアドレッシングモードを縮小したり、転送データのデータサイズを限定したりして、所望の応用分野などでの使い勝手を損なわずに、ＣＰＵの論理的規模を縮小できる。
【０５３３】
〔３−２〕データアクセス時に使用できるアドレス空間を小さくすることによって、更に論理的な規模を縮小できる。また、データアクセス時に使用できるアドレス空間を２つに分割することによって、使い勝手を損なわずに、上位ＣＰＵとのアドレス空間上の互換性を維持するとともに、上位ＣＰＵに実効アドレス計算方法などを切り替える動作モードを予め用意しておくことにより、ソフトウェア上の互換性を維持することができる。
【０５３４】
〔３−３〕プログラム用のアドレス空間を、上位ＣＰＵと同等に、大きくしていることにより、Ｃ言語などの高級言語を使用したプログラミングなどに対する適性を向上できる。また、スタックポインタを切替え可能にすることによって、ＯＳなどのタスク管理時のスタックの容量の不所望な増加を抑止できる。
【０５３５】
〔３−４〕データアクセス用の実効アドレスの計算を、アドレス空間に対応するビット長より、短いビット長（１６ビット）で行い、符号拡張して実効アドレスを得ることによって、汎用レジスタの上位側（汎用レジスタＥ）をデータレジスタとして使用可能にし、実質的に汎用レジスタ数を増加させることができる。
【０５３６】
前記検討課題Ａ乃至Ｃの解決手段に関する発明の具体例について説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０５３７】
例えば、対象になるＣＰＵは、上位ＣＰＵ、第１、第２の下位ＣＰＵに限定されない。第１の下位ＣＰＵの上位互換で、上位ＣＰＵの下位互換となるようなＣＰＵが存在してもよい。或いは、第２の下位ＣＰＵに、更に下位互換のＣＰＵが存在してもよい。第２の下位ＣＰＵの２つの実施例は、排他的なものではなく、同時に存在してもよい。そのほか、種々の互換性のあるＣＰＵを提供することができる。
【０５３８】
レジスタ構成（プログラミングモデル）、即ち、汎用レジスタのビット数あるいはレジスタの本数などは任意に選択することもできる。アドレッシングモードと実効アドレスの計算方法についても種々変更可能である。 ＣＰＵの具体的な論理回路例などについても限定されない。ＥＡ１コードなどは転送命令コードと全く同じでなくてもよい。少なくともＣＰＵ内部の実行において同等の動作をすればよい。前置コードに従って転送命令コードの一部のビットの意味を変更してＥＡ１コードとしたりすることができる。汎用レジスタは、アドレス及びデータに共通に利用可能なものである必要はなく、一部または全部がアドレス専用またはデータ専用のものであってもよい。
【０５３９】
前置命令コードの種類は特に限定はされない。命令拡張用前置命令コードは、転送命令と演算命令を組合せる情報や、転送命令と転送命令を組み合わせる情報以外の別の制御情報を含んでもよい。例えば、データサイズを指示する情報を含んでもよい。また、命令コードの基本単位１６ビットに限定する必要はなく、８ビット或いは３２ビットなど任意のビット幅とできる。命令コードの組合せについては、命令拡張用前置命令コード、第１のリード型転送命令コード、第２のリード型転送命令コード、演算命令コード、ライト型転送命令コードを組合せて、メモリ上の相異なる２つのアドレスのデータを入力して、演算し、結果を、ライト型転送命令コードで指定する別のメモリのアドレスに格納するようにすることもできる。第１、第２のリード型転送命令コードを省略して、汎用レジスタ上のデータを入力とすることもできる。命令拡張用前置命令コード、第１のリード型転送命令コード、第２のリード型転送命令コードを組み合せて、第１のリード型転送命令コードでリードしたデータを、第２のリード型転送命令コードのアドレス計算に用いるようにすることもできる。
【０５４０】
また、グループ０の汎用レジスタのみを、メモリ上のデータに対する演算命令に使用可能としてもよい。シングルチップマイクロコンピュータのその他の機能ブロックについても何等制約されない。
【０５４１】
《検討課題Ｄの解決手段に関する実施の形態》
次に、前記検討課題Ｄの解決手段に関する発明の具体例を説明する。ここで説明するマイクロコンピュータは、特に制限されないが、図５３に例示されるＣＰＵ２Ａを有する。マイクロコンピュータのモジュール構成は、特に制限されないが図２と同様である。ＣＰＵ２Ａは図３のレジスタ構成を有し、ＣＰＵ２Ａのアドレス空間は図６と同様であり、ＣＰＵ２Ａによる実効アドレスの演算手法は図７及び図８に示される通りである。ＣＰＵ２Ａの機械語の命令フォーマットは図９に準拠する。
【０５４２】
図５４にはＣＰＵ２Ａのビットテスト命令の命令フォーマットが例示される。ビットテスト命令は、汎用レジスタ上またはアドレス空間上のデータの所定のビットを検査して、検査結果をＣＣＲのＺフラグに反映するものである。
【０５４３】
ビットテスト命令において、汎用レジスタ上のデータは、図５４の（５）に例示されるように、レジスタ直接で指定される。この時のビットテスト命令は、オペレーションフィード（ｏｐ）とレジスタフィールド（ｒ）及び、ビット番号を指定するビットフィールド（ｎ）を有する命令コードとなる。
【０５４４】
ビットテスト命令において、汎アドレス空間上のデータの指定は、図５４の（１）、（２）、（３）、（４）に例示されるように、絶対アドレス８ビット、１６ビット、３２ビット、及びレジスタ間接を使用することができる。即ち、絶対アドレスの場合はオペレーションフィールド（ｏｐ）とＥＡ拡張部（ＥＡ）を持つワード、レジスタ間接の場合はオペレーションフィード（ｏｐ）とレジスタフィールド（ｒ）を持つワードを有し、これに、前記レジスタ直接のビットテスト命令に相当するワードが続く、命令フォーマットを有する。
【０５４５】
図５５乃至図５７にはＣＰＵ２Ａのアドレス空間上からデータを読み込んで、前記データの所定のビットの状態に応じた処理を行う複合命令の命令フォーマットとして、アドレス空間上のデータの所定ビットに対する条件分岐命令（ビット条件分岐命令）の命令フォーマットを示す。ここで示す命令フォーマットは命令拡張用前置命令コードを用いる後述の例とは異なる例である。尚、単独の条件分岐命令ではコンディションコードフィールド（ｃｃ）が分岐条件を指定する。複合命令として分岐命令が組み込まれたビット条件分岐命令において分岐条件はビットコンディションフィールド（ｂｃ）で指定されることになる。
【０５４６】
アドレス空間上のデータの指定は、図５５乃至図５７に示されるように、絶対アドレス８ビット、１６ビット、３２ビット、及びレジスタ間接を使用することができる。これは前記ビットテスト命令の場合のデータ指定のための命令コード（ワード）と完全同一ではないが共通のコードを有する。即ち、データ指定のための命令コードは、例えば“ＭＯＶＥ命令”のようなデータ転送命令であり、命令コード中に単数又は複数の余剰ビットが存在し、その余剰ビットに適当な情報を設定しても、命令セット上でその他の命令コードと区別がつくようになっている。このようなデータ指定のための命令コードは、メモリ空間上で参照したデータをプログラム上解放されていないレジスタ例えばテンポラリデータレジスタＴＲＤにロードする。
【０５４７】
前記データ指定のための命令コードの後ろには、前記レジスタ直接のビットテスト命令に相当する命令ワードに代えて、条件分岐命令、サブルーチン分岐命令に相当するワードが続くことである。分岐アドレスの指定は、ディスプレースメント８ビット、１６ビットのプログラムカウンタ相対を使用することができる。これは、既存の条件分岐命令と共通の命令コードであり、コンディションフィールド（ｃｃ）が、ビットコンディションフィールド（ｂｃ）となっている。更に、サブルーチン分岐は、ディスプレースメント１６ビットのプログラムカウンタ相対のみを使用することができるようにしている。
【０５４８】
尚、前記アドレス空間の小さい、若しくは下位のＣＰＵにおいて、ビットテスト命令に絶対アドレス３２ビットがなかった場合には可能な範囲の組合せのみを持つようにすればよい。
【０５４９】
ビットコンディションフィールド（ｂｃ）は、下位３ビットｂｃ［２：０］が前記テンポラリデータレジスタＴＲＤのビット番号を、上位１ビットｂｃ［３］が分岐条件（セット／クリア）を指定する。即ち、ビット条件分岐命令の最初の命令コードによりアドレス空間上で参照されて前記テンポラリデータレジスタＴＲＤにロードされたデータに対するビット番号が下位３ビットｂｃ［２：０］で指定され、指定されたビット番号の値の真値（Ｔｒｕｅ）を前記上位１ビットｂｃ［３］が指定し、参照値が真値であるとき分岐を指示するように作用される。
【０５５０】
図５５乃至図５７の複合命令としてのビット条件分岐命令によれば、アドレスａａのビットｎが１にセットされている場合に分岐する命令は、ＢＢＳ  ＃ｎ，＠ａａ，ｄと記述すればよく、アドレスａａのビットｎが０にクリアされている場合に分岐する命令は、ＢＢＣ  ＃ｎ，＠ａａ，ｄと記述すればよく、アドレスａａのビットｎが１にセットされている場合にサブルーチン分岐する命令は、ＢＳＳＲ  ＃ｎ，＠ａａ，ｄと記述すればよく、アドレスａａのビットｎが０にクリアされている場合にサブルーチン分岐する命令は、ＢＣＳＲ  ＃ｎ，＠ａａ，ｄと記述すればよい。前記の通り、ｎ＝ｂｃ［２：０］である。ディスプレースメントｄは、アセンブリ言語においてはラベルを記述すればよく、相対値の計算はアセンブラが行なう。
【０５５１】
前記ビット条件分岐命令をサポートしないＣＰＵでは、例えばＢＢＳ  ＃ｎ，＠ａａ，ｄは、
ＢＴＳＴ  ＃ｎ，＠ａａ
ＢＮＥ  ｄ
のように、ビットテスト命令（ＢＴＳＴ）とその命令の実行結果に応じて分岐する命令（ＢＮＴ）とを記述する必要があった。また、ＢＳＳＲ  ＃ｎ，＠ａａ，ｄは、例えば、
ＢＴＳＴ  ＃ｎ，＠ａａ
ＢＥＱ  ＮＥＸＴ
ＢＳＲ  ｄ
ＮＥＸＴ：
のように、ビットテスト命令（ＢＴＳＴ）と、その命令の実行結果に応じて分岐する命令（ＢＥＱ）と、ＰＣ相対によるサブルーチン分岐命令（ＢＳＲ）とを記述する必要があった。ビットテスト命令に代えてビット転送命令（ＢＬＤ）とその命令の実行結果に応じて分岐する命令（ＢＣＳまたはＢＣＣ）を用いても同じである。
【０５５２】
図５５乃至図５７に示されるビット条件分岐命令では、アドレス空間所で参照されたデータが汎用レジスタではなくテンポラリデータレジスタＴＲＤにロードされ、その所定ビットの値に応じて分岐の可否を制御する事ができる。したがって、当該命令コードは１ワード、実行ステート数は１ステートの短縮が可能である。また、ビット条件サブルーチン分岐命令では、命令コードは２ワード、実行ステート数は３ステートの短縮が可能である。
【０５５３】
前記の通り、機器制御の場合には、これらの条件分岐命令が組合せて（ツリー状に構成して）、多数の分岐条件の中から分岐先を判定することが多いから、上記短縮効果は全体的には、更に大きくなる。
【０５５４】
図５８にはＣＰＵ２Ａにおけるビット条件分岐命令を考慮したときの別の命令フォーマットにおける命令コードの組み合わせが例示される。ここに示す例は、図５５乃至図５７で説明した命令フォーマットの命令による機能を命令拡張用前置命令コードを用いて実現する例である。即ち、アドレス空間上のデータ指定に用いる命令コードを前記ビットテスト命令の場合のデータ指定のための命令コード（ワード）と同一とし、更にそのワードの前に、プリフィックスコードとして前置命令コードを付加する事により、上記同様に、複合命令をテンポラリデータレジスタＴＲＤ等を用いて単一命令として実行可能にするものである。
【０５５５】
図５８は前記図１２乃至図１４と合わせれば、前記図１１乃至図１４に基づいて説明した命令拡張用前置命令コード及び転送命令と共に複合された前記直接的な演算命令の命令フォーマットにおける命令コードの組合せも含めて表現されることになる。尚、ＣＰＵ２Ａのメモリに対する転送命令の例の命令フォーマットは前記図１１に基づいて説明した命令フォーマットと同じである。
【０５５６】
図５８の命令フォーマットにおいて、ビット条件分岐命令は、命令拡張用前置命令コード、ＥＡ１コード、分岐コードを組合せ手実現される。図ではＥＡ２コードとの組合せも可能であるが、ＥＡ２コードはメモリアドレスをディスティネーションアドレスとするコードを意味するから、実際には意味がない。
【０５５７】
図５８の命令フォーマットにおいて、複合命令としてのビットテスト命令は、命令拡張用前置命令コード、ＥＡ１コード、ビットテスト命令コードを組合せて実現することができる。このときの、ビットテスト命令コードは、汎用レジスタ上の所望のビットに対するビットテスト命令、即ち、図５４の（５）の前記レジスタ直接のアドレッシングモードに相当する命令コードとする。また、所望のビットとキャリとの演算命令を備えているような場合には、ビットテスト命令と同様に実現できる。図ではＥＡ２コードとの組合せも可能であるが、上記同様に実際には意味がない。
【０５５８】
図５８の命令フォーマットにおいてはビットセット命令の機能を拡張できる。単独のビットセット命令は、指定されたデータの指定されたビットにセットする命令である。図５８の命令フォーマットにおいて、複合命令としてのビットセット命令は、命令拡張用前置命令コード、ＥＡ２コード、ビットテスト命令コードを組合せる。このときの、ビットセット命令コードは、前記同様に、汎用レジスタ上の所望のビットに対するビットセット命令に相当する命令コードとする。図ではＥＡ１コードとの組合せも可能であるが、ＥＡ１コードはメモリアドレスをソースアドレスとするコードを意味するから、実際には意味がない。
【０５５９】
ＣＰＵ２Ａにおける前記命令拡張用前置命令コード（制御コード）のフォーマットは前記図１５に基づいて説明したフォーマットと同じである。このフォーマットに従えば、ソース側、デスティネーション側がメモリである情報を示すビットを持っている。ビット条件分岐命令、ビット操作命令の場合は、ソース側がメモリとなるように指定する。ＥＡ１とＥＡ２の転送命令コードは同一としているため、ソース側がメモリであれば、デスティネーション側に拘らず、命令拡張用前置命令コードに続くものが、ＥＡ１と判断される。一方、ソース側が汎用レジスタとされ、デスティネーション側がメモリであれば、ＥＡ２と判断される。図５８の命令フォーマットを有し１個の命令として実行されるとき、命令コード間でのデータの受け渡しにはテンポラリデータレジスタＴＲＤが利用されることについては図５５乃至図５７で説明したのと同様である。
【０５６０】
図５８による命令コードの組み合わせにより、所望のビットの存在するアドレスを指定するために、転送命令と同等のアドレッシングモードを使用することができる。当該命令セットの中で、任意のアドレッシングモードを使用できるから、プログラミングを容易にすることができる。例えば、レジスタ直接、レジスタ間接と絶対アドレスのみしか持たない既存のＣＰＵに対し、ディスプレースメント付きレジスタ間接、プリデクリメント／ポストインクリメントレジスタ間接などを追加することによって、複数のアドレスに存在するビットを操作したり、参照したりする場合に、プログラムステップ数を低減したり、処理速度を向上したりできる。このとき、既存の、転送命令の命令コード、ビット操作命令の命令コードを組合せて、動作するから、命令デコーダの、従来の設計資産を有効に利用することができ、論理的な規模の追加と変更を最小限にし、論理的・物理的規模の増大を最小限にできる。
【０５６１】
ビット条件分岐命令については、図５５乃至図５７のフォーマットのものと図５８のフォーマットのものとを揃えることができる。両方で同等の機能が実現できる命令（データ及び分岐先のアドレッシングモードの組合せ）については、命令コード長及び実行ステート数の短い方を採用すればよい。
【０５６２】
図５３には前記ＣＰＵ２Ａの詳細な一例が示される。図１のＣＰＵ２では特に図示はしなかったが、コンディションコードレジスタＣＣＲにはコンディションフィールド（ｃｃ）の値が入力され、コンディションコードレジスタＣＣＲの所定のビットの値がコンディションフィールド（ｃｃ）の値に一致するか否かを判定する判定回路（ＣＭＰ）３５が設けられ、これによる判定結果を受けて分岐制御信号３６を生成する分岐制御論理（ＢＲＣ）３７が設けられている。
【０５６３】
図５５乃至図５８の命令フォーマットで説明した複合命令としてのビット条件分岐命令において、テンポラリデータレジスタＴＲＤにはビットコンディションフィールド（ｂｃ）の値が入力され、これによって指定されるビット位置の値が分岐条件に一致するか否かを判定する判定回路（ＣＭＰ）３８が設けられ、これによる判定結果は前記分岐制御論理３７に供給される。分岐制御論理３７は、制御信号ＭＯＤＳの論理値にしたがって判定回路３５又は判定回路３８からの入力を有効とする。即ち、複合命令としてのビット条件分岐命令を実行してアドレス空間上からデータを参照するとき、命令デコーダＤＥＣはＭＯＤＳ＝１とし、ＭＯＤＳ＝１のときテンポラリレジスタライト信号ＴＲＤｗｒが有効にされ、汎用レジスタに代えてテンポラリデータレジスタＴＲＤに参照データが書込まれる。命令デコーダＤＥＣは前記複合命令以外のときはＭＯＤＳ＝０とし、ＭＯＤＳ＝０のとき汎用レジスタライト信号Ｒｄｗｒが有効にされ、汎用レジスタに書込まれる演算結果に応じてＣＣＲのフラグが操作される。前記分岐制御論理３７はＭＯＤＳ＝１のときテンポラリデータレジスタＴＲＤの判定回路３８から出力される情報を採用し、其れに応じて分岐制御を行う。ＭＯＤＳ＝０のとき、分岐制御回路３７はコンディションコードレジスタＣＣＲの判定回路３５から出力される情報を採用して分岐制御を行う。
【０５６４】
割り込み制御部ＩＮＴＣは、図５５乃至図５８に示されるように、複数の命令コード（オペレーションフィールドを持つワード）を一連のものとして実行する場合には、それぞれの命令コードが割込みマスクを指示して、所定の組合せの命令コードの実行が途切れないようにする。
【０５６５】
算術演算器ＡＵは、プログラムカウンタ相対の分岐命令／サブルーチン分岐命令の分岐アドレスの生成に使用する。具体的には、直前の命令リードに使用したプログラムカウンタＰＣの出力を入力すると共に、リードデータバッファＲＤＢが保持するディスプレースメントを入力して、それらの加算を行なう。８ビットディスプレースメントのプログラムカウンタ相対の分岐命令／サブルーチン分岐命令の実行開始時には、分岐アドレスが得られているようにする。
【０５６６】
インクリメンタＩＮＣは、プログラムカウンタＰＣのインクリメントに用いられる。前述の如く、ビット条件分岐命令では、テンポラリデータレジスタＴＲＤと判定回路３８を用いる。
【０５６７】
尚、その他、図１と同一の機能を有する回路ブロックには同じ符号を付してその詳細な説明は省略する。
【０５６８】
図５９には前記テンポラリデータレジスタＴＲＤの判定回路３８の論理構成及び分岐制御論理３７を論理記述によって例示する。
【０５６９】
図５９の（５−１）の部分において、ビットコンディションフィールド（ｂｃ）は、命令コードに応じて、命令コードのビット１１〜８、ビット７〜４の何れかである。これを、制御信号ｂｃｃ１で選択した結果を、内部信号ｂｃ１とする。この内部信号ｂｃ１の、最上位ビットｂｃ１［３］はビットの状態（セット／クリア）を、下位ビットｂｃ１［２：０］はビット番号を指定する。
【０５７０】
図５９の（５−２）の部分では、ｂｃ１［２：０］によるセレクタによって、ＴＲＤの所望のビットが選択される（ｔｒｄｓｅｌ）。
【０５７１】
図５９の（５−３）の部分では、ｂｃ［３］＝０のときは、選択されたビットの反転が、ｂｃ［３］＝１のときは、選択されたビットがそのまま、出力される（ｂｏｕｔ）。これがビット条件の判定結果である。
【０５７２】
図５９の（５−４）の部分では、ＭＯＤＳ信号によって、既存の条件分岐命令のコンディションコードＣＣＲの判定結果（ｃｏｕｔ）と前記出力（ｂｏｕｔ）とが選択されて、分岐／非分岐の結果を得る（ｂｃｏｕｔ）。この結果が、１のとき分岐成立、０のとき分岐不成立である。なお、特に制限はされないものの、分岐条件判定信号（ｂｃｃ１とｂｃｃ２の論理和）が活性状態でないときには、１とするようにしている。
【０５７３】
図６０乃至図６２にはビットテスト命令及びビット条件分岐命令の一部（第１のワード）に対する命令デコーダＤＥＣの論理構成が論理記述によって示される。デコーダＤＥＣの論理記述において、小文字の信号は、命令デコーダＤＥＣで生成されて出力される信号とし、大文字の信号は命令デコーダＤＥＣに入力された信号とする。同図の論理記述は、８ビット絶対アドレスによるデータリードを行ない、リードしたデータをテンポラリデータレジスタＴＲＤに格納する場合を例示する。
【０５７４】
図６０の（６−１）の部分でステートコードＴＭＧが生成される。ステートコードＴＭＧは１→２と進行する。なお、ＮＥＸＴＴＭＧ［５］＝０のとき、次のＴＭＧはＮＥＸＴＴＭＧ［４：０］とされる。ＮＥＸＴＴＭＧ［５］＝１のとき、次のＴＭＧは５’ｂ００００１とされる。
【０５７５】
図６０の第２の部分（６−２）ではバス制御を行なう。ｎｏｐ＝０はバスアクセス開始、ｎｏｐ＝１はバスアクセス禁止を指示する。ｄａｔａ＝０は命令リード、ｄａｔａ＝１はデータアクセスを指示する。ｌｏｎｇ＝１はロングワードサイズ、ｌｏｎｇ＝０のとき、ｂｙｔｅ＝０はワードサイズ、ｂｙｔｅ＝１はバイトサイズを指示する。ｗｒｉｔｅ＝０はリード、ｗｒｉｔｅ ＝１はライトを指示する。命令リードの場合は所定のタイミングでバスＩＤＢの内容がＩＲ１とリードデータバッファＲＤＢに格納される。データリードの場合は所定のタイミングでバスＩＤＢの内容がリードデータバッファＲＤＢに格納される。データライトの場合は所定のタイミングでライトデータバッファＷＤＢの内容がバスＩＤＢに出力される。本命令の場合、ステートコード１でデータアクセスを行い、データアクセスのリード且つバイトアクセスと指示される。ステートコード２で命令リードを行なう。
【０５７６】
図６１の（６−３）の部分で実効アドレスを計算する。本転送命令の場合、ステートコード１で、ｄｂｒａｇｂ＝１として、ＤＢＲＡに保持している命令コードのＥＡ拡張部８ビットを、３２ビットに１拡張（上位２４ビットをすべて１とする）した上、内部バスＧＢに出力する。ＧＢの内容はアドレスバッファＡＢに毎ステート格納されるようにされており、特に制御は必要ない。
【０５７７】
図６１の（６−４）の部分で、転送データを制御する。ステートコード２で、ｄｂｒｄｂ＝１とし、リードデータをＤＢＲからＤＢへ出力すると共に、算術論理演算器ＡＬＵを経由して、ｗｂｔｒｄ＝１とし、テンポラリデータレジスタＴＲＤへ格納する。
【０５７８】
図６２の（６−５）の部分で、割込みマスク信号を制御する。また、制御信号ＭＯＤＳを発生する。
【０５７９】
図６３乃至図６５には条件分岐命令の一部に対する命令デコーダＤＥＣの論理構成が論理記述によって示される。本論理記述は、８ビットディスプレースメントの条件分岐命令（Ｂｃｃ ｄ：８）に相当する。
【０５８０】
図６３の（７−１）の部分ではステートコードＴＭＧが生成される。ステートコードＴＭＧは１→２と進行する。図６３の（７−２）の部分でバス制御を行なう。本命令の場合、ステートコード１、２で命令リードを行い、ステートコード１では、算術演算器ＡＵで計算した分岐アドレスに基づいて分岐アドレスの命令リードを行なう。後述するように、リード完了以前に、分岐するかしないかの判定を行なって、分岐しない場合は、リードした命令は取り込まない。ステートコード２では、前記判定結果に従って、分岐アドレスの次のアドレスまたは、当該分岐命令の次の次のアドレスの命令リードを行なう。
【０５８１】
図６４の（７−３）の部分で実効アドレスを計算する。ステートコード１で、ａｕｇｂ＝１とし、算術演算器ＡＵの結果（分岐アドレスの実効アドレス）を、内部バスＧＢに出力する。また、ｂｃｃ１＝１とし、分岐判定を指示する。実際の判定は、ＭＯＤＳ＝０のときコンディションコードレジスタＣＣＲの、ＭＯＤＳ＝１のときテンポラリデータレジスタＴＲＤの内容に従って行われる。なお、ｂｃｃ１とｂｃｃ２は、コンディションフィールド（ｃｃ／ｂｃ）として使用される命令コードのビット位置が相違される。ｂｃｃ１の場合はビット１１〜８が、ｂｃｃ２の場合はビット７〜４が使用される。
【０５８２】
図６４の（７−４）の部分で、転送データを制御するが、本命令では動作を行なわない。図６４の（７−５）の部分で、制御信号はいずれも初期化する。割込みも許可し、割込みが要求すれば、引き続き割込み例外処理を行なうことができる。
【０５８３】
図６６乃至図６８にはサブルーチン分岐命令の一部に対する命令デコーダＤＥＣの論理構成が論理記述によって示される。本論理記述は、１６ビットディスプレースメントのサブルーチン命令（ＢＳＲ ｄ：１６）に相当する。ＭＡＸ信号は、マキシマムモードを示す。実際には、スタックポインタ（ＥＲ７）のデクリメントや、ＧＢへの出力の制御を行なうが、本発明に直接の関係はないので、図示は省略する。
【０５８４】
条件成立／不成立に従って、動作が異なる。また、マキシマム／ミニマムモードで、スタックするプログラムカウンタＰＣのビット長が異なる。
【０５８５】
図６６の（８−１）の論理記述部分でステートコードＴＭＧが生成される。ミニマムモードの条件成立時、ステートコードＴＭＧは１→１４→２→３と進行する。マキシマムモードの条件成立時、ステートコードＴＭＧは１→１４→２→１１→３と進行する。不成立の場合は、ステートコードＴＭＧは１→１４→３と進行する。
【０５８６】
図６６の（８−２）の論理記述部分でバス制御を行なう。本命令の場合、ステートコード１４、３で命令リードを行い、ステートコード２、１１は、スタックへのライトを行なう。ステートコード１ではバスアクセスを行なわない。ステートコード１４での命令リードは、分岐条件判定結果に基づいて行なう。
【０５８７】
図６７の（８−３）の論理記述部分で実効アドレスを計算する。ｂｃｃ２＝１とし、分岐判定を指示する。実際の判定は、ＭＯＤＳ＝１のときテンポラリデータレジスタＴＲＤの内容に従って行われる。また、ステートコード１では、リードデータバッファＲＤＢに保持している命令コードのＥＡ拡張部１６ビットを、ｄｂｒｅｘｔ信号によって３２ビットに符号拡張し、内部バスＤＢへ出力する。図示はされないものの、プログラムカウンタＰＣの内容を内部バスＧＢへ出力して、算術論理演算器ＡＬＵで加算を行なう。ステートコード２では、判定結果（ＢＣＯＵＴ）に従って、ＢＣＯＵＴ＝１ならばＡＬＵから内部バスＧＢへの出力を行なう。また、図示はされないものの、ＢＣＯＵＴ＝０ならＰＣから内部バスＧＢへの出力を行なう。
【０５８８】
図６７の（８−４）の論理記述部分で、転送データを制御するが、本命令では動作を行なわない。図６８の（８−５）の論理記述部分で、制御信号はいずれも初期化する。割込みも許可し、割込みが要求すれば、引き続き割込み例外処理を行なうことができる。
【０５８９】
図６０乃至図６８で説明した論理記述を組合せることによって命令デコーダＤＥＣは前記ビット条件分岐命令を制御することができる。
【０５９０】
命令デコーダＤＥＣにおける転送命令の一部の論理記述は図２３乃至図２５の例と同じである。また、命令デコーダＤＥＣにおける演算命令の一部の論理記述は図２６及び図２７と同じである。
【０５９１】
図６９及び図７０には他の演算命令に対する命令デコーダＤＥＣの論理構成の論理記述が例示される。本論理記述は、ビットテスト命令（ＢＴＳＴ ＃ｎ，Ｒｎ）に相当する。前記同様に、独立したビットテスト命令として実行するか、メモリ上のデータに対する処理命令の一部として実行するかは、ＭＯＤＳ信号によって指示される。特に図示していない部分（算術論理演算器ＡＬＵの制御など）については、独立したビットテスト命令と同様にできる。
【０５９２】
図６９における（９−１）の論理記述部分でステートコードＴＭＧが生成される。ステートコードＴＭＧは１で終了する。同図における（９−２）の論理記述部分ではバス制御を行なう。ステートコード１で命令リードを終了する。
【０５９３】
図７０における（９−３）の論理記述部分では演算データを制御する。ＭＯＤＳ＝０の場合には、データを汎用レジスタとし、汎用レジスタの内容をＤＢに読み出す（ｒｓｄｂ）。ＭＯＤＳ＝１の場合には、データをメモリとし、テンポラリレジスタＴＲＤの内容をＤＢに読み出す（ｔｒｄｄｂ）。同図における（９−４）の論理記述部分で制御信号が何れも初期化される。割込みも許可し、割込みが要求すれば、引き続き割込み例外処理を行なうことができる。
【０５９４】
図７１及び図７２には更に他の演算命令に対する命令デコーダＤＥＣの論理構成を論理記述で例示する。本論理記述は、ビットセット命令（ＢＳＥＴ ＃ｎ，Ｒｎ）に相当する。前記同様に、独立したビットセット命令として実行するか、メモリ上のデータに対する処理命令の一部として実行するかは、ＭＯＤＤ信号によって指示される。特に図示していない部分（算術論理演算器ＡＬＵの制御など）については、独立したビットセット命令と同様にできる。
【０５９５】
図７１における（１０−１）の論理記述部分でステートコードＴＭＧが生成される。ステートコードＴＭＧは１で終了する。同図における（１０−２）の論理記述部分でバス制御を行なう。 ステートコード１で命令リードを終了する。
【０５９６】
図７２における（１０−３）の論理記述部分で、演算データを制御する。ＭＯＤＤ＝０の場合には、データを汎用レジスタとし、汎用レジスタの内容をＧＢに読み出す（ｒｄｇｂ）とともに、演算結果を汎用レジスタに書込む（ｗｂｒｄ）。ＭＯＤＤ＝１の場合には、データをメモリとし、リードデータバッファの内容をバスＤＢに読み出す（ＤＢＲｄｂ）とともに、演算結果をテンポラリデータレジスタＴＲＤに書込む（ｗｂｔｒｄ）。
【０５９７】
図７２における（１０−４）の論理記述部分では、割込みマスク信号を制御する。また、デスティネーション側がメモリの場合には、制御信号ＭＫＭＯＶを発生して、ライト型転送命令と同等の動作を行なう命令コードの発生を、命令変更部ＣＨＧに指示する。また、ロングワードサイズ信号ＬＮＧ、バイトサイズ信号ＢＹＴＥを継続する。
【０５９８】
次に上記ビット条件分岐命令などの複合命令の実行タイミングの例を説明する。特に制限はされないものの、内部データバスは１６ビットであって、内蔵ＲＯＭ、ＲＡＭリード／ライトを１ステートでリード／ライト可能とする。内蔵ＲＯＭ、ＲＡＭは、バスＩＡＢをアドレスバスとし、バスＩＤＢをデータバスとする。後述のＰＡＢ、ＰＤＢは接続されていないが、同様のタイミングを内部で生成していると理解されたい。
【０５９９】
図７３にはビット条件分岐命令の第１の例（ＢＢＳ ＃０，＠ＦＦＦＦＦＥ，＄＋２０）の実行タイミングが例示される。サイクルＴ０のスロットＣ２で、ＣＰＵ２Ａのアドレスバッファ（ＡＢ）からアドレスがバスＩＡＢに出力される。
【０６００】
サイクルＴ１のスロットＣ１で、バスＩＡＢの内容がバスＰＡＢに出力され、リードサイクルが開始される。スロットＣ２でリードデータが内部データバスに得られ、これをサイクルＴ２のスロットＣ１でレジスタＩＲ１にラッチされる。これは、ビットテスト命令の第１のワードと共通のワードであり（ｂｌｄ）、指定したアドレスのデータをテンポラリレジスタへ格納する。
【０６０１】
引き続き、サイクルＴ２のスロットＣ２で次のアドレス（＋２された内容）がバスＩＡＢに出力され、このリードデータがサイクルＴ３のスロットＣ１でレジスタＩＲ１にラッチされる（条件分岐命令の命令コード（ｂｃｃ））。以上の動作は以前の命令の実行の制御によって行われ、相対的な関係が異なる場合もある。
【０６０２】
直前の命令の実行が終了すると、最も早く命令の実行が開始される場合には、サイクルＴ２のスロットＣ１で命令コード（ｂｌｄ）が命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、図６０乃至図６２に基づいて説明した通り、制御信号を出力して、各部の制御を行う。即ち、８ビット絶対アドレスのアドレッシングモードであるので、この絶対アドレスに基づき、ソースデータのリードを行い、リード結果をテンポラリレジスタＴＲＤに格納する。また、制御信号ＭＯＤＳ＝１とする。
【０６０３】
サイクルＴ２のスロットＣ２で、リードデータバッファＲＤＢの内容（絶対アドレス）を内部バスＧＢに読み出して、アドレスバッファＡＢに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。
【０６０４】
サイクルＴ３から、データがリードされる。また、サイクルＴ３のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。算術演算器ＡＵは、このバスＧＢの内容を入力して、サイクルＴ４のスロットＣ１から分岐アドレスの計算を行なう。
【０６０５】
サイクルＴ４のスロットＣ１で前記リードデータが、リードデータバッファＲＤＢに格納される。更に、リードデータバッファＲＤＢから内部バスＤＢに出力され、算術論理演算器ＡＬＵに入力する。算術論理演算器ＡＬＵの動作は無操作とする。
【０６０６】
サイクルＴ４のスロットＣ２で、リードデータが、算術論理演算器ＡＬＵから内部バスＷＢに出力され、テンポラリデータレジスタＴＲＤに格納される。
【０６０７】
サイクルＴ４のスロットＣ１で、命令コード（条件分岐命令（ｂｃｃ））が命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、図６３乃至図６５に基づいて説明した通り、制御信号を出力して、各部の制御を行う。ＭＯＤＳ信号が１にセットされているので、コンディションコードレジスタＣＣＲではなく、テンポラリデータレジスタＴＲＤの所定のビットのテストを行なう。
【０６０８】
サイクルＴ４のスロットＣ２で、前記の通り、算術演算器ＡＵで計算した分岐アドレスの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。
【０６０９】
サイクルＴ５のスロットＣ１で、インクリメンタＩＮＣでインクリメント（＋２）された結果が、内部バスＷＢを経由してテンポラリレジスタＴＲＡにライトされる。分岐条件のテストが指示される。
【０６１０】
サイクルＴ５のスロットＣ２で、分岐条件が成立している場合にはテンポラリアドレスレジスタＴＲＡの内容を、不成立の場合にはプログラムカウンタＰＣの内容を、内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。これによって、次の次の命令コードのアドレスを切り替える。
【０６１１】
一方、サイクルＴ６のスロットＣ１で、分岐条件が成立している場合には、バスＩＤＢの内容をレジスタＩＲ１にラッチする（分岐先の命令コード）。不成立の場合には、レジスタＩＲ１の内容が保持され、ビット条件分岐命令の次の命令コードが保存される。これによって、次の命令コードを切り替える。
【０６１２】
なお、第１ワードと第２ワード以降が分割されないための連続命令信号（ｍｓｋｉｎｔ）を出力する。本信号によって、割込み要求などが発生していても、命令の実行を継続することができる。
【０６１３】
図７４にはビット条件サブルーチン分岐命令の例（ＢＢＳＲ ＃５，＠ＦＦＦＥ００，＄＋３００）の実行タイミングが示される。
【０６１４】
サイクルＴ２のスロットＣ１で命令コード（ｂｌｄ−１）が命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、制御信号を出力して、各部の制御を行う。即ち、１６ビット絶対アドレスのアドレッシングモードであるので、引き続き、ＥＡ拡張部である絶対アドレスをリードした後、この絶対アドレスに基づき、ソースデータのリードを行い、リード結果をテンポラリデータレジスタＴＲＤに格納する。また、制御信号ＭＯＤＳ＝１とする。
【０６１５】
サイクルＴ１のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。サイクルＴ２から、リードサイクルが開始され、このリードデータがサイクルＴ３のスロットＣ１でリードデータバッファＲＤＢにラッチされる（ＥＡ拡張部である絶対アドレス（ｂｌｄ−２））。
【０６１６】
サイクルＴ２のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。サイクルＴ３から、リードサイクルが開始され、このリードデータがサイクルＴ４のスロットＣ１でリードデータバッファＲＤＢにラッチされる（サブルーチン分岐命令（ｂｓｒ−１））。
【０６１７】
サイクルＴ３のスロットＣ２で、リードデータバッファＲＤＢの内容（絶対アドレス）を内部バスＧＢに読み出して、アドレスバッファＡＢに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。サイクルＴ４から、データがリードされ、サイクルＴ６のスロットＣ１で前記リードデータが、リードデータバッファＲＤＢに格納される。更に、リードデータバッファＲＤＢから内部バスＤＢに出力され、算術論理演算器ＡＬＵに入力する。算術論理演算器ＡＬＵの動作は無操作とする。
【０６１８】
サイクルＴ６のスロットＣ２で、リードデータが、算術論理演算器ＡＬＵから内部バスＷＢに出力され、テンポラリデータレジスタＴＲＤに格納される。
【０６１９】
サイクルＴ５のスロットＣ１で、命令コード（サブルーチン分岐命令（ｂｓｒ−１））が命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、図６６乃至図６８に８基づいて説明した通り、制御信号を出力して、各部の制御を行う。ＭＯＤＳ信号が１にセットされているので、テンポラリレジスタＴＲＤの所定のビットのテストを行なう。
【０６２０】
サイクルＴ５で分岐条件のテストが指示される。サイクルＴ６のステートＣ１でプログラムカウンタＰＣの内容を内部バスＧＢに、リードデータバッファＲＤＢの内容（ディスプレースメント）を内部バスＤＢに、それぞれ読み出して、算術論理演算器ＡＬＵで加算を行なう。サイクルＴ６のスロットＣ２で、分岐条件が成立している場合には算術論理演算器ＡＬＵの内容を、不成立の場合にはプログラムカウンタＰＣの内容を、内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。これによって、次の命令コードのアドレスを切り替える。サイクルＴ７のスロットＣ１で、インクリメンタＩＮＣでインクリメント（＋２）された結果が、内部バスＷＢを経由してプログラムカウンタＰＣにライトされる。
【０６２１】
サイクルＴ７のスロットＣ１でスタックポインタＳＰ（ＥＲ７）の内容を内部バスＧＢに読み出して、算術論理演算器ＡＬＵでデクリメント（マキシマムモードのときは４、ミニマムモードのときは２を減算）を行なう。サイクルＴ７のスロットＣ２で、算術論理演算器ＡＬＵの内容を内部バスＧＢに読み出して、アドレスバッファＡＢに入力し、アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。ワードサイズライトのバスコマンドを発生する。サイクルＴ８のスロットＣ２で、プログラムカウンタＰＣの内容が内部バスＤＢ、ライトデータバッファＷＤＢを経由して、内部バスＩＤＢに出力される。マキシマムモードの場合は、更に、もう１回のワードサイズライトが行われる。条件不成立の場合には、このスタック動作は行なわない。
【０６２２】
サイクルＴ８のスロットＣ２で、条件不成立の場合は、サイクルＴ８のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。次のステートから、リードサイクルが開始される。
【０６２３】
図７５にはビットテスト命令の第１の例（ＢＴＳＴ ＃０，＠ＦＦＦＦＦＥ）の実行タイミングが示される。これは既存の単独の命令の場合である。
【０６２４】
サイクルＴ２のスロットＣ１で命令コード（ｂｌｄ）が命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、図６０乃至図６２に基づいて説明した通り、制御信号を出力して、各部の制御を行う。即ち、８ビット絶対アドレスのアドレッシングモードであるので、この絶対アドレスに基づき、ソースデータのリードを行い、リード結果をテンポラリデータレジスタＴＲＤに格納する。また、制御信号ＭＯＤＳ＝１とする。
【０６２５】
サイクルＴ２のスロットＣ２で、リードデータバッファＲＤＢの内容（絶対アドレス）を内部バスＧＢに読み出して、アドレスバッファＡＢに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。
【０６２６】
サイクルＴ３から、データがリードされる。また、サイクルＴ３のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。算術演算器ＡＵは、このバスＧＢの内容を入力して、サイクルＴ４のスロットＣ１から分岐アドレスの計算を行なう。
【０６２７】
サイクルＴ４のスロットＣ１で前記リードデータが、リードデータバッファＤＢＲに格納される。更に、リードデータバッファＤＢＲから内部バスＤＢに出力され、算術論理演算器ＡＬＵに入力する。算術論理演算器ＡＬＵの動作は無操作とする。
【０６２８】
サイクルＴ４のスロットＣ２で、リードデータが、算術論理演算器ＡＬＵから内部バスＷＢに出力され、テンポラリデータレジスタＴＲＤに格納される。
【０６２９】
サイクルＴ４のスロットＣ１で、命令コード（ビットテスト命令（ｂｔｓｔ））が命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、制御信号を出力して、各部の制御を行う。ＭＯＤＳ信号が１にセットされているので、データを汎用レジスタではなく、テンポラリデータレジスタＴＲＤから読み出す。
【０６３０】
サイクルＴ４のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスＩＡＢが出力される。サイクルＴ５のスロットＣ１で、インクリメンタＩＮＣでインクリメント（＋２）された結果が、内部バスＷＢを経由してプログラムカウンタＰＣにライトされる。
【０６３１】
サイクルＴ５のスロットＣ１で、データが、ＭＯＤＳ信号に従って、テンポラリレジスタＴＲＤから内部バスＧＢに出力され、算術論理演算器ＡＬＵに入力される。指定されたビットの選択を行なう。
【０６３２】
サイクルＴ７のスロットＣ２で、ビットテスト結果が、コンディションコードレジスタＣＣＲのＺフラグに格納される。選択されたビットが０のときＺ＝１、１のときＺ＝０とされる。
【０６３３】
図７６にはビットテスト命令の第２の例（ＢＴＳＴ ＃１，＠ＥＲ０＋）の実行タイミングが示される。これは、アドレッシングモードを拡張した例である。前置命令コード、ＭＯＶ．Ｂ ＠ＥＲ０＋，Ｒ０に相当する命令コード、ＢＴＳＴ ＃１，Ｒ０Ｈに相当する命令コードを組合せて実行される。前置命令コードは、図１５に従い、Ｈ’０１０８とされ、ＭＯＤＳ信号によって、ソース側がメモリであることを指示する。
【０６３４】
転送命令コードは、既存の転送命令と同様に、メモリのリードを行なうが、前置命令コードによるソース側をメモリとする指示に基づき、リードデータをテンポラリデータレジスタＴＲＤに格納する。ソース側をメモリとする指示を継続する。演算命令コードは、ソース側をメモリとする指示に従い、ソース側データを汎用レジスタではなく、テンポラリデータレジスタＴＲＤから読み出す。そのほかの動作は、既存の演算命令と同様になる。
【０６３５】
サイクルＴ２のスロットＣ１で命令コード（前置命令コードｐｆ）が命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、制御信号を出力して、各部の制御を行う。かかる前置命令コードの場合には、ソース側データがメモリ上に存在することを指示する。即ち、制御信号ｃｏｎｔｒｏｌＣとしてＭＯＤＳ信号を１にセットし、命令デコーダＤＥＣにフィードバックする。
【０６３６】
サイクルＴ２のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。次の命令のリードを行なう。
【０６３７】
サイクルＴ３のスロットＣ１で命令コード（ＭＯＶ命令（ｍｏｖ））が命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、制御信号を出力して、各部の制御を行う。ポストインクリメントレジスタ間接のアドレッシングモードであるので、アドレスレジスタＥＲ０に基づき、ソースデータのリードを行い、リード結果をテンポラリデータレジスタＴＲＤに格納する。
【０６３８】
サイクルＴ３のスロットＣ１で、インクリメンタＩＮＣでインクリメント（＋２）された結果が、内部バスＷＢを経由してプログラムカウンタＰＣにライトされる。サイクルＴ３のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。
【０６３９】
サイクルＴ３から、リードサイクルが開始され、このリードデータがサイクルＴ４のスロットＣ１でリードデータバッファＲＤＢにラッチされる（ビットテスト命令（ｂｔｓｔ））。また、インクリメンタＩＮＣでインクリメント（＋２）された結果が、内部バスＷＢを経由してプログラムカウンタＰＣにライトされる。
【０６４０】
サイクルＴ４のスロットＣ２で、アドレスレジスタＥＲ０の内容（ＥＡ）を内部バスＧＢに読み出して、アドレスバッファＡＢに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。サイクルＴ５のスロットＣ１で、再度、アドレスレジスタＥＲ０の内容（ＥＡ）を内部バスＧＢに読み出して、算術論理演算器ＡＬＵに入力し、インクリメント処理を行なう。この結果は、サイクルＴ５のスロットＣ２でアドレスレジスタＥＲ０に格納される。
【０６４１】
サイクルＴ５から、データがリードされる。サイクルＴ６のスロットＣ１で前記リードデータが、リードデータバッファＲＤＢに格納される。更に、リードデータバッファＲＤＢから内部バスＤＢに出力され、算術論理演算器ＡＬＵに入力する。算術論理演算器ＡＬＵの動作は無操作とする。サイクルＴ６のスロットＣ２で、リードデータが、算術論理演算器ＡＬＵから内部バスＷＢに出力され、ＭＯＤＳ信号が１にセットされているので、汎用レジスタではなく、テンポラリデータレジスタＴＲＤに格納される。
【０６４２】
また、サイクルＴ５のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。次の命令のリードを行なう。
【０６４３】
サイクルＴ６のスロットＣ１で、命令コード（ＢＴＳＴ命令（ｂｔｓｔ））が命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、制御信号を出力して、各部の制御を行う。ＭＯＤＳ信号が１にセットされているので、データを汎用レジスタではなく、テンポラリデータレジスタＴＲＤから読み出す。
【０６４４】
サイクルＴ６のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。サイクルＴ７のスロットＣ１で、インクリメンタＩＮＣでインクリメント（＋２）された結果が、内部バスＷＢを経由してプログラムカウンタＰＣにライトされる。
【０６４５】
また、サイクルＴ７のスロットＣ１で、データが、ＭＯＤＳ信号に従って、テンポラリデータレジスタＴＲＤから内部バスＧＢに出力され、算術論理演算器ＡＬＵに入力される。指定されたビットの選択が行なわれる。
【０６４６】
サイクルＴ７のスロットＣ２で、ビットテスト結果が、コンディションコードレジスタＣＣＲのＺフラグに格納される。選択されたビットが０のときＺ＝１、１のときＺ＝０とされる。
【０６４７】
図７７にはビットセット命令の例（ＢＳＥＴ ＃２，＠ＥＲ０＋）の実行タイミングが示される。これは、アドレッシングモードを拡張した例である。前置命令コード、ＭＯＶ．Ｂ ＠ＥＲ０＋，Ｒ０に相当する命令コード、ＢＳＥＴ＃２，Ｒ０Ｈに相当する命令コードを組合せて実行される。前置命令コードは、図１５に従い、Ｈ’０１０４とされ、ＭＯＤＤ信号によって、デスティネーション側がメモリであることを指示する。
【０６４８】
転送命令コードは、既存の転送命令と同様に、サイクルＴ４のスロットＣ２から、メモリのリードを行ない、前置命令コードによるデスティネーション側をメモリとする指示（ＭＯＤＤ）に基づき、生成した実効アドレス（メモリアドレス）をテンポラリアドレスレジスタＴＲＡに格納する。また、サイクルＴ６のスロットＣ１で、リードデータをリードデータバッファＤＢＲに格納した時点で、既存の転送命令またはソース側のデータのリードの場合より１ステート早く実行を終了する。このため、命令フェッチとプログラムカウンタＰＣのインクリメントは行なわない。デスティネーション側をメモリとする指示を継続する。ビットセット命令コード（ｂｓｅｔ）を、サイクルＴ５のスロットＣ１から命令デコーダＤＥＣに入力する。
【０６４９】
演算命令コードは、デスティネーション側をメモリとする指示（ＭＯＤＤ）に従い、サイクルＴ６のスロットＣ１で、デスティネーション側データを、汎用レジスタではなく、リードデータバッファＤＢＲから、バスＧＢに読み出し、算術論理演算器ＡＬＵに入力する。サイクルＴ６のスロットＣ２で、ビットセット結果をテンポラリデータレジスタＴＲＤに格納する。さらに、ＭＯＶ．Ｗ Ｒ０，＠ＥＲ０に類似する命令コード（ｍｏｖ−ｓｔ）を発生し、サイクルＴ６のＣ１から命令デコーダＤＥＣに入力する。
【０６５０】
発生された命令コード（ｍｏｖ−ｓｔ）は、 テンポラリアドレスレジスタＴＲＡをアドレスレジスタとし、テンポラリデータレジスタＴＲＤをデータレジスタとする転送命令同様の動作を行う。即ち、サイクルＴ６のスロットＣ２で、テンポラリレジスタＴＲＡに格納されている実効アドレスをバスＧＢに読み出し、アドレスバッファＡＢを経由してバス７ＩＡＢに出力するとともに、バイトデータライトのバスコマンドを発行する。サイクルＴ７のスロットＣ２で、テンポラリデータレジスタＴＲＤに格納されている演算結果をバスＤＢに読み出し、ライトデータバッファを経由して、バスＩＤＢに出力して、デスティネーションのメモリアドレスに演算結果を書込む。サイクルＴ７のスロットＣ２から命令フェッチを行なうとともに、プログラムカウンタＰＣのインクリメントを行なう。これによって、転送命令コード（ｍｏｖ−１）の実行を短縮し、命令フェッチとプログラムカウンタＰＣインクリメントを行なわなかった分を回復する。
【０６５１】
デスティネーション側メモリにライトする場合、命令コード（ｍｏｖ−ｓｔ）をＣＰＵ２Ａ内部で発生することにより、命令コードを短縮し、処理時間を短縮することができる。テンポラリレジスタＴＲＡの内容を参照することによって、再度実効アドレスの計算を行なう必要がなく、更に、処理時間を短縮することができる。 ＭＯＶ．Ｗ Ｒ０，＠ＥＲ０に類似する命令コードを使用することにより、設計を容易にし、論理的な規模の増加を抑止することができる。
【０６５２】
図７８にはビット条件分岐命令の第２の例（ＢＢＣ ＃０，＠ＥＲ０＋，＄＋２０）の実行タイミングが示される。
【０６５３】
前置命令コード、ＭＯＶ．Ｂ ＠ＥＲ０＋，Ｒ０に相当する命令コード、ＢＲＡ ＄＋２０に相当する命令コードを組合せて実行される。前置命令コードは、図１５に従い、Ｈ’０１０８とされ、ＭＯＤＳ信号によって、ソース側がメモリであることを指示する。転送命令コードは、既存の転送命令と同様に、メモリのリードを行なうが、前置命令コードによるソース側をメモリとする指示に基づき、リードデータをテンポラリデータレジスタＴＲＤに格納する。ソース側をメモリとする指示を継続する。
【０６５４】
サイクルＴ３のスロットＣ１で命令コード（条件分岐命令（ｂｃｃ））が命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、制御信号を出力して、各部の制御を行う。ポストインクリメントレジスタ間接のアドレッシングモードであるので、アドレスレジスタＥＲ０に基づき、ソースデータのリードを行い、リード結果をテンポラリレジスタＴＲＤに格納する。
【０６５５】
サイクルＴ３のスロットＣ１で、インクリメンタＩＮＣでインクリメント（＋２）された結果が、内部バスＷＢを経由してプログラムカウンタＰＣにライトされる。サイクルＴ３のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。
【０６５６】
サイクルＴ３から、リードサイクルが開始され、このリードデータがサイクルＴ４のスロットＣ１でリードデータバッファＲＤＢにラッチされる（条件分岐命令（ｂｃｃ））。また、インクリメンタＩＮＣでインクリメント（＋２）された結果が、内部バスＷＢを経由してプログラムカウンタＰＣにライトされる。
【０６５７】
サイクルＴ４のスロットＣ２で、アドレスレジスタＥＲ０の内容（ＥＡ）を内部バスＧＢに読み出して、アドレスバッファＡＢに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。サイクルＴ５のスロットＣ１で、再度、アドレスレジスタＥＲ０の内容（ＥＡ）を内部バスＧＢに読み出して、算術論理演算器ＡＬＵに入力し、インクリメント処理を行なう。この結果は、サイクルＴ５のスロットＣ２でアドレスレジスタＥＲ０に格納される。
【０６５８】
サイクルＴ５から、データがリードされる。サイクルＴ６のスロットＣ１で前記リードデータが、リードデータバッファＲＤＢに格納される。更に、リードデータバッファＲＤＢから内部バスＤＢに出力され、算術論理演算器ＡＬＵに入力する。算術論理演算器ＡＬＵの動作は無操作とする。サイクルＴ６のスロットＣ２で、リードデータが、算術論理演算器ＡＬＵから内部バスＷＢに出力され、ＭＯＤＳ信号が１にセットされているので、汎用レジスタではなく、テンポラリデータレジスタＴＲＤに格納される。
【０６５９】
また、サイクルＴ５のスロットＣ２で、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。次の命令のリードを行なう。
【０６６０】
サイクルＴ６のスロットＣ１で、命令コード（条件分岐命令（ｂｃｃ））が命令デコーダＤＥＣに入力されて、図７４と同様に、命令の内容を解読し、制御信号を出力して、各部の制御を行う。ＭＯＤＳ信号が１にセットされているので、コンディションコードレジスタＣＣＲではなく、テンポラリデータレジスタＴＲＤの所定のビットのテストを行なう。
【０６６１】
サイクルＴ６のスロットＣ２で、前記の通り、算術演算器ＡＵで計算した分岐アドレスの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。
【０６６２】
サイクルＴ８のスロットＣ１で、インクリメンタＩＮＣでインクリメント（＋２）された結果が、内部バスＷＢを経由してテンポラリアドレスレジスタＴＲＡにライトされる。分岐条件のテストが指示される。
【０６６３】
サイクルＴ７のスロットＣ２で、分岐条件が成立している場合にはテンポラリアドレスレジスタＴＲＡの内容を、不成立の場合にはプログラムカウンタＰＣの内容を、内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレスが出力される。これによって、次の次の命令コードのアドレスを切り替える。
【０６６４】
一方、サイクルＴ８のスロットＣ１で、分岐条件が成立している場合には、バスＩＤＢの内容を命令レジスタＩＲ１にラッチする（分岐先の命令コード）。不成立の場合には、命令レジスタＩＲ１の内容が保持され、ビット条件分岐命令の次の命令コードが保存される。これによって、次の命令コードを切り替える。
【０６６５】
転送命令で使用可能なアドレッシングモードを、ビットテスト命令、ビット条件分岐命令、ビット条件サブルーチン分岐命令の、テスト対象のビットの存在するアドレスの指定に用いることができる。
【０６６６】
尚、ＣＰＵ２Ａは加算命令やデータ転送命令等を実行するとき図１のＣＰＵ２と同様に図３１乃至図４１の実行タイミングを実現する。更にＣＰＵ２Ａの命令デコーダＤＥＣは図１のＰＰＵ２と同様に図３９乃至図４１に例示される論理記述の制御論理を実現している。また、ＣＰＵ２Ａの開発環境は図４２のように構成できる。このときのシステム開発装置におけるＣＰＵ選択手法についても図４３で説明した手法をそのまま適用することができる。また、ＣＰＵ２Ａのアセンブラの出力するリストとして図４４を例示することができる。更にＣＰＵ２Ａのエミュレータには図４５と同じ構成を採用すればよい。ＣＰＵ２Ａを用いたマイクロコンピュータのエミュレーション用マイクロコンピュータは図４７で説明したように構成することができる。
【０６６７】
前記検討課題Ｄの解決手段に関する発明の具体的な実施の形態によれば、以下の作用効果を得るものである。
【０６６８】
〔１〕第１のワード、第２のワード（条件分岐命令）などの命令コードは既存のものであるから、単独では従来同様に動作し、既存の命令実行を阻害することがない。また、既存の命令のみを使用していれば、既存のソフトウェア資産を有効に利用できる。汎用レジスタやロードストアアーキテクチャなどの既存のＣＰＵのメリットを損なうことがない。第１のワード、第２のワード（条件分岐命令）に、それぞれ、絶対アドレスのビット長、ディスプレースメントのビット長などに複数の種類があれば、同じ方法によって、これらを組合せることができる。換言すれば、既存のデータアクセスのためのアドレッシングモードや、条件分岐命令のアドレッシングモードを全てサポートできるから、任意のアドレッシングモードの組合せを可能にできる。これらの組合せを可能にすることによって、プログラム上の制約をなくし、使い勝手を向上することができる。また、同じ方法によって、サブルーチン分岐命令と組合せることが可能となり、使い勝手を向上することができる。既存の、独立したビットテスト命令と条件分岐命令を組合せるより、命令コード長の短縮や処理速度の向上に、寄与することができる。
【０６６９】
ビットテスト命令、ビットセット命令などのビット操作命令などのアドレッシングモードにも、転送命令と同等のアドレッシングモードを指定でき、使い勝手を向上することができる。多様なアドレッシングモードを指定可能にすることによって、複数のビットの状態に応じて、複数の処理に分岐したり、また、複数のビットを設定したりするような場合などに、最適なアドレッシングモードを使用でき、全体的なプログラム容量の低減や処理速度の向上に、寄与することができる。
【０６７０】
〔２〕既存の、転送命令の命令コード、演算命令の命令コードを組合せて、動作するから、命令デコーダの、従来の設計資産を有効に利用することができ、論理的な規模の追加と変更を最小限にし、論理的・物理的規模の増大を最小限にできる。また、開発に必要な期間を短縮し、資源を節約することができる。命令コードの動作内容を変更するための制御信号であるＭＯＤ信号を共通化することができる。即ち、データを転送する命令コードを共通にし、続く、命令コードを演算命令コード或いは分岐命令コードを、組合せればよい。命令セットを最適化し、論理的規模の増加を抑止できる。
【０６７１】
〔３〕テンポラリレジスタの様なラッチ手段には、指定されたビットの状態を判定する手段を設け、ＡＬＵなどに読み出したりすることなく、所定のビットの状態を判定できるようにすることにより、条件分岐命令の全体的な動作を変更することなく、実現できるから、変更する部分を小さくし、また論理的規模の増加を最小限にすることができる。
【０６７２】
〔４〕追加する命令コードを前置命令コードに止めることによって、命令セットの変更を最小限にすることができ、一般的なＣＰＵ乃至は命令セットに対して、適用することができる。前記前置命令コードは、アドレッシングモードや演算の内容によらず共通に使用できるから、追加する命令コードを最低限にすることができる。また、前置命令コードに、そのほかのデータサイズなどの情報を持たせることによって、全体的な命令コード長を短縮できる。前置命令コードに他の情報を含めることによって、命令コード長を短縮し、実行時間を短縮することができる。例えば、既存のＣＰＵにおいて、メモリに対する演算以外の指示を行なう前置命令コードと演算コードとを組合せて実現されている命令が存在する場合、前記メモリに対する演算以外の指示を、前記メモリに対する演算を指示する前置命令コードに含めることによって、命令コード長を短縮し、実行時間を短縮することができる。
【０６７３】
メモリからラッチ手段へのデータ読み込み、演算、ラッチ手段の内容に基づくメモリへのライトは既存の命令と、使用するレジスタが相違なるのみであるから、既存の命令動作を大きく変更することなく、利用できる。これによって、メモリ上のデータへの演算を可能にすることによる論理規模の増加を最小限にすることができる。
【０６７４】
〔５〕オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵが存在する場合には、アドレス空間の広いＣＰＵで、前記命令を実現することで、下位互換性をもつ、アドレス空間の小さいＣＰＵでもメモリ上のデータを演算を可能にできる。換言すれば、同一の方法で、オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵでもメモリ上のデータを演算を可能にできる。オブジェクトレベルで互換性を保つことによる利点とメモリ上のデータを演算を可能にすることの利点の双方を享受することができる。
【０６７５】
〔６〕既存の命令を組合せ、新規の命令機能を実現しているので、命令セットの更なる拡張や、更なる高速化に当たって、既存のＣＰＵに対して新たなる課題を生じることが少ない。換言すれば、既存のＣＰＵに対して、更なる命令セットの拡張や、更なる高速化を行なう技術が存在する（発明された）場合には、本発明を適用して、既存のＣＰＵに対して命令セットを拡大したＣＰＵに対しても、同様の技術を適用することができる。新規の命令機能を実現するために用いている、既存の命令のそれぞれに、前記技術を適用して、再度組合せればよい。前置命令コードは動作が単純であり、また、既存の命令に類似した動作とすることによって、変更は容易である。
【０６７６】
〔７〕また、既存の命令を組合せ、新規の命令機能を実現しているので、既存のＣＰＵとエミュレーション用インタフェースを共通化することができ、ひいては、同じエミュレータのハードウェアを共通できる。エミュレータのハードウェアを共通化することによって、逸早く開発環境を整えることができ、また、エミュレータの開発に必要な資源を最小限にすることができる。
【０６７７】
前記検討課題Ｄの解決手段に関する発明の実施の形態は一例であり、その要旨を逸しない範囲において種々変更可能である。
【０６７８】
例えば、組合せる命令コードは、ビットテスト命令や条件分岐命令に限定されない。新規の命令セットを考える場合、既存の命令セットの上位互換とする場合など、適宜、適当な命令コードを組合せるようにしてよい。少なくとも、１つのオペレーションフィールドで、乃至１回の命令デコードで、ビット条件分岐命令を実行するような複雑な動作を行なわず、当該ビットの存在するアドレスのリード、当該ビットのテスト、分岐判定、分岐などの個別の動作を、類似の命令と共通化するようにすればよい。
【０６７９】
ビット条件分岐命令のアドレッシングモードも、実施例に限定されない。分岐アドレスの指定は、プログラムカウンタ相対に限定されず、絶対アドレスや、レジスタ間接などとしてもよい。これは、全体的な命令セットに適合するようにすればよい。
【０６８０】
ＣＰＵのアーキテクチャは、ロードストア型アーキテクチャでなくてもよい。汎用レジスタは、アドレス及びデータに共通に利用可能なものである必要はなく、一部または全部がアドレス専用またはデータ専用のものであってもよい。汎用レジスタのデータサイズについても任意とすることができる。
【０６８１】
前置命令コードの種類は特に限定はされない。また、前置命令コードは、転送命令と条件分岐命令乃至演算命令を組合せる情報のほか、そのほかの制御情報を含んでもよい。例えば、データサイズを指示する情報を含んでもよい。
【０６８２】
また、命令コードの基本単位１６ビットに限定する必要はなく、８ビット或いは３２ビットなど任意のビット幅とできる。制御信号は、ＭＯＤＳ、ＭＯＤＤを用いるものとしたが、そのほかの制御信号に分割することもできる。
【０６８３】
前置命令コード、第１のリード型転送命令コード、第２のリード型転送命令コード、演算命令コード、ライト型転送命令コードを組合せて、メモリ上の相異なる２つのアドレスのデータを入力して、演算し、結果を、ライト型転送命令コードで指定する別のメモリのアドレスに格納することができる。第１、第２のリード型転送命令コードを省略して、汎用レジスタ上のデータを入力とすることもできる。
【０６８４】
《検討課題Ｅの解決手段に関する実施の形態》
次に、前記検討課題Ｅの解決手段に関する発明の具体例を説明する。ここで説明するマイクロコンピュータは図２に基づいて説明した構成を有するものであり、繰り返しになるのでその詳細な説明は省略する。従って、マイクロコンピュータ１に内蔵される前記ＣＰＵ２は図３に示されるような汎用レジスタ及び制御レジスタの構成を有している。当然ＣＰＵ２は図４のプログラミングモデルを有する下位ＣＰＵの汎用レジスタ及び命令セットを包含することになる。そして上位ＣＰＵとしてのＣＰＵ２は図５のアドレス空間を有している。ＣＰＵ２の実効アドレスの計算には前述の図７及び図８で説明した手法が採用されている。
【０６８５】
ここで説明するマイクロコンピュータの一例は図７９に示される。マイクロコンピュータ５０１は、命令を実行してマイクロコンピュータ５０１全体の制御を司る中央処理装置（ＣＰＵ）５０２、シングルチップマイクロコンピュータの動作モードなどを制御するシステムコントローラ（ＳＹＳＣ）５１４、割込コントローラ（ＩＮＴ）５０３、バスコントローラ５１０、ＤＭＡコントローラ（ＤＭＡＣ）５１１、外部バスＤＭＡＣ（ＥＸＤＭＡＣ）５１２、ＣＰＵ５０２の処理プログラムなどを格納するメモリであるリードオンリメモリ（ＲＯＭ）５０４、ＣＰＵ５０２の作業領域並びにデータの一時記憶用のメモリであるランダムアクセスメモリ（ＲＡＭ）５０５、タイマ５０６、パルス出力回路５０７、シリアルコミュニケーションインタフェース（ＳＣＩ）５０８、Ａ／Ｄ変換器（Ａ／Ｄ）５０９、入出力ポートＩＯＰＡ〜ＩＯＰＦ、入出力ポートＩＯＰ１〜ＩＯＰ５、及びクロック発振器（ＣＰＧ）５１３の機能ブロック若しくは回路モジュールを有し、公知の半導体集積回路製造技術により１つの半導体基板（半導体チップ）に形成されている。
【０６８６】
前記ＣＰＵ５０２は主にＲＯＭ５０４から命令をフェッチし、これを解読して演算動作や制御動作を行う。前記ＤＭＡＣ５１１はＣＰＵ５０２とバスを共有し、ＣＰＵ５０２に代ってデータ転送制御を行う。前記ＥＸＤＭＡＣ５１２は、外部バス上のデータ転送制御に特化された転送制御装置であり、ＣＰＵ５０２またはＤＭＡＣ５１１の内部バス上でのアクセス動作に並行して、外部バス上でのデータ転送制御が可能にされる。
【０６８７】
バスコントローラ５１０は、内部バスコントローラ、外部バスコントローラ、及びリフレッシュタイマなどを持つ。内部バスコントローラはＣＰＵ５０２とＤＭＡＣ５１１とのバス権調停を行う。外部アドレスは、例えば、８個のエリアに分割され、外部バスコントローラにはエリア毎に、バス幅やアクセスステート数を設定することができ、ＤＲＡＭやＲＯＭなどの高速ページモードといった、連続アクセス時に、短縮されたバスサイクルを実現可能にしている。例えば、外付けのＤＲＡＭに対する場合、ノーマル４ステートアクセスに対し、高速ページ２ステートなどとされる。外部バスコントローラは、ＣＰＵ５０２、ＤＭＡＣ５１１、ＥＸＤＭＡＣ５１２の夫々からのバス権要求と、外部からバス権要求に対する調停を行う。
【０６８８】
マイクロコンピュータ５０１の前記各種機能ブロックは、内部バスによって相互に接続される。内部バスはアドレスバス、データバスの他、図示はされない、バス権要求信号、バスアクノレッジ信号、バスコマンド、外部バスコマンド、レディ信号、外部バスレディ信号、リード信号・ライト信号、さらにバスサイズ信号、システムクロック信号等を含む。内部アドレスバスバスには、ＩＡＢ、ＰＡＢ、ＥＸＡＢが存在する。内部データバスにはＩＤＢ、ＰＤＢが存在する。
【０６８９】
それらのバスは、バスコントローラ５１０によってインタフェースされている。内部バスＩＡＢ、ＩＤＢはＣＰＵ２、ＤＭＡＣ１１、ＲＯＭ５０４、ＲＡＭ５０５、バスコントローラ５１０に接続され、更に、アドレスバスＩＡＢは外部バスのアドレスバスとインタフェースするために、入出力ポートＩＯＰＡ〜ＩＯＰＣに接続され、データバスＩＤＢは外部バスのデータバスとインタフェースするために、入出力ポートＩＯＰＤ、ＩＯＰＥに接続される。
【０６９０】
ペリフェラルバスＰＡＢ、ＰＤＢはバスコントローラ５１０、ＥＸＤＭＡＣ５１２、タイマ５０６、パルス出力回路５０７、ＳＣ５Ｉ８、Ａ／Ｄ変換器５０９、割込コントローラ５０３、入出力ポートＩＯＰＡ〜ＩＯＰＦ及び入出力ポートＩＯＰ１〜ＩＯＰ５に接続される。これらの機能ブロックが有する制御レジスタを総称して、内部Ｉ／Ｏレジスタと呼ぶ。
【０６９１】
アドレスバスＥＸＡＢは、ＥＸＤＭＡＣ５１２とバスコントローラ５１０、入出力ポートＩＯＰＡ〜ＩＯＰＣを接続する。なお、バスコントローラ５１０は、アドレスバスＥＸＡＢのアドレスを判定し、バス仕様に従った動作を実行するために参照する。従って、バスコントローラ５１０はエリアを判定したり、ＤＲＡＭのロウアドレスを判定する程度の上位ビットを入力するのみでよい。
【０６９２】
ＣＰＵ５０２とＤＭＡＣ５１１が、内部バスマスタとして、内部バスを使用することができ、それぞれのバス権要求信号に従って、バスコントローラ（内部バスアービタ）５１０が調停する。また、外部バスについては、内部バスマスタによる外部バスアクセス、ＥＸＤＭＡＣ５１２、外部バス権解放要求、リフレッシュ要求のバス権要求信号に従って、バスコントローラ（外部バスアービタ）５１０が調停する。
【０６９３】
ＲＯＭ５０４、ＲＡＭ５０５、及びタイマ５０６、パルス出力回路５０７、ＳＣＩ５０８、Ａ／Ｄ変換器５０９、入出力ポートＩＯＰＡ〜ＩＯＰＦ及びＩＯＰ１〜ＩＯＰ５、割込コントローラ５０３の各機能ブロック及びＥＸＤＭＡＣ５１２は、内部バススレーブとして、ＣＰＵ５０２またはＤＭＡＣ５１１によって動作制御情報等がリード／ライト可能にされる。
【０６９４】
割込コントローラ５０３は、タイマ５０６、ＳＣＩ５０８、Ａ／Ｄ変換器５０９、入出力ポートＩＯＰ５の出力する割込信号を入力し、ＣＰＵ５０２に割込要求信号５３１を、ＤＭＡＣ５１１に起動要求信号（図示せず）を出力する。また、ＤＭＡＣ５１１の出力するクリア信号（図示せず）を入力して、割込クリア信号（図示せず）を出力する。
【０６９５】
入出力ポートは、外部バス信号、入出力回路の入出力信号と兼用とされている。入出力ポートＩＯＰＡ〜ＩＯＰＣはアドレスバス出力、入出力ポートＩＯＰＤ、ＩＯＰＥはデータバス入出力、入出力ポートＩＯＰＦはバス制御信号入出力信号と兼用されている。外部アドレス、外部データは、それぞれ、これらの入出力ポートに含まれるバッファ回路を介してバスＩＡＢ、ＩＤＢと接続されている。バスＰＡＢ、ＰＤＢは入出力ポートのレジスタをリード／ライトするために使用し、外部バスとは直接の関係はない。バス制御信号出力は、アドレスストローブ、ハイ／ロウデータストローブ、リードストローブ、ライトストローブ、バスアクノリッジ信号などがある。バス制御入力信号にはウェイト信号、バスリクエスト信号などがある。これらの入出力信号は図示はされない。外部バス拡張を行うことは、動作モードなどで選択され、これらの入出力ポートの機能も選択される。
【０６９６】
また、入出力ポートＩＯＰ１はタイマ入出力、入出力ポートＩＯＰ２はパルス出力、入出力ポートＩＯＰ３はＳＣＩ５０８の入出力、入出力ポートＩＯＰ４はアナログ入力、入出力ポートＩＯＰ５はＥＸＤＭＡＣ５１２、ＤＭＡＣ５１１入出力と兼用されている。ＥＸＤＭＡＣ５１２、ＤＭＡＣ５１１、タイマ５０６、ＳＣＩ５０８、パルス出力５０７、Ａ／Ｄ変換器５０９と入出力ポートＩＯＰ１〜ＩＯＰ５との入出力信号や内部割込み要求信号などは図示を省略してある。
【０６９７】
割込要因が発生すると、割り込みコントローラ５０３でＣＰＵ５０２又はＤＭＡＣ５１１の何れに要求を行なうか判定し、また、優先順位などが判定される。ＣＰＵ５０２に割込要求が発生されると、ＣＰＵ５０２は実行中の処理を中断して、例外処理状態を経て、所定の処理ルーチンに分岐し、所望の処理を行い、割込要因をクリアしたりする。所定の処理ルーチンの最後には、通常復帰命令（ＲＴＥ命令）がおかれ、この命令を実行することによって前記中断した処理を再開する。
【０６９８】
上記マイクロコンピュータ５０１は、電源端子として、グランドレベル（Ｖｓｓ）、電源電圧レベル（Ｖｃｃ）、アナロググランドレベル（ＡＶｓｓ）、アナログ電源電圧レベル（ＡＶｃｃ）、アナログ基準電圧（Ｖｒｅｆ）の入力端子の他に、専用制御端子として、リセット（ＲＥＳ）、スタンバイ（ＳＴＢＹ）、モード制御（ＭＤ０、ＭＤ１、ＭＤ２）、クロック入力（ＥＸＴＡＬ、ＸＴＡＬ）の各端子を有する。
【０６９９】
前記端子ＥＸＴＡＬ、ＸＴＡＬを介してＣＰＧ５１３に水晶発振子による発振信号又は外部クロック信号が入力され、これに基づいて基準クロック信号（システムクロック）φを生成する。マイクロコンピュータはその基準クロック信号φに同期して動作を行う。この基準クロック信号φの１周期をステートと呼ぶ。
【０７００】
ＲＥＳ端子にリセット信号が加えられると、ＳＹＳＣ５１４がモード端子ＭＤ０〜ＭＤ２で与えられる動作モードを取り込み、マイクロコンピュータ５０１はリセット状態になる。モード端子で設定する動作モードは、シングルチップ／拡張、アドレス空間、内蔵ＲＯＭの有効／無効、データバス幅の初期値８ビット／１６ビットなどを選択する。
【０７０１】
このリセットが解除されると、ＣＰＵ５０２は所定のアドレスからスタートアドレスをリードして、このスタートアドレスから命令のリードを開始するリセット例外処理を行う。この後、ＣＰＵ５０２は逐次、ＲＯＭ５０４などから命令をリードし、解読して、その解読内容に基づいてデータの処理或はＲＡＭ５０５、タイマ５０６、ＳＣＩ５０８、入出力ポートなど、或いは外部バスに接続されるメモリやＩ／Ｏなどとのデータ転送を行う。即ち、ＣＰＵ５０２は、入出力ポート、Ａ／Ｄ変換器５０９などか入力されるデータ、或はＳＣＩ５０８などから入力される指示を参照しつつ、ＲＯＭ５０４などに記憶されている命令に基づいて処理を行い、その結果に基づいて、入出力ポート、タイマ５０６などを使用して、外部に信号を出力し、各種機器の制御を行う。
【０７０２】
図３は前記ＣＰＵ５０２に内蔵されている汎用レジスタ及び制御レジスタの構成例（プログラミングモデル）として上位のＣＰＵ５０２のプログラミングモデルを示す図面でもある。
【０７０３】
ＣＰＵ５０２は、３２ビット長の汎用レジスタを３２本持っている。汎用レジスタＥＲ０〜ＥＲ３１は、全て同等の機能を持っており、アドレスレジスタとしてもデータレジスタとしても使用することができる。
【０７０４】
データレジスタとしてしては３２ビット、１６ビットおよび８ビットレジスタとして使用きる。アドレスレジスタおよび３２ビットレジスタとしては、一括して汎用レジスタＥＲ（ＥＲ０〜ＥＲ３１）として使用する。１６ビットレジスタとしては、汎用レジスタＥＲを分割して汎用レジスタＥ（Ｅ０〜Ｅ３１）、汎用レジスタＲ（Ｒ０〜Ｒ３１）として使用する。これらは同等の機能を持っており、１６ビットジスタを最大６４本まで使用することができる。なお、汎用レジスタＥ（Ｅ０〜Ｅ３１）を、特に拡張レジスタと呼ぶ場合がある。８ビットレジスタとしては、汎用レジスタＲを分割して汎用レジスタＲＨ（Ｒ０Ｈ〜Ｒ３１Ｈ）、汎用レジスタＲＬ（Ｒ０Ｌ〜Ｒ３１Ｌ）として使用する。これらは同等の機能を持っており、８ビットレジスタを最大６４本まで使用することができる。各レジスタ独立に使用方法を選択することができる。
【０７０５】
汎用レジスタＥＲ７、ＥＲ１５、ＥＲ２３、ＥＲ３１には、汎用レジスタとしての機能に加えて、スタックポインタ（ＳＰ）としての機能が割り当てられており、例外処理やサブルーチン分岐などで暗黙的に使用される。例外処理は前記割込み例外処理を含む。
【０７０６】
なお、内部論理構成上はＥＲ０〜ＥＲ７をグループ０、ＥＲ８〜ＥＲ１５をグループ１、ＥＲ１６〜ＥＲ２３をグループ２、ＥＲ２４〜ＥＲ３１をグループ３としている。グループ０が既存のＣＰＵ（ＣＰＵ５０２に対する下位ＣＰＵ）の汎用レジスタと同一とされる。
【０７０７】
それらの汎用レジスタは、プログラミング仕様上は相違なく、すべて同等に使用できる。少なくとも、アセンブリ言語で書く場合には、グループを意識せず、例えば、Ｒ０Ｈ、Ｅ８、Ｒ１６，ＥＲ３１、などと記述できる。例えば平成７年３月（株）日立製作所発行『Ｈ８Ｓ／２６００シリーズＨ８Ｓ／２０００シリーズプログラミングマニュアル』のアセンブラフォーマットに従って記述すれば、「ＭＯＶ．Ｌ  ＥＲ０，ＥＲ３１」或いは、「ＡＤＤ．Ｗ  Ｅ８，Ｒ１６」などとレジスタ番号のみで記述できる。
【０７０８】
ＣＰＵ５０２は更に、コントロールレジスタとして、図３に例示される２４ビットのプログラムカウンタＰＣと８ビットのエクステンドレジスタＥＸＲ及び８ビットのコンディションコードレジスタＣＣＲを含んでいる。
【０７０９】
前記プログラムカウンタＰＣは、ＣＰＵ５０２が次に実行する命令のアドレスを示す。特に制限されないものの、ＣＰＵ５０２の命令は、すべて２バイト（ワード）を単位としているため、バイトを最小単位として指示するアドレス信号の最下位ビットは無効であり、命令リード時には命令アドレスの最下位ビットは０とみなされる。
【０７１０】
前記コンディションコードレジスタＣＣＲは８ビットのレジスタで、ＣＰＵ５０２の内部状態を示している。割込みマスクビット（Ｉ）とハーフキャリ（Ｈ）、ネガティブ（Ｎ）、ゼロ（Ｚ）、オーバフロー（Ｖ）、キャリ（Ｃ）の各フラグを含む８ビットで構成されている。
【０７１１】
前記エクステンドレジスタＥＸＲは８ビットのレジスタで、割込みなどの例外処理の制御を行なう。割込みマスクビット（Ｉ２〜Ｉ０）とトレース（Ｔ）の各ビットを含んでいる。
【０７１２】
図４はＣＰＵ５０２に対する下位互換のＣＰＵのプログラミングモデルを示す図面でもある。前記図３のプログラミングモデルを持つ上位のＣＰＵ５０２は、図４のプログラミングモデルを有する下位ＣＰＵの汎用レジスタ及び命令セットを包含している。
【０７１３】
下位互換のＣＰＵは、１６ビット長の汎用レジスタを８本持っている。汎用レジスタＲ０〜Ｒ７は、すべて同等の機能を持っており、アドレスレジスタとしてもデータレジスタとしても使用することができる。
【０７１４】
データレジスタとして１６ビット及び８ビットレジスタとして使用きる。アドレスレジスタおよび１６ビットレジスタとしては、一括して汎用レジスタＲ（Ｒ０〜Ｒ７）として使用する。８ビットレジスタとしては、汎用レジスタＲを分割して汎用レジスタＲＨ（Ｒ０Ｈ〜Ｒ７Ｈ）、汎用レジスタＲＬ（Ｒ０Ｌ〜Ｒ７Ｌ）として使用する。これらは同等の機能を持っており、８ビットレジスタを最大１６本まで使用することができる。各レジスタを独立に使用方法を選択することができる。
【０７１５】
汎用レジスタＲ７には、前記同様に、汎用レジスタとしての機能に加えて、スタックポインタ（ＳＰ）としての機能が割り当てられており、例外処理やサブルーチン分岐などで暗黙的に使用される。
【０７１６】
図８０にはＣＰＵ５０２のアドレス空間が示されている。マイクロコンピュータ５０１のアドレスマップとしては、ＲＯＭ５０４は０番地から、一方、ＲＡＭ５０５及び内部Ｉ／ＯレジスタはＨ’ＦＦＦＦまたはＨ’ＦＦＦＦＦＦ番地まで、それぞれアドレス空間の両端になるように配置されるようにする。
【０７１７】
上位ＣＰＵ５０２は、１６ＭＢのアドレス空間のマキシマムモードと６４ｋＢのアドレス空間のミニマムモードを持つ。かかるマキシマムモードとミニマムモードの選択は、マイクロコンピュータ５０１のモード制御入力端子ＭＤ０〜ＭＤ２の状態によって行われる。
【０７１８】
マキシマムモードでは、絶対アドレス２４ビット（上位８ビットは予約され、命令コード中は３２ビット）で全空間を、絶対アドレス１６ビットで０〜 Ｈ’７ＦＦＦ及びＨ’ＦＦ８０００〜Ｈ’ＦＦＦＦＦＦを指定する。また、例外処理時のベクタは２４ビット（メモリ上は３２ビットとされ、上位８ビットは無視される）、サブルーチン分岐などにおいて待避／復帰されるプログラムカウンタＰＣも２４ビットとされる。
【０７１９】
ミニマムモードでは、絶対アドレスとレジスタ間接のアドッレシングモードのいずれも、下位１６ビットのみを使用し、上位ビットは無視する。例外処理時のベクタは１６ビット、サブルーチン分岐などにおいて待避／復帰されるプログラムカウンタＰＣも１６ビットとされる。
【０７２０】
下位ＣＰＵは、ミニマムモードに相当する６４ｋＢのアドレス空間を持つ。絶対アドレスは１６ビットのみを持ち、また、レジスタ間接では１６ビットレジスタで、それぞれ全空間を指定する。ベクタやスタックの構造などが前記上位ＣＰＵ５０２のミニマムモードと同等の動作になり、例外処理時のベクタは１６ビット、サブルーチン分岐などにおいて待避／復帰されるプログラムカウンタＰＣも１６ビットとされる。
【０７２１】
前記図７及び図８は上位ＣＰＵ５０２のマキシマムモードにおける実効アドレス計算方法を例示する図面でもある。
【０７２２】
図７の（１）に示されるレジスタ間接では命令コード中にレジスタを指定する部分（レジスタフィールド）を含み、この命令コードで指定された汎用レジスタＥＲの内容の合計３２ビットをアドレスとしてメモリ上のアドレスを指定する。アドレスは２４ビットでよいため、上位８ビットは無視する。
【０７２３】
図７の（２）、（３）に示されるディスプレースメント付レジスタ間接は、上記レジスタ間接と同様に得られた３２ビットのアドレスに、命令コード中に含まれるディスプレースメントを加算した結果をアドレスとしてメモリ上のアドレスを指定する。加算結果はアドレスの指定のみに使用され、汎用レジスタＥＲの内容には反映されない。特に制限はされないものの、ディスプレースメントは３２ビットまたは１６ビットであり、１６ビットディスプレースメントは加算する場合には上位１６ビットは符号拡張される。すなわち、ディスプレースメントの上位１６ビットは１６ビットディスプレースメントのビット１５と同じ値であるとして加算が行われる。この場合も上位８ビットは無視される。
【０７２４】
図７の（４）に示されるポストインクリメントレジスタ間接は、前記レジスタ間接と同様に得られた３２ビットのアドレスでメモリ上のアドレスを指定する。その後、このアドレスに１、２又は４を加算し、その加算結果が汎用レジスタＥＲに格納される。メモリ上のバイトデータを指定する場合には１が、ワードデータを指定する場合には２が、アドレスデータを指定する場合には４が、それぞれ加算される。また、複数レジスタの転送命令では、レジスタ本数分を乗算した結果が用いられる。加算結果の上位８ビットも拡張レジスタに格納される。後述する複数汎用レジスタ転送命令の場合は、２（ワードサイズ）または４（ロングワードサイズ）に、レジスタ本数を乗算した値が用いられる。
【０７２５】
図７の（５）に示されるプリデクリメントレジスタ間接は、前記レジスタ間接と同様に得られた３２ビットのアドレスから１、２又は４を減算した結果の２４ビットのアドレスでメモリ上のアドレスを指定する。その後、その減算結果が汎用レジスタＥＲに格納される。メモリ上のバイトデータを指定する場合には１が、ワードデータを指定する場合には２が、アドレスデータを指定する場合には４が、それぞれ減算される。また、複数レジスタの転送命令では、レジスタ本数分を乗算した結果が用いられる。前記同様に、アドレスが２４ビットでよい場合には、特に制限はされないものの、減算結果の上位８ビットも拡張レジスタに格納される。（４）と同様に、後述の複数汎用レジスタ転送命令の場合は、２（ワードサイズ）または４（ロングワードサイズ）に、レジスタ本数を乗算した値が用いられる。
【０７２６】
図８の（６）（７）（８）に示される絶対アドレスは命令コード中に含まれる、８ビット、１６ビット又は３２ビットの絶対アドレスをアドレスとしてメモリ上のアドレスを指定する。８ビット絶対アドレスは、上位１６ビットが論理値１に拡張（１拡張）される。すなわちアドレスのビット２３〜８は全ビット１とされる。従って使用可能なアドレスはＨ’ＦＦＦＦ００〜Ｈ’ＦＦＦＦＦＦの２５６バイトである。また、１６ビット絶対アドレスは、上位８ビットが符号拡張される。すなわち、１６ビット絶対アドレスのビット１５が０であればアドレスのビット２３〜１６は全ビット０とされ、ビット１５が１であればアドレスのビット２３〜１６は全ビット１とされる。従って使用可能なアドレスはＨ’００００００〜Ｈ’００７ＦＦＦ及びＨ’ＦＦ８０００〜Ｈ’ＦＦＦＦＦＦの６４ｋバイトである。
【０７２７】
図８の（９）、（１０）に示されるプログラムカウンタ相対は、プログラムカウンタの内容の２４ビットのアドレスに命令コード中に含まれるディスプレースメントを加算した結果をアドレスとしてメモリ上のアドレスを指定する。加算結果はプログラムカウンタに格納される。特に制限はされないものの、ディスプレースメントは１６ビットまたは８ビットであり、これらのディスプレースメントは加算する場合には上位８ビットまたは１６ビットは符号拡張される。すなわち、ディスプレースメントの上位８ビットは１６ビットディスプレースメントのビット１５と、または上位１６ビットは８ビットディスプレースメントのビット７と同じ値であるとみなして加算が行われる。プログラムカウンタ相対は分岐命令のみで使用される。
【０７２８】
尚、上位ＣＰＵ５０２のミニマムモードでは、実効アドレスの上位８ビットが無視され、下位１６ビットが有効になる。上記の他にイミディエイト、レジスタ直接、メモリ間接などのアドレッシングモードを実行するが、これらは本発明に直接は関係しないので詳細な説明は省略する。
【０７２９】
図４のプログラミングモデルを持つ下位互換のＣＰＵの、データ転送命令では、レジスタ間接、１６ビットディスプレースメント付レジスタ間接、ポストインクリメント／プリデクリメントレジスタ間接、８／１６ビット絶対アドレス、が使用可能である。実効アドレスの計算方法は上記同様である。
【０７３０】
図８１には複数レジスタ転送命令（複数レジスタ・メモリ間転送命令、複数レジスタ・レジスタ間転送命令）としての複数汎用レジスタの転送命令（ＭＯＶＭ）の機能が示される。データサイズは、ワード（Ｗ）及びロングワード（Ｌ）が可能であり、また、汎用レジスタ間、及び汎用レジスタ・メモリ間のデータ転送が可能である。また、アドレッシングモードは、イミディエイトを除き、従来の転送命令と同様である。
【０７３１】
汎用レジスタの選択は、２、３、４本の選択が可能であり、ロングワードサイズの場合、ＥＲ０−ＥＲ１、ＥＲ２−ＥＲ３、ＥＲ４−ＥＲ５、ＥＲ６−ＥＲ７、…、ＥＲ３０−ＥＲ３１の２本の組み合わせ、ＥＲ０−ＥＲ２、ＥＲ４−ＥＲ６、…、ＥＲ２８−ＥＲ３０の３本の組合せ、ＥＲ０−ＥＲ３、ＥＲ４−ＥＲ７、…、ＥＲ２８−ＥＲ３１の４本の組合せが可能である。ワードサイズの場合は、相当する汎用レジスタＲのみ、または汎用レジスタＥのみが選択される。
【０７３２】
図８１においてＲｎｓはソースになる汎用レジスタ番号を意味し、Ｒｎｄはディスティネーションになる汎用レジスタ番号を意味し、ＥＡｓはソースになる実効アドレスを意味し、ＥＡｄはディスティネーションになる実効アドレスを意味する。
【０７３３】
図８２には複数汎用レジスタの転送命令（ＭＯＶＭ）によるデータ転送のデータ配置が示される。（１）はワードサイズの２個のデータのレジスタ・メモリ間転送を示し、（２）はワードサイズの２個のデータのレジスタ・レジスタ間転送を示し、（３）はロングワードサイズの２個のデータのレジスタ・メモリ間転送を示し、（４）はロングワードサイズの２個のデータのレジスタ・レジスタ間転送を示している。
【０７３４】
例えば図８２の（３）において、第１の汎用レジスタＥＲｎの最上位のデータ、例えば、Ｅｎの上位８ビット（ａで示される）が、実効アドレスＥＡで指定されるメモリ（ａで示される）に対応し、汎用レジスタの次のデータ、例えば、Ｅｎの下位８ビット（ｂで示される）が、実効アドレスＥＡ＋１で指定されるメモリ（ｂで示される）に対応する。第１の汎用レジスタの最下位のデータ、例えば、ＲＬｎのデータｄの次は、第２の汎用レジスタ例えばＥＲｎ＋１の最上位のデータ、例えば、Ｅｎ＋１の上位８ビットのデータｅになる。ワードサイズの場合は、図示を省略するが、ＥｎとＥｎ＋１の２本と、ＲｍとＲｍ＋１の２本との間のデータ転送も可能である。
【０７３５】
図９はＣＰＵ５０２の機械語の命令フォーマットと命令コードを例示する図面でもある。ＣＰＵ５０２の命令は、２バイト（ワード）を単位にしている。各命令はオペレーションフィード（ｏｐ）、レジスタフィールド（ｒ、ｇｒ）、ＥＡ拡張部（ＥＡ）、およびコンディションフィールド（ｃｃ）を含む。
【０７３６】
オペレーションフィールド（ｏｐ）は、命令の機能を表し、アドレッシングモードの指定オペランドの処理内容を指定する。オペレーションフィールド（ｏｐ）は、命令の先頭４ビットを必ず含む。２つのオペレーションフィールドを持つ場合もある。
【０７３７】
レジスタフィールド（ｒ、ｇｒ）は組合わせて汎用レジスタを指定する。レジスタフィールド（ｒ）はアドレスレジスタのとき３ビット、データレジスタのとき３ビット（３２ビットレジスタ）または４ビット（８または１６ビットレジスタ）である。２つのレジスタフィールドｒ１，ｒ２を持つ場合、またはレジスタフィールドｒ１，ｒ２を持たない場合もある。
【０７３８】
レジスタフィールド（ｇｒ）は４ビット存在するが、特に制限はされないものの下位２ビットを有効にする。レジスタフィールド（ｇｒ）を含むワード（ｏｐ，ｇｒ１，ｇｒ２を含むワード）は省略可能とされ、省略された場合は、０が与えられたものと想定され、グループ０のレジスタセットが指定されたものと見なされ、レジスタフィールド（ｒ）で指定されるレジスタはレジスタ番号は０〜７とされ、汎用レジスタＥＲ０〜ＥＲが選択できる。そのようなワード（ｏｐ，ｇｒ１，ｇｒ２を含む命令コード）をレジスタ拡張用前置命令コードと称する。
【０７３９】
レジスタ番号ｎ＝ｇｒ［１：０］＜＜３＋ｒ［２：０］で求められる（＜＜３は３ビット左シフトを示す）。即ち、ｇｒを上位とし、ｒの下位３ビットｒ［２：０］を下位とした５ビットで指定される番号のレジスタを指定する。例えば、ｇｒ＝０、ｒ＝１の場合はレジスタ番号ｎ＝１となり、ｇｒ＝２、ｒ＝３の場合はレジスタ番号ｎ＝１９となる。このレジスタ番号ｎに対応する汎用レジスタＥＲｎの、命令コードのサイズを指定する部分や、ｒ［３］の内容によって、レジスタＥＲ、レジスタＥ、レジスタＲ、レジスタＲＨ、レジスタＲＬが指定される。例えば、データサイズがロングワード、ワード、バイトの何れであるかは命令コードのオペレーションフィールドの所定のビットで指定される。データサイズがワード又はバイトのとき、利用するレジスタ位置はｒ［３］で指定される。ｒ［３］は、ｒの下位から４ビット目のビットデータを意味する。データサイズがワードのときｒ［３］＝１のときはレジスタＥを指定し、ｒ［３］＝０のときはレジスタＲを意味する。データサイズがバイトのときｒ［３］＝１のときはレジスタＲＬを指定し、ｒ［３］＝０のときはレジスタＲＨを意味する。
【０７４０】
尚、ｇｒ１、ｒ１はソースレジスタまたはアドレスレジスタのレジスタ指定フィールドを意味し、ｇｒ２、ｒ２はデスティネーションレジスタまたはデータレジスタのレジスタ指定フィールドを意味する。ｇｒ１（命令コードの基本ワード中のビット７〜４）はｒ１（命令コードの基本ワード中のビット７〜４またはビット６〜４）に、ｇｒ２（命令コードの基本ワード中のビット３〜０）はｒ２（命令コードの基本ワード中のビット１１〜８またはビット３〜０）に対応する。
【０７４１】
ＥＡ拡張部（ＥＡ）は、イミディエイトデータ、絶対アドレスまたはディスプレースメントを指定し、８ビット、１６ビット、または３２ビットである。コンディションフィールド（ｃｃ）は条件分岐命令（Ｂｃｃ命令）の分岐条件を指定する。
【０７４２】
各命令フォーマット毎に例示されている命令コードは、１６進数で表記した機械語を意味する。グループ指定フィールドｇｒ１、ｇｒ２を持つ前置命令コード（００）を省略すると、既存の命令コードになるようになっている。
【０７４３】
例えば、図９の（２）に例示されたＨ'０９０１を単独で使用する場合、ＡＤＤ．Ｗ Ｒ０，Ｒ１となり、これに、図９の（３）に例示されるグループ指定フィールドを持つ前置命令コードＨ'００１２を付加すると、Ｈ'００１２０９０１は、 ＡＤＤ．Ｗ Ｒ８，Ｒ１７となる。
【０７４４】
また、暗黙的に使用されるグループ０を指定するＨ'００００はＮＯＰ（無操作）命令になる。 Ｈ'００ｘｘ（ｘｘは０１〜ＦＦ）は、グループフィールドを指定し、連続的に次の命令コードを実行する（割込みを禁止する）他は、ＮＯＰ命令と同様に、ＰＣのインクリメントを行い、最小のステート数で実行される。
【０７４５】
レジスタ指定フィールド（ｇｒ）は、４ビットあるので、論理的には汎用レジスタグループを１６に拡張することができる。この場合では３２ビット汎用レジスタ１２８本（または１６ビット汎用レジスタ２５６本）を利用できる。
【０７４６】
レジスタ指定フィールド（ｇｒ）に対応するオペレーションフィールドは複数種類あってよい。例えば、単純にレジスタ指定のみを行うものと、そのほかの機能（データサイズなど）を切り換える機能とを合わせ持つオペレーションコードとを用意しもよい。
【０７４７】
図１０はＣＰＵ５０２における単一の汎用レジスタのデータ転送命令の機械語の命令コードを例示する図面でもある。それぞれのアドレッシングモードの実効アドレスの計算は図７及び図８に従い、機械語の命令フォーマットは図９に従っている。
【０７４８】
図８３には複数汎用レジスタの転送命令（ＭＯＶＭ）のような命令を示す前置命令コード（命令拡張用前置命令コード）が例示される。複数レジスタの転送命令は、命令拡張用前置命令コードと、既存の転送命令コードとを組合せて、複合命令化して実現される。
【０７４９】
命令拡張用前置命令コードは以下の通りである。ビット２（最下位から３ビット目）が、レジスタのサイズを示し、Ｂ’０（Ｂ’はバイナリデータであることを意味する）がワードサイズ、Ｂ’１がロングワードサイズを意味する。ビット５、４が汎用レジスタ本数を示し、Ｂ’０１が２本、Ｂ’１０が３本、Ｂ’１１が４本とする。この本命令コードは、下位ＣＰＵの命令セットに対して追加された新たな命令コードとされる。
【０７５０】
この命令拡張用前置命令コードを用いたデータ転送命令は、単一の汎用レジスタとメモリのデータ転送命令（ＭＯＶ）のようなワードサイズの命令コード（例えば、絶対アドレス１６ビットのとき、２ワード）に、ロングワードサイズを示す命令コードが付加されて構成される（例えば、絶対アドレス１６ビットのとき、合計３ワード）のと等価である。
【０７５１】
図８３によれば、サイズを切り替える情報を保持しているため、単一の汎用レジスタとメモリのデータ転送命令のロングワードサイズを示す命令コードに代えて、前記命令拡張用前置命令コードを付加すればよい。命令コード長を長くすることなく、複数汎用レジスタのデータ転送命令（ＭＯＶＭ）を実現できる。
【０７５２】
なお、既存の、複数汎用レジスタのスタックへの待避命令である「ＳＴＭ  ＥＲ０−３，＠−ＳＰ」と、本発明の命令である「ＭＯＶＭ．Ｌ  ＥＲ０−３，＠−ＳＰ」とは概略同様の動作になるが、スタック上での汎用レジスタの配置順序が異なる。ＳＴＭ命令では、スタックの先頭（実効アドレス）からＥＲ３、ＥＲ２、ＥＲ１、ＥＲ０の順序でデータが配置されるのに対して、ＭＯＶＭ命令では、スタックの先頭からＥＲ０、ＥＲ１、ＥＲ２、ＥＲ３の順序でデータが配置される。上記双方の命令による処理は、後述するようにアドレス演算手法において大きく相違されている。
【０７５３】
前記命令拡張用前置命令コードを採用する場合には前記スタックへの退避命令を持たなくても動作上支障はないが、ソフトウェア資産を有効に利用する観点に立つと、両方の命令コードを持つことが望ましい。
【０７５４】
または、複数レジスタの転送命令における汎用レジスタのリード／ライトの順序を、番号の大きい方から使用するものとすれば、上記命令を同一の動作にすることもできる。更には、汎用レジスタのリード／ライトの順序を、内部Ｉ／Ｏレジスタなどで指定可能にしてもよい。
【０７５５】
図８４には上位ＣＰＵ５０２の詳細な一例が示される。このＣＰＵ５０２は制御部ＣＯＮＴと実行部ＥＸＥＣから構成される。
【０７５６】
制御部ＣＯＮＴは、命令レジスタＩＲ１、命令レジスタＩＲ２、命令デコーダＤＥＣ、レジスタセレクタＲＳＥＬ、割込み制御部ＩＮＴＣを有する。下位ＣＰＵに対して、命令レジスタＩＲ２が追加され、レジスタセレクタＲＳＥＬの構成が相違されている。命令デコーダＤＥＣも命令レジスタＩＲ２の追加や、レジスタセレクタＲＳＥＬの構成の変更に対応して変更されている。特に、制御部ＣＯＮＴは、命令拡張用前置命令コードの有無に応じた第１の制御、レジスタ拡張用前置命令コードの有無に応じた第２の制御を行なうようになっている。
【０７５７】
第１の制御は、命令で指定可能な複数の汎用レジスタの組み合わせを固定的にして、当該組み合わせが固定的な複数の汎用レジスタとアドレス空間上のメモリアドレス又は汎用レジスタとの間でデータ転送を可能にする制御を行う。上記転送命令の実効アドレスの計算は、演算器ＡＬＵで１回のみ行なうようにし、後続のアドレスについては、アドレスバッファＡＢのインクリメントまたはデクリメント機能で対処させる。
【０７５８】
第２の制御は、上位互換を考慮したレジスタ指定制御であり、一方では拡張された汎用レジスタをレジスタ拡張用前置命令コードを用いて指定するようにし、他方では、省略可能なレジスタ指定フィールドｇｒ（ｇｒ１、ｇｒ２）が省略されたとき省略不可能なレジスタ指定フィールドｒ（ｒ１、ｒ２）によるレジスタ指定を暗黙的にレジスタグループ０に含まれるレジスタの指定とみなす制御を行なう。
【０７５９】
前記命令デコーダＤＥＣは、例えば、マイクロＲＯＭ或はＰＬＡ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ａｒｒａｙ）または布線論理で構成される。
【０７６０】
レジスタセレクタＲＳＥＬには、前記命令デコーダＤＥＣの出力信号、命令レジスタＩＲ１，ＩＲ２の出力信号、そして前記ＳＹＳＣ３に含まれる内部Ｉ／ＯレジスタＣＰＵＣＲの出力信号ｉｓｐｇｒ，ｓｓｐｇｒが供給される。
【０７６１】
前記命令レジスタＩＲ１は内部データバスＩＤＢから命令が供給される。前記命令レジスタＩＲ１の出力は、もう一つの命令レジスタＩＲ２、前記命令デコーダＤＥＣ及び前記レジスタセレクタＲＳＥＬに結合される。前記命令レジスタＩＲ２の出力は前記レジスタセレクタＲＳＥＬに結合される。
【０７６２】
前記命令デコーダＤＥＣの出力はレジスタセレクタＲＳＥＬ及び前記命令レジスタＩＲ２に結合される。命令デコーダＤＥＣは命令レジスタＩＲ１にフェッチされた命令のオペレーションフィールドのオペレーションコードを解読する。
【０７６３】
命令レジスタＩＲ１にフェッチされた命令コードがレジスタ拡張用前記前置命令コードであるとき、命令デコーダＤＥＣがこれを解読することによって、当該レジスタ拡張用前置命令コードのレジスタグループ指定フィールド（ｇｒ）のレジスタ指定情報を命令レジスタＩＲ２にラッチさせる。その時のラッチ信号は命令デコーダＤＥＣから出力される。命令レジスタＩＲ２にラッチされたレジスタフィールド指定情報、及び続けて命令レジスタＩＲ１にフェッチされた後続の命令に含まれるレジスタフィールド（ｒ）のレジスタ指定情報は、レジスタセレクタＲＳＥＬで解読され、それら情報で直接的に指定されたレジスタグループの中のレジスタが選択され、選択されたレジスタを利用して当該後続の命令が実行される。この命令実行後、前記命令デコーダＤＥＣは前記命令レジスタＩＲ２のラッチ情報を全ビット値“０”（レジスタグループ０の指定情報）にクリアするためのセット信号を命令レジスタＩＲ２に供給する。したがって、その後に、前置命令コードを省いた命令が命令レジスタＩＲ１にフェッチされても、命令レジスタＩＲ２の出力はレジスタグループ０の指定情報を維持する結果、レジスタセレクタＲＳＥＬは暗黙的にレジスタグループ０が指定されていると見做して、命令レジスタＩＲ１からのレジスタ指定情報に従ったレジスタをレジスタグループ０から選択する。
【０７６４】
実行部ＥＸＥＣには、更に、テンポラリレジスタＴＲＡ，ＴＲＤ、算術論理演算器ＡＬＵ、インクリメンタＩＮＣ、リードデータバッファＲＤＢ、ライトデータバッファＷＤＢ、アドレスバッファＡＢを含む。これらの回路ブロックはデータバスＧＢ、ＤＢ、ＷＢによって相互に接続されている。前記データバスＧＢ、ＤＢはレジスタＥＲ０〜ＥＲ３１に対するデータリードバス、データバスＷＢはレジスタＥＲ０〜ＥＲ３１に対するデータライトバスとして位置付けられる。尚、詳細な図示を省いているが、実行部ＥＸＥＣの各部は、汎用レジスタの分割Ｅ（１６ビット）、Ｈ（８ビット）、Ｌ（８ビット）に呼応して分割されている。
【０７６５】
前記算術論理演算器ＡＬＵは、命令によって指定される各種の演算や実効アドレスの計算など用いる。前記インクリメンタＩＮＣは、主に、プログラムカウンタＰＣの加算に用いられる。
【０７６６】
リードデータバッファＲＤＢは、前記ＲＯＭ５０４、ＲＡＭ５０５、内部Ｉ／Ｏレジスタ、或は図示を省略する外部メモリから、リードした命令コードやデータを一時的に格納する。ライトデータバッファＷＤＢはＲＯＭ５０４、ＲＡＭ５０５、内部Ｉ／Ｏレジスタ、或は外部メモリへのライトデータを一時的に格納する。リードデータバッファＲＤＢ、ライトデータバッファＷＤＢによってＣＰＵ５０２の内部動作と、ＣＰＵ５０２の外部のリード／ライト動作のタイミングを調整している。
【０７６７】
アドレスバッファＡＢは、ＣＰＵ５０２がリード／ライトするデータのアドレスを一時的に格納するほか、格納した内容に対するインクリメント機能と、インクリメント結果を保持する機能を有している。ＧＢバス、ＤＢバス、ＷＢバスが３２ビットであるのに対して、ＩＤＢが１６ビットであるため、３２ビットのデータを、２回の１６ビットデータのアクセスとする場合に、２回目のデータアクセスに先立って、アドレスバッファＡＢの内容をインクリメントする。
【０７６８】
図８５には前記レジスタセレクタＲＳＥＬの一部と命令レジスタＩＲ２との詳細なブロック図が示される。
【０７６９】
前記命令レジスタＩＲ２は、保持手段としてのラッチ回路ＬＧＲ１，ＬＧＲ２を有する。これらラッチ回路ＬＧＲ１，ＬＧＲ２は、前述の通りレジスタグループ指定フィールドｇｒ１、ｇｒ２のレジスタグループ指定情報をラッチする。
【０７７０】
図８５に従えば、前記ラッチ回路ＬＧＲ１，ＬＧＲ２は、いわゆるリセット付きＤ型フリップフロップによって構成されている。リセット信号ＲＳＬＧＲとして、命令デコーダＤＥＣから指定される命令実行終了信号ＲＳＬＧＲを入力する。ラッチクロックとして、命令デコーダＤＥＣから指定されるラッチクロックＬＧＲＣＬを入力し、また、データとして、命令レジスタＩＲ１が保持する命令コードのビット７〜４、３〜０（グループ４の場合は、ビット５、４、１、０のみでもよい）を入力する。ラッチクロックＬＧＲＣＬは、レジスタグループを指定する命令コード（省略可能なレジスタ拡張用前置命令コード）を実行したときに活性状態になって、そのときのレジスタフィールド（ｇｒ）である、ビット７〜４、３〜０をラッチさせる。ラッチ回路ＬＧＲ１，ＬＧＲ２は、命令の実行終了時点で、命令デコーダＤＥＣからの制御信号であるリセット信号ＲＳＬＧＲに基づいて、所定の値、例えば全ビット０に設定され、レジスタブロック０を指定する状態に初期化される。汎用レジスタグループを指定するレジスタ拡張用前置命令コードを持たない命令は、ラッチ回路ＬＧＲ１，ＬＧＲ２が値“０”にクリアされたままになっているから、命令実行が行われるとき、レジスタグループ０の汎用レジスタが指定されることになる。
【０７７１】
レジスタセレクタＲＳＥＬのデスティネーションレジスタ指定側には、ラッチ回路ＬＧＲ２から出力されるレジスタグループ指定フィールド（ｇｒ２）の情報を保持するラッチ回路ＬＡＴ１と、命令レジスタＩＲ１から出力されるレジスタ指定フィールド（ｒ２）の情報をラッチするラッチ回路ＬＡＴ２が設けられている。それらラッチ回路ＬＡＴ１，ＬＡＴ２は、システムクロックφの反転クロックφ＃でラッチ動作を行うようになっており、ソースレジスタの選択動作より遅くデスティネーションレジスタの選択動作が行なわれる。これによって、デスティネーション側のレジスタ指定情報のラッチタイミング即ちデスティネーションレジスタ選択タイミングがソースレジスタ選択タイミングよりも０．５ステート遅くなるようにされる。ソースレジスタはアドレスレジスタとして先行して選択され、デスティネーションレジスタはデータの書込みのために遅れて選択されることが可能になっている。
【０７７２】
更に、命令レジスタＩＲ１から出力されるレジスタ指定フィールドｒ１の情報と、ラッチ回路ＬＡＴ２から出力されるレジスタ指定フィールドｒ２の情報とは、論理回路ＬＯＧ１，ＬＯＧ２に入力され、入力されたレジスタ指定フィールドｒ１、ｒ２のビット０と１が、制御信号ｓ１〜ｓ３よって制御されて、論理回路ＬＯＧ１，ＬＯＧ２から出力され、組合せ固定的なレジスタ選択に用いられる。前記制御信号ｓ１〜ｓ３はデコーダＤＥＣから出力される。制御信号ｓ１〜ｓ３は複数汎用レジスタの転送命令の実効時に使用され、それ以外のときは全部０にされていて、ＬＯＧ１，ＬＯＧ２の入力ｒ１，ｒ２がそのまま出力とされる。
【０７７３】
前記制御信号ｓ１〜ｓ３の機能は図８６に例示されている。制御信号ｓ１はレジスタ指定フィールドｒ１，ｒ２の情報のビット０を１に固定する。同様に、制御信号ｓ２はレジスタ指定フィールドｒ１，ｒ２の情報のビット１を１に、ビット０を０に固定する。ｓ３はレジスタ指定フィールドｒ１，ｒ２の情報のビット１とビット０を共に１に固定する。汎用レジスタ２本を指定する場合は、制御信号ｓ１が出力される。３本の場合は、ｓ１、ｓ２の順に出力され、４本の場合は、ｓ１、ｓ２、ｓ３の順に出力される。これにより、複数本の汎用レジスタを対象とする転送命令において最初に一つのレジスタがレジスタ指定フィールドｒ１，ｒ２で指定されれば、その後はそれに続くレジスタが上記制御信号ｓ１〜ｓ３により規定の順に選択される。これによって、組合せ固定的に順次汎用レジスタが選択される。上記制御信号ｓ１〜ｓ３の出力論理より明らかなように、複数の汎用レジスタの転送命令において３ビット又は４ビットのレジスタ指定領域ｒ１，ｒ２でレジスタを指定するとき、当該レジスタ指定領域ｒ１，ｒ２に設定可能な初期値は、その命令が転送対象とする汎用レジスタの本数によって異なり、２本の場合は＊＊＊０、３本の場合は＊＊００、４本の場合は＊＊００でなければならない。記号＊はどのような値を採ってもよい。これによって、レジスタセレクタＳＥＬ自体をそのほかの命令と共通化して、前記複数汎用レジスタ転送命令に対処できるので、論理的規模の増加を極力抑止できる。
【０７７４】
図８７には前記アドレスバッファＡＢの一例が示される。アドレスバッファＡＢは、ラッチ回路５２１、インクリメンタ５２２、セレクタ・バッファ５２３から構成される。前記ラッチ回路５２１は、内部バスＧＢとインクリメンタ５２２の出力を入力する。制御信号ｍａｂｉｎｃが活性状態の場合に、インクリメンタ５２２の出力がラッチされ、非活性状態の場合に、バスＧＢの内容がラッチされる。
【０７７５】
前記インクリメンタ５２２は、ラッチ回路５２１の出力を入力して、＋２の加算を行なう。制御信号ｍａｂｉｎｃが活性状態にされることによって、インクリメントされた値がラッチ回路２１からインクリメンタ２２に繰り返し帰還されることにより、複数回のインクリメント＋４、＋６、…が可能にされる。
【０７７６】
セレクタ・バッファ５２３は、ラッチ回路５２１とインクリメンタ５２２の内容を入力する。制御信号ｍａｂｉｎｃが活性状態の場合に、インクリメンタ５２２の出力が選択され、非活性状態の場合に、ラッチ回路５２１の出力が選択される。選択された内容は、バス権アクノレッジ信号に従って、内部アドレスバスＩＡＢに出力される。バス権アクノレッジが非活性の場合には、アドレスバッファＡＢは、内部アドレスバスＩＡＢへの出力は行なわず、出力はハイインピーダンス状態にされる。
【０７７７】
図８８及び図８９にはレジスタ・レジスタ間のワードサイズの転送命令（ＭＯＶ及びＭＯＶＭ命令）に対するデコーダＤＥＣの制御論理の一部が論理記述によって示される。図９の記述は図８８の後に続く残りの論理記述である。図９３は図８８乃至８９に記載の論理記述の制御によるレジスタ・レジスタ間の単一及び複数汎用レジスタの転送命令（ＭＯＶ及びＭＯＶＭ）による制御動作に対応されるフローチャートである。
【０７７８】
図８８及び図８９に示された論理記述は、ＲＴＬ（Register Transfer Level）若しくはＨＤＬ（Hardware Description Language）記述と呼ばれ、公知の論理合成ツールによって、論理回路に論理展開できる。ＨＤＬはＩＥＥＥ１３６４として標準化されている。これに示される論理記述の構文は、ケース（ｃａｓｅ）文に準拠しており、ａｌｗａｙｓ＠の次の（）内で定義された値若しくは信号に変化が有ったとき、それ以下の記述行の処理を行う、という内容になっている。「８’ｂ００００１０００」は８ビット長の００００１０００を意味する。また、図において、小文字の信号は、命令デコーダＤＥＣで生成され、出力される信号とし、大文字の信号は命令デコーダＤＥＣに入力された信号とする。
【０７７９】
図８８の論理記述において転送命令が単一汎用レジスタを用いるか、複数汎用レジスタを用いるかは、信号ＭＯＤ２〜ＭＯＤ４によって指示される。信号ＭＯＤ２は２本の汎用レジスタの指定を示し、信号ＭＯＤ３は３本の汎用レジスタの指定を示し、信号ＭＯＤ４信号は４本の汎用レジスタの指定を示す。それら信号ＭＯＤ２〜ＭＯＤ４は命令拡張用前置命令コードの内容によって生成される。
【０７８０】
図８８及び図８９の論理記述ではステートコードＴＭＧ（５ビットの情報）にしたがって制御信号を生成するようになっており、現時点でのステートコードの値とその時のＭＯＤ２〜ＭＯＤ４の値とに従って、次のステートコードＮＥＸＴＴＭＧの値を決定するようになっている。
【０７８１】
単一レジスタの転送命令ではステートコードＴＭＧは１（０００１）であり、これに対して、複数レジスタの転送命令固有のデータ転送制御のためにステートコードＴＭＧ５（００１０１）、９（０１００１）、１３（０１１０１）が加えられている。
【０７８２】
複数レジスタの転送命令は、ＭＯＤ２〜ＭＯＤ４信号で示される。図８８の論理記述の第１の部分（１）でステートコードＴＭＧが生成される。単一レジスタの場合、ステートコードＴＭＧは１である。複数レジスタの場合、例えば、ＭＯＤ４＝１ではＴＭＧは１→５→９→１３と進行する。ＭＯＤ３＝１では、ステートコード１３が、ＭＯＤ２＝１では、ステートコード９及び１３が、省略される。
【０７８３】
なお、ＮＥＸＴＴＭＧ［５］＝０のとき、次のＴＭＧはＮＥＸＴＴＭＧ［４：０］とされる。ＮＥＸＴＴＭＧ［５］＝１のとき、次のＴＭＧは５’ｂ００００１とされる。
【０７８４】
図８９の論理記述の第２の部分（２）でバス制御を行なう。ｎｏｐ＝０はバスアクセス開始、ｎｏｐ＝１はバスアクセス禁止を指示する。ｄａｔａ＝０は命令リード、ｄａｔａ＝１はデータアクセスを指示する。
【０７８５】
本転送命令の場合、ステートコードＴＭＧが１で命令リードを行い、ステートコードＴＭＧが５、９、１３ではバスアクセスを行なわない。
【０７８６】
命令リードの場合は所定のタイミングで内部データバスＩＤＢの内容が命令レジスタＩＲ１とリードデータバッファＲＤＢに格納される。データリードの場合は所定のタイミングで内部データバスＩＤＢの内容がリードデータバッファＲＤＢに格納される。データライトの場合は所定のタイミングでライトデータバッファＷＤＢの内容がＩＤＢに出力される。
【０７８７】
図８９の論理記述の第３の部分（３）で、転送データを制御する。各ステートで、汎用レジスタから内部バスＤＢへ出力し、算術論理演算器ＡＬＵを経由して、内部バスＷＢから汎用レジスタへのライトを指示する。
【０７８８】
いずれの場合も、汎用レジスタを指定した後、レジスタ指定フィールドｒ２の更新を行なう。信号ｓ１が１のときは、レジスタフィールドｒ１のビット０を１に固定する。同様に、信号ｓ２は、ビット１を１に、ビット０を０に固定する。信号ｓ３はビット１、０を１に固定する。
【０７８９】
ステートコードＴＭＧの１では、単一レジスタの転送命令、即ち、ＭＯＤ２〜ＭＯＤ４が何れも０のとき、ｃｃｒｓｅｔ信号が１とされ、コンディションコードレジスタＣＣＲの所定のビットが転送データを反映して変化するようにされる。
【０７９０】
図９０乃至図９２に記載の論理記述は、１６ビット絶対アドレスによる転送命令（ＭＯＶ及びＭＯＶＭ命令）に対するデコーダＤＥＣの制御論理の一部を示す。図９１の記述は図９０の後に続く残りの論理記述、図９２の記述は図９１の後に続く残りの論理記述である。図９４は図９０乃至図９２に記載の論理記述の制御による１６ビット絶対アドレスによる単一及び複数汎用レジスタの転送命令（ＭＯＶ及びＭＯＶＭ）による制御動作に対応されるフローチャートである。
【０７９１】
図１０の「（４）１６ビット絶対アドレス」に示される通り、データサイズはＩＲ［８］（インストラクションレジスタＩＲの最下位から８ビット目）＝０のときバイトサイズ、ＩＲ［８］＝１のときワードサイズ、転送方向はＩＲ［７］＝０のときメモリ→汎用レジスタ（リード型）、ＩＲ［７］＝１のとき汎用レジスタ→メモリ（ライト型）、の転送となる。
【０７９２】
ワードサイズ／ロングワードサイズ、単一レジスタ／複数レジスタの選択は、信号ＬＮＧ、信号ＭＯＤ２〜ＭＯＤ４によって指示される。信号ＬＮＧはロングワードサイズを示す。信号ＭＯＤ２〜ＭＯＤ４は、それぞれ２〜４本のレジスタ選択を示し、命令拡張用前置命令コードに従って生成される。
【０７９３】
単一レジスタの転送命令のフロー（ステートコード１→２→３）に対して、複数レジスタの転送命令固有のデータ転送のステート（ステートコード６、１０、１４）と、単一／複数レジスタの転送命令のロングワードサイズ時のステート（ステートコード１８、２２、２６、３０）が加えられている。
【０７９４】
図９０に示される論理記述の第１の部分（１）でステートコードＴＭＧが生成される。単一レジスタの場合、ステートコードＴＭＧは１→２→３と進行する。複数レジスタの場合、例えば、ＭＯＤ４＝１ではＴＭＧは１→２→６→１０→１４→３と進行する。ＭＯＤ３＝１では、ステートコード１４が省略され、ＭＯＤ２＝１では、ステートコード１０及び１４が省略される。また、ロングワードサイズの場合は、ステートコード１８、２２、２６、３０が追加される。
【０７９５】
図９１の論理記述の第２の部分（２）ではバス制御を行なう。本転送命令の場合、ステートコード１、３で命令リードを行い、ステートコード２、１８、６、２２、１０、２６、１４、３０でデータアクセスを行なう。データアクセスのリード／ライトはＩＲ［７］によって指示される。最後のデータアクセス以外では、ｌｏｎｇ＝１とし、バス権移譲禁止を指示する。
【０７９６】
命令リードの場合は所定のタイミングで内部データバスＩＤＢの内容がインストラクションレジスタＩＲとリードデータバッファＲＤＢに格納される。データリードの場合は所定のタイミングで内部デーバスＩＤＢの内容がリードデータバッファＲＤＢに格納される。データライトの場合は所定のタイミングでライトデータバッファＷＤＢの内容が内部データバスＩＤＢに出力される。
【０７９７】
図９１に示される論理記述の第３の部分（３）で実効アドレスを計算する。本転送命令の場合、ステートコード２で、リードデータバッファＲＤＢに保持している命令コードのＥＡ拡張部１６ビットを、信号ｄｂｒｅｘｔによって３２ビットに符号拡張した上、内部バスＧＢに出力する。内部バスＧＢの内容はアドレスバッファＡＢに毎ステート格納されるようにされており、特に制御は必要ない。ステートコード１８、６、２２、１０、２６、１４、３０では、信号ｍａｂｉｎｃによって、アドレスバッファＡＢに保持した内容のインクリメント（＋２）を行なう。
【０７９８】
図９２に示される論理記述の第４の部分（４）で、転送データを制御する。リード型（ＩＲ［７］＝０）の場合は、ステートコード６、１０、１４、３で、リードデータをリードデータバッファＲＤＢから内部バスＧＢへ出力し、算術論理演算器ＡＬＵと内部バスＷＢを経由して、汎用レジスタへ格納する。ライト型（ＩＲ［７］＝１）の場合は、ステートコード２、６、１０、１４で汎用レジスタから内部バスＤＢへ出力し、ライトデータバッファＷＤＢを経由して、内部データバスＩＤＢに出力する。何れの場合も、汎用レジスタを指定した後、レジスタ指定フィールドｒ１の更新を行なう。信号ｓ１が１のときは、レジスタフィールドｒ１のビット０を１に固定する。同様に、信号ｓ２は、ビット１を１に、ビット０を０に固定する。信号ｓ３はビット１、０を１に固定する。これらは、図９３においてｒ２＋＋と示されている。
【０７９９】
ステートコード３では、単一レジスタの転送命令、即ち、信号ＭＯＤ２〜ＭＯＤ４が何れも０のとき、信号ｃｃｒｓｅｔが１とされ、コンディションコードレジスタＣＣＲの所定のビットが転送データを反映して変化するようにされる。
【０８００】
そのほかのアドレッシングモードについても、上記同様に、所定の命令リードと実効アドレスの計算に加えて、ステートコード１８、６、２２、１０、２６、１４、３０に相当するデータアクセスの動作を加えればよい。これらは各種のアドレッシングモードに共通にすることができる。
【０８０１】
図９５にはレジスタ・レジスタ型の、第１の転送命令（ＭＯＶ．Ｌ ＥＲ０，ＥＲ１）、第２の転送命令（ＭＯＶ．Ｌ ＥＲ８，ＥＲ１７）、及び複数レジスタの転送命令の第１の例（ＭＯＶＭ．Ｗ Ｒ０−Ｒ１，Ｅ２８−Ｅ２９）の実行タイミングが例示される。
【０８０２】
レジスタ・レジスタ型の第１の転送命令（ＭＯＶ．Ｌ ＥＲ０，ＥＲ１）は、グループ０の汎用レジスタのみを使用するので、汎用レジスグループを指定する命令コードを必要とせず、前記ＣＰＵ２に対する下位ＣＰＵと同じ１ワードの命令とする。
【０８０３】
図９５では、特に制限はされないものの、内蔵ＲＯＭ５０４、ＲＡＭ５０５のリード／ライトを１ステートでリード／ライト可能とする場合のタイミングを示している。以下の説明において、φの立ち上がりに同期する１ステートをφ同期ステートと称し、φ＃（クロック信号φの反転クロック信号であり図示を省略する）の立ち上がりに同期する１ステートをφ＃同期ステートと称する。
【０８０４】
サイクルＴ０のφ＃同期ステートで、ＣＰＵ５０２のアドレスバッファＡＢからアドレスが内部アドレスバスＩＡＢに出力される。また、命令デコーダＤＥＣから、命令フェッチ（ｉｆ）を示す、バスコマンドＢＣＭＤが出力される。
【０８０５】
サイクルＴ１のφ同期ステートで、内部アドレスバスＩＡＢの内容が内部アドレスバスＰＡＢに出力され、バスコマンドＢＣＭＤに基づき、リードサイクルが開始され、内部データバスＰＤＢにデータが出力される。サイクルＴ１のφ＃同期ステートで内部データバスＰＤＢのリードデータが内部データバスＩＤＢに得られ、これをサイクルＴ２のφ同期ステートでインストラクションレジスタＩＲ１にラッチする。以上の動作は以前の命令の実行の制御によって行われる（プリフェッチ）。ここで、内蔵ＲＯＭ５０４、ＲＡＭ５０５は、内部アドレスバスＰＡＢ及び内部データバスＰＤＢに接続されていないが、前記内部バスＰＡＢ、ＰＤＢ相当の動作をモジュール内で行い、本タイミング図には、このモジュール内の動作を示している。
【０８０６】
直前の命令の実行が終了すると、最も早く命令の実行が開始される場合には、サイクルＴ２のφ同期ステートで命令コードが命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、制御信号を出力して、各部の制御を行う。命令の一部であるレジスタ指定フィードｒ１、ｒ２の値や複数レジスタのレジスタ本数によって形成される信号ｓ１〜ｓ３を回路ＬＯＧ１，ＬＯＧ２が受けて、レジスタフィールドｒ１、ｒ２の値を制御してそれを出力する。回路ＬＯＧ１の出力を信号ＳＥＬ１、回路ＬＯＧ２の出力を信号ＳＥＬ２と称する。
【０８０７】
レジスタ間演算命令では、サイクルＴ２のφ＃同期ステートで、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレス信号が出力される。このとき、ラッチ回路ＬＧＲ１及びＬＧＲ２が何れも０にクリアされているので、前記信号ＳＥＬ１、ＳＥＬ２と命令デコーダＤＥＣの出力する制御信号Ｂ（Ｒｓ→ＤＢ）とに基づいて、レジスタセレクタＲＳＥＬはレジスタ選択信号Ｂ（ＥＲ０→ＤＢ）を生成する。
【０８０８】
サイクルＴ３から、次の次の命令（本例では、ＭＯＶ．Ｌ ＥＲ８，ＥＲ１７）がリードされる。サイクルＴ３のφ同期ステートで、インクリメンタＩＮＣでインクリメント（＋２）された結果が、内部バスＷＢを経由してプログラムカウンタＰＣにライトされる。信号ＳＥＬ１、ＳＥＬ２と制御信号Ｃ（ＷＢ→Ｒｄ）とに基づいて、レジスタセレクタＲＳＥＬがレジスタ選択信号Ｃ（ＷＢ→ＥＲ１）を生成する。レジスタ選択信号Ｂがレジスタを選択して、ソース側のレジスタ（Ｒｓ）のデータを算術論理演算器ＡＬＵに入力する。算術論理演算器ＡＬＵの演算内容は、命令デコーダＤＥＣが制御信号Ｃによって指示する。加算、論理演算、シフトなどは１クロックで演算を行うことができる。例えば、上記命令では３２ビットの加算が指示される（バスＧＢ側の入力は０とされる）。
【０８０９】
次の命令の命令デコーダＤＥＣへのロードが指示される。制御信号Ｂ（ＲＳＬＧＲ）によって、ラッチ回路ＬＧＲ１、ＬＧＲ２のクリアが指示される。ラッチ回路ＬＧＲ１はサイクルＴ３のφ同期ステートで、ラッチ回路ＬＧＲ２はサイクルＴ３のφ＃同期ステートでクリアされた結果が伝達される。
【０８１０】
サイクルＴ３のφ＃同期ステートで、算術論理演算器ＡＬＵの演算結果が、内部バスＷＢを経由して、レジスタ選択信号Ｃが選択したデスティネーション側のレジスタ（ＥＲ１）にライトされる。図示はされないが、制御信号Ｃによって、コンディションコードレジスタＣＣＲの更新を行う。更に次の次の命令を命令レジスタＩＲ１に取り込む。同時に、次の命の実行が開始され、例えば、プログラムカウンタＰＣの内容を読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力される。
【０８１１】
グループ０同士のレジスタ間演算を実質的に１ステートで実行できる。
【０８１２】
レジスタ・レジスタ型の第２の転送命令（ＭＯＶ．Ｌ ＥＲ８，ＥＲ１７）は、汎用レジスタグループを指定する命令コードを付加して２ワード命令とする。第２ワードは前記ＭＯＶ．Ｌ Ｒ０，Ｒ１と同一である。すなわち、ｇｒ１＝１であるため、同じｒ１＝０に対して、レジスタ番号ｎ＝８、また、ｇｒ２＝２であるため、同じｒ２＝１に対して、レジスタ番号ｎ＝１７と解釈される。
【０８１３】
サイクルＴ２のφ＃同期ステートで、ＣＰＵ５０２のアドレスバッファＡＢからアドレスがアドレスバスＩＡＢに出力される。
【０８１４】
サイクルＴ３のφ同期ステートで、アドレスバスＩＡＢの内容がアドレスバスＰＡＢに出力され、リードサイクルが開始される。サイクルＴ３のφ＃同期ステートでリードデータが内部データバスに得られ、これをサイクルＴ４のφ同期ステートで命令レジスタＩＲ１にラッチする。これは、レジスタグループフィールドを持つ省略可能な命令ワード（前置命令コード）である。
【０８１５】
引き続き、サイクルＴ４のφ＃同期ステートで次のアドレス（＋２された内容）がアドレスバスＩＡＢに出力され、このリードデータがサイクルＴ５のφ同期ステートで命令レジスタＩＲ１にラッチされる。以上の動作は前記レジスタ・レジスタ型の第１の転送命令及び図示はされない次の命令の実行の制御によって行われている。
【０８１６】
サイクルＴ４のφ同期ステートで命令コード（前置命令コード）が命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、制御信号を出力して、各部の制御を行う。グループフィールドラッチ信号ＬＧＲＣＬが発行されて、レジスタグループ指定フィールド（ＩＲ１のビット７〜０）がラッチ回路ＬＧＲ１，ＬＧＲ２にラッチされる。
【０８１７】
サイクルＴ４のφ＃同期ステートで、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレス信号が出力される。
【０８１８】
サイクルＴ５から、更に次の命令（本例では、ＭＯＶＭ．Ｗ Ｒ０−Ｒ１，Ｅ２８−Ｅ２９）がリードされる。
【０８１９】
サイクルＴ５のφ同期ステートで、インクリメンタＩＮＣでインクリメント（＋２）された結果が、内部バスＷＢを経由してプログラムカウンタＰＣにライトされる。第１ワードと第２ワード以降が分割されないための制御信号Ｂ（ｃｏｎｔｒｏｌＢ）に含まれる連続命令信号ｃｏｎｔｉｎｕｅ（割込み禁止信号ｍｓｋｉｎｔと同じ）を割込み制御回路ＩＮＴＣに出力する。本信号によって、割込み要求などが発生していても、命令の実行を継続することができる。また、ラッチ回路ＬＧＲ１、ＬＧＲ２の内容が保持される。
【０８２０】
一方、サイクルＴ４のφ同期ステートで命令コード（転送命令を指示）が命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、制御信号を出力して、各部の制御を行う。ＬＧＲ１＝１及びＬＧＲ２＝２であるため、信号ＳＥＬ１，ＳＥＬ２と命令デコーダＤＥＣの出力する制御信号Ｂ（Ｒｓ−ＤＢ）とに基づいて、レジスタ選択信号Ｂ（ＥＲ８−ＤＢ）が生成される。信号ＳＥＬ１、ＳＥＬ２と制御信号Ｃ（ＷＢ−Ｒｄ）とに基づいて、レジスタ選択信号Ｃ（ＷＢ−ＥＲ１７）が生成される。これ以外の第２ワードによる動作は第１の転送命令（ＭＯＶ．Ｌ ＥＲ０，ＥＲ１）と同一にできる（第１の転送命令同様に、制御信号Ｂ（ＲＳＬＧＲ）によって、ＬＧＲ１、ＬＧＲ２のクリアが指示される。ラッチ回路ＬＧＲ１はサイクルＴ６のφ同期ステートで、ラッチ回路ＬＧＲ２はサイクルＴ６のφ＃同期ステートでクリアされた結果が伝達される）。
【０８２１】
即ち、第１ワード（前置命令コード）に対応するラッチ回路ＬＧＲ１，ＬＧＲ２のラッチ信号、連続命令信号を出力する以外は、命令デコーダＤＥＣの内容を、既存の下位ＣＰＵの命令デコーダと同等にできる。命令デコーダＤＥＣの前置命令コードに対応する部分は、相対的に小さいことは言うまでもない。すなわち、論理的な規模の追加を最小限にできる。また、命令デコーダＤＥＣの大部分を既存の下位ＣＰＵの命令デコーダと同等にできるから、従来の設計資産を有効に利用することができる。
【０８２２】
次に、複数レジスタのレジスタ・レジスタ間転送命令である「ＭＯＶＭ．Ｗ  Ｒ０−Ｒ１，Ｅ２８−Ｅ２９」の例を示す。レジスタ指定フィールドｒ１は３’ｂ０００、ｒ２は３’ｂ１００である。
【０８２３】
本転送命令「ＭＯＶＭ．Ｗ  Ｒ０−Ｒ１，Ｅ２８−Ｅ２９」は、汎用レジスタグループを指定するレジスタ拡張用前置命令コードと、ＭＯＶＭを示す命令拡張用前置命令コード（プリフィックスコードとも称する）を付加して、３ワード命令とする。第３ワード（ｍｏｖ）はＭＯＶ．Ｗ Ｒ０，Ｒ４と同一である。ｇｒ２＝３であるため、同じｒ１＝４に対して、レジスタ番号ｎ＝２８と解釈される。ワードサイズで、ｒ２［３］＝１であるため、汎用レジスタＥが指定される。
【０８２４】
サイクルＴ５のφ＃同期ステートで、ＣＰＵ５０２のアドレスバッファＡＢからアドレスがアドレスバスＩＡＢに出力される。
【０８２５】
サイクルＴ６のφ同期ステートで、アドレスバスＩＡＢの内容がアドレスバスＰＡＢに出力され、リードサイクルが開始される。サイクルＴ６のφ＃同期ステートでリードデータが内部データバスに得られ、これをサイクルＴ７のφ同期ステートで命令レジスタＩＲ１にラッチする。これは、レジスタグループフィールドを持つ省略可能な命令ワード（前置命令コード）である。
【０８２６】
引き続き、サイクルＴ７のφ＃同期ステートで次のアドレス（＋２された内容）がアドレスバスＩＡＢに出力され、このリードデータがサイクルＴ８のφ同期ステートで命令レジスタＩＲ１にラッチされる。以上の動作は前記レジスタ・レジスタ型の第２の転送命令及び図示はされない次の命令の実行の制御によって行われている。
【０８２７】
サイクルＴ７のφ同期ステートで第１の命令コードが命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、グループフィールドラッチ信号ＬＧＲＣＬが発行されて、レジスタグループ指定フィールド（ＩＲ１のビット７〜０）がラッチ回路ＬＧＲ１、ＬＧＲ２にラッチされる。
【０８２８】
サイクルＴ７のφ＃同期ステートで、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスバスＩＡＢにアドレス信号が出力される。
【０８２９】
サイクルＴ８から、次の次の命令がリードされる。サイクルＴ８のφで、インクリメンタＩＮＣでインクリメント（＋２）された結果が、内部バスＷＢを経由してプログラムカウンタＰＣにライトされる。第１ワードと第２ワード以降が分割されないための制御信号Ｂで連続命令信号（割込み禁止信号）を割込み制御回路ＩＮＴＣに出力する。また、ラッチ回路ＬＧＲ１，ＬＧＲ２の内容が保持される。また、第２の命令コードが命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、制御信号ＭＯＤ２が出力される。サイクルＴ８のφ＃同期ステートで、プログラムカウンタＰＣの内容を内部バスＧＢに読み出して、アドレスバッファＡＢとインクリメンタＩＮＣに入力する。アドレスバッファＡＢからアドレスＩＡＢにアドレス信号が出力される。
【０８３０】
一方、サイクルＴ９のφ同期ステートで命令コード（転送命令を指示）が命令デコーダＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、制御信号を出力して、各部の制御を行う。ＬＧＲ１＝０及びＬＧＲ２＝３であるため、信号ＳＥＬ１、ＳＥＬ２と命令デコーダＤＥＣの出力する制御信号Ｂ、Ｃ（Ｒｓ−ＤＢ、ＷＢ−Ｒｄ）とに基づいて、レジスタセレクタＲＳＥＬでレジスタ選択信号Ｂ、Ｃ（Ｒ０−ＤＢ、ＷＢ−Ｅ２８）が生成される。制御信号ｓ１が生成されて、ＳＥＬ１、ＳＥＬ２の変更（３’ｂ１００→１０１）が指示される。
【０８３１】
引き続き、ＭＯＤ２信号に従って、信号ＳＥＬ１、ＳＥＬ２と命令デコーダＤＥＣの出力する制御信号Ｂ、Ｃ（Ｒｓ−ＤＢ、ＷＢ−Ｒｄ）とに基づいて、レジスタセレクタＲＳＥＬがレジスタ選択信号Ｂ、Ｃ（Ｒ１−ＤＢ、ＷＢ−Ｅ２９）を生成する。
【０８３２】
図９６には複数レジスタの転送命令の第２の例（ＭＯＶＭ．Ｌ  ＠ａａ：１６，ＥＲ０−ＥＲ１）の実行シーケンスが示される。
【０８３３】
上記命令は、２本の汎用レジスタへデータをリードする例である。レジスタ指定フィールドは３’ｂ０００である。アドレッシングモードは、絶対アドレス１６ビットであり、実効アドレスはａａを符号拡張した内容である。この符号拡張は、リードデータバッファＲＤＢから読み出す際に行われるようにされる。以下では、ａａを符号拡張した内容も、単にａａと記す。
【０８３４】
サイクルＴ２から転送命令の実行が開始される。特に制限はされないものの、命令コードの第１ワードは、ＭＯＶＭを示すプリフィックスコードであり、次の命令コードの動作を指定（ＭＯＤ２信号出力）し、プログラムカウンタＰＣをインクリメントするほかの動作は行わない。
【０８３５】
第２ワードの命令コード（ｍｏｖ−１）は、ＭＯＶ．Ｌ  ＠ａａ：１６，ＥＲ０命令と共通である。
【０８３６】
サイクルＴ４のφ＃同期ステートでリードデータバッファＲＤＢの内容がバスＧＢに出力されて、アドレスバッファＡＢに格納される。アドレスバッファＡＢの内容がアドレスバスＩＡＢに出力される。同時に、バスコマンドＢＣＭＤが出力され、ワードデータリードと次のバスサイクルでのバス権移譲禁止が示される。
【０８３７】
サイクルＴ５のφ＃同期ステートで、リードデータの上位１６ビット（汎用レジスタＥの内容）が内部データバスＩＤＢに出力される。また、アドレスバッファＡＢのインクリメント機能によって、アドレスバスＩＡＢの出力値をａａ＋２とする。同時に、バスコマンドＢＣＭＤが出力され、ワードデータリードと次のバスサイクルでのバス権移譲禁止が示される。
【０８３８】
サイクルＴ６のφ同期ステートで、リードデータがリードデータバッファＲＤＢに格納される。
【０８３９】
サイクルＴ６のφ＃同期ステートで、リードデータの下位１６ビット（汎用レジスタＲの内容）が内部データバスに出力される。また、アドレスバッファＡＢのインクリメント機能によって、アドレスバスＩＡＢの出力値をａａ＋４とする。同時に、バスコマンドＢＣＭＤが出力され、ワードデータリードと次のバスサイクルでのバス権移譲禁止が示される。
【０８４０】
サイクルＴ７のφ同期ステートで、リードデータの内容が、３２ビットでバスＧＢを経由して算術論理演算器ＡＬＵに転送される。
【０８４１】
サイクルＴ７のφ＃同期ステートで、リードデータの上位１６ビット（汎用レジスタＥの内容）が内部データバスに出力される。また、アドレスバッファＡＢのインクリメント機能によって、アドレスバスＩＡＢの出力値をａａ＋６とする。同時に、バスコマンドＢＣＭＤが出力され、ワードデータリードと次のバスサイクルでのバス権移譲許可が示される。
【０８４２】
サイクルＴ８のφ＃同期ステートで、リードデータの下位１６ビット（汎用レジスタＲの内容）が内部データバスに出力される。また、第２の制御信号Ｂによってレジスタ選択信号のビット０が反転される。第１の制御信号Ａと信号ＳＥＬ２（＝３’ｂ００１）とによって、転送されるレジスタが選択され、レジスタ制御信号Ｂが生成される。
【０８４３】
サイクルＴ８のφ＃同期ステート以降で、前記同様に、次の次の命令の読み出しと、プログラムカウンタＰＣのインクリメント（＋２）を行う。
【０８４４】
レジスタ３本を指定した場合は、実行ステート数が２ステート長くなり、アドレスバッファＡＢのインクリメント（＋２）が更に２回行われる（合計＋６）。また、信号ＳＥＬ１、ＳＥＬ２のビット１が反転され、レジスタ指定フィールドが０００の場合、０１０とされ、汎用レジスタＥＲ２が選択される。ライト動作が２回（合計６回）行われる。
【０８４５】
レジスタ４本を指定した場合は、更に、実行ステート数が２ステート長くなり、アドレスバッファＡＢのインクリメント（＋２）が更に２回行われる（合計＋１０）。また、信号ＳＥＬ１、ＳＥＬ２のビット１とビット０が反転され、レジスタ指定フィールドが０００の場合、０１１とされ、汎用レジスタＥＲ２、ＥＲ３が選択される。ライト動作が２回（合計８回）行われる。
【０８４６】
レジスタ番号の下位ビットが固定であるので、これを命令処理の実行に従って、変更する制御が容易である。加算器などを不要にして、論理的規模の増加を抑止できる。例えば、２本のレジスタを待避する場合、命令コード上のレジスタ指定フィールドの下位ビットは０であるので、１回めのレジスタ指定は、レジスタ指定フィールドの値に従い、２回のレジスタ指定は、命令デコーダＤＥＣの制御に従って、レジスタ指定フィールドの下位１ビットを１に変更して、行うようにする。
【０８４７】
一方、ＭＯＶ命令はレジスタ１本のリードであり、前記の２回目のリード動作を行わないようにされ、実行動作の共通化を図っている。
【０８４８】
図９７には複数レジスタの転送命令の第３の例（ＭＯＶＭ．Ｗ  Ｒ１０−Ｒ１１，＠ＥＲ６）の実行シーケンスが示される。上記命令は、２本のワードサイズの汎用レジスタをライトする例である。レジスタ指定フィールドは３’ｂ０１０である。
【０８４９】
サイクルＴ２から転送命令の実行が開始される。特に制限はされないものの、命令コードの第１ワードはレジスタグループフィールドを持つプリフィックスコードであり、レジスタグループ指定フィールド（ＩＲ１のビット７〜０）がラッチ回路ＬＧＲ１、ＬＧＲ２にラッチされ、プログラムカウンタＰＣをインクリメントする。
【０８５０】
第２ワードの命令コードは、ＭＯＶＭを示すプリフィックスコードであり、次の命令コードの動作を指定する。制御信号ＭＯＤ２が出力される。第３ワードの命令コードは、ＭＯＶ．Ｗ  Ｒ２，＠ＥＲ６命令と共通にされる。
【０８５１】
サイクルＴ４のφ＃同期ステートでレジスタＥＲ６の内容がバスＧＢに出力され、アドレスバッファＡＢに格納される。アドレスバッファＡＢの内容がアドレスバスＩＡＢに出力される。同時に、バスコマンドＢＣＭＤが出力され、ワードデータライトと次のバスサイクルでのバス権移譲禁止が示される。
【０８５２】
また、第１の制御信号Ｂとラッチ回路ＬＧＲ２のラッチ情報（＝３’ｂ００１）と信号ＳＥＬ２（＝３’ｂ０１０）とによって、転送されるレジスタが選択され、レジスタ制御信号Ｂが生成される。制御信号ｓ１が生成されて、信号ＳＥＬ２の変更（３’ｂ０１０→０１１）が指示される。
【０８５３】
ステートサイクルＴ５のφ同期ステートで、選択されたレジスタ（Ｒ１０の内容）がバスＤＢ経由で、ライトデータバッファＷＤＢに転送される。
【０８５４】
Ｔ５のφ＃同期ステートで、転送されたデータ（Ｒ１０の内容）が内部データバスＩＤＢに出力される。また、アドレスバッファＡＢのインクリメント機能によって、アドレスバスＩＡＢの出力値をＥＡ＋２とする。また、第１の制御信号Ｂとラッチ回路ＬＧＲ２のラッチ情報（＝３’ｂ００１）と信号ＳＥＬ２（＝３’ｂ０１１）とによって、転送されるレジスタが選択され、レジスタ制御信号Ｂが生成される。
【０８５５】
サイクルＴ６のφ同期ステートで、選択されたレジスタＲ１１の内容がバスＤＢ経由で、ライトデータバッファＷＤＢに転送される。
【０８５６】
サイクルＴ６のφ＃同期ステートで、転送されたデータ（Ｒ１１の内容）が内部データバスＩＤＢに出力される。
【０８５７】
サイクルＴ６のφ＃同期ステート以降で、前記同様に、次の次の命令の読み出しと、プログラムカウンタＰＣのインクリメント（＋２）を行う。
【０８５８】
レジスタ３本を指定した場合は、実行ステート数が１ステート長くなり、アドレスバッファＡＢのインクリメント（＋２）が更に１回行われる（合計＋４）。また、信号ＳＥＬ１、ＳＥＬ２のビット１が反転され、レジスタ指定フィールドが０００の場合、０１０とされる。ライト動作が１回（合計３回）行われる。
【０８５９】
レジスタ４本を指定した場合は、更に、実行ステート数が１ステート長くなり、アドレスバッファＡＢのインクリメント（＋２）が更に１回行われる（合計＋６）。また、ＳＥＬ１、ＳＥＬ２のビット１とビット０が反転され、レジスタ指定フィールドが０００の場合、０１１とされる。ライト動作が１回（合計４回）行われる。
【０８６０】
図９８には前記ＣＰＵ５０２の開発環境の概略が示される。これは、既存の下位ＣＰＵと、これに対する上位互換の前記ＣＰＵ５０２とで、共通の開発環境を提供できるようにするものである。
【０８６１】
使用者は、各種エディタなどを用いて、Ｃ言語乃至アセンブリ言語でプログラムを作成する。これは通常、複数のモジュールに分割して作成される。
【０８６２】
Ｃコンパイラ５４０は、使用者の作成したそれぞれのＣ言語ソースプログラムを入力し、アセンブリ言語ソースプログラム乃至オブジェクトモジュールを出力する。アセンブラ５４１は、アセンブリ言語ソースプログラムを入力し、オブジェクトモジュールを出力する。リンケージエディタ５４２は、上記Ｃコンパイラ５４０やアセンブラ５４１の生成した、複数のオブジェクトモジュールを入力して、各モジュールの外部参照や相対アドレスなどの解決を行い、１つのプログラムに結合して、ロードモジュールを出力する。
【０８６３】
ロードモジュールは、シミュレータデバッガ５４３に入力して、パーソナルコンピュータなどのシステム開発装置上で、ＣＰＵの動作をシミュレーションし、実行結果を表示し、プログラムの解析や評価を行なうことができる。また、ロードモジュールをエミュレータ５４４に入力して、実際の応用システム上などで動作する、いわゆるインサーキットエミュレーションを行ない、マイクロコンピュータ全体としての、実動作の解析や評価を行なうことができる。更には、ロードモジュールをＰＲＯＭライタ５４５に入力して、マイクロコンピュータ１のＲＯＭ５０４が、フラッシュメモリのような電気的に書込み可能なメモリである場合に、かかるメモリに書込みを行なうことができる。このほかに、ライブラリアンとして、汎用的なサブルーチンなどを提供することもできる。
【０８６４】
図４３は前記ＣＰＵ５０２のシステム開発装置におけるＣＰＵ選択方法を例示する図面でもある。図４３に基づいて説明した内容はＣＰＵ５０２のシステム開発装置のもそのまま当てはまる。ＣＰＵの選択方法としては、ウィンドウのドロップダウンメニューで選択可能にしてもよいし、ワークステーションなどであれば、Ｃシェルコマンドとして入力することもできる。更に、アセンブラやＣコンパイラなどの、ソースプログラムの制御命令として、ＣＰＵの種類及び動作モードを入力することができる。
【０８６５】
アセンブラは、選択されたＣＰＵの種類及び動作モードに従って、入力されたアセンブリ言語ソースプログラム上の記述を解釈し、オブジェクトモジュールを生成したり、エラーがあればそれを表示したりする。既存の下位ＣＰＵを選択し、前記上位ＣＰＵ５０２に存在して、既存ＣＰＵに存在しない命令（前記拡張命令）を記述するとエラーになる。命令コード自体はＣＰＵ５０２が包含しているから、このためのアセンブラ５４１を開発し、既存の下位ＣＰＵについては、上位ＣＰＵ５０２に存在して、既存の下位ＣＰＵに存在しない命令を検出するような追加を行なうなどして、容易に共通化できる。既存の下位ＣＰＵについては、アセンブラが存在しているはずであるから、これを容易に改造して、前記上位ＣＰＵ２に適用できることは言うまでもない。
【０８６６】
Ｃコンパイラは、選択されたＣＰＵの種類及び動作モードに従って、使用可能な、オペレーション、データサイズ、アドレッシングモードの組合せで示される命令や、汎用レジスタ、アドレス空間を判別して、Ｃ言語によるプログラムを、ＣＰＵの命令に変換し、アセンブリ言語プログラムやオブジェクトモジュールとして出力する。
【０８６７】
Ｃコンパイラ自体には、Ｃ言語によるプログラムを、ＣＰＵの命令に変換する機能の他、Ｃ＋＋言語によるプログラムのコンパイルや、モジュール間最適化などといった、ＣＰＵの命令セットとは直接関係のない機能の向上が図られているが、ＣＰＵ毎の個別のコンパイラでは、これらの機能向上を全ての個別のコンパイラに適用しなければならない。本発明のように、共通のＣコンパイラ５４０としておけば、前記、ＣＰＵの命令セットとは直接関係のない機能向上を図ることが容易になり、また、開発効率などを向上することができる。
【０８６８】
シミュレータデバッガは、入力されたロードモジュールのプログラムを解釈して、ＣＰＵの動作をシミュレーションし、その中で、エラーがあればそれを表示したりする。例えば、既存の下位ＣＰＵを選択し、本発明のＣＰＵ５０２に存在して、既存ＣＰＵに存在しない命令を実行しようとするとエラーになる。命令コード及び命令実行機能自体は本発明のＣＰＵ５０２が包含しているから、このためのシミュレータデバッガ５４３を開発し、既存の下位ＣＰＵについては、本発明のＣＰＵ５０２に存在して、既存のＣＰＵに存在しない命令を検出するような追加を行なうなどして、容易に共通化できる。既存のＣＰＵについて、シミュレータデバッガが存在していれば、これを容易に改造して、本発明のＣＰＵ５０２に適用できることは言うまでもない。
【０８６９】
図４５は本発明に係るＣＰＵ５０２を有するマイクロコンピュータのためのエミュレータを示す図面でもある。図４５において、エミュレーション用プロセッサ４１０は、マイクロコンピュータ部分にエミュレーション用インタフェースを加えて構成される。前記マイクロコンピュータ部分は、例えば図７９のマイクロコンピュータ５０１の構成に相当される。例えば、システム開発装置４２７から入力されたプログラム（ロードモジュール）をエミュレーションメモリ４２１のユーザプログラム格納領域に転送し、内蔵ＲＯＭ５０４上に配置されるべきかかるプログラムをＣＰＵ５０２がリードすると、エミュレーションメモリ４２１上のプログラムがリードされ、実行される。また、ブレーク条件や、リアルタイムトレース条件などもシステム開発装置４２７から与えることができる。
【０８７０】
コントロールプロセッサ４２５は、応用システム４１２で本来使用するＣＰＵの種類の選択を行うためのプログラムを、エミュレーションメモリ４２１のエミュレーションプログラム格納領域に格納する。ＣＰＵ５０２は、かかるプログラムを、所定の条件でブレークした状態で、実行し、エミュレーション用の制御レジスタの設定を行なうことで、エミュレーション上の必要な設定を行なう。この場合は、エミュレーション用プログラムの実行モード、いわゆるブレークモードでのみライト可能にすると都合がよい。開発途上にあるユーザのソフトウェアの誤動作によって、誤った設定を行なってしまうことを抑止できる。また、制御レジスタを用いることによって、応用システム４１２で本来使用するＣＰＵの種類の選択対象が増えたりしても、制御レジスタの構成のみを変更すればよく、エミュレーション用インタフェースを変更する必要がなく、エミュレータのハードウェアを変更しなくてよい。
【０８７１】
図９９には前記マイクロコンピュータ５０１に対応されるエミュレーション用プロセッサのブロック図が示される。エミュレーション用プロセッサ５０は、図７９のマイクロコンピュータ５０１の部分（マイクロコンピュータコア５７１）と、エミュレーションインタフェース５７２から構成される。なお、図７９のタイマや入出力ポートなどは、Ｉ／Ｏとして代表させ、また、内部バスの詳細とバスコントローラを図示している。なお、図７９のタイマ５０６、パルス出力回路５０７、及び入出力ポートＩＯＰ１〜ＩＯＰ５，ＩＯＰＡ〜ＩＯＰＦなどは、Ｉ／Ｏ５７３、ユーザバッファ（ユーザＢＵＦ）５７４として代表させている。ユーザインタフェース５７６は前記Ｉ／Ｏ５７３、ユーザバッファ５７４、及び図示を省略する入出力バッファなどを含む、ユーザシステム（エミュレーション対象システムであるターゲットシステム）に接続されるインタフェース回路を総称する。
【０８７２】
マイクロコンピュータコア５７１は、図７９のマイクロコンピュータ５０１に対して未定義命令検出回路５７８が追加されている。エミュレーションインタフェース５７２は、制御レジスタ５７９を含む。制御レジスタ５７９は、ブレークモードでのみライト可能とされる。エミュレーションインタフェース５７２から入出力される信号は、アドレスバス、データバス、リード信号、ライト信号、データサイズ信号、命令フェッチ信号などバスの状態を表示するバスステータス信号、命令の実行開始を示す信号、割込み処理の実行開始を示す信号などのＣＰＵ５０２の実行状態を示すＣＰＵステータス信号、などを含み、エミュレータによる、マイクロコンピュータの動作解析に使用される。
【０８７３】
未定義命令検出回路５７８は、ＣＰＵ５０２に入力される命令コードを解析し、選択されているＣＰＵの機能に存在しない命令が実行を開始したことを検出すると、ＣＰＵ５０２にブレーク割込みを要求する。ＣＰＵ５０２に何れの機能が選択されるかは、制御レジスタ５７９から指示される。例えば、既存の下位ＣＰＵの機能が選択されている場合には、レジスタグループフィールドを持つ前置命令コードを実行すると、未定義命令として検出される。具体的には、命令コードを前記ＬＩＲ信号でラッチして、解析し、未定義と解読された場合、前記ＬＩＤ信号が発生した時点で、ブレーク割込みを要求するようにすればよく、容易である。
【０８７４】
エミュレーション用プロセッサ５５０は、前述の通り、上位ＣＰＵ５０２を内蔵し、これを用いて、その他の下位ＣＰＵの代行をさせることができる。どれを選択するかはレジスタ５７９で指定すればよい。
【０８７５】
いずれにせよ、エミュレーション用インタフェースを共通化しておけば、ＣＰＵ乃至そのほかの機能ブロックが変更になった場合にも、エミュレータ側のハードウェアの変更をする必要がなく、エミュレーション用プロセッサ５５０のみを変更して、命令の動作を解析して表示する際の逆アセンブラに、いずれのＣＰＵを対象にするかを指示すればよい。逆アセンブラに対する指示は、使用者がシステム開発装置から指定することもできるし、アセンブラからの入力情報によって、自動的に選択されるようなものであってもよい。これによってエミュレータの開発効率を向上し、エミュレータの開発環境を早く提供することができる。
【０８７６】
図１００には本発明の適用されたマイクロコンピュータ５０１をプリンタ制御に用いたマイクロコンピュータシステムが例示される。
【０８７７】
プリンタ制御システムは、マイクロコンピュータ５０１と、セントロニクスインタフェース（またはＩＥＥＥ１２８４）やユニバーサルシリアルバス又はオプションなどの送受信回路（受信回路または送受信回路）５８０と、バッファＲＡＭ（ＤＲＡＭ）５８１と、キャラクタジェネレートＲＯＭ（ＣＧＲＯＭ）５８２と、プログラムＲＯＭ５８３と、印字制御回路５８４とを含み、これらがマイクロコンピュータの外部バス５８５を介して接続される。
【０８７８】
外部バス５８５に接続されるアドレス空間は所定の大きさのエリアに分割されており、それぞれにバス仕様（バス幅、アクセスステート数、アドレスマルチプレクス、バースト動作など）を設定可能になっている。エリア毎のそのようなバス制御は、マイクロコンピュータ５０１に含まれる前記バスコントローラ５１０の外部バスコントローラが行なう。
【０８７９】
プログラムＲＯＭ５８３はエリア０に、バッファＲＡＭ５８１はエリア２に、ＣＧＲＯＭ５８２はエリア６に、送受信回路５８０及び印字制御回路５８４はエリア７に接続される。バッファＲＡＭ５８１はリード／ライト可能なメモリであり、ダイナミック型メモリ故にリフレッシュ動作が必要であるが、安価であることが知られている。バッファＲＡＭ５８１についてはアドレス配置が記載されている。バッファＲＡＭ５８１は２ＭＢ（１６Ｍビット）の記憶容量を有し、１ＭバイトをＣＰＵ５０２の作業領域に、残りを５１２ｋＢずつのリングバッファとされる。
【０８８０】
また、本システムは、更に、ラインフィードモータ５９０、キャリッジリターンモータ５９１を含み、これらのモータ５９０、５９１は、それぞれタイマ５０６の出力、パルス出力装置５０７の出力がバッファ回路９２を介して与えられることによって制御される。ラインフィードモータ５９０、キャリッジリターンモータ５９１は、特に制限はされないものの、ステッピングモータである。
【０８８１】
マイクロコンピュータ５０１に内蔵されているＤＭＡＣ５１１は、印字データの出力、ラインフィードモータ５９０、キャリッジリターンモータ５９１を駆動するパルス出力を行う。また、ＤＭＡＣ５１１はＳＣＩ５０８の送信データ、受信データの転送制御を行なう。
【０８８２】
図示はされないものの、ＳＣＩ５０８はホストなどとの通信に使用し、Ａ／Ｄ変換器５０９は紙枚数などのセンサ情報を入力する。
【０８８３】
ＥＸＤＭＡＣ５１２はセントロニクスインタフェースやユニバーサルシリアルバスなどの複数の送受信回路５８０によるデータの受信を、ＣＰＵ５０２の動作と並行して行う。ＥＸＤＲＥＱ入力に転送要求信号を入力し、転送時には、ＥＸＤＡＣＫ出力によって、シングルアドレス転送を行うことができる。例えば、セントロニクスインタフェースのインプットストローブ信号をＥＸＤＲＥＱ０に入力し、チャネル０でデュアルアドレス転送を行い、オプションインタフェースの受信信号をＥＸＤＲＥＱ１に入力し、ＥＸＤＡＣＫ１出力を、オプションインタフェースに与えて、チャネル１でシングルアドレス転送を行う。
【０８８４】
ＥＸＤＡＭＣ５１２は、デスティネーションまたはソースの一方を、アドレス空間上のメモリや内部Ｉ／Ｏレジスタではなく、ＥＸＤＭＡＣ５１２のデータレジスタとすることができる。この選択は、ＥＸＤＭＡＣ５１２の制御レジスタの所定の制御ビットで行なうようにする。
【０８８５】
実質的なデータ転送に先立って、パケットコマンドなどの転送情報を、ＥＸＤＭＡＣ５１２のデータレジスタに転送する。ＣＰＵ５０２は、この情報を解析し、例えば、前回のデータ転送と連続して受信すればよい場合には、デスティネーションをメモリとするように設定して、転送カウントレジスタを設定して、起動をかければよい。
【０８８６】
かかる情報の解析に当たっては、例えば、転送情報が１６バイトである場合、「ＭＯＶＭ．Ｌ  ＠ＥＸＤ０ＤＲ０，ＥＲ０−３」を実行して、汎用レジスタに転送情報を格納して、解析を行なうことができる。なお、ＥＸＤ０ＤＲ０は、ＥＸＤＭＡＣ５１２のチャネル０のデータレジスタの先頭アドレスを示すラベルである。前記ＭＯＶＭ命令では、絶対アドレスのアドレッシングモードを用いて、固有のアドレスを容易にアクセスできる。また、ＥＸＤＭＡＣ５１２のデータレジスタを使用せず、バッファＲＡＭ５８１上に転送情報が格納されている場合には、「ＭＯＶ．Ｌ  ＠ＥＸＤＡＲ０，ＥＲ４、ＭＯＶＭ．Ｌ  ＠−ＥＲ４，ＥＲ０−３」とすればよい。ＥＸＤＡＲ０は、チャネル０のデスティネーションアドレスレジスタのラベルである。デスティネーションアドレスレジスタは次のデータ転送のデスティネーションとなるアドレスを示している。この内容を汎用レジスタＥＲ４に格納し、プリデクリメントレジスタ間接のアドレッシングモードを用いている。間接的にアドレスを扱うことにより、メモリ上の固定されていないアドレスも容易にアクセスできる。
【０８８７】
また、バッファＲＡＭ５８１のリードを連続して行なうから、バッファＲＡＭ５８１の高速ページモードなどを有効に利用して、高速化を図ることができる。
【０８８８】
転送情報の汎用レジスタへの格納を高速に行い、汎用レジスタ上で解析を行なうことによって、転送情報の受信から、転送情報に基づく処理の開始までの時間を短縮できる。ひいてはシステムの高速化に寄与できる。
【０８８９】
上記システムにおいては、ホスト側からプリンタのステータスをリードするような場合は、チャネル２のＥＸＤ２ＤＲにＣＰＵ５０２がステータスを随時書込んでおくようにし、ＥＸＤＲＥＱ２入力に従って、送受信回路５８０へ出力し、送受信回路５８０からホストへ転送するようにすることができる。この場合も、設定すべきデータが多ければ、ＭＯＶＭ命令を用いて、ＥＸＤ２ＤＲの設定を行なうことができる。
【０８９０】
例えば、ＣＰＵ５０２は、転送情報待ちを示すステータスをＥＸＤ２ＤＲ０〜７に設定しておく。ホストから、パケットコマンドの転送情報を受信すると、ビジーステータスをＥＸＤ２ＤＲ０〜７に設定し、転送情報の解析が終了し、ＥＸＤＭＡＣ５１２の設定が完了すると、データ受信待ちを示すステータスをＥＸＤ２ＤＲ０〜７に設定するようにする。ホストは、随時、ステータスを確認しつつ、転送情報やデータを送信するようにすればよい。
【０８９１】
バッファＲＡＭ５８１上の印刷データを操作することもできる。各種のアドレッシングモードの複数レジスタ転送命令（ＭＯＶＭ）を用いて、高速化することができる。複数レジスタ転送命令で、バス権移譲を禁止することによって、そのほかのバスマスタであるＤＭＡＣ５１１やＥＸＤＭＡＣ５１２のデータ転送との競合による不所望のデータ変化を抑止できる。
【０８９２】
なお、半導体集積回路の集積度の向上によって、オプション以外の受信回路の一部や、印字制御回路５８４などを１個の半導体集積回路に集積することができる。更に、バッファＲＡＭ５８１などの汎用的なメモリも１個の半導体集積回路に集積することができる。プログラムＲＯＭ５８３やＣＧＲＯＭ５８２などのように個別のプリンタの機種など、マイクロコンピュータシステム毎に変更になるものは、個別の半導体集積回路にする方が都合よい。
【０８９３】
以上説明した図７９のマイクロコンピュータ及びデータ処理システムによれば以下の作用効果を得ることができる。
【０８９４】
〔１〕単一の命令で、複数の汎用レジスタとメモリ間、又は複数の汎用レジスタ相互間で転送を行なうことによって、相対的に、命令コードのリード回数を低減して、高速化することができる。また、データのリード／ライトを連続して行なうことによって、外部メモリに対するバースト動作などを有効に利用できる。複数のバスマスタが、データを処理する場合に、データアクセス時にバス権を移譲することを禁止して、不所望のデータの競合を回避することができる。
【０８９５】
上記転送命令の実効アドレスの計算は、１回のみ行なうようにし、アドレスバッファＡＢにインクリメント（またはデクリメント）機能とインクリメント（またはデクリメント）結果を保持する機能を備えることによって、命令動作を単純にし、転送命令の為の多くの制御を既存の転送命令と共通化を図ることができ、命令デコーダＤＥＣの論理的な規模の増加を最小限にすることができる。実効アドレスの計算の回数を低減して、高速化を図ることができる。また、種々のアドレッシングモードを共通に利用することができ、論理的規模の増加を最小限にすることができる。
【０８９６】
複数レジスタ転送命令においてレジスタの本数の異なる命令を複数命令サポートすることによって、また、ワードサイズとロングワードサイズなど、データサイズの異なる命令を複数命令サポートすることによって、プログラムの作成を容易にし、マイクロコンピュータの使い勝手を向上することができる。
【０８９７】
汎用レジスタのみをＣＰＵが直接処理可能なアーキテクチャにあっては、汎用レジスタとメモリとの転送を高速化して、処理速度を大きく向上することできる。
【０８９８】
複数の汎用レジスタの組み合わせを固定的にした、複数の汎用レジスタと、アドレス空間上のアドレス（メモリ）との間の転送命令を備えることによって、汎用レジスタのビット長より大きいデータであっても、容易に扱うことができ、マイクロコンピュータの使い勝手を向上するとともに、データのリード／ライトに対して、命令のリードの頻度を低減して、データ処理の高速化を図ることができる。
【０８９９】
複数レジスタの転送を指示する命令コードと、既存の単一の汎用レジスタの転送命令の命令コードを組合せて、複数の汎用レジスタの転送命令を実現することにより、既存のＣＰＵであっても、命令の追加を容易にすることができる。
【０９００】
〔２〕汎用レジスタが分割可能で、かつ分割した部分に機能上の相違がある場合などには、汎用レジスタ全体を使用する転送命令と、分割された一部分を使用する転送命令とを備えることにより、使用し易い汎用レジスタとの転送ができるから、その処理を容易にし、高速化することができる。
【０９０１】
オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵ、または、汎用レジスタのビット長の長いＣＰＵと、汎用レジスタのビット長の短いＣＰＵが存在する場合には、後者のＣＰＵにも無駄なく利用可能な転送命令を提供できる。
【０９０２】
〔３〕前置命令コードで、レジスタグループを指定し、この前置命令コードを省略可能とし、更には前置命令コードを付加しない場合の命令コードを既存のＣＰＵの命令コードと同一とすることにより、互換性を損なわずに、汎用レジスタを増加させることができる。
【０９０３】
暗黙的に指定可能な汎用レジスタ（既存の汎用レジスタ）をのみを使用していれば、省略可能のワードを省略できるから、命令コードを増加させることがない（少なくとも従来同等の汎用レジスタを使用する場合は、従来同等の命令コードでよい）。命令コードを増加させないことよって、処理速度を低下させることがない。
【０９０４】
前記省略可能なワードを付加することによって、命令によって直接汎用レジスタの全てを選択できるから、プログラムの容易性を損う部分が少ない。また、任意の量の汎用レジスタの一部を、所望のタスク毎や所望の割込み処理などに確保しておく（他のタスクや処理では使用しない）ことによって、前記タスクや割込み処理において汎用レジスタを待避したりする必要がなく、高速化が図られる。また、前記タスクや割込み処理に確保する汎用レジスタ数は任意にできるから、タスクや処理の間で、使用する汎用レジスタを相互に融通し合うことも容易である。
【０９０５】
前記ワードを付加することによって、指定できる汎用レジスタのアクセスは、ＲＡＭなどのメモリのアクセスより、一般に高速にできるから、汎用レジスタ数を増加するとともに、複数の汎用レジスタの転送命令によって、複数の汎用レジスタとメモリとの転送を高速に実行可能にすることにより、ＣＰＵの処理速度を向上できる。また、いわゆるロードストア型の命令セットを持ち、メモリの内容に対して直接演算できないようなプロセッサについては、直接処理できるデータ量を増加でき、また、メモリのアクセスを高速化することができ、処理速度を向上することができる。
【０９０６】
複数レジスタ転送命令で指定できる汎用レジスタを増加する場合には容易に対処できる。
【０９０７】
〔４〕オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵが存在する場合には、アドレス空間の広いＣＰＵにおいて、アドレス空間に対応するサイズ（例えば３２ビット、ＭＯＶＭ．Ｌ命令）の汎用レジスタに対する上記転送命令と、アドレス空間の小さいＣＰＵのアドレス空間に対応するサイズ（例えば１６ビット、ＭＯＶＭ．Ｗ命令）の汎用レジスタに対する上記転送命令とを備えることによって、後者のサイズの上記転送命令を、下位互換性をもつ、アドレス空間の小さいＣＰＵでも容易に実現可能にできる。換言すれば、同一の方法で、オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵでも複数汎用レジスタの転送命令を実現可能にできる。
【０９０８】
ソースプログラムレベルまたはオブジェクトプログラムレベルで、既存のＣＰＵの命令セットを包含した上で、上記命令を追加することによって、ソフトウェア資産を有効に利用することができ、使用者のソフトウェア開発効率を向上することができる。ソースプログラムレベルまたはオブジェクトプログラムレベルで互換性を保つことによる利点と前記転送命令を追加することの利点の双方を享受することができる。
【０９０９】
〔５〕既存のＣＰＵと、ソフトウェア開発装置を共通に利用可能にし、ＣＰＵを選択する手段を設けることによって、使用者の不所望の費用を抑止できる。また、Ｃコンパイラなどは共通に機能向上などを行うことが可能であるから、ソフトウェア開発装置の開発効率を向上することができる。開発効率を向上することによって、開発に必要な資源を削減し、削減した資源を以って、機能向上に振り当てることも可能になる。
【０９１０】
既存のＣＰＵと、エミュレーション用インタフェースを共通化し、ひいては、同じエミュレータのハードウェアを共有できる。エミュレーション用インタフェースを共通化したり、エミュレータのハードウェアを共通化することによって、開発環境を早く整えることができ、また、エミュレータの開発に必要な資源を最小限にすることができる。
【０９１１】
前記検討課題Ｅの解決手段に関する発明の実施の形態は一例であり、その要旨を逸しない範囲において種々変更可能である。
【０９１２】
例えば、ＣＰＵの命令セットやレジスタ構成、アドレス空間は変更可能である。ＣＰＵのアーキテクチャもロードストアアーキテクチャに限定されない。但し、アドレス空間上の大部分より、高速に利用できるレジスタ手段を持っていることが望ましい。また、複数レジスタの転送命令の詳細な仕様についても種々変更可能である。データサイズとしては、バイトサイズを持ってもよい。ＣＰＵの論理的な構成、複数レジスタの転送命令の論理的な実現方法についても種々変更可能である。アドレスバッファはインクリメントではなく、デクリメント機能を持つようにし、アドレスの大きい方からアクセスするようにしてもよい。さらに、内部バス幅や内部バス構成なども変更可能である。さらにまた、互換性を維持すべきＣＰＵは、アドレス空間や汎用レジスタの本数が異なるほか、命令の種類とアドレッシングモード及びデータのサイズで定義されるような命令セットが異なるようなものであってもよい。
【０９１３】
マイクロコンピュータのその他の機能ブロックについても何等制約されない。データ処理システムである応用分野もプリンタに限定されない。前記ＥＸＤＭＡＣなどは好適な例として示されているもので、種々変更可能であることは言うまでもない。
【０９１４】
以上の説明では主として本発明者によってなされた発明をその背景となった利用分野であるシングルチップマイクロコンピュータに適用した場合について説明したが、それに限定されるものではなく、ＣＰＵ及びＤＲＡＭ等を搭載したシステムＬＳＩ、システム・オン・チップ化されたＶＬＳＩ等のデータ処理装置に広く適用可能である。本発明は少なくとも、命令を解読して処理し、演算処理を行なうデータ処理装置に適用することができる。
【０９１５】
《検討課題Ａに関する発明の効果》
検討課題Ａに関する発明の効果は以下の通りである。すなわち、汎用レジスタを指定するレジスタ指定フィールドを、２つの部分に分割し、この２つの部分を命令コードの基本単位上の別のワードに配置するとともに、一方のワードを省略可能とし、省略可能なワードを省略すると、暗黙的な指定が行われるようにする。また、省略可能なワードには、レジスタ指定フィールドの一部のみを持つようにし、演算の種類などは指定しないようにする。したがって、暗黙的に指定可能な汎用レジスタのみを使用していれば、省略可能のワードを省略できるから、命令コードを増加させることがなく、命令コードを増加させないことよって、処理速度を低下させることがない。
【０９１６】
前記省略可能なワードを付加することによって、命令によって直接汎用レジスタの全てを選択できるから、プロラムの容易性を損うことがない。また、任意の量の汎用レジスタの一部を、所望のタスク毎や所望の割込み処理などに確保しておく（他のタスクや処理では使用しない）ことによって、前記タスクや割込み処理において汎用レジスタを待避したりする必要がなく、高速化が図れる。更に、前記タスクや割込み処理に確保する汎用レジスタ数は任意にできるから、タスクや処理の間で、使用する汎用レジスタを相互に融通し合うことも容易になる。
【０９１７】
前記ワードを付加することによって、指定できる汎用レジスタのアクセスは、ＲＡＭ等のメモリのアクセスより、一般に高速にできるから、汎用レジスタ数を増加することにより、高速に処理できるデータ量を増加させ、ひいてはＣＰＵの処理速度を向上できる。また、いわゆるロードストア型の命令セットを持ち、メモリの内容に対して直接演算できないようなプロセッサについては、汎用レジスタを増加することにより、直接処理できるデータ量を増加でき、また、メモリのアクセス頻度を低減することができ、処理速度を向上することができる。
【０９１８】
《検討課題Ｂに関する発明の効果》
検討課題Ｂに関する発明の効果は以下の通りである。すなわち、既存の、メモリ・レジスタ間の転送命令コードの単数または複数、そしてレジスタ・レジスタ間の演算命令コードの内、複数の命令コードを組合せ、これに前置命令コードを前置結合する。前記前置命令コードに結合されたメモリ・レジスタ間転送命令のコードを実行する場合は、汎用レジスタではなく、ＣＰＵ内の、テンポラリレジスタの様な、プログラム上解放されていない（換言すれば命令コードには明示されていない）ラッチ手段とメモリとの間でデータ転送を行なう。更に、前記前置命令コードに結合されたレジスタ・レジスタ間の演算命令のコードを引き続き実行する場合は、演算対象の内の単数または複数のデータを前記ラッチ手段から読み出すようにする。その演算結果をメモリに格納する場合には、前記転送命令のコードを実行したときに使用したメモリのアドレスを、別のラッチ手段に格納し、上記演算命令の演算結果を前記ラッチ手段に格納するとともに、メモリ・レジスタ間の転送命令のコードを自ら生成し（即ち、プログラムに明示されていなくても生成し）、前記アドレスを格納したラッチ手段の内容をアドレスとして、前記演算結果を格納したラッチ手段の内容をデータとして、メモリへの書込みを行なう。
【０９１９】
このとき、データ処理装置にとって、メモリ・レジスタ間の転送命令、レジスタ・レジスタ間の演算命令の命令コードは既存のものであるから、それら命令コード単独の実行では従来同様に動作し、既存の命令実行を阻害しない。したがって、既存の命令のみを使用している既存のソフトウェア資産を有効に利用できる。データ処理装置は、ソフトウェア資産に関する上位互換を維持して、機能向上を実現できる。
【０９２０】
また、既存の汎用レジスタ或いはロード・ストア・アーキテクチャのメリットを保持し、前記前置命令コードは、アドレッシングモードや演算の内容によらず共通に使用できるから、追加する命令コードを最低限にすることができる。
【０９２１】
メモリからラッチ手段へのデータ読み込み、演算、ラッチ手段の内容に基づくメモリへのライト動作の指示は、既存の命令に対して、使用するレジスタが相違なるのみであるから、既存の命令動作を大きく変更することなく、利用できる。
【０９２２】
これによって、設計資産を有効に利用し、メモリ上のデータへの演算を可能にすることによる論理規模の増加を最小限にすることができる。
【０９２３】
メモリ上のデータを演算可能とすることによって、直接処理できるデータ量を増加でき、また、汎用レジスタの退避／復帰などを省くことができ、処理速度を向上することができる。
【０９２４】
オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の小さいＣＰＵが存在する場合には、アドレス空間の広いＣＰＵで、前記ワードを付加し、存在する転送命令、演算命令を組合せることによって、下位互換性をもつ、アドレス空間の小さいＣＰＵでもメモリ上のデータを直接的に演算可能にすることができる。換言すれば、同一の方法で、オブジェクトレベルで互換性を保ちつつ、アドレス空間の広いＣＰＵとアドレス空間の狭いＣＰＵでもメモリ上のデータを直接的に演算可能にすることができる。
【０９２５】
オブジェクトレベルで互換性を保つことによる利点とメモリ上のデータを直接的に演算可能にすることの利点の双方を享受することができる。
【０９２６】
既存の命令を組合せ、新規の命令機能を実現しているので、将来的な機能拡張や高速化に対する余裕を、既存のＣＰＵと同等程度に保持できる。
【０９２７】
また、既存のＣＰＵとエミュレーション用インタフェースを共通化することができ、ひいては、同じエミュレータのハードウェアを共有できる。エミュレータのハードウェアを共通化することによって、早く開発環境を整えることができ、また、エミュレータの開発に必要な資源を最小限にすることができる。
【０９２８】
《検討課題Ｃに関する発明の効果》
検討課題Ｃに関する発明の効果は以下の通りである。すなわち、レジスタ構成、命令とアドレッシングモードの組合せ等の点で、一方が他方を包含しないような異なる命令セットを含む複数のデータ処理装置例えばＣＰＵを提供することにより、各種適用分野のソフトウェア上の要求に応えたり、利用者の様々な好みに応えたり、別のＣＰＵのアセンブリ言語によるプログラムからも比較的近い命令セットＣＰＵを選択可能でき、機能を向上したＣＰＵへの移行を容易化することができる。
【０９２９】
前記の、一方が他方の命令セットを包含しない、複数のＣＰＵに対して、いずれのＣＰＵをも包含する命令セットを持った上位のＣＰＵを準備することによって、ソフトウェア資産の有効利用を可能にしつつ、性能／機能の向上したＣＰＵを用意することができる。ソフトウェア資産の有効利用によって、使用者のソフトウェア開発の開発効率を向上することができる。
【０９３０】
上位ＣＰＵは、有効なアドレスのビット数と、ベクタ及びスタックの単位サイズ、或いは実効アドレスの計算方法を、切り替える動作モード、例えばマキシマムモード、準マキシマムモードとミニマムモードを用意しておくことによって、メモリの使用方法も含めて上位互換とすることができる。
【０９３１】
開発に当たっては、既存のＣＰＵ（下位ＣＰＵになるＣＰＵ）に対して、汎用レジスタを拡張し、命令とアドレッシングモードの組合せを拡張した上位のＣＰＵを開発する。下位ＣＰＵは上位ＣＰＵの命令セットのサブセットを持つことになる。これにより、上位ＣＰＵの論理的規模の増大を最小限にしつつ、性能・機能・使い勝手などを向上することができると共に、前記別の下位ＣＰＵの開発を容易にし、開発効率を向上できる。前記上位ＣＰＵの、更に上位のＣＰＵを開発する場合には、前記上位のＣＰＵに対する互換性を維持すれば、前記複数のＣＰＵとの互換性を、自動的に維持することができるから、ソフトウェア資産の有効利用を実現しつつ、将来的な機能や性能の向上を図ったＣＰＵを実現し易くなる。換言すれば、個別の応用分野やシステムに適した複数のＣＰＵを提供するとともに、複数のＣＰＵの総体的な開発費用を低減したり、開発効率を向上したりすることができる。
【０９３２】
汎用レジスタを拡張するために、汎用レジスタを指定するレジスタ指定フィールドを、２つの部分に分割し、この２つの部分を命令コードの基本単位上の別のワードに配置するとともに、一方のワードを省略可能とし、省略可能なワードを省略すると、暗黙的な指定が行われるようにする。省略可能なワードには、レジスタ指定フィールドの一部のみを持つようにし、演算の種類などは指定しないようにする。これにより、暗黙的に指定可能な汎用レジスタのみを使用していれば、省略可能なワードを省略できる。前記拡張された処理を指定する新規な命令コードを個別的に追加しないから、命令コードが増えず（命令コードのビット数が増えず）、命令の実行処理速度を低下させることがない。前記省略可能な命令コードを付加することによって、命令によって汎用レジスタの全てを選択できるから、プロラムの容易性を損うことがない。また、任意の量の汎用レジスタの一部を、所望のタスク毎や所望の割込み処理などに確保しておく（他のタスクや処理では使用しない）ことによって、前記タスクや割込み処理において汎用レジスタを待避したりする必要がなく、高速化が図れる。また、前記タスクや割込み処理に確保する汎用レジスタ数は任意にできるから、タスクや処理の間で、使用する汎用レジスタを相互に融通し合うことも容易である。
【０９３３】
一般に、レジスタのアクセスはメモリのアクセスより高速であるから、汎用レジスタ数を増加することにより、高速に処理できるデータ量を増加させることができ、ひいてはＣＰＵの処理速度を向上できる。
【０９３４】
命令とアドレッシングモードの組合せを拡張するために、既存の、メモリ・レジスタ間の転送命令の単数または複数、レジスタ・レジスタ間の演算命令、の内、複数の命令コードを組合せ、これを結合させる命令拡張用前置命令コードを採用する。前記命令拡張用前置命令コードに続いて、メモリ・レジスタ間命令を実行する場合は、汎用レジスタではなく、ＣＰＵ内の、テンポラリレジスタの様な、プログラム上解放されていないラッチ手段とメモリの間でデータ転送を行なう。更に、引き続きレジスタ・レジスタ間の演算命令を実行する場合は、演算対象の内の単数または複数のデータを前記ラッチ手段から読み出すようにする。その演算結果のメモリに格納する場合には、前記転送命令で使用したメモリのアドレスを、別のラッチ手段に格納し、前記演算命令の演算結果を前記ラッチ手段に格納するとともに、メモリ・レジスタ間の転送命令を自ら生成し（即ち、プログラムに明示されていなくても生成し）、前記アドレスを格納したラッチ手段の内容をアドレスとして、前記演算結果を格納したラッチ手段の内容をデータとして、メモリへの書込みを行なう。
【０９３５】
このとき、メモリ・レジスタ間の転送命令、レジスタ・レジスタ間の演算命令の命令コードは既存のものであるから、単独では従来同様に動作し、既存の命令実行を阻害しない。従って、既存の命令のみを使用している既存のソフトウェア資産を有効に利用できる。データ処理装置は、ソフトウェア資産に関する上位互換を維持して、機能向上を実現できる。
【０９３６】
アドレス空間全体に対応するビット長のプログラムカウンタを設けて、プログラム用としてはアドレス空間全体、少なくとも大部分をリニアに利用可能にするとともに、比較的小規模なデータを扱える程度に、データ転送のアドレッシングモードを縮小したり、転送データのデータサイズを限定したりして、所望の応用分野などでの使い勝手を損なわずに、論理的規模を縮小できる。
【０９３７】
データアクセス時に、使用できるアドレス空間乃至は効率よく使用できるアドレス空間を小さくし、かかるアドレス空間を２つに分割することによって、使い勝手を損なわずに、上位ＣＰＵとのアドレス空間上の互換性を維持するとともに、上位ＣＰＵに実効アドレス計算方法などを切り替える動作モードを予め用意しておくことにより、ソフトウェア上の互換性を維持することができる。
【０９３８】
プログラム用のアドレス空間を広げることにより、Ｃ言語などの高級言語を使用したプログラミングなどに対する適性を向上できる。また、スタックポインタを切替え可能にすることによって、ＯＳなどのタスク管理時のスタックの容量の不所望の増加を抑止できる。
【０９３９】
また、開発装置については、前記上位のＣＰＵの命令セットについてのソフトウェア開発装置を用意し、更に、一方が他方の命令セットを包含しない、複数のＣＰＵに対しても共通に利用可能にし、利用者がＣＰＵを選択できるようにすることによって、ソフトウェア開発装置の開発効率を向上することができる。使用者にとっては、前記、複数のＣＰＵを使用してもソフトウェア開発装置が共通であるから、不所望な費用を発生させなくてよい。前記、複数のＣＰＵの内での移行が容易になり、開発効率を向上することができる。
【０９４０】
ソフトウェア開発装置上で、アセンブリ言語などの、汎用的な機能を持つ汎用レジスタの記述を、複数種類許すようにすることによって、別のＣＰＵからの移行を比較的容易にすることができる。
【０９４１】
また、エミュレータについては、上位ＣＰＵと下位ＣＰＵとで、エミュレーション用インタフェースを共通化することができ、また、上位ＣＰＵのエミュレーション用論理回路を開発することによって、これを下位ＣＰＵにも利用でき、エミュレーション用プロセッサを含めた開発効率を向上できる。また、同じエミュレータのハードウェアを共通でき、これによって、逸早く開発環境を整えることができるとともに、また、エミュレータの開発に必要な資源を最小限にすることができる。エミュレータに搭載する逆アセンブラは、上位ＣＰＵのものを開発するとともに、エミュレータ上で対象のＣＰＵを選択する手段を設けることによって、実質的に一つの逆アセンブラでよいことになるから、開発効率を更に向上できる。
【０９４２】
《検討課題Ｄに関する発明の効果》
検討課題Ｄに関する発明の効果は以下の通りである。すなわち、既存の命令コード乃至命令コードの１部のワードを組合せて、ビット条件分岐命令／ビット条件サブルーチン命令を実現することによって、既存の命令実行を阻害することがなく、既存のソフトウェア資産を有効に利用できるようになる。そして、既存のＣＰＵと互換性を維持しつつ、また、論理的・物理的規模の増大を最小限にすることができる。更に、メモリ上の任意のアドレスのデータのビットの状態を判定して、分岐及びサブルーチン分岐を可能にできる。その上、ＣＰＵの使い勝手の向上、命令コード長の短縮、及び処理性能の向上に寄与する事ができる。特に、複数のビットの状態に応じて、分岐先ひいては処理内容を変更するような処理の、プログラム容量の短縮と処理速度の向上を実現できる。
【０９４３】
《検討課題Ｅに関する発明の効果》
検討課題Ｅに関する発明の効果は以下の通りである。すなわち、複数の汎用レジスタとメモリ間、又は複数の汎用レジスタ間での転送命令を備えることによって、汎用レジスタのビット長より大きいデータであっても、容易に扱うことができ、使い勝手を向上するとともに、データのリード／ライトに対して、命令のリードの頻度を低減して、高速化を図ることができる。
【０９４４】
単一の命令で、複数の汎用レジスタ・メモリ間等の転送を行なうことによって、相対的に、命令コードのリード回数を低減して、データ処理を高速化することができる。また、データのリード／ライトを連続して行なうことによって、外部メモリに対するバースト動作などを有効に利用できる。
【０９４５】
複数の汎用レジスタを指定する固定の組合わせにすることによって、命令コード長を短縮でき、更に、各命令の実行ステート数を固定にすることにより、内部の条件分岐を行うことをなくし、内部論理を簡潔にし、論理規模を縮小できる。
【０９４６】
複数レジスタの転送を指示する命令コードと、既存の単一の汎用レジスタの転送命令の命令コードを組合せて、複数の汎用レジスタの転送命令を実現するとともに、単一の汎用レジスタの転送命令と共通化した動作を行なうようにすることにより、論理的規模の増加を最小限にすることができる。既存の単一の汎用レジスタの転送命令のアドレッシングモードを共通に利用可能にできる。既存の単一の汎用レジスタの転送命令のアドレッシングモードを利用可能にすることによって、プログラムの作成を容易にし、使い勝手を向上できる。
【０９４７】
上記転送命令の実効アドレスの計算は、演算器で１回のみ行なうようにし、アドレスバッファにインクリメント（またはデクリメント）機能とインクリメント（またはデクリメント）結果を保持する機能を備えることによって、命令動作を単純にし、既存の転送命令と共通化を図ることができ、論理的な規模の増加を最小限にすることができる。実効アドレスの計算の回数を低減して、高速化を図ることができる。
【０９４８】
レジスタの本数の異なる複数レジスタ転送命令を複数命令サポートすることによって、また、ワードサイズとロングワードサイズなど、データサイズの異なる複数レジスタ転送命令を複数命令サポートすることによって、プログラムの作成を容易にし、使い勝手を向上することができる。
【図面の簡単な説明】
【０９４９】
【図１】検討課題Ａ，Ｂ，Ｃに関する発明に係るシングルチップマイクロコンピュータのＣＰＵを詳細に例示するブロック図である。
【図２】検討課題Ａ，Ｂ，Ｃに係るデータ処理装置の一例であるシングルチップマイクロコンピュータのブロック図である。
【図３】ＣＰＵに内蔵されている汎用レジスタ及び制御レジスタの構成を示す説明図である。
【図４】第１の下位互換のＣＰＵにおける汎用レジスタ及び制御レジスタの構成を示す説明図である。
【図５】第２の下位互換のＣＰＵにおける汎用レジスタ及び制御レジスタの構成を示す説明図である。
【図６】ＣＰＵのアドレス空間に関する説明図である。
【図７】上位ＣＰＵ２のマキシマムモードにおける実効アドレス計算方法を図８と共に示す説明図である。
【図８】上位ＣＰＵ２のマキシマムモードにおける実効アドレス計算方法を図７と共に示す説明図である。
【図９】ＣＰＵの機械語の命令フォーマットの一例を示すフォーマット図である。
【図１０】ＣＰＵのメモリに対する転送命令の詳細な命令フォーマットを例示する説明図である。
【図１１】メモリデータに対する直接的な演算命令の命令フォーマットとしてイミディエイトを使用しない前置命令コード、ＥＡ１、ＥＡ２、演算の形態を例示する説明図である。
【図１２】メモリデータに対する直接的な転送命令の命令フォーマットとしてイミディエイトを使用しない前置命令コード、ＥＡ１、ＥＡ２の形態を例示する説明図である。
【図１３】メモリデータに対する直接的な演算命令の命令フォーマットとしてイミディエイトを使用する前置命令コード、ＥＡ２、演算（イミディエイト）の形態を例示する説明図である。
【図１４】メモリデータに対する直接的な転送命令の命令フォーマットとしてイミディエイトを使用する前置命令コード、ＥＡ２、転送（イミディエイト）の形態を例示する説明図である。
【図１５】前置命令コードのフォーマットを例示するフォーマット図である。
【図１６】データ転送命令に関するＣＰＵのアドレッシングモードの組合せを示した説明図である。
【図１７】加算命令に関するＣＰＵのアドレッシングモードの組合せを示した説明図である。
【図１８】レジスタセレクタの一部と命令レジスタの詳細を示すブロック図である。
【図１９】レジスタセレクタの選択論理の一部を論理記述によって図２０と共に示す説明図である。
【図２０】レジスタセレクタの選択論理の一部を論理記述によって図１９と共に示す説明図である。
【図２１】スタックポインタにも使用可能なレジスタに関するレジスタセレクタの選択論理の一例を論理記述によって図２２と共に示す説明図である。
【図２２】スタックポインタにも使用可能なレジスタに関するレジスタセレクタの選択論理の一例を論理記述によって図２１と共に示す説明図である。
【図２３】命令デコーダに含まれる転送命令コード（ｍｏｖ）の解読論理を図２４及び図２５と共に例示する論理記述の説明図である。
【図２４】命令デコーダに含まれる転送命令コード（ｍｏｖ）の解読論理を図２３、及び図２５と共に例示する論理記述の説明図である。
【図２５】命令デコーダに含まれる転送命令コード（ｍｏｖ）の解読論理を図２３及び図２４と共に例示する論理記述の説明図である。
【図２６】命令デコーダに含まれる演算命令コード（ｅｘｅ）の解読論理を図２７と共に示す説明図である。
【図２７】命令デコーダに含まれる演算命令コード（ｅｘｅ）の解読論理を図２６と共に示す説明図である。
【図２８】命令デコーダに含まれ、内部で生成されるライト型転送命令と同等の動作を行なう命令コード（ｍｏｖ．ｓｔ）の解読論理を図２９及び図３０と共に示す説明図である。
【図２９】命令デコーダに含まれ、内部で生成されるライト型転送命令と同等の動作を行なう命令コード（ｍｏｖ．ｓｔ）の解読論理を図２８及び図３０と共に示す説明図である。
【図３０】命令デコーダに含まれ、内部で生成されるライト型転送命令と同等の動作を行なう命令コード（ｍｏｖ．ｓｔ）の解読論理を図２８及び図２９と共に示す説明図である。
【図３１】前置命令コードを伴わない加算命令の実行タイミングを例示する動作タイミング図である。
【図３２】レジスタ拡張用前置命令コードが付加された加算命令の実行タイミングを例示する動作タイミング図である。
【図３３】レジスタグループフィールドを持つ前置命令コード、メモリ・レジスタ型演算の前置命令コード、ＭＯＶ．Ｗ ＠ａａ：１６，Ｒ０に相当する命令コード、及びＡＤＤ．Ｗ Ｒ０，Ｒ１に相当する命令コードを組合せて１命令とみなされる命令を実行したときの動作タイミングを例示するタイミング図である。
【図３４】レジスタ・メモリ型の加算命令（ＡＤＤ．Ｗ Ｒ１，＠ａａ：１６）の実行タイミングを示すタイミング図である。
【図３５】メモリ・メモリ型の加算命令（ＡＤＤ．Ｗ ＠ＥＲ１，＠ａａ：１６）の実行タイミングを示すタイミング図である。
【図３６】メモリ・メモリ型の転送命令（ＭＯＶ．Ｗ ＠ＥＲ１，＠ａａ：１６）の実行タイミングを示すタイミング図である。
【図３７】イミディエイト・メモリ型の加算命令（ＡＤＤ．Ｗ ＃ｘｘ ，＠ａａ：１６）の実行タイミングを示すタイミング図である。
【図３８】イミディエイト・メモリ型の転送命令（ＭＯＶ．Ｗ ＃ｘｘ，＠ａａ：１６）の実行タイミングを示すタイミング図である。
【図３９】命令デコーダＤＥＣに含まれる演算命令コード（ｅｘｅ）の解読論理の一部に関する論理記述の別の例を図４０及び図４１と共に示す説明図である。
【図４０】命令デコーダＤＥＣに含まれる演算命令コード（ｅｘｅ）の解読論理の一部に関する論理記述の別の例を図３９及び図４１と共に示す説明図である。
【図４１】命令デコーダＤＥＣに含まれる演算命令コード（ｅｘｅ）の解読論理の一部に関する論理記述の別の例を図３９及び図４０と共に示す説明図である。
【図４２】ＣＰＵの開発環境の概略を示す説明図である。
【図４３】ＣＰＵのシステム開発装置におけるＣＰＵ選択方法を例示する説明図である。
【図４４】ＣＰＵのアセンブラが出力するリストの一例を示す説明図である。
【図４５】マイクロコンピュータのためのエミュレータのブロック図である。
【図４６】ＣＰＵのためのエミュレータによるトレースリストを例示する説明図である。
【図４７】マイクロコンピュータのエミュレーション用プロセッサの一例を示すブロック図である。
【図４８】第２の下位ＣＰＵの別のプログラミングモデルを示す説明図である。
【図４９】ＣＰＵのアドレスマップの別の例を示す説明図である。
【図５０】図４９に示される第２の下位ＣＰＵのアドレスマップにおける実効アドレスの計算方法を図５１と共に例示する説明図である。
【図５１】図４９に示される第２の下位ＣＰＵのアドレスマップにおける実効アドレスの計算方法を図５０と共に例示する説明図である。
【図５２】命令拡張用前置命令コード、ＭＯＶ．Ｗ  ＃ｘｘ，Ｒ０に相当する命令コードに前記ディスティネーション情報を付加した命令コードを組合せて１命令とみなされる命令を実行したときのタイミング図である。
【図５３】検討課題Ｄに関する発明のマイクロコンピュータが有するＣＰＵの一例を示すブロック図である。
【図５４】図５３のＣＰＵにおけるビットテスト命令の命令フォーマットを例示する説明図である。
【図５５】図５３のＣＰＵにおけるビット条件分岐命令の命令フォーマットを図５６及び図５７と共に示す説明図である。
【図５６】図５３のＣＰＵにおけるビット条件分岐命令の命令フォーマットを図５５及び図５７と共に示す説明図である。
【図５７】図５３のＣＰＵにおけるビット条件分岐命令の命令フォーマットを図５５及び図５６と共に示す説明図である。
【図５８】図５３のＣＰＵにおけるビット条件分岐命令を考慮したときの別の命令フォーマットにおける命令コードの組み合わせを例示する説明図である。
【図５９】テンポラリデータレジスタＴＲＤの判定回路の論理構成及び分岐制御論理を論理記述で例示する説明図である。
【図６０】ビットテスト命令及びビット条件分岐命令の一部（第１のワード）に対する命令デコーダＤＥＣの論理構成を図６１及び図６２と共に論理記述で例示する説明図である。
【図６１】ビットテスト命令及びビット条件分岐命令の一部（第１のワード）に対する命令デコーダＤＥＣの論理構成を図６０及び図６２と共に論理記述で例示する説明図である。
【図６２】ビットテスト命令及びビット条件分岐命令の一部（第１のワード）に対する命令デコーダＤＥＣの論理構成を図６０及び図６１と共に論理記述で例示する説明図である。
【図６３】条件分岐命令の一部に対する命令デコーダＤＥＣの論理構成を図６４及び図６５と共に論理記述によって例示する説明図である。
【図６４】条件分岐命令の一部に対する命令デコーダＤＥＣの論理構成を図６３及び図６５と共に論理記述によって例示する説明図である。
【図６５】条件分岐命令の一部に対する命令デコーダＤＥＣの論理構成を図６３及び図６４と共に論理記述によって例示する説明図である。
【図６６】サブルーチン分岐命令の一部に対する命令デコーダＤＥＣの論理構成を図６７及び図６８と共に論理記述によって例示する説明図である。
【図６７】サブルーチン分岐命令の一部に対する命令デコーダＤＥＣの論理構成を図６６及び図６８と共に論理記述によって例示する説明図である。
【図６８】サブルーチン分岐命令の一部に対する命令デコーダＤＥＣの論理構成を図６６及び図６７と共に論理記述によって例示する説明図である。
【図６９】他の演算命令に対する命令デコーダＤＥＣの論理構成を図７０と共に論理記述によってを例示する説明図である。
【図７０】他の演算命令に対する命令デコーダＤＥＣの論理構成を図６９と共に論理記述によってを例示する説明図である。
【図７１】更に他の演算命令に対する命令デコーダＤＥＣの論理構成を図７２と共に論理記述で例示する説明図である。
【図７２】更に他の演算命令に対する命令デコーダＤＥＣの論理構成を図７１と共に論理記述で例示する説明図である。
【図７３】ビット条件分岐命令の第１の例（ＢＢＳ ＃０，＠ＦＦＦＦＦＥ，＄＋２０）の実行タイミングを例示するタイミングチャートである。
【図７４】ビット条件サブルーチン分岐命令の例（ＢＢＳＲ ＃５，＠ＦＦＦＥ００，＄＋３００）の実行タイミングを例示するタイミングチャートである。
【図７５】ビットテスト命令の第１の例（ＢＴＳＴ ＃０，＠ＦＦＦＦＦＥ）の実行タイミングを例示するタイミングチャートである。
【図７６】ビットテスト命令の第２の例（ＢＴＳＴ ＃１，＠ＥＲ０＋）の実行タイミングを例示するタイミングチャートである。
【図７７】ビットセット命令の例（ＢＳＥＴ ＃２，＠ＥＲ０＋）の実行タイミングを例示するタイミングチャートである。
【図７８】ビット条件分岐命令の第２の例（ＢＢＣ ＃０，＠ＥＲ０＋，＄＋２０）の実行タイミングを例示するタイミングチャートである。
【図７９】検討課題Ｅの本発明に係るデータ処理装置の一例であるマイクロコンピュータのブロック図である。
【図８０】ＣＰＵのアドレス空間を示す説明図である。
【図８１】複数汎用レジスタの転送命令（ＭＯＶＭ）の機能を例示する説明図である。
【図８２】複数汎用レジスタの転送命令（ＭＯＶＭ）によるデータ転送のデータ配置を例示する説明図である。
【図８３】複数汎用レジスタの転送命令（ＭＯＶＭ）のような命令を示す前置命令コード（命令拡張用前置命令コード）を例示する説明図である。
【図８４】検討か課題Ｅの発明に係るデータ処理装置の一例であるＣＰＵの詳細な一例を示すブロック図である。
【図８５】レジスタセレクタの一部と命令レジスタの詳細を示すブロック図である。
【図８６】レジスタセレクタに入力される制御信号ｓ１〜ｓ３の機能を例示する説明図である。
【図８７】アドレスバッファを例示するブロック図である。
【図８８】レジスタ・レジスタ間のワードサイズの転送命令（ＭＯＶ及びＭＯＶＭ命令）に対するデコーダの制御論理の一部を論理記述によって示す説明図である。
【図８９】図８８の後に続く残りの論理記述を示す説明図である。
【図９０】１６ビット絶対アドレスによる転送命令（ＭＯＶ及びＭＯＶＭ命令）に対するデコーダの制御論理の一部を論理記述によって示す説明図である。
【図９１】図９０の後に続く残りの論理記述の説明図である。
【図９２】図９１の後に続く残りの論理記述の説明図である。
【図９３】図８８及び図８９に記載の論理記述の制御によるレジスタ・レジスタ間の転送命令（ＭＯＶ及びＭＯＶＭ命令）による制御動作に対応されるフローチャートである。
【図９４】図９０乃至図９２に記載の論理記述の制御による１６ビット絶対アドレスによる転送命令（ＭＯＶ及びＭＯＶＭ命令）による制御動作に対応されるフローチャートである。
【図９５】レジスタ−レジスタ型の第１の転送命令（ＭＯＶ．Ｌ ＥＲ０，ＥＲ１）、第２の転送命令（ＭＯＶ．Ｌ ＥＲ８，ＥＲ１７）、及び複数レジスタの転送命令の第１の例（ＭＯＶＭ．Ｗ Ｒ０−Ｒ１，Ｅ２８−Ｅ２９）の実行タイミングを例示するタイミングチャートである。
【図９６】複数レジスタの転送命令の第２の例（ＭＯＶＭ．Ｌ  ＠ａａ：１６，ＥＲ０−ＥＲ１）の実行シーケンスを例示するタイミングチャートである。
【図９７】複数レジスタの転送命令の第３の例（ＭＯＶＭ．Ｗ  Ｒ１０−Ｒ１１，＠ＥＲ６）の実行シーケンスを例示するタイミングチャートである。
【図９８】ＣＰＵの開発環境の概略を例示する説明図である。
【図９９】マイクロコンピュータのエミュレーション用プロセッサを例示するブロック図である。
【図１００】マイクロコンピュータをプリンタ制御に用いたマイクロコンピュータシステムを例示するブロック図である。
【符号の説明】
【０９５０】
１  シングルチップマイクロコンピュータ
２  ＣＰＵ
３  割込みコントローラ
３０  内部バス
３１  割込み要求信号
ＤＥＣ  命令デコーダ
２００  ｐｆのデコード論理
２０１  ｍｏｖのデコード論理
２０２  ｅｘｅのデコード論理
ＣＨＧ  命令変更部
ＩＲ１、ＩＲ２  命令レジスタ
ｍｓｋｉｎｔ  割込みマスク信号
ｍｏｄ（ＭＯＤＳ，ＭＯＤＤ）  モディファイ制御信号
ｍｋｍｏｖ  命令コード発生信号
ＥＸＥＣ  実行部
ＩＮＴＣ  割込み制御部
ＲＳＥＬ  レジスタセレクタ
ＲＤＢ  リードデータバッファ
ＷＤＢ  ライトデータバッファ
ＴＲＡ，ＴＲＤ  テンポラリレジスタ
ＰＣ  プログラムカウンタ
ＥＲ０〜ＥＲ７  汎用レジスタ
ＡＢ  アドレスバッファ
ＧＢ，ＷＢ，ＤＢ  バス
ＩＤＢ  内部データバス
ＩＡＢ  内部アドレスバス
ＡＬＵ  算術論理演算器
２Ａ  ＣＰＵ
ｂｃ  ビットコンディションフィールド
３６  分岐制御信号
３７  分岐制御論理
３８  判定回路
ＡＵ  算術論理演算器
５０１  マイクロコンピュータ
５０２  ＣＰＵ
５１０  バスコントローラ
ｒ１、ｒ２  レジスタフィールド
ｇｒ１、ｇｒ２  省略可能な命令コードのレジスタフィールド
ＬＧＲ１，ＬＧＲ２  命令レジスタ内のｇｒ１、ｇｒ２のラッチ回路
ＬＡＴ１，ＬＡＴ２  レジスタセレクタ内のｇｒ２、ｒ２のラッチ回路
ＬＯＧ１，ＬＯＧ２  レジスタセレクタ内のｒ１、ｒ２の制御ロジック
ｓ１〜ｓ３  レジスタフィールド値の制御信号
【図１】
2006313561.tif 000003
【図２】
2006313561.tif 000004
【図３】
2006313561.tif 000005
【図４】
2006313561.tif 000006
【図５】
2006313561.tif 000007
【図６】
2006313561.tif 000008
【図７】
2006313561.tif 000009
【図８】
2006313561.tif 000010
【図９】
2006313561.tif 000011
【図１０】
2006313561.tif 000012
【図１１】
2006313561.tif 000013
【図１２】
2006313561.tif 000014
【図１３】
2006313561.tif 000015
【図１４】
2006313561.tif 000016
【図１５】
2006313561.tif 000017
【図１６】
2006313561.tif 000018
【図１７】
2006313561.tif 000019
【図１８】
2006313561.tif 000020
【図１９】
2006313561.tif 000021
【図２０】
2006313561.tif 000022
【図２１】
2006313561.tif 000023
【図２２】
2006313561.tif 000024
【図２３】
2006313561.tif 000025
【図２４】
2006313561.tif 000026
【図２５】
2006313561.tif 000027
【図２６】
2006313561.tif 000028
【図２７】
2006313561.tif 000029
【図２８】
2006313561.tif 000030
【図２９】
2006313561.tif 000031
【図３０】
2006313561.tif 000032
【図３１】
2006313561.tif 000033
【図３２】
2006313561.tif 000034
【図３３】
2006313561.tif 000035
【図３４】
2006313561.tif 000036
【図３５】
2006313561.tif 000037
【図３６】
2006313561.tif 000038
【図３７】
2006313561.tif 000039
【図３８】
2006313561.tif 000040
【図３９】
2006313561.tif 000041
【図４０】
2006313561.tif 000042
【図４１】
2006313561.tif 000043
【図４２】
2006313561.tif 000044
【図４３】
2006313561.tif 000045
【図４４】
2006313561.tif 000046
【図４５】
2006313561.tif 000047
【図４６】
2006313561.tif 000048
【図４７】
2006313561.tif 000049
【図４８】
2006313561.tif 000050
【図４９】
2006313561.tif 000051
【図５０】
2006313561.tif 000052
【図５１】
2006313561.tif 000053
【図５２】
2006313561.tif 000054
【図５３】
2006313561.tif 000055
【図５４】
2006313561.tif 000056
【図５５】
2006313561.tif 000057
【図５６】
2006313561.tif 000058
【図５７】
2006313561.tif 000059
【図５８】
2006313561.tif 000060
【図５９】
2006313561.tif 000061
【図６０】
2006313561.tif 000062
【図６１】
2006313561.tif 000063
【図６２】
2006313561.tif 000064
【図６３】
2006313561.tif 000065
【図６４】
2006313561.tif 000066
【図６５】
2006313561.tif 000067
【図６６】
2006313561.tif 000068
【図６７】
2006313561.tif 000069
【図６８】
2006313561.tif 000070
【図６９】
2006313561.tif 000071
【図７０】
2006313561.tif 000072
【図７１】
2006313561.tif 000073
【図７２】
2006313561.tif 000074
【図７３】
2006313561.tif 000075
【図７４】
2006313561.tif 000076
【図７５】
2006313561.tif 000077
【図７６】
2006313561.tif 000078
【図７７】
2006313561.tif 000079
【図７８】
2006313561.tif 000080
【図７９】
2006313561.tif 000081
【図８０】
2006313561.tif 000082
【図８１】
2006313561.tif 000083
【図８２】
2006313561.tif 000084
【図８３】
2006313561.tif 000085
【図８４】
2006313561.tif 000086
【図８５】
2006313561.tif 000087
【図８６】
2006313561.tif 000088
【図８７】
2006313561.tif 000089
【図８８】
2006313561.tif 000090
【図８９】
2006313561.tif 000091
【図９０】
2006313561.tif 000092
【図９１】
2006313561.tif 000093
【図９２】
2006313561.tif 000094
【図９３】
2006313561.tif 000095
【図９４】
2006313561.tif 000096
【図９５】
2006313561.tif 000097
【図９６】
2006313561.tif 000098
【図９７】
2006313561.tif 000099
【図９８】
2006313561.tif 000100
【図９９】
2006313561.tif 000101
【図１００】
2006313561.tif 000102