(57)【特許請求の範囲】
【請求項１】
命令コードを読み込んで動作するマイクロコンピュータであって、
コンディションコードの状態を条件として、
アドレス空間上のデータの指定されたビットの操作内容を変更する命令実行手段を有し、
前記命令実行手段を定義する命令コードは、アドレス空間上のアドレスを指定するための情報と、ビットを指定する情報と、条件を指定する情報を含み、
前記命令実行手段は、演算手段を有し、
前記演算手段は、前記ビットを指定する情報を解読して、指定されないビットを保持し、
前記条件を指定する情報と前記コンディションコードの状態を解読して、指定されたビットのデータを生成する手段を含み、
汎用レジスタ上のデータの指定されたビットを操作する命令実行手段を含み、
前記汎用レジスタ上のデータの指定されたビットを操作する命令の命令コードは、前記アドレス空間上のデータの指定されたビットを、コンディションコードの状態を条件として操作内容を変更する命令の命令コードの一部と共通であって、
当該命令コードの一部のビットは、前記汎用レジスタ上のデータの指定されたビットを操作する命令の命令コードとしては汎用レジスタを指定し、
前記アドレス空間上のデータの指定されたビットを、コンディションコードの状態を条件として操作内容を変更する命令の命令コードとしては条件を指定することを特徴とするマイクロコンピュータ。
【請求項２】
請求項１記載のマイクロコンピュータであって、
前記コンディションコードは、演算結果を反映するものであって、
前記コンディションコードの状態は比較の一致を示すものを含み、
前記条件の成立／不成立に従って、
前記アドレス空間上のデータの指定されたビットをセットするか、クリアするかを変更することを特徴とするマイクロコンピュータ。
【請求項３】
請求項１記載のマイクロコンピュータであって、
前記コンディションコードは、演算結果を反映するものであって、
前記条件の成立時に、前記アドレス空間上のデータの指定されたビットをセット、またはクリアし、
不成立時に、前記アドレス空間上のデータの指定されたビットを保持することを特徴とするマイクロコンピュータ。
【請求項４】
命令コードを読み込んで動作し、データまたはアドレスを格納可能なレジスタを有するマイクロコンピュータであって、
メモリとレジスタ間のデータ転送を行なう転送命令と、
レジスタ上のデータに対して演算を行なう演算命令を持ち、
前置コードと、前記転送命令の命令コードと、前記演算命令の命令コードを、順次読み込んで、一つの命令として解釈し、
メモリ上のデータに対する演算を実行する命令実行手段を有し、
前記命令実行手段は命令コードで指定されない処理を禁止する手段と、
前記転送命令の命令コードの実行時に、コンディションコードの変化を抑止する手段とを含み、
メモリとレジスタ間のデータ転送を行なう転送命令またはレジスタ上のデータに対して演算を行なう演算命令のレジスタを指定するビットを、前記前置コードと、前記転送命令の命令コードと、前記演算命令の命令コードを含む、一つの命令として、命令の動作を定義するビットとすることを特徴とするマイクロコンピュータ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はマイクロコンピュータ乃至はマイクロコントローラ、またはデータ処理装置或いは半導体集積回路装置にかかり、特に機器組込み型の、これらの中央処理装置（ＣＰＵ）などに利用して有効な技術に関するものである。
【０００２】
【従来の技術】
半導体集積回路でなるマイクロコンピュータは、アドレス空間の拡張や、命令セットの拡大、高速化などが図られてきた。マイクロコンピュータのＣＰＵは、ソフトウェアによってその機能を定義されているから、アドレス空間の拡張や、命令セット拡大、高速化などを図ったマイクロコンピュータにおいても、既存のマイクロコンピュータのソフトウェア資産を有効に利用できることが望ましい。
【０００３】
このため、オブジェクトレベルで互換性を保ちつつ、アドレス空間の拡張や、命令セット拡大を実現した例として、例えば、特開平６−５１９８１号公報乃至は平成５年６月（株）日立製作所発行『Ｈ８／３００Ｈシリーズプログラミングマニュアル』などがある。この中で、いわゆるロードストア型アーキテクチャを採用することが、命令セットの拡張を図る上で有効であることが示されている。
【０００４】
また、上記ＣＰＵのように２ステートで基本命令を実行していたものの互換性を保ちつつ１ステートで基本命令を実行するように高速化し、さらに、ＣＰＵとは独立した乗算器を内蔵して高速化を図った例として、特開平８−２６３２９０号公報或は平成７年３月（株）日立製作所発行『Ｈ８Ｓ／２６００シリーズＨ８Ｓ／２０００シリーズプログラミングマニュアル』などがある。
【０００５】
上記の技術などによって、単位時間のＣＰＵまたはマイクロコンピュータの処理能力が向上する。これにより、マイクロコンピュータの応用システムの制御処理を高速化でき、マイクロコンピュータによって制御される機器の高速化や高機能化、高精度化、或は、従来複数の半導体集積回路（マイクロコンピュータ）で構成したものを、統合したりすることによる小型化などを図ることができる。また、特に、割込みに対する応答時間を短縮することによって、種々の機器を制御する場合の時間的な精度、いわゆるリアルタイム性を向上することができる。
【０００６】
本発明者は、互換性を維持して、ソフトウェア資産を有効に利用できるようにしつつ、また、論理的物理的規模の増大を最小限にし、かつ消費電力の増大も最小限にして、機器組み込み型マイクロコンピュータとして、更に高速処理を可能とすることを検討した。
【０００７】
本発明者は、先願（特願平１１−１５１８９０）において、以下の提案を行った。
【０００８】
既存の、メモリ−レジスタ間の転送命令の単数または複数、レジスタ−レジスタ間の演算命令、の内、複数の命令コードを組合せ、これを結合させる前置コードを持って、メモリ上の演算を可能にする。
【０００９】
即ち、前記前置コードに続いて、メモリ−レジスタ間命令を実行する場合は、汎用レジスタではなく、ＣＰＵ内の、テンポラリレジスタの様な、プログラム上解放されていないラッチ手段とメモリの間でデータ転送を行なう。
【００１０】
更に、引き続きレジスタ−レジスタ間の演算命令を実行する場合は、演算対象の内の単数または複数のデータを前記ラッチ手段から読み出すようにする。
【００１１】
演算結果のメモリに格納する命令の場合には、前記転送命令で使用したメモリのアドレスは、別のラッチ手段（ＴＲＡ）に格納し、上記演算命令の演算結果を前記ラッチ手段に格納する。引き続き、メモリ−レジスタ間の転送命令を生成し、前記アドレスを格納したラッチ手段の内容をアドレスとして、前記演算結果を格納したラッチ手段の内容をデータとして、メモリへの書込みを行なう。
【００１２】
これによって、
メモリ−レジスタ間の転送命令、レジスタ−レジスタ間の演算命令などの命令コードは既存のものであるから、単独では従来同様に動作し、既存の命令実行を阻害することがない。また、既存の命令のみを使用していれば、既存のソフトウェア資産を有効に利用できる。
【００１３】
汎用レジスタやロードストアアーキテクチャなどの既存のＣＰＵのメリットを損なうことがない。
【００１４】
前記前置コードは、アドレッシングモードや演算の内容によらず共通に使用できるから、追加する命令コードを最低限にすることができる。また、前置コードに、そのほかのデータサイズなどの情報を持たせることによって、全体的な命令コード長を短縮できる。
【００１５】
メモリからラッチ手段へのデータ読み込み、演算、ラッチ手段の内容に基づくメモリへのライトは既存の命令と、使用するレジスタが相違するのみであるから、既存の命令動作を大きく変更することなく、利用できる。これによって、メモリ上のデータへの演算を可能にすることによる論理規模の増加を最小限にすることができる。
【００１６】
メモリ上のデータを演算可能とすることによって、直接処理できるデータ量を増加でき、また、汎用レジスタの待避／復帰などを省くことができ、処理速度を向上することができる。
【００１７】
一方、機器制御用のマイクロコンピュータにおいて、ＣＰＵの処理は、外部入力状態に適合するように行われる。これは、入出力ポートの状態や、周辺機能のフラグや、内蔵ＲＡＭなどに保持した、処理状態を示すビットの状態に応じて、プログラムを分岐することによってなされる。
【００１８】
同様に、プログラムの実行に従って、処理状態などに応じて、前記ビットやフラグをセットしたり、クリアしたりする。
【００１９】
処理状態に応じるために、条件分岐命令が用いられる。条件分岐命令は、それ自体、直接的な処理（転送／演算など）は行わないから、分岐した先での処理が短い場合にはオーバヘッドが相対的に大きくなってしまう。
【００２０】
比較結果乃至演算結果に従って、次の命令を実行するかしないかを切替えるものも知られている。しかしながら、この場合は、次の命令しか制御しないから、比較結果乃至演算結果に従って、複数の処理を切替える場合には対応できない。
【００２１】
また、マイクロコンピュータのＣＰＵには、前記ビットやフラグといったビット単位のデータを容易に操作できるように、いわゆるビット操作命令を持っている。ビットデータの状態を検査するビットテスト（ＢＴＳＴ）命令、ビットデータの値を変更するビットセット（ＢＳＥＴ）命令、ビットクリア（ＢＣＬＲ）命令、ビットノット（ＢＮＯＴ）命令などがあり、更に、キャリ（Ｃ）フラグをビットアキュムレータとして、ビット転送や、ビット演算を行う命令を持つものがある。
【００２２】
また、マイクロコンピュータのプログラムを、Ｃ言語のような高級言語で記述することが増えてきている。高級言語で記述する場合、アセンブリ言語で記述する場合に比較して、プログラム容量が大きくなりやすい。
【００２３】
【発明が解決しようとする課題】
本発明が解決しようとする課題は、論理的・物理的規模の増大を最小限とし、既存のＣＰＵと互換性を維持しつつ、メモリ上のフラグの設定を容易にすることにある。即ち、プログラム容量を縮小し、高速化を図ることである。
【００２４】
また、既存の、メモリ−レジスタ間の転送を行なう命令コード、レジスタに対する演算命令コードを組合せ、これを結合させる前置コード（前置命令コード、制御コードともいう）を以ってメモリ上のデータに対する演算命令を実現する場合などに、命令コード長を増加させることなく、更に、多様な命令機能を実現することにある。
【００２５】
ＣＰＵの使い勝手の向上、プログラム容量の縮小、及び処理性能の向上を実現することにある。
【００２６】
本発明の前記ならびにそのほかの目的と新規な特長は、本明細書の記述および添付図面か明らかになるであろう。
【００２７】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば、下記の通りである。
【００２８】
第１の発明は、既存の、メモリ−レジスタ間の転送を行なう命令コード、レジスタに対する演算命令コードを組合せ、これを結合させる前置コードを以って、新規のメモリ−レジスタ間の演算命令を実現するようにするとともに、単独の命令として実行する場合のレジスタフィールドに、別の修飾情報を定義する。この別の修飾情報は、当該命令コード又は後続の命令コードを修飾するようにする。
【００２９】
前記前置コードに続いて、メモリ−レジスタ間転送命令を実行する場合は、汎用レジスタではなく、ＣＰＵ内の、テンポラリレジスタやデータバッファの様な、プログラム上解放されていないラッチ手段とメモリの間でデータ転送を行うようにするとき、データを格納する先は固定的なラッチ手段であり、汎用レジスタを指定する必要がないから、メモリ−レジスタ間転送命令を単独の命令として実行する場合に、データを格納する汎用レジスタを指定するフィールド（ビット列）を別の情報として、当該命令コード乃至後続の命令コードの動作を変更（修飾）するようにする。当該命令コードを修飾する場合には、当該命令コードが、結合された命令の一部である情報（ＭＯＤＳ、ＭＯＤＤ）を参照して、前記修飾情報も含めて命令デコードを行うようにする。後続の命令コードを修飾する場合には、当該命令コードが、結合された命令の一部である情報（ＭＯＤＳ、ＭＯＤＤ）を参照して、前記修飾情報に基づいた修飾情報（ＭＯＤＯＰＴ）を出力する。
【００３０】
更に、前記前置コード及びメモリ−レジスタ間転送命令に引き続きレジスタ−レジスタ間の演算命令を実行する場合は、演算対象の内の単数または複数のデータを前記ラッチ手段から読み出すようにし、汎用レジスタ（の番号）を指定するフィールド（ビット）を別の情報として、当該命令コード乃至後続の命令コードの動作を変更するようにする。当該命令コードが、結合された命令の一部である情報（ＭＯＤＳ、ＭＯＤＤ）を参照して、前記修飾情報も含めて命令デコードを行うようにする。
【００３１】
第２の発明は、ビットセット（ＢＳＥＴ）、ビットクリア（ＢＣＬＲ）、ビット転送（ＢＳＴ）を条件付きで実行する命令を有するようにする。条件はコンディションコードレジスタの所要のフラグ（Ｃ、Ｖ、Ｚ、Ｎ）の状態を設定する。即ち、一般的には、条件付ビットセット命令は、
BSET/cc  #n1,@aa1
と記述され、例えば、ゼロフラグ（Ｚ）が１のとき、を条件とする場合（ＥＱ＝ｅｑｕａｌ）には、
BSET/EQ  #n1,@aa1
と記述され、本命令実行時には、条件が成立している場合に、デスティネーションのロケーション（アドレスａａ１）の所定のビット（ビットｎ１）を１にセットする。条件が不成立の場合には、デスティネーションのロケーションのデータは保持されるようにする。
【００３２】
同様に、条件が成立したときのみ所定のビットをクリアする命令は、
BCLR/cc  #n1,@aa1
である。また、条件が成立したときに、デスティネーションのロケーション（アドレスａａ１）の所定のビット（ビットｎ１）を１にセットし、不成立のときは０にクリアする命令は、
BST/cc   #n1,@aa1
である。
【００３３】
かかる命令は、コンディションコードレジスタの条件となっているフラグ（Ｃ、Ｖ、Ｚ、Ｎ）に影響を与えないようにする。
【００３４】
このため、ビット番号を検知する手段と、条件の成立／不成立を検知する手段と、前記検知されたビット番号の所定のビット状態とする手段を有するようにする。
【００３５】
上記条件付きビット操作命令によって、Ｃ言語で記述された以下のプログラム      if(temp ！= xyz)  flag ＆= 0xfd;
else              flag ｜= 0x02;
は、ｔｅｍｐを汎用レジスタＲ０に保持しているものとして、
CMP.W   #xyz,R0
BST/EQ  #1,@flag
と記述することができる。不一致のとき、ビット１が０にクリアされ、一致のとき、ビット１が１にセットされる。
【００３６】
分岐命令を不要とし、より簡単なプログラムとし、プログラム容量の縮小や高速化に寄与できる。
例えば、従来技術によれば、
CMP.W   #xyz,R0
BEQ     L1
BCLR    #1,@flag
BRA     L2
L1    BSET    #1,@flag
L2
となる。
【００３７】
更に、本発明によれば、排他的な条件でなかったり、セットする条件が異なる場合、即ち、
if(temp ！= xyz)  flag0 ＆= 0xfd;
else              flag1 ｜= 0x02;のように、条件によって別のフラグ
を操作する場合は、
CMP.W    #xyz,R0
BCLR/NE  #1,@flag0
BSET/EQ  #1,@flag1
と記述することができる。ＢＣＬＲ／ＮＥ命令によって、フラグに影響を受けない、即ち、ＣＭＰ．Ｗ命令の実行結果が保持するようにして、この実行結果に従ったＢＳＥＴ／ＥＱ命令を実行可能である。
【００３８】
コンディションコードのような演算結果を反映するフラグの条件を参照して、所望のデータのセット／クリア／保持を選択可能な命令は、動作を規定するフィールド（オペレーションフィールド）を複数に分割し、これを命令コードの基本単位上の別のワードで実現し、かかるワードを、独立して使用可能な別の命令の命令コード、乃至、別の命令の命令コードの一部と共通にする。
【００３９】
かかる命令コードの第１のワードは、テンポラリレジスタやデータバッファの様な、プログラム上解放されていないラッチ手段とメモリの間でデータ転送を行なう。第２のワードは、前記コンディションコードの指定した状態に従って、前記データの操作（所望のビットのセット／クリア／保持）を行うようにする。
【００４０】
上記命令コードの第２のワードは、独立して使用可能な別の命令の命令コードとして使用する場合の、汎用レジスタを指定するフィールド（ビット列）に、前記条件を指定する情報を定義する。
【００４１】
当該命令コードが、結合された命令の一部である情報（ＭＯＤＤ）を参照して、前記条件を判定し、セット／クリア／保持を選択する。
【００４２】
【発明の実施の形態】
図１に、本発明の適用されたマイクロコンピュータのブロック図を示す。
マイクロコンピュータは、シングルチップ型であり、全体の制御を司るＣＰＵ、割込コントローラ（ＩＮＴ）、ＣＰＵの処理プログラムなどを格納するメモリであるＲＯＭ、ＣＰＵの作業領域並びにデータの一時記憶用及びスタック用のメモリとすることができるＲＡＭ、タイマ、シリアルコミュニケーションインタフェース（ＳＣＩ）、Ａ／Ｄ変換器、第１乃至第９入出力ポート（ＩＯＰ１〜ＩＯＰ９）、クロック発振器（ＣＰＧ）の機能ブロック乃至はモジュールから構成され、公知の半導体製造技術により１つの半導体基板上に形成される。
【００４３】
かかるマイクロコンピュータは、電源端子として、グランドレベル（Ｖｓｓ）、電源電圧レベル（Ｖｃｃ）、アナロググランドレベル（ＡＶｓｓ）、アナログ電源電圧レベル（ＡＶｃｃ）、の他専用制御端子として、リセット（ＲＥＳ）、スタンバイ（ＳＴＢＹ）、モード制御（ＭＤ０、ＭＤ１）、クロック入力（ＥＸＴＡＬ、ＸＴＡＬ）端子を有する。
【００４４】
ＣＰＧの端子ＥＸＴＡＬ、ＸＴＡＬに接続される水晶発振子またはＥＸＴＡＬ端子に入力される外部クロックに基づいて生成される基準クロック（システムクロック）に同期して、マイクロコンピュータは動作を行う。この基準クロック１周期をステートと呼ぶ。
【００４５】
マイクロコンピュータの機能ブロックは、内部バスによって相互に接続される。バスの制御を行なうバスコントローラ（不図示）を内蔵している。内部バスはアドレスバス・データバスの他、リード信号・ライト信号・バスサイズ信号を含み、これらはバスコマンド（ＢＣＭＤ）としてコード化される。
【００４６】
かかる機能ブロックやモジュールは内部バスを介して、ＣＰＵによってリード／ライトされる。内部バスのデータバス幅は３２ビットとする。内蔵ＲＯＭ、ＲＡＭリード／ライトを１ステートでリード／ライト可能とする。
【００４７】
タイマ、ＳＣＩ、Ａ／Ｄ変換器、ＩＯＰ１〜ＩＯＰ９、ＳＹＳＣ、ＩＮＴ、ＣＰＧなどが有する制御レジスタを総称して、内部Ｉ／Ｏレジスタと呼ぶ。これらには、ビット単位で意味を持つビットやフラグが含まれる。例えば、入出力ポートや、割込み要因フラグなどがある。また、内蔵ＲＡＭなどにも適宜、所定のアドレスの所定のビットにフラグが割当てられる。これらは、Ｃプログラムでは、構造体としてビットフィールド宣言して取り扱われる。
【００４８】
各入出力ポートは、アドレスバス、データバス、バス制御信号あるいはタイマ、ＳＣＩ、Ａ／Ｄ変換器の入出力端子と兼用されている。すなわち、タイマ、ＳＣＩ、Ａ／Ｄ変換器は、それぞれ入出力信号を有し、入出力ポートと兼用にされた端子を介して、外部と入出力されるものである。例えばＩＯＰ５、６は、タイマの入出力端子と兼用、ＩＯＰ７はＳＣＩの入出力端子と兼用にされている。アナログデータの入出力（ＡＩＮ０〜ＡＩＮ７）端子は、ＩＯＰ８と兼用にされている。外部割込み入力は、ＩＯＰ９と兼用にされている。
【００４９】
かかるマイクロコンピュータにリセット信号ＲＥＳが与えられると、ＣＰＵを始めとし、マイクロコンピュータはリセット状態になる。このリセットが解除されると、モード制御で指定された動作モード（シングルチップ、外部バス拡張、内蔵ＲＯＭ有効など）とされ、ＣＰＵは所定のアドレス（ベクタアドレス）からスタートアドレスをリードして、このスタートアドレスから命令のリードを開始するリセット例外処理を行う。この後、ＣＰＵは逐次、ＲＯＭなどから命令をリードし、解読して、その解読内容に基づいて、フラグやビットの判定や操作を含む、データの処理或はＲＡＭ、タイマ、ＳＣＩ、Ａ／Ｄ変換器、入出力ポートなどとのデータ転送を行う。即ち、ＣＰＵは、タイマ、ＳＣＩ、Ａ／Ｄ変換器、入出力ポートなどから入力されるデータ或は機器の状態や指示（スイッチ、ボリュームなど）を参照しつつ、ＲＯＭなどに記憶されている命令に基づいて処理を行い、その結果に基づいて、入出力ポート、タイマなどを使用しつつ、外部に信号を出力し、機器の制御を行うものである。
【００５０】
割込みコントローラ（ＩＮＴ）は、タイマ、ＳＣＩ、Ａ／Ｄ変換器、外部入力の各割込み信号を入力して、割込み要求信号をＣＰＵに出力する。
【００５１】
ＣＰＵに割込要求信号が与えられると、ＣＰＵは実行中の処理を中断して、割込み例外処理状態を経て、所定の処理ルーチンに分岐し、所望の処理を行い、割込要因をクリアしたりする。所定の処理ルーチンの最後には、通常復帰命令がおかれ、この命令を実行することによって前記中断した処理を再開する。
【００５２】
割込み例外処理の実行時には、後述のプログラムカウンタ（ＰＣ）やコンディションコードレジスタ（ＣＣＲ）などがＲＡＭなどに退避され、復帰命令実行時に上記プログラムカウンタ（ＰＣ）やコンディションコードレジスタ（ＣＣＲ）などが復帰される。
【００５３】
図２に、ＣＰＵに内蔵されている汎用レジスタ及び制御レジスタの構成例（プログラミングモデル）を示す。
【００５４】
ＣＰＵは、３２ビット長の汎用レジスタを８本持っている。汎用レジスタは、すべて同機能を持っており、アドレスレジスタとしてもデータレジスタとしても使用することができる。
【００５５】
データレジスタとしては３２ビット、１６ビットおよび８ビットレジスタとして使用きる。アドレスレジスタおよび３２ビットレジスタとしては、一括して汎用レジスタＥＲ（ＥＲ０〜ＥＲ７）として使用する。１６ビットレジスタとしては、汎用レジスタＥＲを分割して汎用レジスタＥ（Ｅ０〜Ｅ７）、汎用レジスタＲ（Ｒ０〜Ｒ７）として使用する。これらは同等の機能を持っており、１６ビットジスタを最大１６本まで使用することができる。なお、汎用レジスタＥ（Ｅ０〜Ｅ７）を、特に拡張レジスタと呼ぶ場合がある。８ビットレジスタとしては、汎用レジスタＲを分割して汎用レジスタＲＨ（Ｒ０Ｈ〜Ｒ７Ｈ）、汎用レジスタＲＬ（Ｒ０Ｌ〜Ｒ７Ｌ）として使用する。これらは同等の機能を持っており、８ビットレジスタを最大１６本まで使用することができる。各レジスタ独立に使用方法を選択することができる。
【００５６】
汎用レジスタＥＲ７には、汎用レジスタとしての機能に加えて、スタックポインタ（ＳＰ）としての機能が割り当てられており、例外処理やサブルーチン分岐などで暗黙的に使用される。例外処理は前記割込み処理を含む。
【００５７】
ＰＣは２４ビットのカウンタで、ＣＰＵが次に実行する命令のアドレスを示す。特に制限されないもののＣＰＵの命令は、すべて２バイト（ワード）を単位としているため、最下位ビットは無効であり、命令リード時には最下位ビットは０とみなされる。
【００５８】
ＣＣＲは８ビットのレジスタで、割込みマスクビット（Ｉ）とハーフキャリ（Ｈ）、ネガティブ（Ｎ）、ゼロ（Ｚ）、オーバフロー（Ｖ）、キャリ（Ｃ）の各フラグを含む。ハーフキャリ（Ｈ）、ネガティブ（Ｎ）、ゼロ（Ｚ）、オーバフロー（Ｖ）、キャリ（Ｃ）の各フラグは転送命令や演算命令実行時に、データを検査して、その状態を反映する。ハーフキャリ（Ｈ）は１０進補正用にのみ用いられる。
【００５９】
ＥＸＲは８ビットのレジスタで、割込みなどの例外処理の制御を行なう。割込みマスクビット（Ｉ２〜Ｉ０）とトレース（Ｔ）の各ビットを含んでいる。
【００６０】
汎用レジスタ上のデータ構成例、メモリ空間上のデータ構成、アドレッシングモードと実効アドレスの計算方法などについては、前記平成７年３月（株）日立製作所発行『Ｈ８Ｓ／２６００シリーズＨ８Ｓ／２０００シリーズプログラミングマニュアル』記載のＣＰＵと同様である。
【００６１】
図３に、実効アドレスの計算方法を示す。
アドレス空間は１６Ｍバイトとして、実行アドレスは２４ビットが有効である。
【００６２】
（１）レジスタ間接では命令コード中にレジスタを指定する部分を含み、この命令コードで指定された汎用レジスタＥＲの内容の合計３２ビットをアドレスとしてメモリ上のアドレスを指定する。アドレスは２４ビットでよいため、上位８ビットは無視する。
【００６３】
（２）（３）ディスプレースメント付レジスタ間接は、上記レジスタ間接と同様に得られた３２ビットのアドレスに、命令コード中に含まれるディスプレースメントを加算した結果をアドレスとしてメモリ上のアドレスを指定する。加算結果はアドレスの指定のみに使用され、汎用レジスタＥＲの内容には反映されない。特に制限はされないものの、ディスプレースメントは３２ビットまたは１６ビットであり、１６ビットディスプレースメントは加算する場合には上位１６ビットは符号拡張される。すなわち、ディスプレースメントの上位１６ビットは１６ビットディスプレースメントのビット１５と同じ値であるとして加算が行われる。この場合、３２ビットディスプレースメントの上位８ビットは、予約領域とされ、無視される。
【００６４】
（４）ポストインクリメントレジスタ間接は、前記レジスタ間接と同様に得られた２４ビットのアドレスでメモリ上のアドレスを指定する。その後、このアドレスに１または２または４を加算し、その加算結果が汎用レジスタＥＲに格納される。メモリ上のバイトデータを指定する場合１が、ワードデータを指定する場合２が、ロングワードデータを指定する場合４が、それぞれ加算される。加算結果は３２ビットで汎用レジスタに格納される。特に制限はされないものの、ポストインクリメントレジスタ間接は、メモリからレジスタへの転送命令に使用する。
【００６５】
（５）プリデクリメントレジスタ間接は、前記レジスタ間接と同様に得られた３２ビットのアドレスから１または２または４を減算した結果の２４ビットのアドレスでメモリ上のアドレスを指定する。その後、その減算結果が汎用レジスタに格納される。メモリ上のバイトデータを指定する場合１が、ワードデータを指定する場合２が、アドレスデータを指定する場合４が、それぞれ減算される。減算結果の上位８ビットも拡張レジスタに格納される。特に制限はされないものの、プリデクリメントレジスタ間接は、レジスタからメモリへの転送命令に使用する。本発明では、前置コードに修飾情報を持ってポストデクリメントレジスタ間接、プリインクリメントレジスタ間接も実行可能にする。
【００６６】
（６）（７）（８）絶対アドレスは命令コード中に含まれる、８ビット、１６ビットまたは２４ビットの絶対アドレスをアドレスとしてメモリ上のアドレスを指定する。８ビット絶対アドレスは、上位１６ビットが１拡張される。すなわちアドレスのビット２３〜８は全ビット１とされる。従って使用可能なアドレスはＨ’ＦＦＦＦ００〜Ｈ’ＦＦＦＦＦＦの２５６バイトである。また、１６ビット絶対アドレスは、上位８ビットが符号拡張される。すなわち、１６ビット絶対アドレスのビット１５が０であればアドレスのビット２３〜１６は全ビット０とされ、ビット１５が１であればアドレスのビット２３〜１６は全ビット１とされる。従って使用可能なアドレスはＨ’００００００〜Ｈ’００７ＦＦＦ及びＨ’ＦＦ８０００〜Ｈ’ＦＦＦＦＦＦの６４ｋバイトである。
【００６７】
（９）（１０）プログラムカウンタ相対は、プログラムカウンタの内容の２４ビットのアドレスに命令コード中に含まれるディスプレースメントを加算した結果をアドレスとしてメモリ上のアドレスを指定する。加算結果はプログラムカウンタに格納される。特に制限はされないものの、ディスプレースメントは１６ビットまたは８ビットであり、これらのディスプレースメントは加算する場合には上位８ビットまたは１６ビットは符号拡張される。すなわち、ディスプレースメントの上位８ビットは１６ビットディスプレースメントのビット１５と、または上位１６ビットは８ビットディスプレースメントのビット７と同じ値であるとみなして加算が行われる。プログラムカウンタ相対は分岐命令のみで使用される。上記の他にイミディエイト、レジスタ直接、メモリ間接などのアドレッシングモードを実行するが、詳細な説明は省略する。
【００６８】
図４に、従来技術のＣＰＵの機械語の命令フォーマットの一例を示す。
ＣＰＵの命令は、２バイト（ワード）を単位にしている。各命令はオペレーションフィード（ｏｐ）、レジスタフィールド（ｒ）、ＥＡ拡張部（ＥＡ）、およびコンディションフィールド（ｃｃ）を含む。
特に制限はされないものの、前記平成７年３月（株）日立製作所発行『Ｈ８Ｓ／２６００シリーズＨ８Ｓ／２０００シリーズプログラミングマニュアル』記載のＣＰＵと同じ命令フォーマットとしている。
【００６９】
オペレーションフィールド（ｏｐ）は、命令の機能を表し、アドレッシングモードの指定オペランドの処理内容を指定する。命令の先頭４ビットを必ず含む。２つのオペレーションフィールドを持つ場合もある。
【００７０】
レジスタフィールド（ｒ）は汎用レジスタを指定する。
レジスタフィールド（ｒ）はアドレスレジスタのとき３ビット、データレジスタのとき３ビット（３２ビットレジスタ）または４ビット（８または１６ビットレジスタ）である。
２つのレジスタフィールドを持つ場合、またはレジスタフィールドを持たい場合もある。
【００７１】
ＥＡ拡張部（ＥＡ）は、イミディエイトデータ、絶対アドレスまたはディスプレースメンを指定する。８ビット、１６ビット、または３２ビットである。
【００７２】
コンディションフィールド（ｃｃ）は条件分岐命令（Ｂｃｃ命令）の分岐条件を指定する。
【００７３】
図５に、従来技術のＣＰＵのメモリに対する転送命令の例の詳細な命令フォーマットを示す。ここでは、同図(1)にレジスタ間接、(2)にポストインクリメント／プリデクリメントレジスタ間接、(3)に１６ビットディスプレースメント付きレジスタ間接、(4)に１６ビット絶対アドレスについて示す。このほかのアドレッシングモードも持つが、詳細な説明は省略する。
【００７４】
レジスタ間接（@ERn）は、命令コードのレジスタフィールド（ｒ１）で指定されるアドレスレジスタ（ERn）の内容をアドスとしてメモリ上のオペランドを指定する。
【００７５】
ディスプレースメント付きレジスタ間接（@（d:16,ERn））は、命令コードのレジスタフィールド（ｒ１）で指定されるアドレスレジスタ（ERn）の内容に命令コード中に含まれる１６ビットディスプレースメント（ｄ）を加算した内容をアドレスとしてメモリ上のオペランドを指定する。転送データは別のレジスタフィールド（ｒ２）で指定されるデータレジスタから入出力される。
【００７６】
ポストインクリメントレジスタ間接（@ERn＋）は、命令コードのレジスタフィールド（ｒ１）で指定されるアドレスレジスタ（ERn）の内容をアドレスとしてメモリ上のオペランドを指定する。転送データは別のレジスタフィールド（ｒ２）で指定されるデータレジスタから入出力される。
【００７７】
プリデクリメントレジスタ間接（@−ERn）は、命令コードのレジスタフィールドで指定されるアドレスレジスタ（ERn）の内容から１、２または４を減算した内容をアドレスとしてメモリ上のオペランドを指定する。転送データは別のレジスタフィールド（ｒ２）で指定されるデータレジスタから入出力される。
【００７８】
絶対アドレス（@aa:16）は、命令コード中に含まれる絶対アドレス（ａａ）で、メモリ上のオペランドを指定する。転送データは別のレジスタフィールド（ｒ２）で指定されるデータレジスタから入出力される。
いずれも命令コードの第１ワードのビット７でデータサイズ、ビット８で転送方向を指定する。
図６に、前置コード（制御コードともいう）のフォーマットを示す。
前置コードは、ソース側、デスティネーション側がメモリである情報を示すビットを持っている。
後述の図７のＥＡ１とＥＡ２の転送命令コードは同一としているため、ソース側がメモリであれば、デスティネーション側に拘らず、前置コードに続くものが、ＥＡ１と判断される。一方、ソース側が汎用レジスタとされ、デスティネーション側がメモリであれば、ＥＡ２と判断される。そのほか、ロングワードサイズを示す情報を持っている。
【００７９】
また、ＥＡ１、ＥＡ２の転送命令コードの動作を変更させる（修飾する）情報を持っている。例えば、ポストインクリメント／プリデクリメントレジスタ間接が、メモリのリード／ライトの方向によって一義的に指定されてしまうような場合、即ち、前記のようにポストインクリメントはライト時、プリデクリメントはリード時などと固定されている命令セットの場合、前記修飾情報によって、リード時にポストインクリメント動作を行なったり、ライト時にプリデクリメントを行なったりすることができる。
【００８０】
なお、命令フォーマット自体は、プログラミングする場合には特に意識することはなく、アセンブリ言語やＣ言語で、プログラムを記述すれば、自動的にオブジェクトコード（２進コード）を発生する、アセンブラやＣコンパイラが提供される。
【００８１】
例えば、汎用レジスタに空きがない状態で、メモリ上の２つのデータの加算を行なう場合、従来のロードストア型アーキテクチャでは、
PUSH.W    R0
PUSH.W    R1
MOV.W     @aa1,R0
MOV.W     @aa2,R1
ADD.W     R1,R0
MOV.W     R0,@aa1
POP.W     R1
POP.W     R0
などと記述する必要があった。本発明によれば、
ADD.W     @aa2,@aa1
と記述すればよい。
【００８２】
図７〜図１０に、本発明によるメモリに対する演算命令の命令フォーマットの組合せを示す。メモリに対する演算命令は、制御コード（前述の前置コードと同じ）とＥＡ１コード、ＥＡ２コード、演算コードを組合せる。ＥＡ１、ＥＡ２は、図５に示される各アドレッシングモードの転送命令の命令コードと同一にされる。演算コードは、汎用レジスタ間の演算命令の命令コードと同一にされる。
【００８３】
ＥＡ１コード、ＥＡ２コード、演算コードの組合せは意味があるものについては任意にできる。即ち、所望の処理の内容に従って、ＥＡ１コード、ＥＡ２コード、演算コードの必要なものを組合せる。
【００８４】
例えば、インクリメント演算、シフト演算などは、デスティネーション側データのみしか必要としないから、ソース側データをリードするためのＥＡ１コードは不要である。前置コード、ＥＡ２コード、演算コードを組合せる。
【００８５】
加算命令のような場合、ソース側、デスティネーション側の、メモリを使用する方のみを組合せればよい。ソース側のみをメモリ上のデータとする場合（例えば、ADD.W @ER1,R0）は、前置コード、ＥＡ１コード（MOV.W @ER1,Rxと同一。Rxは意味を持たないので必要に応じて修飾情報とする）、演算コード（ADD.W Rx,R0と同一）を組合せる。デスティネーション側のみをメモリ上のデータとする場合は（ADD.W R1,@ER0）、前置コード、ＥＡ２コード、演算コードを組合せる。ソース側、デスティネーション側の両方をメモリ上のデータとする場合（ADD.W @ER1,@ER0）は、前置コード、ＥＡ１、ＥＡ２コード、演算コードを組合せる。なお、ソース側、デスティネーション側の両方を汎用レジスタ上のデータとする場合（ADD.W R1,R0）は、既存の命令であり、演算コードのみでよい（前置コードは不要である）。
【００８６】
イミディエイトデータとメモリ上のデータとの演算（例えば、ADD.W #xx,@ER1）も、同様であるが、イミディエイトデータはソース側とされるから、ＥＡ１コードは必要なく、また、演算コードとして、レジスタ間演算の代わりに、イミディエイト−レジスタ間の演算コード（ADD.W #xx,Rxと同一）を用いる。
【００８７】
メモリ間の転送命令（例えば、MOV.W @ER1,@aa:16）は、上記メモリ間の演算同様に、前置コード、ＥＡ１コード、ＥＡ２コード、及びレジスタ間の転送命令コードを組合せてもよいが、本実施例では、前置コード、ＥＡ１コード（MOV.W @ER1,Rxと同一）、ＥＡ２コード（MOV.W Rx,@aa:16と同一）を組合せる。演算コードは不要とし、ＥＡ１コードの転送方向はリード方向、ＥＡ２コードの転送方向はライト方向とする。これによって、命令コード長を短縮（演算コード分）し、実行ステート数（演算コードのリード、デスティネーション側データのリード）も短縮できる。
【００８８】
イミディエイトデータのメモリへの転送（例えば、 MOV.W #xx,@ER1）は、上記イミディエイトデータとメモリ上のデータとの演算同様に、前置コード、ＥＡ２コード、演算コードを組合せてもよいが、本実施例では、前置コード、イミディエイト−レジスタ間の転送命令コード（MOV.W #xx,Rxと同一）、ＥＡ２コード（MOV.W Rx,@aa:16と同一）を組合せる。これによって、実行ステート数（デスティネーション側データのリード）も短縮できる。
【００８９】
本発明においては、使用しないレジスタフィールド（ｒ）は、適宜修飾情報とする。例えば、演算命令として、キャリ付き加算（ＡＤＤＸ）命令がサポートされていなかったり、バイトサイズのみだったりする場合にも、メモリ上のデータに対するロングワードサイズのキャリ付き加算命令を実現することができる。例えば、ソース側、デスティネーション側の両方をメモリ上のデータとする、ロングワードサイズのキャリ付き加算命令を実現する場合、組み込む演算命令コードを、ロングワード加算（ＡＤＤ）命令として、先行する転送命令コード（ＥＡ２）の使用しないレジスタ指定フィールド（ｒ）の、例えば、ビット０を１とすることにより、加算命令をキャリ付きに修飾することができる。
【００９０】
演算命令コードの使用しないレジスタ指定フィールドは、ソース側／デスティネーション側の一方または両方で、変わるのに対して、先行する転送命令コードは、使用しないレジスタ指定フィールドが固定されており、修飾情報に使用しやすい。
【００９１】
図６の通り、前置コードは、後続する転送命令コードを修飾することができる。転送命令コードは後続する転送命令コード、演算命令コードを修飾することができる。前置コードにビットの余裕がない場合でも、転送命令コード、演算命令コードのレジスタフィールドを利用することによって、必要な修飾を行うことができる。
【００９２】
図１１に、メモリ上のデータに対するキャリ付加算命令の例を示す。
転送命令コードの使用しないレジスタ指定フィールドを修飾情報フィールド（ｍｏｄｏｐｔ）としている。前記命令コード、MOV.W @ERm+,Rx命令２個（ＥＡ１、ＥＡ２）、ADD.L ERy,ERz命令（ｅｘｅ）を組合わせる。データサイズは前置コードで指示され、ＥＡ１、ＥＡ２のデータサイズはロングワードに変更される。また、ＥＡ２の修飾情報フィールド（ｍｏｄｏｐｔ）によって、後続のADD.L命令がADDX.L命令に変更される。
【００９３】
これによって、MOV.L @ERm-,Rn命令、ADDX.L ERm,ERn命令がサポートされていなくても、前置コード、転送命令コード（ＥＡ２）に修飾情報を持つことによって、ADDX.L @ERm-,@ERn-命令を実現可能にできる。例えば、    ADD.L     @ER0-,@ER1-
ADDX.L    @ER0-,@ER1-
ADDX.L    @ER0-,@ER1-
ADDX.L    @ER0-,@ER1-
ADDX.L    @ER0-,@ER1-
ADDX.L    @ER0-,@ER1-
ADDX.L    @ER0-,@ER1-
ADDX.L    @ER0-,@ER1-
などとして、メモリ上に配置された多バイト長（上記では３２バイト）のデータの加算命令を効率的に実行可能である。
【００９４】
多バイト長のデータは限られた本数の汎用レジスタ上に配置することが困難であるから、上記メモリに対する連続的な操作を可能にすることで、逐次的な、メモリ−レジスタ間の転送命令を不要にし、使い勝手を向上し、高速化とプログラム容量の縮小を図ることができる。
【００９５】
演算命令コードの使用しないレジスタ指定フィールドは適宜利用可能である。例えば、後述のように、条件付の演算としてもよい。
【００９６】
図１２に、本発明の条件付ビットセット／クリア／転送命令（ＢＳＴ／ｃｃ、ＢＳＥＴ／ｃｃ、ＢＣＬＲ／ｃｃ）の説明図を示す。
【００９７】
ＢＳＴ／ｃｃ命令は、
BST/cc    #n,＜EA＞
のアセンブラフォーマットを持つ。デスティネーションデータは、メモリであって、＜ＥＡ＞で指定する。図３の所定のアドレッシングモードが使用可能である。指定ビットは、そのビット番号をｎで指定する。ｃｃで指定した条件が成立した場合、指定ビットに１がセットされ、不成立の場合、指定ビットは０にクリアされる。
【００９８】
ＢＳＥＴ／ｃｃ命令は、
BSET/cc    #n,＜EA＞
のアセンブラフォーマットを持つ。前記同様に、ｃｃで指定した条件が成立した場合、指定ビットに１がセットされ、不成立の場合、元のデータが保持される。
【００９９】
ＢＣＬＲ／ｃｃ命令は、
BCLR/cc    #n,＜EA＞
のアセンブラフォーマットを持つ。前記同様に、ｃｃで指定した条件が成立した場合、指定ビットは０にクリアされ、不成立の場合、元のデータが保持される。
【０１００】
図１３に、無条件／条件付ビットセット／クリア／転送命令の命令フォーマットを示す。アドレッシングモードについては、特に制限はされないものの、レジスタ直接と、絶対アドレス８ビット／１６ビット／３２ビット、レジスタ間接の場合のみを示す。
【０１０１】
レジスタ直接の場合は、１ワードの命令コードで、各命令の機能を示すオペレーションフィールド（ｏｐ）と、ビット番号を指定するビットフィールド（ｎ）３ビットと、汎用レジスタを指定するレジスタフィールド（ｒ）４ビットを有する。無条件ビットセット／クリア／転送命令の場合は、データ転送を行う命令コードと前記レジスタ直接のビットセット／クリア／転送命令の命令コードを組合わせる。レジスタフィールドは使用しない。条件付ビットセット／クリア／転送命令の場合は、前記同様にした上で、レジスタフィールドに相当する部分を、条件を指定するコンディションフィールド（ｃｃ）４ビット、とする。
【０１０２】
コンディションフィールド（ｃｃ）は、例えば以下の表１に示す通りとすることができる。なお、コンディションフィールド（ｃｃ）に相当するフィールドが０の場合は、無条件のビット操作命令とされ、既存の命令コード（無条件ビットセット／クリア／転送命令の命令コード）の上位互換とされる。
【０１０３】
【表１】
0003760093.tif 000002
絶対アドレス８ビットの場合は、２ワードの命令コードで、第１ワードに、オペレーションフィールド（ｏｐ）とＥＡ拡張部である絶対アドレス（ＥＡ）を持ち、第２ワードに、前記レジスタ直接同様にオペレーションフィールド（ｏｐ）と、ビット番号を指定するビットフィールド（ｎ）３ビットを有する。
【０１０４】
即ち、本実施例においては、無条件ビットセット／クリア／転送命令のレジスタ直接の命令コードが、絶対アドレス８ビット／１６ビット／３２ビット、レジスタ間接の命令コードの最後のワードと共通にしている。
【０１０５】
第２ワードを、前記レジスタ直接の命令コードと共通化する場合、データの所在を示すレジスタフィールド（ｒ）４ビットが不要になるので、この部分をコンディションフィールド（ｃｃ）として、命令コードのビットの有効利用を図ると共に、データをリードする命令コードを、各ビット操作命令と共通化して、論理の簡略化を図ることができる。
【０１０６】
前記同様に、前置コードと転送命令コードと、演算命令としてビット操作命令を組合わせてもよい。
【０１０７】
図１４に、ＣＰＵの構成例を示す。
ＣＰＵは、制御部と実行部から構成される。
制御部は、命令レジスタＩＲ、命令変更部ＣＨ、命令デコーダＤＥＣ、レジスタセレクタＲＳＥＬ、割込み制御部ＩＮＴを含む。
【０１０８】
命令デコーダＤＥＣは、例えばマイクロＲＯＭ或はＰＬＡ（Programmable Logic Array）または布線論理で構成され、入力された命令コード（ｏｐｃｏｄｅ）を解読して、所要の制御信号を発生する。制御信号はそのタイミングに応じて、後述のＣｏｎｔｒｏｌＡ、Ｂ、Ｃが存在する。命令デコーダＤＥＣの出力の一部が命令デコーダＤＥＣにフィードバックされている。これは各命令コード内の遷移に用いるステージコード（ＴＭＧ）と、命令コード間に用いる制御信号（ＭＯＤＳ、ＭＯＤＤ、ＭＯＤＥＡ１、ＭＯＤＥＡ２、ＭＯＤＯＰＴ）を含む。即ち、前置コードは制御信号を発生し、ＥＡ１コード、ＥＡ２コードは、前記制御信号を参照しつつ動作し、更に制御信号を発生したりする。演算コードも制御信号を参照して、データの入出力元／先を切替え、演算処理を行なう。また、制御信号に従って、演算動作も変更される。また、制御信号に従って内部で命令コードを発生する。
【０１０９】
命令デコーダＤＥＣの一部を概念的に図示している。
前置コード（ｐｆ）は、制御信号（ｍｏｄ： ＭＯＤＳ、ＭＯＤＤ、ＭＯＤＥＡ１、ＭＯＤＥＡ２の生成信号を含む）、割込みマスク信号（ｍｓｋｉｎｔ）を出力する。そのほかの動作はＮＯＰ（無操作）命令などと同じでよい。
【０１１０】
転送命令コード（ｍｏｖ、例えば、ｍｏｖ＿１／２、ｂｓｔ＿１）は、制御信号（ｍｏｄ： ＭＯＤＯＰＴの生成信号を含む）、割込みマスク信号（ｍｓｋｉｎｔ）、汎用レジスタリード／ライト信号（Ｒｄｒ／ｗ）、テンポラリレジスタリード／ライト信号（ＴＲＡｒ／ｗ、ＴＲＤｒ／ｗ）を出力する。これらの信号が、制御信号（ＭＯＤＳ、ＭＯＤＤ）によって相違される。例えば、ＭＯＤＳ＝１のときはテンポラリレジスタライト信号（ＴＲＤｗｒ）が、 ＭＯＤＳ＝０のときは汎用レジスタライト信号（Ｒｄｗｒ）が、それぞれ選択される。
【０１１１】
演算命令コード（ｅｘｅ、例えばａｄｄ、ｂｓｔ−０など）は、割込みマスク信号（ｍｓｋｉｎｔ）、ソース汎用レジスタリード信号（Ｒｓｒｄ）、デスティネーション汎用レジスタリード／ライト信号（Ｒｄｒ／ｗ）、リードデータバッファリード信号（ＤＢＲｒｄ）、テンポラリレジスタリード信号（ＴＲＤｒｄ）、ライトデータバッファライト信号（ＤＢＷｗｒ）、条件判定信号（ｃｈｅｃｋ＿ｃｃｒ）、ＡＬＵ制御信号（ａｌｕ＿ｃｎｔ）を出力する。これらの信号は、その演算内容に従って所定のものが出力される。更にこれらの出力は、制御信号（ＭＯＤＳ、ＭＯＤＤ）によって相違される。例えば、ＢＳＴ命令の場合ソース汎用レジスタリード信号（Ｒｓｒｄ）とテンポラリレジスタリード信号（ＴＲＤｒｄ）は出力されない。また、ＭＯＤＤ信号に従って、デスティネーション汎用レジスタリード信号（Ｒｄｒｄ）とリードデータバッファリード信号（ＤＢＲｒｄ）、デスティネーション汎用レジスタライト信号（Ｒｄｗｒ）とライトデータバッファライト信号（ＤＢＷｗｒ）、がそれぞれ排他的に選択され、汎用レジスタを使用するかラッチ手段を使用するかを選択する。また、デスティネーション側メモリの場合は、内部でライト型転送命令と同等の動作を行なう命令コードを発生させる信号（ｍｋｍｏｖ）を出力する。ＭＯＤＤ＝１で、条件付ビットセット／クリア／転送命令のときは、条件判定信号（ｃｈｅｃｋ＿ｃｃｒ）が出力される。ＭＯＤＳ＝１またはＭＯＤＤ＝１で、かつＭＯＤＯＰＴ＝１であり、加算命令のときは、ＡＬＵ制御信号（ａｌｕ＿ｃｎｔ）が相違され、加算はキャリ付で行われる。
【０１１２】
命令レジスタＩＲは、リードした命令を一旦格納する。実行すべき命令は、命令デコーダに出力される。
【０１１３】
命令変更部ＣＨは、リードした命令以外の命令コードを、命令デコーダに与える場合に動作し、そのほかの場合は、命令レジスタＩＲの内容を命令デコーダＤＥＣに与える。リードした命令以外の命令コードは、割込み制御部ＩＮＴの指示によって、割込みなどの例外処理を実行するとき、及び、命令デコーダＤＥＣの指示（ｍｋｍｏｖ）によって、前記内部でライト型転送命令と同等の動作を行なう命令コード乃至無操作命令コードを発生させるとき、などに用いる。
【０１１４】
割込み制御部ＩＮＴは、図１の割込みコントローラの出力する割込み要求信号を受け付ける。また、命令デコーダの出力する割込みマスク信号（ｍｓｋｉｎｔ）を参照して、割込みがマスクされていなければ、命令変更部ＣＨに割込みを指示する。
【０１１５】
前記の通り、複数の命令コード（オペレーションフィールドを持つワード）を一連のものとして実行する場合には、それぞれの命令コードが割込みマスクを指示して、所定の組合せの命令コードの実行が途切れないようにする。
【０１１６】
レジスタセレクタＲＳＥＬは、命令デコーダの指示と、命令コード中に含まれるレジスタフィールドの情報と命令デコーダの出力（Ｒｄｒ／ｗなど）に基づいて、汎用レジスタを選択する。
【０１１７】
実行部ＥＸＥＣには、汎用レジスタ、プログラムカウンタ、コンディションコードレジスタ、テンポラリレジスタＴＲＡ、ＴＲＤ、算術論理演算器ＡＬＵ、分岐アドレス演算器ＡＵ、インクリメンタＩＮＣ、リードデータバッファＤＢＲ、ライトデータバッファＤＢＷ、アドレスバッファＡＢを含む。これらのブロックはＧＢバス、ＤＢバス、ＷＢバスによって相互に接続されている。
【０１１８】
図２に示される汎用レジスタ、プログラムカウンタ、コンディションコードレジスタ以外は、プログラミング上は参照できず、マイクロコンピュータ内部の動作にのみ用いられる。即ち、リードデータバッファＤＢＲ、ライトデータバッファＤＢＷ、アドレスバッファＡＢなどは、内部バスＩＡＢ、ＩＤＢとのインタフェースをとるために、一時的にデータをラッチする。テンポラリレジスタＴＲＡ、ＴＲＤは、マイクロコンピュータ内部の動作に適宜用いられる。
【０１１９】
リードデータバッファＤＢＲは、ＲＯＭ、ＲＡＭ、内部Ｉ／Ｏレジスタ、或は図示はされない外部メモリから、リードした命令コードやデータを一時的に格納する。
ライトデータバッファＤＢＷはＲＯＭ、ＲＡＭ、内部Ｉ／Ｏレジスタ、或は外部メモリへのライトデータを一時的に格納する。
アドレスバッファＡＢは、ＣＰＵがリード／ライトするアドレスを一時的に格納する。
【０１２０】
算術論理演算器ＡＬＵは、命令によって指定される各種の演算や実効アドレスの計算などに用いる。
インクリメンタＩＮＣは、ＰＣのインクリメントとアドレスレジスタのインクリメント／デクリメントに用いられる。
【０１２１】
メモリに対する演算を行なう場合には、ＴＲＡ、ＴＲＤ、ＤＢＲ、ＤＢＷなどを用いる。
テンポラリレジスタＴＲＡは、デスティネーション側データがメモリになる演算命令の場合に、デスティネーションアドレスのリード時にリードアドレスを格納し、データのデスティネーション側メモリへのライト時に、デスティネーションアドレス（リードアドレスと同じアドレス）を出力する。
テンポラリレジスタＴＲＤは、ソース側データがメモリになる演算命令の場合などに、ソース側データを一時格納し、演算命令コードの実行時にソース側データを出力する。
【０１２２】
リードデータバッファＤＢＲは、更に、デスティネーション側データがメモリになる演算命令の場合に、デスティネーション側データを一時格納し、演算コードの実行時にソース側データを出力する。
ライトデータバッファＤＢＷは、デスティネーション側データがメモリになる演算命令の場合に、演算結果を一時格納し、データのデスティネーション側メモリへのライト時に、ライトデータを出力する。
【０１２３】
これらの、ＴＲＡ、ＴＲＤ、ＤＢＲ、ＤＢＷは適宜他の場合にも動作も行なうが、詳細な説明は省略する。
【０１２４】
図１５に、ＡＬＵのビット操作命令に関係する部分のブロック図を示す。そのほかのＡＬＵの機能については図示を省略する。
ＡＬＵは、条件判定回路、デコーダ、セレクタ、入力セレクタ１、入力セレクタ２、論理演算回路、出力セレクタを含む。これらは、ａｌｕ＿ｃｎｔおよび図示はされない制御信号によって制御される。
デコーダは、命令コードに含まれるビット番号を示す情報（ｂｎ）を入力して、指定されたビットのみ１とし、そのほかのビットを０としたパターンを生成する。
【０１２５】
条件判定回路は、命令コードに含まれる条件フィールド（ｃｃ）とコンディションコードレジスタ（ＣＣＲ）の所定のビット（Ｃ、Ｖ、Ｚ、Ｎ）を入力して、条件を判定する。即ち、ハードウェア記述言語によって表現すると、
ａｓｓｉｇｎ文で、
0003760093.tif 000003
｜(cc==4'hF)＆((Z｜(N＾V))==1'b1);とすればよい。「４’ｈ２」は４ビットの１６進数の「２」を示す。「ｃｃ＝＝４’ｈ２」は条件フィールド（ｃｃ）が２のときに１となる。「＆」は論理積、「｜」は論理和、「＾」は排他的論理和である。また、後述の「￣」は論理反転である。
【０１２６】
セレクタは、キャリフラグ（Ｃ）と命令コードを入力し、挿入すべきビットデータを選択する。即ち、
0003760093.tif 000004
ここで、「＿ａ」は無条件、「＿ｃｃ」は条件付を示し、ｅｘ(ｂｓｅｔ＿ａ／ｃｃ、ｂｃｌｒ＿ａ／ｃｃ、ｂｓｔ＿ａ／ｃｃ)は前記ＡＬＵ制御信号(ａｌｕ＿ｃｎｔに含まれる）。例えば、
0003760093.tif 000005
と表現できる。
【０１２７】
入力セレクタ１は、内部バスＧＢとデコーダ出力を入力する。
入力セレクタ２は、セレクタの出力するビットデータ（ｂａｃｃ）及びデコーダ出力（ｄｅｃｏｕｔ）を入力する。
論理演算回路は、入力セレクタ１、２の出力に対して、所定の論理演算を行なう。
【０１２８】
出力セレクタは、論理演算回路の出力と、条件判定回路と命令コードを入力して、内部バスＷＢ、ＤＢへの出力を行なう。即ち、
0003760093.tif 000006
ＢＳＥＴ／ｃｃ及びＢＣＬＲ／ｃｃ命令（ｅｘ＝＝ｂｓｅｔ＿ｃｃまたはｅｘ＝＝ｂｃｌｒ＿ｃｃ）で、条件不成立（ｃｈｋ＿ｃｃ＝＝１’ｂ０）の場合は、ｇｂが選択され、元のデータが出力される。そのほかの場合は、論理演算回路の出力（ｌｏｇ＿ｏｕｔ）が選択される。
ＢＳＴ、ＢＳＥＴ、ＢＣＬＲ命令は条件あり／なしに拘らず、ＡＬＵの入力セレクタ１、２を、下記のようにする。
0003760093.tif 000007
ＡＬＵには論理積を指示することによって、指定されたビットはビットアキュムレータ、そのほかのビットは入力データとされて、ビットの挿入が行われる。出力セレクタは、ＡＬＵの結果を出力するようにする。即ち、各ビットは
aluout = decout? bacc: data;
と表現される。
【０１２９】
ＡＬＵの出力は、ＷＢを介して汎用レジスタに格納したり、ＤＢとライトデータバッファＤＢＷなどを介して、所定のメモリにライト可能である。条件付ビットセット／クリア／転送命令の場合は、ＤＢに出力され、ライトデータバッファＤＢＷなどを介して、所定のメモリにライトされる。
【０１３０】
以下に、本発明の命令の実行タイミングの例を示す。
特に制限はされないものの、内部データバスは３２ビットであって、内蔵ＲＯＭ、ＲＡＭリード／ライトを１ステートでリード／ライト可能とする。内蔵ＲＯＭ、ＲＡＭは、ＩＡＢをアドレスバスとし、ＩＤＢをデータバスとする。後述のＰＡＢ、ＰＤＢは接続されていないが、同様のタイミングを内部で生成している。
【０１３１】
図１６に、メモリ−メモリ型の加算命令（ＡＤＤＸ．Ｌ  ＠ＥＲｍ−、＠ＥＲｎ−）の実行タイミングを示す。
前置コード（ｐｆ）、 ＭＯＶ．Ｗ ＠ＥＲｍ＋，Ｒｘ、 ＭＯＶ．Ｗ ＠ＥＲｎ＋，Ｒｘに相当する命令コード（ｍｏｖ１、ｍｏｖ２）、ＡＤＤ．Ｌ ＥＲｙ，ＥＲｚに相当する命令コード（ａｄｄ）を組合せて定義される。
前置コードは、図７〜図１０に従い、Ｈ’０１４Ｆとされ、ＭＯＤＳ，ＭＯＤＤ信号によって、ソース側、デスティネーション側がいずれもメモリであることを指示する。
【０１３２】
Ｔ０のＣ２（φ＃同期。＃は反転論理を示す）で、ＣＰＵのアドレスバッファ（ＡＢ）からアドレスがＩＡＢに出力される。
Ｔ１のＣ１（φ同期）で、ＩＡＢの内容がＰＡＢに出力され、リードサイクルが開始される。Ｃ２でリードデータが内部データバスに得られ、これをＴ２のＣ１でＩＲにラッチする。これは、メモリ−メモリ演算命令の第１のワード（ｐｆ）である。
引き続き、Ｔ２のＣ２で次のアドレス（＋２された内容）がＩＡＢに出力され、このリードデータがＴ３のＣ１でＩＲにラッチされる（転送命令コード（ｍｏｖ−１））。以上の動作は以前の命令の実行の制御によって行われ、相対的な関係が異なる場合もある。
【０１３３】
直前の命令の実行が終了すると、最も早く命令の実行が開始される場合には、Ｔ２のＣ１で命令コードの第１ワード（ｐｆ）がＤＥＣに入力されて、命令の内容が解読される。かかる前置コードの場合には、ソース、デスティネーション側データがメモリ上に存在すること、ＥＡ１及びＥＡ２動作変更、ロングワードサイズを指示する。即ち、制御信号ＣとしてＭＯＤＳ、ＭＯＤＤ、ＭＯＤＥＡ１、ＭＯＤＥＡ２、ＬＯＮＧ信号を１にセットし、ＤＥＣにフィードバックする。
【０１３４】
Ｔ２のＣ１で命令コードの第２ワード（ｍｏｖ−１）がＤＥＣに入力される。これは、前記ＥＡ１コードに相当する。この転送命令コード（ｍｏｖ−１）は、前置コードによるソース側をメモリとする指示（ＭＯＤＳ）とＥＡ１の動作を変更する指示（ＭＯＤＥＡ１）とともに解読される。解読結果に従って、Ｔ３のＣ２から、アドレス出力とバスコマンド出力を行い、メモリのリードが実行される。前置コードによるソース側をメモリとする指示（ＭＯＤＳ）に基づき、生成した実効アドレス（ｅａ１：アドレスレジスタＥＲｍの内容）をテンポラリレジスタＴＲＡに格納する。また、アドレスレジスタの内容は、ＥＡ１の動作を変更する指示（ＭＯＤＥＡ１）に基づき、Ｔ３のＣ２から、インクリメンタ（ＩＮＣ）でデクリメント（−４）され、その結果（ｅａ１’）はＴ４のＣ１でアドレスレジスタＥＲｍに格納される（ＭＯＤＥＡ１＝０であれば、デクリメントが行われる）。
【０１３５】
また、Ｔ５のＣ１で、リードデータ（ｄａｔａ１）をリードデータバッファＤＢＲを経由して、ＧＢに出力する。ＡＬＵを経由してＷＢに出力され、Ｔ５のＣ２でテンポラリレジスタＴＲＤに格納される。ＭＯＤＳ、ＭＯＤＤ、ＭＯＤＥＡ１、ＭＯＤＥＡ２、ＬＯＮＧ信号を継続する。
【０１３６】
転送命令コード（ｍｏｖ−２１）は、前置コードによるデスティネーション側をメモリとする指示（ＭＯＤＤ）とＥＡ２の動作を変更する指示（ＭＯＤＥＡ２）とともに解読される。解読結果に従って、Ｔ５のＣ２から、メモリのリードを行ない、前置コードによるデスティネーション側をメモリとする指示（ＭＯＤＤ）に基づき、生成した実効アドレス（ｅａ２：アドレスレジスタＥＲｎ）をテンポラリレジスタＴＲＡに格納する。また、アドレスレジスタの内容は、ＥＡ２の動作を変更する指示（ＭＯＤＥＡ２）に基づき、Ｔ５のＣ２から、インクリメンタ（ＩＮＣ）でデクリメント（−４）され、その結果（ｅａ２’）はＴ６のＣ１でアドレスレジスタＥＲｎに格納される。
【０１３７】
また、Ｔ７のＣ１で、リードデータをリードデータバッファＤＢＲに格納した時点で、既存の転送命令またはソース側のデータのリードの場合より１ステート早く実行を終了する。ＭＯＤＳ、ＭＯＤＤ、ＭＯＤＥＡ１、ＭＯＤＥＡ２、ＬＯＮＧ信号を継続するとともに、ＭＯＤＯＰＴを発生する。
ＭＯＤＯＰＴは、例えば、以下の通り生成される。
modopt = (MODS ｜ MODD) ＆ opcode［0］;  演算命令コードは、ソース側及びデスティネーション側をメモリとする指示（ＭＯＤＳ、ＭＯＤＤ）に従い、Ｔ７のＣ１で、デスティネーション側データをリードデータバッファＤＢＲから、ＧＢに読み出し、ＡＬＵに入力する。ソース側データをテンポラリレジスタＴＲＤから、ＤＢに読み出し、ＡＬＵに入力する。演算命令コード（ａｄｄ）と、第２の転送命令コード（ｍｏｖ−２１）の出力した修飾情報（ｍｏｄｏｐｔ）に基づいて、ＡＬＵにはキャリ付の加算が指示される。
【０１３８】
演算時に、ＡＤＤ命令をＡＤＤＸ命令に変更する場合は、ＡＬＵに入力するキャリビット（ｃｉｎ）を変更すればよい。即ち、
cin = (((op==add)＆ modopt)｜(op==addx))？         ccr_c: 1'b0;
と記述できる。ＡＤＤ命令の場合（ｏｐ＝＝ａｄｄ）は制御信号（ｍｏｄｏｐｔ）に従って、キャリフラグが入力されるか、０が入力されるか選択される。なお、ＡＤＤＸ命令の場合（ｏｐ＝＝ａｄｄｘ）はキャリフラグが入力される。また、適宜、加算とキャリ付加算の相違点は必要に応じて、上記同様に制御されて、キャリ付加算が実行される。
【０１３９】
Ｔ７のＣ２で、演算結果をライトデータバッファＤＢＷに格納する。さらに、メモリライトを行う命令コード（ｍｏｖ−ｓｔ）を発生し、Ｔ７のＣ１からデコーダＤＥＣに入力する。
発生された命令コード（ｍｏｖ−ｓｔ）は、 テンポラリレジスタＴＲＡをアドレスレジスタとし、ライトデータバッファＤＢＷをデータレジスタとする転送命令同様の動作を行う。
【０１４０】
コンディションコードレジスタＣＣＲは、演算命令コード実行時（Ｔ７のＣ２）にキャリ付加算結果に従って更新（ｒｅｓｕｌｔ’）される。その他の命令コード（ｐｆ、ＥＡ１、ＥＡ２、ｍｏｖ−ｓｔ）ではＣＣＲを保持する様にして、直前の命令の結果のキャリフラグを利用し、また演算結果（ｒｅｓｕｌｔ’）を保持する。
【０１４１】
図１７に、条件付ビット転送命令の例（BST/cc  #n,@ERs）の実行タイミングを示す。また、図１８に対応する動作フローを示す。動作フローには、制御信号（ＣｏｎｔｒｏｌＡ、Ｂ、Ｃ）の制御内容を示す。
【０１４２】
前記同様に、条件付ビット転送命令の第１ワード（ｂｓｔ−１）、第２ワード（ＢＳＴ命令コード（ｂｓｔ−０））がリードされる。
Ｔ２のＣ１で命令コード（ｂｓｔ−１）がＤＥＣに入力されて、命令の内容が解読される。解読結果に従って、ステップＳ１として、制御信号を出力して、各部の制御を行う。レジスタ間接のアドレッシングモードであるので、このアドレスレジスタ（ＥＲｓ）に基づき、データのリードを行い、リード結果をリードデータバッファ（ＤＢＲ）に格納する。また、制御信号ＭＯＤＤ＝１とする。これらは個別の制御信号によって制御される。
Ｔ２のＣ２で、アドレスレジスタを内部バスＧＢに読み出して、ＡＢに入力する。ＡＢからアドレスＩＡＢが出力される。バイトデータリードのバスコマンドを出力する。
【０１４３】
Ｔ３から、データがリードされる。同時にステップＳ２として、Ｔ３のＣ１で命令コード（ｂｓｔ−０）がＤＥＣに入力され、制御信号ＭＯＤＤとともに解読され、解読結果に従って、命令のリードと、ビット転送の演算動作を行う。Ｔ３のＣ２で、ＰＣの内容を内部バスＧＢに読み出して、ＡＢとＩＮＣに入力する。ＡＢからアドレスＩＡＢが出力される。
【０１４４】
Ｔ４のＣ１で前記リードデータが、リードデータバッファＤＢＲに格納される。更に、リードデータバッファＤＢＲから内部バスＤＢに出力され、ＡＬＵに入力する。ＡＬＵは、ｃｈｅｃｋ＿ｃｃとａｌｕ＿ｃｎｔ信号によって、条件付ビット転送が行われる。即ち、指定したビットに、指定した条件が成立していれば１を、成立していなければ０を転送する。そのほかのビットは保持される。
Ｔ４のＣ２で、リードデータが、ＡＬＵから内部バスＤＢに出力され、ライトデータバッファＤＢＷに格納される。
【０１４５】
一方、ステップＳ３として、Ｔ４のＣ１で、命令コード（ｍｏｖ−ｓｔ）を発生し、ＤＥＣに入力して、ＴＲＡに格納したメモリのアドレスに対して、ＤＢＷに格納したデータを転送する。
即ち、Ｔ４のＣ２で、テンポラリレジスタＴＲＡに格納されている実効アドレスをＧＢに読み出し、アドレスバッファＡＢを経由してＩＡＢに出力するとともに、バイトデータライトのバスコマンドを発行する。Ｔ５のＣ２で、ライトデータバッファＤＢＷに格納されている演算結果を、ＩＤＢに出力して、デスティネーションのメモリアドレスに演算結果を書込む。ステップＳ４として、Ｔ５のＣ２から命令フェッチを行なうとともに、ＰＣのインクリメントを行なう。
【０１４６】
なお、命令コードの各ワードが分割されないための連続命令信号（ｍｓｋｉｎｔ）をステップＳ１、Ｓ２の制御信号Ｂとして出力する。本信号によって、割込み要求などが発生していても、命令の実行を継続することができる。
【０１４７】
また、直前の命令によるＣＣＲの更新は、Ｔ２のＣ２で行われており、条件付ビット転送命令の条件判定には間に合うようにされている。また、条件付ビット転送命令はＣＣＲを更新しないようになっている。
【０１４８】
図１９に、条件付ビットセット命令の例（ＢＳＥＴ／ｃｃ ＃ｎ，＠ＥＲｓ）の実行タイミングを示す。
条件が不成立の場合は、メモリライトを行う命令コード（ｍｏｖ−ｓｔ）ではなく、無操作の命令コード（ｎｏｐ）を発生するようにする。図１７のステップＳ３の動作が省略されたものと同一の動作である。データを保持する場合に、不必要なライト動作を不要にしてより高速化できる。また、この場合は、図１５の出力セレクタを不要にできる。
【０１４９】
条件の成立／不成立によって、発生する命令コードを変更するために、ＤＥＣに入力する命令コードｄｅｃｉｎを以下のようにすればよい。これはＣＨ部に含まれる。
0003760093.tif 000008
条件付ビットセット／クリア／転送命令の第３ワードを発生する制御信号（ｍｋ＿ｍｏｖ）が発生しても、ビット操作命令（ｏｐ＝＝ｂｓｅｔ＿ｃｃ）であって、条件不成立（ｃｈｋ＿ｃｃ＝＝１’ｂ０）のときは、無操作の命令コード（ｎｏｐ）をＤＥＣに入力する。
同様に上記記述の１行目に条件付ビットクリア命令の条件を加える。
条件付ビットセット／クリア／転送命令のそのほかの場合は、第３ワードを発生する制御信号（ｍｋ＿ｍｏｖ）に従って、メモリライトを行う命令コード（ｍｏｖ−ｓｔ）をＤＥＣに入力する。
【０１５０】
上記実施例によれば、以下の作用効果を得るものである。
(１)前置コードと、既存の、転送命令の命令コード、演算命令の命令コードを組合せて、動作させるに当たり、組合わせることによって、使用しないレジスタフィールドに修飾情報を含めて、当該命令コード乃至後続の命令コードの動作を変更することができる。同様に、単独で動作する命令コード（ｂｓｔ−０）を、長い命令コードに組み入れる場合にも、使用しないレジスタフィールドに修飾情報を含めて、当該命令コードの動作を変更することができる。修飾情報は、条件付を指示したり、条件フィールドとしたりすることができる。単独では、既存の動作を行なわせることによって、既存の命令実行を阻害することがない。また、既存の命令のみを使用した、既存のソフトウェア資産をそのまま利用できる。換言すれば、互換性を損なわずに、メモリ上のデータへの演算を可能とするとともに、命令コードのビットを有効に利用して、プログラム容量を縮小することができる。修飾情報によって既存の命令に存在しない命令機能を容易に実現できる。ポストデクリメントレジスタ間接のキャリ付加算命令を実現し、多バイト長の加算を容易かつ高速に実行することができる。ロングワードサイズとして、更に、高速化できる。ソフトウェア資産を有効に利用可能とするとともに、不所望の汎用レジスタの待避／復帰動作などを抑止して、使い勝手を向上するとともに、プログラム容量を縮小し、処理速度を向上することができる。プログラム容量を縮小することによって、ひいては、プログラム格納用のＲＯＭなどのメモリ容量を縮小し、費用を節約することができる。
【０１５１】
(２)既存の、転送命令の命令コード、演算命令の命令コードを組合せて、動作するから、制御信号（ＭＯＤＳ、ＭＯＤＤ、ＭＯＤＥＡ１、ＭＯＤＥＡ２、ＭＯＤＯＰＴ）の出力と参照を追加するのみで、命令デコーダの、従来の設計資産を有効に利用することができ、論理的な規模の追加と変更を最小限にし、論理的・物理的規模の増大を最小限にできる。また、開発に必要な期間を短縮し、資源を節約することができる。既存のデータアクセスのためのアドレッシングモードを全てサポートし、更に拡張できるから、任意のアドレッシングモードの組合せを可能にして、プログラムの作成を容易にすることができる。
(３)コンディションコードの状態に応じてビットセット／クリア／転送を行う条件付ビットセット／クリア／転送命令を実行可能にし、データを評価してコンディションコードを更新する命令（比較命令など）の後に、かかる条件付ビットセット／クリア／転送命令を実行することによって、データの評価結果などに応じたフラグの設定が容易に実現できる。
分岐命令を不要にして、オーバヘッドを低減し、プログラム容量を削減するとともに、高速化を実現できる。
条件付ビットセット／クリア／転送命令の実行時に、条件となるコンディションコードに影響を与えないようにして、前記データ評価命令の実行結果を保持するから、一つのデータ評価命令などの後に、複数の条件によって、複数のビットセット／クリア／転送を行うことができる。プログラム容量を縮小するとともに、高速化を実現できる。Ｃ言語で記述したプログラムであっても、その記述（ｉｆ文）に従ったビットセット／クリア／転送を可能にして、コンパイルの容易化や、コンパイル結果のプログラム容量縮小と高速化を実現できる。
【０１５２】
以上、本発明は上記実施例に限定されるものではなく、本発明の精神を逸脱しない範囲内において、種々の変更をなし得ることは勿論である。
【０１５３】
例えば、ポストデクリメントレジスタ間接のキャリ付加算命令について説明したが、同様に、キャリ付減算命令も実現可能であることはいうまでもない。ポストインクリメントレジスタ間接の論理演算なども同様に実現できる。
【０１５４】
レジスタフィールドを利用して含める修飾情報は、アドレッシングモードや、データサイズ、演算の種類、実行条件などのほか、イミディエイトデータなどとしてもよい。例えば、０〜７のような３ビットで表現できるようなデータを、含めることができるし、イミディエイトデータを使用することを、先行する命令コードで指定して、より多くのビットを利用することもできる。例えばレジスタ間接を修飾して１．２．４といったディスプレースメントのディスプレースメント付レジスタ間接を、命令コード長を増加することなく、実現することができる。
【０１５５】
条件付とするのは、ビットセット／クリア／転送に限定されない。条件付きで加算／減算／論理演算／転送を行うようなものであってもよい。
【０１５６】
組合せる命令コードは、新規の命令セットを考える場合、既存の命令セットの上位互換とする場合など、適宜、適当な命令コードを組合せるようにしてよい。少なくとも、命令コード長の長い命令の一部のワードが単独に実行可能であって、かかる命令の所定のフィールドを、単独で実行する場合にレジスタフィールドとし、長い命令の一部となる場合に他の情報を定義するようにすればよい。
【０１５７】
条件付ビットセット／クリア／転送命令の条件は一例であり、適宜変更可能である。
条件付ビットセット／クリア／転送命令の前に、比較命令によってコンディションコードを設定する例を示したが、そのほかの演算命令や、転送命令、ビットテスト命令でも同様である。コンディションコードを設定する命令は任意にすることができる。
【０１５８】
ＣＰＵのアーキテクチャは、ロードストア型アーキテクチャでなくてもよい。汎用レジスタは、アドレス及びデータに共通に利用可能なものである必要はなく、一部または全部がアドレス専用またはデータ専用のものであってもよい。汎用レジスタのデータサイズについても任意とすることができる。
【０１５９】
前置コードの種類は特に限定はされない。また、前置コードは、転送命令と演算命令などを組合せる情報のほか、そのほかの制御情報を含んでもよい。例えば、データサイズを指示する情報を含んでもよい。
また、命令コードの基本単位１６ビットに限定する必要はなく、８ビット或いは３２ビットなど任意のビット幅とできる。
【０１６０】
簡単のために、バス幅を３２ビットとし、命令リードを１６ビット単位としたが、命令リードを３２ビット単位にして高速化することができる。また、バス幅を１６ビットとして、ロングワードのリード／ライトを、ワード単位の２回のリード／ライトで実行するようにしてもよい。
マイクロコンピュータのその他の機能ブロックについても何等制約されない。
【０１６１】
Ｃ言語によるプログラムはｉｆ文について説明したが、ｓｗｉｔｃｈ文であっても同様にできる。各分岐条件を評価する比較命令と条件付ビットセット／クリア命令を組みにして、必要な数を記述すればよく、分岐命令を不要にできる。
【０１６２】
以上の説明では主として本発明者によってなされた発明をその背景となった利用分野であるマイクロコンピュータに適用した場合について説明したが、これに限定されるものではなく、その他のマイクロコンピュータまたはデータ処理装置にも適用可能であり、本発明は少なくとも、命令を解読して処理し、演算処理を行なうデータ処理装置に適用することができる。
【０１６３】
【発明の効果】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば、下記の通りである。
【０１６４】
すなわち、
条件付ビットセット／クリア／転送命令によって、処理状態に応じたメモリ上のフラグの設定を容易にすることができ、プログラム容量を縮小し、高速化を図ることができる。
【０１６５】
指定されたメモリからデータをリードする命令コードと、汎用レジスタ上の所定のビットに、無条件のビットセット／クリア／転送を行う命令コードとを組合わせ、後者の汎用レジスタを指定するフィールドを、条件フィールドとして、論理的・物理的規模の増大を最小限とし、既存のＣＰＵと互換性を維持することができる。
【０１６６】
また、既存の、メモリ−レジスタ間の転送を行なう命令コード、レジスタに対する演算命令コードを組合せ、これを結合させる前置コードを以ってメモリ上のデータに対する演算命令を実現する場合に、汎用レジスタを指定するフィールドに別の定義情報を持つようにして、命令コード長を増加させることなく、更に、多様な命令機能を実現することができる。
ＣＰＵの使い勝手の向上、命令コード長の短縮、及び処理性能の向上を実現することになる。
【図面の簡単な説明】
【図１】本発明の適用されたマイクロコンピュータのブロック図である。
【図２】ＣＰＵに内蔵されている汎用レジスタ及び制御レジスタの構成例（プログラミングモデル）を示す図である。
【図３】実効アドレスの計算方法を説明するための図である。
【図４】従来技術のＣＰＵの機械語の命令フォーマットの一例を示す図である。
【図５】従来技術のＣＰＵのメモリに対する転送命令の例の詳細な命令フォーマットを示す図である。
【図６】前置コード（制御コード）のフォーマットを示す図である。
【図７】本発明によるメモリに対する演算命令の命令フォーマットの組合せを示す図である。
【図８】本発明によるメモリに対する演算命令の命令フォーマットの組合せを示す図である。
【図９】本発明によるメモリに対する演算命令の命令フォーマットの組合せを示す図である。
【図１０】本発明によるメモリに対する演算命令の命令フォーマットの組合せを示す図である。
【図１１】メモリ上のデータに対するキャリ付加算命令の例を示す図である。
【図１２】本発明の条件付ビットセット／クリア／転送命令の説明図である。
【図１３】本発明の無条件／条件付ビットセット／クリア／転送命令の命令フォーマットを示す図である。
【図１４】ＣＰＵの構成例を示す図である。
【図１５】ＡＬＵのビット操作命令に関係する部分のブロックを示す図である。
【図１６】メモリ−メモリ型の加算命令の実行タイミングを示す図である。
【図１７】条件付ビット転送命令の例の実行タイミングを示す図である。
【図１８】図１７の条件付ビット転送命令の実行タイミングに対応する制御信号の制御内容を示す動作フロー図である。
【図１９】条件付ビットセット命令の例の実行タイミングを示す図である。
【符号の説明】
ＡＩＮ０〜ＡＩＮ７…アナログデータの入出力端子、ＡＶｓｓ…アナロググランドレベル端子、ＡＶｃｃ…アナログ電源電圧レベル端子、ＢＳＥＴ…ビットセット、ＢＣＬＲ…ビットクリア、ＢＳＴ…ビット転送、Ｃ，Ｖ，Ｚ，Ｎ…フラグ、ＣＨ…命令変更部、ＣＰＧ…クロック発振器、ＣＣＲ…コンディションコードレジスタ、ＤＢＷ…ライトデータバッファ、ＤＥＣ…命令デコーダ、Ｅ，Ｒ，ＥＲ，ＲＨ，ＲＬ…汎用レジスタ、ＥＸＴＡＬ，ＸＴＡＬ…クロック入力端子、ＩＮＴ…割込コントローラ、ＩＯＰ１〜ＩＯＰ９…入出力ポート、ＩＲ…命令レジスタ、ＭＯＤＳ，ＭＯＤＤ…結合された命令の一部である情報、ＭＯＤＯＰＴ…修飾情報、ＰＣ…プログラムカウンタ、ｐｆ…前置コード、ＲＳＥＬ…レジスタセレクタ、ＴＭＧ…ステージコード、ＴＲＡ…テンポラリレジスタ、Ｖｓｓ…グランドレベル端子、Ｖｃｃ…電源電圧レベル端子。
【図１】
0003760093.tif 000009
【図２】
0003760093.tif 000010
【図３】
0003760093.tif 000011
【図４】
0003760093.tif 000012
【図５】
0003760093.tif 000013
【図６】
0003760093.tif 000014
【図７】
0003760093.tif 000015
【図８】
0003760093.tif 000016
【図９】
0003760093.tif 000017
【図１０】
0003760093.tif 000018
【図１１】
0003760093.tif 000019
【図１２】
0003760093.tif 000020
【図１３】
0003760093.tif 000021
【図１４】
0003760093.tif 000022
【図１５】
0003760093.tif 000023
【図１６】
0003760093.tif 000024
【図１７】
0003760093.tif 000025
【図１８】
0003760093.tif 000026
【図１９】
0003760093.tif 000027