(57)【特許請求の範囲】
【請求項１】
１つの半導体チップに形成され、
３２ビット長の命令レジスタと、
３２ビット長のデータの転送が可能なデータバスと、
前記データバスに結合され、３２ビット長のデータを格納可能な複数の汎用レジスタとを有し、
１６ビット固定長命令セットの命令が実行可能なマイクロコンピュータ。
【請求項２】
上記命令レジスタは、２つの１６ビット長の命令をフェッチする請求項１記載のマイクロコンピュータ。
【請求項３】
更に、上記命令レジスタの上記１６ビット長の命令をデコードする命令デコーダを有する請求項２記載のマイクロコンピュータ。
【請求項４】
更に、プログラムカウンタを有し、
上記１６ビット長の命令には、上記プログラムカウンタ内の第１のアドレスに加算して第２のアドレスを示すためのディスプレースメントを有する命令が含まれる請求項３記載のマイクロコンピュータ。
【請求項５】
上記プログラムカウンタは、上記命令レジスタにフェッチされた命令のアドレスを格納する請求項４記載のマイクロコンピュータ。
【請求項６】
前記データバスに結合され、前記１６ビット固定長命令セットの命令が格納される命令メモリを有する請求項１記載のマイクロコンピュータ。
【請求項７】
前記データバスに結合されたキャッシュメモリを有する請求項１記載のマイクロコンピュータ。
【請求項８】
前記データバスに結合されたダイレクトメモリアクセスコントローラを有する請求項１記載のマイクロコンピュータ。
【請求項９】
前記データバスに結合されたランダムアクセスメモリを有する請求項１記載のマイクロコンピュータ。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、符号付き除算等に適用されるマイクロコンピュータ、特にＲＩＳＣ（Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ：縮小命令セット型コンピュータ）系マイクロコンピュータ、例えば機器に組み込まれてこれを制御するマイクロコンピュータのアーキテクチャに関する。
更に本明細書では、符号付き除算のための回路、例えば、任意長多精度の符号付き２進数の除算回路、特にＲＩＳＣ系マイクロコンピュータによるステップ除算を開示する。
【０００２】
【従来の技術】
マイクロコンピュータ等で行われる除算の技術として、被除数の符号と除数の符号とから商と剰余の符号を決定し、被除数の絶対値との除算を回復法や被回復法などで実行し、最後に商と剰余との符号補正を行う除算方式が公知である。近年、符号付き除算に於いて、被除数および除数の絶対値をとらず、符号付きの状態で除算を実行する回路および方式が幾つか公開されている。被除数と除数とを符号付きの状態で除算を行う場合、いずれの方式でも、基本的には、次の手順を採用している。すなわち、被除数あるいは部分剰余の符号と除数の符号とが等しい場合は被除数あるいは部分剰余から除数を減算した結果を新たな部分剰余とし、被除数あるいは部分剰余の符号と除数の符号とが異なる場合は被除数あるいは部分剰余に除数を加算した結果を新たな部分剰余とするようにして、その減算又は加算を順次繰返して商を求めていく。このとき、被除数が正の場合または被除数が除数で割り切れない場合はこの手順に基づき、若干の商または剰余補正を実行することにより、正しい答えを得ることができる。しかし、被除数が負で且つ被除数が除数で割り切れる場合、これによって求められる商は、正しい商よりも絶対値の小さい方へＬＳＢの重みを持つ”１”だけ小さくなる。この誤りは、負の被除数あるいは部分剰余に対して上記加算又は減算を行って部分剰余が０となった場合にこの部分剰余の符号を正しいとみなしてしまうことにより生じる。
【０００３】
この誤りを解決するために、部分剰余が０になったことを検出し、商を補正する手段を備えた除算回路が幾つか考案されている。例えば、特開平２−１６５３２６号には、非回復型の除算手段に、各行での演算結果（部分剰余のこと）が０のときにセットされ、被除数の各行での最下位ビットに１が入ってきたときにリセットされるレジスタを持ち、このレジスタの結果を用いて、商および余の補正を行う技術が記載されている。これによれば、上記のセットおよびリセットされるレジスタを用いて部分剰余が０になった場合を検出し補正することにより正しい符号付き除算を実現している。また、特開平２−１７１８２８号には、部分剰余が０であるかどうかを商ビットを決定するステップ毎に検出することにより、被除数が負の場合に、誤った商ビットが出力されるのを防止する技術が記載されている。さらに特開昭５９−１６０２３５には、被除数が負であって除算の途中で部分剰余が０になったら、その最上位ビットを１と考えるようにするために、部分剰余が０になつた場合を検出するハードウエアを設けた技術が記載されている。
【０００４】
【発明が解決しようとする課題】
上述のように、被除数と除数を符号付きの状態で除算する従来の技術は、部分剰余が０になったことを検出して商ビットの補正を行っている。斯る技術では、部分剰余を求める度にそれが０であるかを判定しなければならない。除数がｎビットであればその様な判定動作をｎ回行うことが必要になり、除算処理全体の動作ステップ数を増大させる。更に部分剰余が０か否かはその全ビットを見なければならず、１回の判定処理を高速化しようとすれば専用ハードウェアも必要になることが予想される。
【０００５】
更に本発明者は除算等に利用されるマイクロコンピュータ等についても検討した。それによれば、１命令を実行するのに必要なマシンサイクル数を低減する際の一番の隘路は命令のデコード処理であることが知られている。デコード処理を高速化するためには、命令の境界がどこに存在するかを前の命令の解釈が済む前にわかるように、固定長の命令フォーマットを採用することが効果的であるということが知られている。いわゆるＲＩＳＣ系コンピュータでは、固定長の命令フォーマットと多段のパイプラインを採用することで殆どの命令を１サイクルで実行している。これまでのＲＩＳＣ系コンピュータでは例外無く３２ビット命令フォーマットを使用してきた。３２ビット固定長命令フォーマットの長所は、ソースレジスタとデスティネーションレジスタの命令フォーマット中のフィールドを固定してしまう事により、オペコード（オペレーションコード）部分のデコードをしなくとも、どのレジスタを読めばよいかを決められる点と、イミディエート値をデコードする際にアライメントの調整が不要な点である。その反面３２ビット固定長命令フォーマットでは、どんなに処理内容の単純な命令を記述する場合にも３２ビットを要するので、１連の処理を機械語で書いた場合に命令コードの占有バイト数が大きくなってしまい、プログラム全体がメモリ領域に占める割合が増える点が問題であった。プログラムのメモリ占有領域が増えると、より容量の大きなメモリを実装することを余儀なくされるため、マイクロコンピュータシステムのコストが上がり、コスト性能比の良いシステムを構成する事が困難になる。特にＲＩＳＣプロセッサは命令数を少なくすることにより命令の実行を高速化しようとするアーキテクチャであるため、命令セットに対して未定義オペレーションコードが比較的多くなるという傾向を持つ。未定義オペレーションコードが多いということは、オブジェクトプログラムのコード効率を悪化させ、即ちメモリの利用効率を一層低下させる。
【０００６】
斯るメモリの利用効率もしくはコード効率向上という点についての先の出願として、特願平２−２２２２０３号がある。この出願内容は命令フォーマットをデータ語長よりも短いビット数とするものである。しかしながらその場合には、データ語長よりも短いビット数の固定長命令フォーマットを採用することに付随して種々の問題点を解決しなければならないことが本発明者によって見出された。例えば、データ語長に匹敵するビット数のイミディエートデータを必要とする場合の方策、さらには肥大化するプログラムやシステム構成に対して分岐先アドレスのような絶対アドレスの指定の仕方などの、データ処理上において新たな方策の検討が必要である。また、前記先願は、データ語長と命令語長とに２のべき乗の関係を持たせることについては一切考慮されていない。このことにより、メモリの１ワード境界を越えて１命令が存在するようなミスアライメントを積極的に防止するには至らず、メモリの利用効率さらにはソフトウェアプログラムの簡素化並びに処理速度という点においても新たに検討すべき事柄が残されている。
【０００７】
本発明の目的は、データ語長よりも少ないビット数の固定長命令フォーマットを採用することに付随する問題点を解決することにある。
本発明の目的は、被除数が負の場合にも商ビットを求める除算のステップ毎に部分剰余が０であるか否かの検出を行うことなく簡単に正しい商を求めることができる除算回路、そして除算方法を提供することにある。
本発明の別の目的は、被除数が正であるのか負であるのかを考慮することなく除算プログラムの開発を可能にする除算回路を提供することにある。
本発明のその他の目的は、回路構成が簡単で、しかも除算効率を向上させることができる除算回路を提供することにある。
【０００８】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【０００９】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１０】
（１）符号付き除算において、被除数が負である場合にその被除数から該被除数のＬＳＢの重みを持つ”１”を引く操作を除算の前処理として行う。被除数のＬＳＢの重みが１であればその被除数は整数である。被除数が固定小数点数の場合にはこれを整数と見なして除算の処理を行っても実質的な影響はない。後から小数点位置の桁合せを行えば済むからである。したがって、被除数のＬＳＢの重みを１と見なすことによって被除数を整数と見なして途中の演算を行っても実害はなく、以下の説明において特にことわらない限り被除数を整数と見なすものとする。
（２）被除数が負のときの符号ビットは１で、正または０のときの符号ビットが０であることに着目すると、被除数からその符号ビット（被除数のＭＳＢ）を差引けば、負の被除数から１を引いたことになる。これは、２の補数表現の負の整数から１の補数表現への変換とみなすことができる。このようにすれば、被除数が正か負かを考慮しなくても被除数に対する前処理を行うことができる。図３５には例えば、４ビットの負の整数から１を引いた変換状態が示される。有限ビット数の２の補数の最小値を１の補数に変換するには１ビット余分に必要であるので、必要な場合は１ビット拡張する。また、部分剰余は正になることもあるので、負の整数に対して行った上記の変換を整数全体に拡張し、新しい整数の表現を導入する。例えば、４ビット符号付き整数の範囲では図３６に示されるような表現が採用される。尚、任意の整数をその数から１を引いた数で表現したものをＺＺとすると、２の補数を用いた整数に対し１を引く変換を行ったＺＺの表現は０以下の整数では１の補数と同一視でき、０以上の整数では本来の値より１だけ小さい数で表現される。このとき、０の符号ビットは負の数と同じ１となる。
（３）符号付き除算の過程において、商と部分剰余（若しくは余り）の保持という点において、演算され或は演算に供されるべき商ビットや部分剰余をレジスタ等に転送するための処理ステップ数を少なくするには、商（商ビット）と余り（部分剰余）とを１本のレジスタのような単一の記憶手段に保持させるようにするとよい。
【００１１】
上記した符号付き除算のための手段によれば、被除数が負の場合に被除数から被除数のＬＳＢの重みを持つ１を引く前補が行われ、次いで商の符号が予測され、更に被除数または部分剰余の符号と除数の符号との排他的論理和が０か１かに基づいて、被除数または部分剰余に除数が加減算され、部分剰余の符号と除数の符号との排他的論理和を商ビットとし、且つ商が負の場合に１の補数の商を２の補数に補正し、このようにして商が求められる。
上記被除数が負の場合、被除数のＬＳＢの重みを持つ１を該被除数から引くことは、０の表現を全てのビットに１が立ち符号ビットも１であるような表現にする前処理と等価とされる。このような前処理は、被除数が負の場合に部分剰余が０になったことを検出しなくても済むようにする。その結果、最初の被除数の符号ビットと、部分剰余の符号ビットと、除数の符号ビットと、商の符号ビットとの情報に基づいて、オーバーフローチェックや剰余の補正を含めた除算の制御が可能になる。このことが、除算のハードウェア並びにソフトウェアを単純化し、更に、任意長任意精度の符号付き除算への適用も可能にし、その上、部分剰余を格納するレジスタを１ビット上位にシフトすると同時に商ビットをシフトインする手段を適用した処理の高速化にも対応可能とする。
【００１２】
こここで、上記除算回路等が適用されるマイクロコンピュータ又はＣＰＵのアーキテクチャに関して言及する。
（１）汎用レジスタ方式を採用するマイクロコンピュータにおいて、命令実行手段に供給される最大のデータ語長よりもビット数の少ない固定長命令フォーマットを採用することができる。
（２）前記固定長命令フォーマットに設定されるビット数がメモリ上におけるプログラムのミスアライメントの防止に役立つようにするには、前記固定長命令フォーマット及び前記最大データ語長はそれぞれ２のべき乗のビット数を設定するとよい。例えば最大データ語長が３２ビットのとき命令フォーマットは１６ビットに固定する。
上記によれば、例えば３２ビットのデータ語長に対して１６ビット固定長命令フォーマットを採用することは、命令フォーマットが固定長であるという点において従来の３２ビット固定長命令フォーマットを持つＲＩＳＣマシンと同様に命令境界がどこに存在するかの判定を前の命令が完了する前に把握することができて命令デコード処理の単純化などの利点を保証するように作用する。
また、３２ビット固定長命令フォーマットを採用する場合に比べてプログラム容量が小さくなる。即ち、命令の種類を少なくすることにより命令の実行を高速化しようとするＲＩＳＣアーキテクチャにおいては命令セットの中に未定義オペレーションコードが多くなる傾向があり、このとき命令長が従来とは半減すればプログラムメモリの利用効率が向上する。
【００１３】
（３）データの最大語長と命令フォーマットのビット数との間に前記関係がある場合、前記最大データ語長に等しいビット数の内部バスを利用して能率的に命令をフェッチするには、若しくは命令フェッチのためのバスアクセス回数を減らすには、バス幅全体を使って複数命令を同一サイクルでプリフェッチするようにすればよい。
（４）内部バスがデータ転送と命令フェッチに共用される場合に、データフェッチと命令フェッチが競合したときの処理若しくはそれに起因する後処理を簡単化するには、データフェッチを優先し、このデータフェッチに競合する命令フェッチを含む命令実行スケジュールを全体的に遅延させるパイプ制御を行うようにするとよい。
（５）汎用レジスタ方式を採る性質上、パイプライン的に実行される前後の命令による前記汎用レジスタの利用が競合する状態に簡単に対処するには、パイプライン的に実行される複数の命令による前記汎用レジスタの利用が競合する状態を命令フォーマット中に含まれるレジスタ指定領域の情報に基づいて検出し、検出されたレジスタ競合状態とレジスタ競合状態にある相対的に先に実行される命令の実行サイクル数とに基づいてレジスタ競合状態の相対的に後の命令の実行を遅延させるようにパイプ制御を行えばよい。
（６）固定長命令フォーマットのビット数の制限がイミディエートデータの利用に制限を与えないようにするには、特定のレジスタの値に対してディスプレースメントの値をオフセットとするレジスタ相対でイミディエートデータを指定させる記述を含む命令をサポートするとよい。
（７）ビット数が制限された固定長命令フォーマットであっても、データ処理上必要なディスプレースメント若しくはイミディエートデータのビット数を極力多くする方策とし、命令中にレジスタ指定フィールドがないのにも拘らずオペランドとして固定された特定の汎用レジスタを暗黙的に指定させる命令をサポートするとよい。
（８）同様に、ビット数が制限された固定長命令フォーマットであっても、処理上必要なディスプレースメント若しくはイミディエートデータのビット数を極力多くする方策とし、指定条件に対する演算結果の真偽を所定の状態フラグに反映させる記述を含む命令をサポートするとよい。
（９）分岐命令の種類に応じて適切な分岐先指定用ディスプレースメント長を固定的に割り当てる。１６ビット固定長命令フォーマットのとき、条件分岐命令のディスプレースメントを８ビットに固定し、サブルーチン分岐命令及び無条件分岐命令のディスプレースメントを１２ビットに固定する。
【００１４】
上記マイクロコンピュータ若しくはＣＰＵのアーキテクチャによれば、固定長命令フォーマットのビット数がデータ語長より少なくても、イミディエートデータの利用や絶対アドレス指定に制限を及ぼさないこと、限られたビット数の固定長命令フォーマットの中で必要なディスプレースメントなどの記述が可能であること、メモリ上におけるプログラム配置のミスアライメントの防止に寄与すること、並びにサポートする命令の内容という点からコード効率もしくはメモリ利用効率を一層向上させることなど、データ語長よりも少ないビット数の固定長命令フォーマットを採用することに付随する各種問題点の解決を実現する。
【００１５】
【発明の実施の形態】
先ず、最大のデータ語長よりもビット数の少ない固定長命令フォーマットを採用したマイクロコンピュータについて、項目〔１〕〜〔１７〕に従って説明する。その後で、マイクロコンピュータ等によって処理される本発明に係る符号付き除算を項目〔１８〕〜〔２４〕の順に説明する。
【００１６】
〔１〕マイクロコンピュータの応用システム
【００１７】
図１には本発明の一実施例に係るマイクロコンピュータＭＣＵを利用したシステムの一例が示される。マイクロコンピュータＭＣＵは、外部コントロールバスＥＣＢ、外部データバスＥＤＢ、及び外部アドレスバスＥＡＢを介して、外部メモリＥＭＲＹとユーザが定義する外部入出力装置ＥＩ／Ｏに結合され、また、ポート入出力バスＰＩＯＢを介して外部装置ＥＥＱに接続される。外部装置ＥＥＱはマイクロコンピュータシステムが組み込まれる所定の機器である。
【００１８】
〔２〕マイクロコンピュータのブロック構成
【００１９】
図２には本発明の一実施例に係るマイクロコンピュータＭＣＵが示される。同図に示されるマイクロコンピュータＭＣＵは、公知の半導体集積回路製造技術によってシリコン基板のような１個の半導体基板に形成される。図においてＣＰＵはマイクロコンピュータＭＣＵ全体の制御を司る中央処理装置である。Ｐｏｒｔ／Ｉ／Ｏは入出力ポートであり、外部に対してＣＰＵが信号を入出力したり、外部の表示機器をドライブしたり、外部のスイッチの状態を調べたりするのに使用される。ＣＰＵはあるアドレスに割り当てられたレジスタを読み書きすることで入出力を行う。Ｐｏｒｔ／Ｃｏｎｔはバス制御線の出入口とされるポートである。Ｐｏｒｔ／Ｄａｔａはデータバスの出入口とされるポートである。Ｐｏｒｔ／Ａｄｄｒｅｓｓはアドレスバスの出入口とされるポートである。Ｉ／ＯはマイクロコンピュータＭＣＵのオンチップ上の周辺機器である。ＳＣＩはシリアル通信用インタフェースであり、ＴＩＭＥＲはタイマであり、ＤＭＡＣはダイレクト・メモリ・アクセス（ＤＭＡ）コントローラである。ＲＯＭはオンチップで実装された読出し専用メモリ（リード・オンリ・メモリ）であり、ＣＰＵの動作プログラムや定数テーブルなどを保有する。ＲＡＭはオンチップで実装されたランダムアクセスメモリであり、中央処理装置ＣＰＵの作業領域やデータの一次記憶領域などとして利用される。ＢＳＣはバスステートコントローラであり、マイクロコンピュータＭＣＵの内部及び外部に対するバスアクセス制御を行う。ＣＡＣＨＥはキャッシュメモリであり、中央処理装置ＣＰＵによる命令のアクセスパタンを認識して最も頻繁に使用されることが予想される命令を保持して、アクセス速度の遅い外部メモリからアプリケーションプログラム等を読みにいくアクセス回数を減らして処理の高速化を図るための記憶装置である。ＢＵＲＳＴ／ＲＥＦＲＥＳＨは連続データ転送などに対するバースト制御やダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）などに対するリフレッシュ制御を行うバースト／リフレッシュ装置であり、ＤＲＡＭを外付けメモリとして使用する際の高速ページモードアクセスとＤＲＡＭのリフレッシュなどに適用される。ＥＤＢは外部データバス、ＥＡＢは外部アドレスバス、ＩＤＢ３１−０は３２ビットの内部データバス、ＩＡＢ２３−０は２４ビットの内部アドレスバスである。
【００２０】
〔３〕マイクロコンピュータのパッケージのピン配置
【００２１】
図３には前記マイクロコンピュータＭＣＵのパッケージのピン配置が概念的に示される。同図においてフリーランニングタイマＦＲＴ０，ＦＲＴ１、アナログ・ディジタル変換器Ａ／Ｄ、及びシリアル通信用インタフェースＳＣＩ０，ＳＣＩ１は図２の周辺機器Ｉ／Ｏの一例とされ、これに対応して図３に示されるポートＰＯＲＴ１乃至ＰＯＲＴ４は夫々の周辺機器に対応する入出力ポートであって図２のポートＰｏｒｔ／Ｉ／Ｏに対応される。マイクロコンピュータＭＣＵは、特に制限されないが、１１２ピンのＱＦＰ型のパッケージに封入されている。２４ビットのアドレスバス（Ａ０−２３）は前記アドレスバスＥＡＢに接続し、３２ビットのデータバス（Ｄ０−３１）は前記データバスＥＤＢに接続する。これらバスＡ０−２３，Ｄ０−３１は、中央処理装置ＣＰＵ、ダイレクト・メモリ・アクセス・コントローラＤＭＡＣ、又はバースト／リフレッシュ制御装置ＢＵＲＳＴ／ＲＥＦＲＥＳＨが外部メモリＥＭＲＹをアクセスするときに使用される。クロック関連信号は中央処理装置ＣＰＵ内部と外部のシステムとが同期して動作する際の時間の基本タイミングを規定するクロックの関連信号である。例えば端子ＥＸＴＡＬと端子ＸＴＡＬの両端に図示しない水晶振動子を結合すると、マイクロコンピュータＭＣＵのチップ内部の電気回路と共鳴して発振する。当該チップはこの発振電圧を拾うことにより、後で説明する内部同期用クロックφ１、φ２を生成する。これらのクロックφ１，φ２は、特に制限されないが、ハイ期間が互いに重なることがないノンオーバラップクロック信号とされる。同時に外部のシステムとＬＳＩ内部の同期をとるために、φ１と殆ど同じ波形と位相を持った外部クロックＣＬＫを出力する。制御関連信号は、リセット信号（ＲＥＳ）スタンバイ信号（ＳＴＢＹ）などの動作モード設定用の信号、割り込み入力用の信号、リードストローブ（ＲＤ）やライトストローブ（ＷＲＨＨ、ｅｔｃ）などのデータバスの制御信号、ＤＲＡＭリフレッシュ制御、バスアービトレーション用の信号などを含む。Ｖｓｓ，Ｖｃｃはグランド端子，電源端子である。ポートＰＯＲＴ１からはダイレクト・メモリ・アクセス・コントローラＤＭＡＣに関する制御信号が２チャンネル分入出力される。ポートＰＯＲＴ２にはフリーランニングタイマＦＲＴ０，ＦＲＴ１に対する外部からの制御と読出しをするための信号がある。ポートＰＯＲＴ３はアナログ・ディジタル変換器Ａ／Ｄの関連信号として外部からのアナログ信号を入力する。アナログ・ディジタル変換器Ａ／Ｄのレファレンス電位は端子ＡＶｃｃ，ＡＶｓｓから与えられる。ポートＰＯＲＴ４はシリアル通信インタフェース用の信号を入出力し、それら信号はクロック用、データ送信用、データ受信用の３系統とされ、２チャンネル分ある。
【００２２】
〔４〕命令語長とデータ語長
【００２３】
図４には本実施例のマイクロコンピュータＭＣＵにおけるバス幅（バスの並列ビット数）に対するデータ語長と命令語長との一例関係が示される。本実施例のマイクロコンピュータＭＣＵは、ＲＩＳＣ型のアーキテクチャを有し、固定長の命令フォーマットを有する。データや命令が転送されるバス例えば内部データバスＩＤ３１−０は３２ビットとされる。このとき後述する各種レジスタのビット数は３２ビットである。メモリ上のデータもバイト（８ビット）、ワード（１６ビット）、ロングワード（３２ビット）を単位として、３２ビットの幅を有するメモリ領域に配置されている。メモリにはバイト単位で番地が割り当てられる。したがって、バイトデータはｎ番地（ｎは整数）、ワードデータは２ｎ番地、ロングワードデータは４ｎ番地単位でアクセスされる。これ以外のメモリアクセスはアドレスエラーとされる。一方、命令は１６ビット固定長命令フォーマットとされる。
【００２４】
前記１６ビット固定長命令フォーマットの数例を示す図４において、ｒｒｒｒの４ビットはソースレジスタ指定フィールド、ＲＲＲＲの４ビットはデスティネーションレジスタの指定フィールド、ｄ…ｄｄはディスプレースメント、ｉｉ…ｉはイミディエートデータを意味する。１６ビットの命令フォーマットにおいて、デスティネーションレジスタ指定フィールドＲＲＲＲは当該フォーマット左側を基準に第４ビット目から第８ビット目とされ、ソースレジスタ指定フィールドｒｒｒｒは第９ビット目から第１２ビット目とされる。命令フォーマットの左側４ビットは少なくともオペレーションコード指定フィールドとされる。マイクロコンピュータＭＣＵの命令体系においては、デスティネーションレジスタ指定フィールドＲＲＲＲをオペレーションコード指定フィールドの一部として利用し、また、ソースレジスタ指定フィールドｒｒｒｒをディスプレースメント又はイミディエートデータの一部として利用することを許容する。
【００２５】
３２ビットのデータ語長に対して１６ビット固定長命令フォーマットを採用することにより、命令フォーマットが固定長であるという点において従来の３２ビット固定長命令フォーマットを持つＲＩＳＣマシンと同様に命令境界がどこに存在するかの判定を前の命令が完了する前に把握することができて命令デコード処理の単純化などの利点を保証する事ができる。その上、３２ビット固定長命令フォーマットを採用する場合に比べてプログラム容量を小さくすることができる。即ち、命令の種類を少なくすることにより命令の実行を高速化しようとするＲＩＳＣアーキテクチャにおいては命令セットの中に未定義オペレーションコードが多くなる傾向があり、このとき命令長が従来とは半減すればプログラムメモリの利用効率が向上する。また、データ語長に比べて命令語長を短くすることは、双方の語長が等しくされる場合に比べて、固定長命令フォーマットのビット列において実質的に無駄なビット配列を減少させ、これが、プログラムメモリの利用効率を高くする。したがって、プログラムを格納するためのメモリの利用効率が向上し、実装ボード上の限られた記憶容量のメモリやプロセッサにオンチップされたプログラムメモリを用いる応用分野などでは、システム構成時にプログラムメモリの記憶容量が不足したり、メモリの回路規模を大きくせざるを得ないというような問題点の発生を回避して、システムコストを低減することができる。
【００２６】
更に、１６ビット固定長命令フォーマットは３２ビットのデータ語長並びにバス幅のちょうど半分であるから、命令語長をバス幅やデータ語長に対して半端なビット数（例えば２のべき乗以外のビット数）に設定して命令語長を短くする場合に比べて、メモリのバウンダリー境界（ワード境界）を越えて単一フォーマットの命令が配置されるというようなプログラムメモリに対する命令のミスアライメントを生じ難い。
【００２７】
〔５〕ＣＰＵの命令制御系
【００２８】
図５には前記中央処理装置ＣＰＵの内部ブロック、特にその命令制御系の一例が示される。ＩＲＨとＩＲＬはそれぞれ１６ビットの命令バッファ（命令キュー）であり、命令を１つずつ格納する。これらのレジスタＩＲＨ，ＩＲＬには１回の命令フェッチサイクルで夫々に命令がロードされる。命令は内部データバスＩＤＢ３１ー０を介して３２ビット単位で転送されてくるからである。これらはマルチプレクサＭＰＸを介して命令レジスタＩＲ１にロードされる。命令レジスタＩＲ１は１６ビットである。この命令レジスタＩＲ１は命令デコード段に存在する命令を保持する。命令レジスタＩＲ１中では、１６ビット固定長命令フォーマットにしたがってＲＲＲＲとして示される左端を基準に第５ビット目乃至第７ビット目がデスティネーションレジスタフィールド、ｒｒｒｒとして示されている第８ビット目乃至第１２ビット目がソースレジスタフィールドとされる。これらのフィールドは命令フィールドの中で固定されている。このとき、前述のようにソースレジスタフィールドは必ずソースオペランドを指定するのに使用され、デスティネーションレジスタフィールドは２つ目のソースオペランド又はデスティネーションオペランドを指定するのに使用される。各レジスタフィールドの意味はオペレーションコードの一部になる場合とレジスタの番号になる場合とがある。レジスタ指定フィールドＲＲＲＲ及びｒｒｒｒの内容がレジスタを指定する情報であるか否かは前記固定長命令フォーマットの左端基準で第１ビット目乃至第４ビット目のオペレーションコードの内容によって決定される。これに拘らずレジスタフィールドＲＲＲＲ、ｒｒｒｒの値は、インストラクションレジスタＩＲ２を介してソースレジスタデコーダＳＲＤとデスティネーションレジスタデコーダＤＲＤに入力されてデコードされる。
【００２９】
前記ソースレジスタデコーダＳＲＤとデスティネーションレジスタデコーダＤＲＤとによるデコード結果は、実行部ＥＸＥＣに含まれる汎用レジスタＲ０Ｈ，Ｒ０Ｌ，…，Ｒ１５Ｈ，Ｒ１５Ｌの中からどれを選択するかの指定に利用される。また、前記インストラクションレジスタＩＲ２から出力されるレジスタフィールドＲＲＲＲ、ｒｒｒｒの値は、一時ラッチＷＢＲ０及びＷＢＲ１を介してライトバックレジスタデコーダＷＢＲＤに供給され、そのデコード結果は、命令実行によって得られる演算結果などをライトバックすべき汎用レジスタの指定に利用される。さらに前記一時ラッチＷＢＲ１に格納されたレジスタ番号すなわちレジスタフィールドＲＲＲＲ、ｒｒｒｒの値はレジスタコンテントチェック（Ｒｅｇｉｓｔｅｒ  Ｃｏｎｔｅｎｔ  Ｃｈｅｃｋ）ブロックＲＣＣＢに供給され、インストラクションレジスタＩＲ１、ＩＲ２の出力と比較され、次々にフェッチされた命令がパイプライン的に実行されるときに夫々の命令が同一のレジスタをアクセスする事象（レジスタの競合）を割出す。レジスタ競合状態は信号Ｓ１によってフラグ操作及びパイプ制御デコーダＦＯ＆ＰＣＤに供給される。アサート状態の信号Ｓ１がフラグ操作及びパイプ制御デコーダＦＯ＆ＰＣＤに供給されると、現在実行中の命令実行サイクル数に応じてスキップ（Ｓｋｉｐ）制御が行われ、競合状態のレジスタを利用する命令の実行サイクルをキャンセル若しくは遅延させる。これにより、先の命令の実行によって競合レジスタの書き込みが完了される後のタイミングを以て後続する命令の実行サイクルが開始される。
【００３０】
前記インストラクションレジスタＩＲ１が保持する命令はマッピングコントロール（Ｍａｐｐｉｎｇ  Ｃｏｎｔｒｏｌ）ブロックＭＣＢに供給され、これにより高速制御リードオンリメモリ（Ｈａｒｄｗａｒｅ  Ｓｅｑｕｅｎｃｅ  ＲＯＭ）ＨＳＣーＲＯＭのアドレスが割出される。マッピングコントロールブロックＭＣＢの役割は、命令をデコードしてその内容に応じて適切な高速制御リードオンリメモリＭＨＳＣ−ＲＯＭのエントリアドレスを算出することである。高速制御リードオンリメモリＨＳＣ−ＲＯＭの出力はマイクロ命令フィールド（Ｍｉｃｒｏ  Ｃｏｄｅ  Ｆｉｅｌｄ）ＭＣＦとパイプ制御フィールド（Ｐｕｐｅ  Ｃｏｎｔｏｒｌ）ＰＣＦの２つの部分から成り、マイクロインストラクションレジスタのようなハードウェア・シーケンス・コントロール・インストラクション・レジスタＨＩＲにラッチされる。マイクロ命令フィールドにおける前者は浅いデコード論理即ちインストラクションデコーダＩＤを介して実行ユニットＥＸＥＣに制御信号を供給する。後者はフラッグ操作およびパイプ制御デコーダＦＯ＆ＰＣＤを介して２サイクル以上のシーケンスを持つ命令のシーケンスを生成したり、パイプラインの制御を行う。フラッグ操作およびパイプ制御デコーダＦＯ＆ＰＣＤは８つのフラッグＣ、Ｗ、Ｂ、Ｌ、Ｍ、Ｉ、Ｓ、Ｓを持っており、これによりパイプラインの制御を行う。更に、このフラグ操作及びパイプ制御デコーダＦＯ＆ＰＣＤはステータスレジスタＳＲを有し、同レジスタＳＲは、条件分岐などに利用されるトゥルービットＴ（以下Ｔビットとも記す）を有する。このＴビットは、後で説明するように命令に記述されている指定条件に対する演算結果の真偽が設定される。
【００３１】
前記インストラクションレジスタＩＲ１の内容は演算実行フェーズ（ＥＸ）の前にインストラクションレジスタＩＲ２に移され、後のメモリアクセスフェーズ（ＭＡ）とライトバックフェーズ（ＷＢ）のパイプラインステートにある命令との間でコンフリクトを起こさないかが前記レジスタコンテントチェックブロックＲＣＣＢを介してチェックされ、その結果が信号Ｓ１として出力される。この時、インストラクションレジスタＩＲ２に格納されるのはレジスタフィールドの値のみである。前述のようにインストラクションレジスタＩＲ１、ＩＲ２が保持するレジスタフィールドＲＲＲＲ，ｒｒｒｒの値は前記ソースレジスタデコーダＳＲＤ、デスティネーションレジスタデコーダＤＲＤ、ライトバックレジスタデコーダＷＢＲＤに供給される。ソースレジスタデコーダＳＲＤ、デスティネーションレジスタデコーダＤＲＤ、ライトバックレジスタデコーダＷＢＲＤは、１６本の汎用レジスタＲ０Ｈ，Ｒ０Ｌ、…、Ｒ１５Ｈ，Ｒ１５Ｌの内の１つのレジスタペアを選択する選択信号を生成して、実行ユニットＥＸＥＣに供給する。
【００３２】
メモリインタフェースＭＩＦは中央処理装置ＣＰＵがメモリをアクセスする必要があるか無いか、それがリードかライトかなどを検出してメモリのアクセスに必要な信号を出する。また命令フェッチ／命令レジスタ制御（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｆｅｔｃｈ＆ＩＲ  Ｃｏｎｔｒｏｌ）ブロックＩＦ＆ＩＲＣはメモリからの命令フェッチが必要か否か、インストラクションレジスタＩＲ０，ＩＲ１をいつアップデートするかなどを決定して必要な信号を出力する機能を有する。この命令フェッチ／命令レジスタ制御ブロックＩＦ＆ＩＲＣの機能はパイプラインの状態、メモリのウエイト状態、命令キュー（ＩＲＨ，ＩＲＬ）の状態などを参考に、命令キューや命令フェッチの制御を行う。本実施例で特徴的なのは命令フェッチが３２ビット単位で行われるのでその中には１６ビットの命令長の命令が２つ詰まるということである。このため、前回の命令をフェッチするときに同時にフェッチした命令は別フェーズで改めてフェッチする必要がない。この様な事象を総合して命令フェッチをいつ行うかが制御される。命令フェッチ／命令レジスタ制御ブロックＩＦ＆ＩＲＣは有限状態ステートマシンとして構成され、その構成については公知であるため詳細な説明を省略する。
【００３３】
尚、図５においてＩＭＢは命令に含まれるイミディエートデータなどを実行ユニットＥＸＥＣに送るためのバッファである。また、命令キューＩＲＨ，ＩＲＬ、インストラクションレジスタＩＲ１のラッチタイミングは前記クロック信号φ１に同期される。インストラクションレジスタＩＲ２、マイクロインストラクションレジスタＭＩＲ、及びレジスタＷＢＲ０，ＷＢＲ１のラッチタイミング、並びに前記レジスタコンテントチェックブロックＲＣＣＢによる信号Ｓ１出力タイミングは前記クロック信号φ２に同期される。
【００３４】
〔６〕ＣＰＵの実行ユニット
【００３５】
図６及び図７には中央処理装置ＣＰＵの実行ユニットＥＸＥＣの一例が示される。双方の図面において夫々Ａ，Ｂ，Ｃ，Ｄで示されるバスは共通接続されている。実行ユニットＥＸＥＣは、特に制限されないが、命令のフェッチやプログラムカウンタの更新をする命令フェッチ部ＩＦＢ、汎用レジスタ部ＧＲＢ、加減算シフト演算などを行う演算部ＯＰＢ、メモリのアクセスおよびデータのアライメント処理をするメモリアクセス部ＭＡＢ、及び乗算部ＭＵＬＴを含む。前記夫々のブロックは４本の３２ビット幅のデータバスＡ，Ｂ，Ｃ，Ｄにより結合されている。
【００３６】
前記命令フェッチ部ＩＦＢの一部である前記命令バッファ（命令キュー）ＩＲＨ，ＩＲＬは図５のブロック構成では実行ユニットＥＸＥＣとは別に記載さているが、実際には図６のように配置されている。イミディエートバッファ（Ｉｍｍｅｄｉａｔｅ  Ｂｕｆｆｕｒ）ＩＭＢは即値データ（イミディエートデータ）を切り出して必要ならビットシフトを行うための論理である。ＰＣＨ，ＰＣＬは、命令フェッチを行うためのアドレスを格納しておくプログラムカウンタである。ＡＵＨ（Ａｒｉｔｈｍｅｔｉｃ  Ｕｎｉｔ  Ｈｉｇｈ）、ＡＵＬ（Ａｒｉｔｈｍｅｔｉｃ  Ｕｎｉｔ  Ｌｏｗ）はプログラムカウンタの更新をするための加算器であり３２ビットの加算をすることができる。ＰＲＨ（Ｐｒｏｃｅｄｕｒｅ  Ａｄｄｒｅｓｓ  Ｒｅｇｉｓｔｅｒ  Ｈｉｇｆ），ＰＲＬ（Ｐｒｏｃｅｄｕｒｅ  Ａｄｄｒｅｓｓ  Ｒｅｇｉｓｔｅｒ  Ｌｏｗ）は関数コールをするときに戻りアドレスを格納するためのプロシージャアドレスレジスタである。ＶＢＲＨ（Ｖｅｃｔｏｒ  Ｂａｓｅ  Ｒｅｇｉｓｔｅｒ  Ｈｉｇｈ），ＶＢＲＬ（ＶｅｃｔｏｒＢａｓｅ  Ｒｅｇｉｓｔｅｒ  Ｌｏｗ）は、割り込みベクタ領域のベースアドレスの格納領域として使用される。ＧＢＲＨ（Ｇｌｏｂａｌ  Ｂａｓｅ  Ｒｅｇｉｓｔｅｒ  Ｌｏｗ）は、Ｉ／Ｏのベースアドレスの格納レジスタとして利用される。ＢＲＨ（Ｂｒｅａｋ  Ｒｅｇｉｓｔｅｒ  Ｈｉｇｈ），ＢＲＬ（Ｂｒｅａｋ  Ｒｅｇｉｓｔｅｒ  Ｌｏｗ）は、ブレークルーチンからの戻り先アドレスの格納レジスタとして利用される。
【００３７】
前記汎用レジスタ部ＧＲＢにはＲ０Ｈ，Ｒ０Ｌ〜Ｒ１５Ｈ，Ｒ１５Ｌで示される３２ビット長の汎用レジスタが１６本含まれる。前記演算部ＯＰＢにおいてＳＦＴＨ（Ｓｈｉｆｔｅｒ  Ｈｉｇｈ），ＳＨＴＬ（Ｓｈｉｆｔｅｒ  Ｌｏｗ）はビットシフトやローテートなどを行うためのハードウェアである。ＡＬＵＨ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ  Ｈｉｇｈ），ＡＬＵＬ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ  Ｌｏｗ）は算術論理演算を行う演算器である。ＳＷＰ＆ＥＸＴは、スワップ命令を実行したり符号拡張（サイン拡張）やゼロ拡張を実行するためのハードウェアである。ＡＬＮ（Ａｌｉｇｎｅｒ）は、バイトやワードでメモリやＩ／Ｏからアクセスされたデータをアライメントするためのハードウェアである。ＭＲＢＨ（Ｍｅｍｏｒｙ  Ｒｅａｄ  ＢｕｆｆｅｒＨｉｇｈ），ＭＲＢＬ（Ｍｅｍｏｒｙ  Ｒｅａｄ  Ｂｕｆｆｅｒ  Ｌｏｗ）はメモリから読まれたデータを入れるためのテンポラリレジスタである。ＭＷＢＨ（Ｍｅｍｏｒｙ  Ｗｒｉｔｅ  Ｂｕｆｆｅｒ  Ｈｉｇｈ），ＭＷＢＬ（Ｍｅｍｏｒｙ  Ｗｒｉｔｅ  Ｂｕｆｆｅｒ  Ｌｏｗ）はメモリに書込むデータを入れるためのテンポラリレジスタである。ＭＡＢＨ（Ｍｅｍｏｒｙ  Ａｄｄｒｅｓｓ  Ｂｕｆｆｅｒ  Ｈｉｇｈ），ＭＡＢＬ（Ｍｅｍｏｒｙ  Ａｄｄｒｅｓｓ  Ｂｕｆｆｅｒ  Ｌｏｗ）はメモリアクセスの際のアドレスを入れておくテンポラリレジスタである。ＭＬＴＢ（ＭＵＬＴ  Ｂｕｆｆｅｒ）は、乗算部ＭＵＬＴへ乗数と被乗数を転送するためのテンポラリレジスタである。
【００３８】
中央処理装置ＣＰＵ内外のバスとの接続関係は次の通りとされる。即ち、ＭＴＢＬ，ＭＴＢＨは乗算部ＭＵＬＴと接続するための双方向専用バスである。図６及び図７においてＩＤＢＨ，ＩＤＢＬは図２のデータバスＩＤＢ３１−０に対応され、また、ＩＡＢＨ，ＩＡＢＬは図２のアドレスバスＩＡＢ２３−０に対応される。前記プログラムカウンタＰＣＨ，ＰＣＬの値はアドレスバスＩＡＢＨ，ＩＡＢＬに出力され、命令バッファＩＲＨ，ＩＲＬはデータバスＩＤＢＨ，ＩＤＢＬからデータを受取り、テンポラリレジスタＭＷＢＨ，ＭＷＢＬの出力はデータバスＩＤＢＨ，ＩＤＢＬに与えられる。テンポラリレジスタＭＲＢＨ，ＭＲＢＬにはデーバスＩＤＢＨ，ＩＤＢＬおよび専用バスＭＴＢＨ，ＭＴＢＬからデータが入力可能にされる。テンポラリレジスタＭＡＢＨ，ＭＡＢＬが保持するアドレス情報はアドレスバスＩＡＢＨ，ＩＡＢＬに出力される。乗算用のテンポラリレジスタＭＬＴＢは専用バスＭＴＢＨ，ＭＴＢＬに出力される。
【００３９】
〔７〕ＣＰＵによるパイプラインステージ
【００４０】
図８には中央処理装置ＣＰＵによるパイプライン処理のステージの一例が示される。この中央処理装置ＣＰＵの基本的なパイプライン構成は５段ステージとされ、基本的なステージのフェーズは、
ＩＦ：（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｆｅｔｃｈ）命令フェッチ、
ＩＤ：（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｄｅｃｏｄｅ）命令デコード、
ＥＸ：（Ｅｘｅｃｕｔｅ）実行、
ＭＡ：（Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）メモリアクセス、
ＷＢ：（Ｗｒｉｔｅ−Ｂａｃｋ）ライトバック、
とされる。各パイプステージの実行内容の一例を示す図８において、ＡｄｄｒｅｓｓＢｕｓは図２のアドレスバスＩＡＢ２３−０に対応され、ＤａｔａＢｕｓは同じくＩＤＢ３１−０に対応される。図８のＩＲは図６及び図５の命令バッファＩＲＨ，ＩＲＬに対応される。図８において、Ａ−Ｂｕｓ、Ｂ−Ｂｕｓ、Ｃ−Ｂｕｓ、Ｄ−Ｂｕｓ、は夫々図７におけるＡバス、Ｂバス、Ｃバス、Ｄバスである。同様に図８におけるＭＡＢ、ＭＲＢは図７におけるＭＡＢＨ，ＭＡＢＬ、ＭＲＢＨ，ＭＲＢＬである。
【００４１】
〔８〕レジスタ競合状態におけるパイプラインシーケンス
【００４２】
図９を参照しながら前記レジスタ競合状態におけるパイプラインシーケンスを説明する。まず最初に同図に示される信号の意味を説明する。動作基準クロック信号としての前記ノンオーバラップ２相クロック信号φ１とφ２の波形が図９の一番上に示される。１つのマシンサイクルとはクロック信号φ１の立上りに始まり、次のφ１の立上りに終わる１周期である。続いてアドレスバスとデータバスの状態を示す。次のＩＲＬａｔｃｈは命令バッファ（ＩＲ（３２ｂｉｔ）またはＩＲＨとＩＲＬ）のラッチ信号を示している。ＩＲＬａｔｃｈはＩＲ１レジスタの入力ラッチ信号波形を示している。ＩＲ１（１６ｂｉｔ）は命令デコード段に存在する命令を保持する。前記ハードウェア・シーケンス・コントロール・インストラクション・レジスタ（Ｈａｒｄｗａｒｅ  Ｓｅｑｕｅｎｃｅ  Ｃｏｎｔｒｏｌ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｒｅｇｉｓｔｅｒ）ＨＩＲは、部分デコードされたマイクロコードとシーケンス情報やパイプラインのコントロール情報を保持するレジスタである。図９においてＲｅｇ．Ｃｏｎｔｅｎｔ  ＦｌａｇはＬＯＡＤ命令と実行ユニットＥＸＥＣを使用する命令との間でのレジスタの競合をチェックする必要があることを示すフラッグである。サイクル４でこれが検出されてＣｏｎｔｅｎｔ  Ｆｌａｇ（Ｃフラッグ）がセットされる。同時にオペランドをロードする必要があることを示すＬＯＡＤ  Ｆｌａｇ（Ｌフラッグ）がセットされる。また同様にしてバスオペレーションが必要になることを示すＢｕｓ  Ｃｙｃｌｅ  Ｆｌａｇ（Ｂフラッグ）も４サイクル目でセットされる。このフラッグはバスサイクルが現在行われているかを示すフラッグである。命令フェッチ抑止フラッグ（ＩＦ  Ｉｎｈｉｂｉｔ  Ｆｌａｇ：Ｉフラッグ）は命令フェッチを取りやめてその代わりにデータアクセスを行うことを示すフラッグである。スキップ信号（Ｓｋｉｐ  Ｓｉｇ．）はそのサイクルに実行ユニットＥＸＥＣで行われる処理をキャンセルする意味のフラッグである。Ｅｘｅｃｕｔｉｏｎは実行ユニットＥＸＥＣで行われる処理を示している。Ｒｅｇ．Ｗｒｉｔｅはレジスタへの書込み信号である。通常演算時のＲｅｇ．Ｗｒｉｔｅにより、Ｃ−Ｂｕｓを介して、命令で指定されたデスティネーションレジスタへの書き込みが行われる。ＬＯＡＤ命令およびＭＵＬＴ命令実行時は、Ｄ−Ｂｕｓを介して、命令で指定されたデスティネーションレジスタへ書き込みが行われる。その意味でタイミングチャートには信号Ｒｅｇ．ＷｒｉｔｅをＣ−Ｂｕｓ用とＤ−Ｂｕｓ用に分かち書きしてあり、両信号Ｒｅｇ．Ｗｒｉｔｅが同じレジスタに重なった場合にはＣ−Ｂｕｓ優先で書き込みが行われる。即ち、Ｃ−Ｂｕｓからの書き込みのみが実行される。５サイクル目に書かれている点線の山はＳｋｉｐ  Ｓｉｇ．により抑止されたレジスタへの書き込みを示している。ＭＡＢはメモリアドレスバスの意味であり、データアクセスが行われた際のアドレスを出力する。ＭＲＢ  Ｌａｔｃｈはメモリリードバッファの意味であり、データをラッチする信号である。ＰＣはプログラムカウンタの値を示している。
【００４３】
図９はＬＯＡＤ命令（ＬＯＡＤ  ＠Ｒ１，Ｒ２）とＡＤＤ命令（ＡＤＤ  Ｒ２，Ｒ３）とのシーケンスを一例として示したタイミングチャートである。ＬＯＡＤ命令がデータを格納するレジスタＲ２とＡＤＤ命令が使用するレジスタＲ２は共通であり、通常のパイプラインフローで命令実行が行われるとレジスタＲ２の値が決定される前に当該レジスタＲ２の値が演算に使用されるという事態を生じる。この例では斯るレジスタＲ２の使用が競合したときに、パイプラインの制御がどのようなタイミングで行われるかを７サイクルにわたって示している。最下段にパイプラインの実行状況を示す。ＬＯＡＤ命令のデスティネーションとなったレジスタＲ２とＡＤＤ命令のソースレジスタＲ２が衝突するので、網掛けで表示した５サイクル目にストール（遅延）が生じている。この遅延を生じさせるには、先ず、レジスタ競合状態が生ずるか否かの検出と、レジスタ競合状態を回避するには実行サイクル（ＥＸ）を何サイクル遅延させればよいかの認識が必要になる。前者に関しては、前記レジスタＷＢＲ１が出力する先の命令に含まれるレジスタ指定情報（この例に従えばＬＯＡＤ命令に含まれるレジスタＲ２を指定する情報）と、後の命令に含まれるレジスタ指定情報（この例に従えばＡＤＤ命令に含まれるレジスタＲ２を指定する情報）とを比較する前記レジスタコンテントチェックブロックＲＣＣＢが出力する信号Ｓ１がアサートされることによって検出される。後者に関しては、オペレーションコードのデコード結果から認識することができる。図の例ではＬＯＡＤ命令の実行サイクル（ＥＸ）数は１であるから、第５サイクル目だけに遅延が生じている。
【００４４】
図１０にはレジスタ競合状態におけるパイプラインシーケンスの別の例が示される。図１０は乗算命令としてのＭＵＬＴ命令（ＭＵＬ  Ｒ１，Ｒ２）とＡＤＤ命令（ＡＤＤ  Ｒ４，Ｒ３）とＳＵＢ命令（ＳＵＢ  Ｒ３，Ｒ２）とのシーケンスを例として示したタイミングチャートである。ＭＵＬ命令がデータを格納するレジスタＲ２とＳＵＢ命令が使用するレジスタＲ２が共通である。レジスタ競合状態をパイプラインシーケンスに反映しなければ、命令実行が行われるとレジスタＲ２の値が決定される前に別の演算に使用されるという事態を生じる。本例ではこのようにレジスタの使用が競合したときに、パイプラインの制御がどのようなタイミングで行われるかを７サイクルにわたって示している。本図の表記形式は前記図９の場合と同様であり、詳細な説明は省略するが、乗算が４サイクルで実行できる様子を示す。ＭＵＬＴ命令ではＥＸ，ＭＬ，ＭＬ，ＭＬの４ステージで命令実行を行う。乗算器は１６ｂ＊１６ｂの結果を３２ｂに格納する乗算を４サイクルで実行することができる。これは１６ｂ＊４ｂの部分積と累積和を求めることを各サイクルに行うことで実行できる。この例の場合には、ＭＵＬＴ命令に対してＳＵＢ命令は２サイクル遅れてレジスタＲ１にフェッチされ、ＭＵＬＴ命令はＥＸ，ＭＬ，ＭＬ，ＭＬの４サイクルで乗算演算を実行するから、ＳＵＢ命令の実行サイクル（ＥＸ）が２サイクル分遅延されている。
【００４５】
〔９〕メモリアクセス競合時のパイプラインシーケンス
【００４６】
図１１にはメモリからのデータフェッチと命令フェッチが競合した場合の一例パイプ制御シーケンスが示される。この場合にはデータフェッチが優先され、これに競合する命令フェッチを含む命令実行スケジュールは全体的にずらされる。この制御を行うために、ロード・フラグ（ＬＯＡＤ  Ｆｌａｇ）とバス・サイクル・フラグ（Ｂｕｓ  Ｃｙｃｌｅ  Ｆｌａｇ）とが競合する状態においてインストラクション・フェッチ・ウェイト・フラグ（ＩＦ  Ｗａｉｔ  Ｆｌａｇ）がセットされ、命令フェッチサイクルの開始が遅延される。
【００４７】
〔１０〕複数サイクル命令実行のシーケンス
【００４８】
図１２には複数サイクル命令を実行するときの一例タイミングチャートが示される。ここではＡＮＤ（論理積）命令の一種である命令”ＡＮＤ．Ｂ  ＃ｉｍｍ，＠Ｒ１”を一例として説明する。この命令はレジスタＲ１相対で指定されるメモリの８ビットデータと８ビットイミディエートデータとの論理積を演算する命令である。このＡＮＤ．Ｂ命令はマクロ命令１、マイクロ命令１、マイクロ命令２によって実行される複数サイクル命令とされる。前記マクロ命令１は、レジスタＲ１の内容により指定されるメモリの領域からバイトオペランドをフェッチする命令である。前記マイクロ命令１は、前記バイトオペランドにイミディエートデータをＡＮＤする命令である。前記マイクロ命令２は、レジスタＲ１の内容により指定されるメモリの領域にバイトオペランドをライトする命令である。
【００４９】
前記ＡＮＤ．Ｂ命令の実行内容をＣ言語で記述すると、
0003539914.tif 000002
となる。この記載を参照すると、マイクロ命令１のＩＤ（命令デコード）段とＥＸ（演算実行）段との間、およびマイクロ命令２のμ−ＩＦ（マイクロ命令フェッチ）段とＩＤ段との間に空きサイクルがある。これは、マクロ命令１のＭＡ（メモリアクセス）段でフェッチしたオペランドをマイクロ命令１のＥＸ（演算実行段）段で使用しなくてはならないからである。
【００５０】
〔１１〕ＣＰＵの命令割り付け
【００５１】
中央処理装置ＣＰＵに割り付け可能とされる命令は、図１３及び図１４に示されるデータ転送命令、図１５に示される論理演算命令、図１６及び図１７に示される算術演算命令、図１８に示されるシフト命令、図１９に示される分岐命令、図２０及び図２１に示されるシステム制御命令とされる。図２２は図１３乃至図２１の記載形式を説明するものである。これに従えば、図１３乃至図２１の記載において、命令の項目はニモニックで表示される。このニモニック表示中におけるアドレシングモードの一覧は図２３に示される。各種命令コードから明かなように、１６ビット固定長命令フォーマットで表現できる６５５３６通りの組み合わせだけで汎用レジスタ方式の整数演算、分岐方式、制御命令等が全て割付けられる。デコードもビットの割り付けを工夫して類似の機能の命令をグルーピングしたことによって、比較的少ない論理表現で実現できる。オペレーションコードが”１１１１”で始まる命令列は全てリザーブされており、これを使うことにより、ＩＥＥＥ浮動小数点規格に準拠した単精度、倍精度演算を割り付けることもできる。
【００５２】
〔１２〕ブランチ命令のディスプレースメント長
【００５３】
図２４、図２５、図２６、及び図２７には、サンプルとして抽出した各種プログラムにおけるブランチ命令及びジャンプ命令のディスプレースメント長とそのディスプレースメント長を有する命令の出現頻度との関係が示される。図２４及び図２５は条件分岐命令（ブランチ命令）及び無条件分岐命令（ブランチオールウエイズ命令）に関し、図２６はサブルーチン呼出命令に関し、図２７はジャンプ命令若しくはジャンプサブルーチン命令に関する。ここでブランチとは計算機プログラムの実行において多数の選択し得る命令集合のうちの一つを選ぶことである。ジャンプとは計算機プログラムの実行における現に実行されている命令の暗示的又は指定されている実行順序からの脱出を意味する。ディスプレースメントは飛び先番地の指定に利用される。従ってディスプレースメント長のビット数が多いほど遠くのアドレスに飛ぶことができる。
【００５４】
図２４乃至図２６に示される分岐命令に対するディスプレースメントの頻度分布は、株式会社日立製作所のマイクロコンピュータＨ８／５００の各種プログラムを解析して得られたデータである。使用している分岐命令の各種類についての、ディスプレースメント値の分布を表している。横軸は使用されたディスプレースメント値のｌｏｇ２をとった値であり、０を中心として右方向にはディスプレースメントの値が正の場合を正の整数（１，３，５，７，・・・）でｌｏｇ２｛ｄｉｓｐｌａｃｅｍｅｎｔ｝を表し、左方向には、負の値を持つディスプレースメントについて負の数で−ｌｏｇ２｛−ｄｉｓｐｌａｃｅｍｅｎｔ｝を表す。縦軸は％を単位としてその出現頻度を示す。データは９個の異なるプログラムについて採集した。
【００５５】
図２４及び図２５から明かなようにブランチ命令及びブランチオールウエイズ命令において、出現頻度の高いものは比較的中心より分布しており、８ビットのディスプレースメントがあれば分布のほとんどをカバーできる。また、図２６のサブルーチン呼出命令では、かなり遠くまでとんでいるが、１２〜１３ビットのディスプレースメントフィールドがあれば全てカバーできることがわかる。さらに図２７に示されるジャンプ命令若しくはジャンプサブルーチン命令の場合、横軸の値はジャンプ命令が存在した番地とジャンプ飛び先の番地の差をディスプレースメントとした。これもとび先が遠いことが判る。
【００５６】
本実施例のマイクロコンピュータＭＣＵにおいては、条件分岐命令のディスプレースメントを８ビット、サブルーチン分岐命令及び無条件分岐命令のディスプレースメントを１２ビットに固定して、それら命令を１６ビット固定長命令フォーマットに収めるようにしてある。例えば図１９に示される各種分岐命令において、ＢＣ，ＢＴ，ＢＦの夫々が条件分岐命令とされ、同図におけるＢＳＲがサブルーチン分岐命令、そしてＢＲＡが無条件分岐命令とされる。夫々の命令の詳細な内容については後述する命令の説明の項目を参照されたい。
【００５７】
プログラムを比較的小さなサブルーチン（関数）の集合として作成するモジュラープログラミング手法において、条件分岐命令は関数の中にしか飛ばない。多くの関数は数百バイト程度の大きさしかないため８ビットのディスプレースメントでほとんどカバーすることができる。反面サブルーチン分岐は関数自身の外に飛ぶので近い場所には飛ばない傾向があり、条件分岐命令よりも多くのビット数のディスプレースメントを必要とする。無条件分岐は、プログラムの高速化のために関数の最後で別の関数を呼ぶときに使用される場合もあり、プログラム作成時にサブルーチン分岐命令と同一の扱い方をすることが得策と考えられるため、ディスプレースメントのビット数はサブルーチン分岐と同一にしてある。このように分岐命令の種類に応じて適切なディスプレースメント長を固定的に割り当てることにより、実質的な弊害なく、１６ビット固定長命令フォーマットの実現に寄与する。
【００５８】
〔１３〕イミディエートデータの処理
【００５９】
１６ビット固定長命令フォーマットを採用したとき、データ語長が３２ビットであることに鑑みれば全てのイミディエート値（即値）を１６ビット以下に制限することは現実的ではない。本実施例では１６ビット以上のイミディエート値の指定を一つの命令フォーマット中で行えるようにするために、プログラムカウンタＰＣなどのレジスタの値と相対アドレスを使用する手法を採用する。
【００６０】
この即値処理を行う命令としては例えば図１３に示されるロード命令としてのＭＯＶ．Ｗ＠（ｄｉｓｐ，ＰＣ）ＲｎやＭＯＶ．Ｌ＠（ｄｉｓｐ，ＰＣ）Ｒｎなどがある。これらの命令は、汎用レジスタＲｎにイミディエートデータを格納するための命令である。データは３２ビットに符号拡張される。データがワード／ロングワードのときは、プログラムカウンタＰＣにディスプレースメントを加えたアドレスに格納されたテーブル内のデータを参照する。データがワードのとき、ディスプレースメントは１ビット左シフトされ９ビットとされ、テーブルとの相対距離は−２５６から＋２５４バイトになる。プログラムカウンタＰＣは本命令の２命令後の先頭アドレスである。従って、ワード・データは２バイト境界に配置する必要が有る。データがロングワードのとき、ディスプレースメントは２ビット左シフトされ１０ビットとされ、オペランドとの相対距離は−５１２から＋５０８バイトになる。プログラムカウンタＰＣは本命令の２命令後の先頭アドレスであるが、プログラムカウンタＰＣの下位２ビットはＢ，００に補正される。従って、ロングワード・データは４バイト境界に配置する必要がある。
【００６１】
〔１４〕暗黙のレジスタ指定
【００６２】
暗黙のレジスタ指定とは、命令中にレジスタ指定フィールドがないのにも拘らず、オペランドとして固定された汎用レジスタを選ぶことを言う。ここで言う汎用レジスタは、例えばメモリアドレスを決定するために利用され、或いはメモリからフェッチしたデータの格納に利用される。この暗黙のレジスタ指定を行う命令としては、例えば図１４に従えば、ＭＯＶ  ＠（ｄｉｓｐ，Ｒ１），Ｒ０やＭＯＶ  Ｒ０，＠（ｄｉｓｐ，Ｒ１）を挙げることができる。同図の当該命令に対応するコードからも明らかなように、レジスタ指定フィールドはなく、オペレーションコードと８ビットのディスプレースメントｄｄｄｄｄｄｄｄを含むだけである。このディスプレースメントは暗黙に指定されているレジスタＲ１の値と共にメモリアドレスを決定するために利用される。この暗黙のレジスタ指定によって、レジスタの値とディスプレースメントとを必要とする命令において、ディスプレースメントとして必要とされるビット数を減らさなくても、命令語長を１６ビットに収めることが可能になる。
【００６３】
〔１５〕機能複合命令
【００６４】
機能複合命令として例えば図１５に記載のＡＮＤ．Ｂ  ＃ｉｍｍ，＠Ｒ１のようなビット操作命令を挙げることができる。この命令は前記同様の暗黙に指定されるレジスタＲ１相対で指定されるメモリの８ビットデータと８ビットのイミディエートデータとの論理積（ＡＮＤ処理）を行う命令であり、メモリのリード、ＡＮＤ処理、ＡＮＤ処理結果の当該メモリへの書き込み戻しを行う、３命令を複合した命令である。この種の処理は組み込み機器制御用途においては極めて出現頻度が高く、このような複合機能的な命令を１６ビット固定長命令フォーマットとして採用することはコード効率向上に寄与する。
【００６５】
〔１６〕指定条件に対する真偽設定命令
【００６６】
指定条件に対して演算結果の真偽設定を行う命令として、例えば図１６に示される８種類のＣＭＰ命令を挙げることができる。これら命令はオペランドの比較を行う命令であり、比較結果を前記ステータスレジスタＳＲのＴ（Ｔｒｕｅ）ビットに設定する。例えば、ＣＯＭＰ／ＥＱ  Ｒｍ，ＲｎＦＦで示される命令は、レジスタＲｍとＲｎの値が等しいか否かを比較し、等しいときはＴビットに１セットし、不一致の時は０にクリアする。このようにステータスレジスタにＴビットを設け、比較結果に対する真偽をＴビットに設定する操作を１６ビット固定長命令フォーマットの１命令で行うことにより、その結果の真偽に基づく処理を行うような次命令例えば前記条件分岐命令（ＢＴ命令）においては直接Ｔビットを参照すればよく、当該ＢＴ命令それ自体に前の命令による演算結果に対して必要な条件（Ｃｏｎｄｉｔｉｏｎ）の記述は不要となり、限られた固定長命令フォーマット中においてその分だけＢＴ命令に必要なディスプレースメントの領域を大きく採ることが可能になり、結局において、１６ビット固定長命令フォーマットの実現に寄与する。
【００６７】
〔１７〕命令一覧
【００６８】
ここまでの説明において、１６ビット固定長フォーマットの命令のうち特徴的な命令を代表的に説明してきたが、更に、１６ビット固定長命令フォーマットの全貌を明らかにするため、本実施例のマイクロコンピュータの全ての命令をアルファベット順に逐次説明していく。夫々の命令の説明は、命令の名称、アセンブラの入力書式で表示された書式（ｉｍｍ、ｄｉｓｐは数値、またはシンボル）、命令の説明、命令使用上の注意事項、Ｃ言語で表示された動作説明、アセンブラニモニックで例示された動作例（命令の実行前後の状態を表示）、及びコードを含む。ここで夫々の命令を説明する前に、プログラムを行う場合に着目すべきプログラマーズモデルとしてのレジスタ構成を図２８を参照しながら説明する。プログラマーズモデルとされるレジスタは、前記汎用レジスタＲ０（Ｒ０Ｈ，Ｒ０Ｌ）乃至Ｒ１５（Ｒ１５Ｈ，Ｒ１５Ｌ）の他に、ステータスレジスタＳＲ、プロシージャ・レジスタＰＲ（ＰＲＨ，ＰＲＬ）、グローバル・ベース・レジスタＧＢＲ（ＧＢＲＨ，ＧＢＲＬ）、プログラムカウンタＰＣ（ＰＣＨ，ＰＣＬ）、ベクタ・ベース・レジスタＶＢＲ（ＶＢＲＨ，ＶＢＲＬ）、ブレーク・レジスタＢＲ（ＢＲＨ，ＢＲＬ）などのコントロールレジスタとされる。図２８の例ではレジスタＲ０はアキュムレータ、レジスタＲ１はインデックス・レジスタ、レジスタＲ１５はスタックポインタとされる。図２８のステータスレジスタＳＲにおいて、Ｍ／ＱビットはＤＩＶ命令で参照され、Ｉビットは割り込みマスクビットとされ、−は予約ビットとされ、ＤビットはＰＡＳＳ命令で参照され、Ｃビットはキャリ／ボロー／オーバーフロー／アンダーフロー／シフトアウトを反映するビットとされ、Ｔビットは前記したように真（１），偽（０）を表すビットとされる。
【００６９】
Ｃで動作内容を示した動作説明は、特に制限されないが、以下の資源の使用を仮定している。
unsigned char  Read_Byte(unsigned long Addr);
unsigned short Read_Word(unsigned long Addr);
unsigned long  Read_Long(unsigned long Addr);
アドレスAddrのそれぞれのサイズの内容を返す。（２ｎ）番地以外からのワード、（４ｎ）番地以外からのロングワードのリードはアドレスエラーとして検出される。
unsigned char  Write_Byte(unsigned long Addr, unsigned long  Data);
unsigned short Write_Word(unsigned long Addr, unsigned long  Data);
unsigned long  Write_Long(unsigned long Addr, unsigned long  Data);
アドレスAddrにデータDataをそれぞれのサイズで書き込む。（２ｎ）番地以外からのワード、（４ｎ）番地以外へのロングワードのライトはアドレスエラーとして検出される。
Delay_Slot(unsigned long Addr);
アドレス（Addr-4）のスロット命令に実行を移す。これはDelay_Slot(4)のとき、４番地ではなく０番地の命令に実行が移ることを意味する。また、この関数からＢＣ，ＢＦ，ＢＴ，ＢＲＡ，ＢＳＲ，ＪＭＰ，ＪＳＲ，ＲＴＳ，ＢＲＫ，ＰＡＳＳ，ＲＴＢ，ＲＴＥ，ＴＲＡＰで特定される命令に実行が移されようとすると、その直前にスロット不当命令として検出される。
unsigned long R[16];
unsigned long CR[3];
unsigned long PC;
unsigned long BR;
unsigned long VBR;
各レジスタ本体である
#define SR (CR[0])
#define PR (CR[1])
#define GBR (CR[2])
レジスタの固有名とＣＲｎ形式表示の対応
0003539914.tif 000003
これ以外に、ＰＣは現在実行中の命令の４バイト（２命令）先を示しているものと仮定する。これは、（ＰＣ＝４;）は４番地ではなく０番地の命令に実行が移ることを意味する。
【００７０】
アセンブラニモニックの形式で記載される使用例において、コードはバイナリコードを表示し、
ニモニック中 ｒは コードの ｒｒｒｒ、ＲはＲＲＲＲ、ｉｍｍはｉｉｉｉｉｉｉｉに展開される。ｄｉｓｐはｄｄｄｄ、ｄｄｄｄｄｄｄｄ、又はｄｄｄｄｄｄｄｄｄｄｄｄに展開される。
ＭＯＶ命令コード中の ＳＳ はオペランドサイズによって０１＝バイト、１０＝ワード、１１＝ロングワードに展開される。
【００７１】
《ＡＤＤ（加算）命令》
〔書式〕
ＡＤＤ    Ｒｍ，Ｒｎ
ＡＤＤ    ＃ｉｍｍ，Ｒｎ
〔説明〕
汎用レジスタＲｎの内容とＲｍとを加算し、結果をＲｎに格納する。
汎用レジスタＲｎと８ビット・イミディエート・データとの加算も可能である。８ビット・イミディエート・データは３２ビットに符号拡張されるので減算と兼用する。
0003539914.tif 000004
〔コード〕
ADD  r,R ;(MSB)００１０ＲＲＲＲｒｒｒｒ００００(LSB)
ADD  #imm,R;(MSB)０１０１ＲＲＲＲｉｉｉｉｉｉｉｉ(LSB)
【００７２】《ＡＤＤＣ（キャリ付き加算）命令》
〔書式〕
ＡＤＤＣ  Ｒｍ，Ｒｎ
〔説明〕
汎用レジスタＲｎの内容とＲｍとＣビットを加算し、結果をＲｎに格納する。演算の結果によりキャリがＣビットに反映される。
0003539914.tif 000005
〔コード〕
ADDC  r,R ;(MSB)００１０ＲＲＲＲｒｒｒｒ００１０(LSB)
【００７３】
《ＡＤＤＳ（飽和機能付き加算）命令》
〔書式〕
ＡＤＤＳ  Ｒｍ，Ｒｎ
〔説明〕汎用レジスタＲｎの内容とＲｍとを加算し、結果をＲｎに格納する。オーバーフローが発生しても、結果はＨ'７ＦＦＦＦＦＦＦ〜Ｈ'８０００００００の範囲に制限される。このとき、Ｃビットがセットされる。
0003539914.tif 000006
〔コード〕
ADDS  r,R;(MSB)００１０ＲＲＲＲｒｒｒｒ００１１(LSB)
【００７４】
《ＡＤＤＶ（オーバーフロー付き加算）命令》
〔書式〕
ＡＤＤＶ  Ｒｍ，Ｒｎ
〔説明〕
汎用レジスタＲｎの内容とＲｍとを加算し、結果をＲｎに格納する。オーバーフローが発生した場合、Ｃビットがセットされる。
0003539914.tif 000007
〔コード〕
ADDV  r,R;(MSB)００１０ＲＲＲＲｒｒｒｒ０００１(LSB)
【００７５】
ＡＮＤ（論理積）命令
〔書式〕
ＡＮＤ     Ｒｍ，Ｒｎ
ＡＮＤ     ＃ｉｍｍ，Ｒ０
ＡＮＤ.Ｂ  ＃ｉｍｍ，＠Ｒ１
〔説明〕
汎用レジスタＲｎの内容とＲｍの論理積をとり、結果をＲｎに格納する。特殊形として汎用レジスタＲ０とゼロ拡張した８ビット・イミディエイト・データとの論理積、もしくはＲ１相対で８ビット・メモリと８ビット・イミディエート・データとの論理積が可能である。
〔注意〕ＡＮＤ  ＃ｉｍｍ，Ｒ０では演算の結果、Ｒ０の上位２４ビットは常にクリアされる。
0003539914.tif 000008
〔コード〕
AND  r,R;(MSB)０００１ＲＲＲＲｒｒｒｒ１００１(LSB)
AND  #imm,R0;(MSB)１０００１００１ｉｉｉｉｉｉｉｉ（LSB)
AND.B  #imm,@R1;(MSB)１００００００１ｉｉｉｉｉｉｉｉ（LSB)
【００７６】
《ＢＣ／ＢＦ／ＢＴ（条件付分岐）命令》
〔書式〕
ＢＣ  ｄｉｓｐ
ＢＦ  ｄｉｓｐ
ＢＴ  ｄｉｓｐ
〔説明〕
Ｔ／Ｃビットを参照する条件付き分岐命令である。Ｔ＝１のとき、ＢＴは分岐するが、ＢＦは次の命令を実行する。逆にＴ＝０のとき、ＢＦは分岐するが、ＢＴは次の命令を実行する。ＢＣはＣ＝１のとき分岐するが、Ｃ＝０のときは次の命令を実行する。分岐先はＰＣにディスプレースメントを加えたアドレスである。ＰＣは、本命令の２命令後の先頭アドレスである。ディスプレースメントは１ビット左シフトされ９ビットであるので、分岐先との相対距離は−２５６から＋２５４バイトになる。分岐先に届かないときはＢＲＡ命令、もしくはＪＭＰ命令との組み合わせで対応する。
0003539914.tif 000009
0003539914.tif 000010
〔コード〕
BC  disp;(MSB)１１００１１００ｄｄｄｄｄｄｄｄ(LSB)
BF  disp;(MSB)１１００１０１０ｄｄｄｄｄｄｄｄ(LSB)
BT  disp;(MSB)１１００１０００ｄｄｄｄｄｄｄｄ(LSB)
【００７７】
《ＢＲＡ（無条件分岐）命令》
〔書式〕
ＢＲＡ    ｄｉｓｐ
〔説明〕
無条件の遅延分岐命令である。分岐先はＰＣにディスプレースメントを加えたアドレスである。ＰＣは、本命令の２命令後の先頭アドレスである。ディスプレースメントは１ビット左シフトされ１３ビットであるので、分岐先との相対距離は−４０９６から＋４０９４バイトになる。分岐先に届かないときはＪＭＰ命令への変更が必要である。このとき、分岐先アドレスをＭＯＶ命令でレジスタに転送しておく必要が有る。
〔注意〕
遅延分岐命令であるので、本命令の直後の命令が分岐に先立ち実行される。本命令と直後の命令との間に割り込みは受け付けられない。直後の命令が分岐命令のとき、不当命令として認識される。
〔動作〕
BRA(long d)    /* BRA disp */
{
unsigned long temp;
long disp;
if ((d&0x800)==0) disp=(0x00000FFF & d);
else disp=(0xFFFFF000 | d);
temp=PC;
PC=PC+(disp<<1)+4;
Delay_Slot(temp+2);
}
〔使用例〕
BRA  TRGET  ;TRGETへ分岐する。
ADD  R0,R1  ;分岐に先立ち実行される。
NOP  ;BRA命令で分岐先アト゛レス計算に用いるPCの位置
TRGET:  ;BRA命令の分岐先
〔コード〕
BRA  disp;(MSB)１０１０ｄｄｄｄｄｄｄｄｄｄｄｄ(LSB)
【００７８】
《ＢＲＫ（ソフトウェアブレイク）命令》
〔書式〕
ＢＲＫ
〔説明〕
ブレーク例外処理を開始する。すなわち、外部デバイスにアクノリッジ信号を返した後、ＰＣをＢＲに退避し、所定のベクタに従いブレーク割り込みルーチンへ分岐する。ＰＣは本命令の先頭アドレスである。ベクタアドレスの計算に、ＶＢＲの内容は無関係である。ＲＴＢと組み合わせて、ブレークルーチン・コールに使用する。
〔注意〕
本命令は割り込みを受け付けない。ＢＲはブレイク端子によるハードウェアブレイクと共用される。従って、ブレイク処理中のブレイク再要求は避けるべきである。ＰＣはＢＲに保護されるが、ＳＲは保護されない。必要であればＳＴＣ命令でレジスタ、あるいはメモリに退避しなければならない。
0003539914.tif 000011
〔使用例〕
CMP/EQ  R0,R1  ;
BT  _TRUE  ;Ｒ０≠Ｒ１のときブレークする。
BRK  ;ブレークルーチンからの戻り先である
・・・・・・・
BREAK:  ;ブレークルーチンの入り口
MOV  R0,R0  ;
RTB  ;上記ＢＲＫ命令に戻る。
〔コード〕
BRK;(MSB)００００００００００００００００(LSB)
【００７９】
《ＢＳＲ（プロシージャコール）命令》
〔書式〕
ＢＳＲ    ｄｉｓｐ
〔説明〕
指定されたアドレスのプロシージャに分岐する。ＰＣの内容をＰＲに退避し、ＰＣにディスプレースメントを加えたアドレスへ分岐する。ＰＣは、本命令の２命令後の先頭アドレスである。ディスプレースメントは１ビット左シフトされ１３ビットであるので、分岐先との相対距離は−４０９６から＋４０９４バイトになる。分岐先に届かない場合にはＪＳＲ命令への変更が必要である。このとき、分岐先アドレスをＭＯＶ命令でレジスタに転送しておく必要がある。ＲＴＳと組み合わせて、プロシージャ・コールに使用する。
〔注意〕
遅延分岐命令であるので、本命令の直後の命令が分岐に先立ち実行される。本命令と直後の命令との間に割り込みは受け付けられない。直後の命令が分岐命令のとき、不当命令として認識される。
0003539914.tif 000012
〔使用例〕
BSR  TRGET  ;TRGETへ分岐する。
MOV  R3,R4  ;分岐に先立ち実行される。
ADD  R0,R1  ;BSR命令で分岐先アト゛レス計算に用いるPCの位置
・・・・・・・     プロシージャからの戻り先である
・・・・・・・
TRGET:  ;プロシージャの入り口
MOV     R2,R3     ;
RTS  ;上記ＡＤＤ命令に戻る。
MOV  #1,R0  ;分岐に先立ち実行される。
〔コード〕
BSR  disp;(MSB)１１１０ｄｄｄｄｄｄｄｄｄｄｄｄ(LSB)
【００８０】
《ＣＬＲＣ（Ｃビットクリア）命令》
〔書式〕
ＣＬＲＣ
〔説明〕
ＳＲのＣビットをクリアする。
〔動作〕
CLRC()    /* CLRC */
{
C=0;
PC+=2;
}
〔使用例〕
CLRC  ;実行前  C=1
;実行後  C=0
〔コード〕
CLRC;（MSB)００００００００００１０１００１（LSB)
【００８１】
《ＣＬＲＴ（Ｔビットクリア）命令》
〔書式〕
ＣＬＲＴ
〔説明〕
ＳＲのＴビットをクリアする。
〔動作〕
CLRT()    /* CLRT */
{
T=0;
PC+=2;
}
〔使用例〕
CLRT  ;実行前  T=1、;実行後  T=0
〔コード〕
CLRT;(MSB)００００００００００１０１０００（LSB)
【００８２】
《ＣＭＰ／ｃｏｎｄ（オペランド比較）命令》
〔書式〕
ＣＭＰ／ｃｏｎｄ    Ｒｍ，Ｒｎ
〔説明〕
汎用レジスタＲｎとＲｍとを比較し、その結果、指定された条件（ｃｏｎｄ）が成立しているとＳＲのＴビットをセットする。条件が不成立のときはＴビットはクリアされる。Ｒｎの内容は変化しない。８条件が指定できる。ＰＺとＰＬの２条件についてはＲｎと０との比較になる。
ニーモニック  ;説明
CMP/EQ Rm,Rn  ;Ｒｎ＝ＲｍのときＴ＝１
CMP/GE Rm,Rn  ;有符号値としてＲｎ≧ＲｍのときＴ＝１
CMP/GT Rm,Rn  ;有符号値としてＲｎ＞ＲｍのときＴ＝１
CMP/HI Rm,Rn  ;無符号値としてＲｎ＞ＲｍのときＴ＝１
CMP/HS Rm,Rn  ;無符号値としてＲｎ≧ＲｍのときＴ＝１
CMP/PL  Rn  ;Ｒｎ＞０のときＴ＝１
CMP/PZ  Rn  ;Ｒｎ≧０のときＴ＝１
CMP/STR Rm,Rn  ;何れかのバイトが等しいときＴ＝１
0003539914.tif 000013
0003539914.tif 000014
〔使用例〕
CMP/GE  R0,R1  ;R0=H'7FFFFFFF,R1=H'80000000
BT  TRGET_T  ;T=0なので分岐しない
CMP/HS  R0,R1  ;R0=H'7FFFFFFF,R1=H'80000000
BT  TRGET_T  ;T=1なので分岐する
CMP/STR R2,R3  ;R2="ABCD",R3="XYCZ"
BT  TRGET_T  ;T=1なので分岐する
〔コード〕
CMP/EQ  r,R;(MSB)０００１ＲＲＲＲｒｒｒｒ００００(LSB)
CMP/GE  r,R;(MSB)０００１ＲＲＲＲｒｒｒｒ００１１(LSB)
CMP/GT  r,R;(MSB)０００１ＲＲＲＲｒｒｒｒ０１１１(LSB)
CMP/HI  r,R;(MSB)０００１ＲＲＲＲｒｒｒｒ０１１０(LSB)
CMP/HS  r,R;(MSB)０００１ＲＲＲＲｒｒｒｒ００１０(LSB)
CMP/PL  R;(MSB)０１００ＲＲＲＲ０００１１１０１(LSB)
CMP/PZ  R;(MSB)０１００ＲＲＲＲ０００１１００１(LSB)
CMP/STR   r,R;(MSB)００１０ＲＲＲＲｒｒｒｒ１１００(LSB)
【００８３】
《ＤＩＶ０Ｓ／ＤＩＶ０Ｕ／ＤＩＶ１（ステップ除算）命令》
〔書式〕
ＤＩＶ１      Ｒｍ，Ｒｎ
ＤＩＶ０Ｓ    Ｒｍ，Ｒｎ
ＤＩＶ０Ｕ
〔説明〕
汎用レジスタＲｎの内容３２ビットをＲｍの内容で１ステップ除算し、結果の１ビットをＳＲのＣビットに格納する。ＤＩＶ０Ｓは符号付き除算用の初期化命令で被除数（Ｒｎ）のＭＳＢをＱビットに、除数（Ｒｍ）のＭＳＢをＭビットに、ＭビットとＱビットのＥＯＲをＣビットに格納する。ＤＩＶ０Ｕは符号無し除算用の初期化命令で、Ｍ／Ｑ／Ｃビットを０にクリアする。ＤＩＶ１を（必要であればＲＯＴＣＬと組みで）除数のビット数分繰り返すことによって、商を得る。この繰り返し中は、指定したレジスタとＳＲのＭ／Ｑ／Ｃビットに中間結果が格納される。これらを不必要にソフトウェアで書き替えると演算結果は保証されない。除算のシーケンスは下記使用例を参考にする事ができる。ゼロ除算とオーバーフローの検出、および剰余の演算は用意されていない。
0003539914.tif 000015
0003539914.tif 000016
0003539914.tif 000017
0003539914.tif 000018
〔使用例１〕  Ｒ１(32bit)÷Ｒ０(16bit)＝Ｒ１(16bit)：符号無し
SL16  R0        ;除数を上位16bit、下位16bitを０に設定
TEST  R0,R0    ;ゼロ除算チェック
BT  ZERO_DIV  ;
CMP/HS  R0,R1  ;オーバーフローチェック
BT  OVER_DIV  ;
DIV0U          ;フラグの初期化
.arepeat 16      ;
DIV1  R0,R1    ;１６回繰り返し
.aendr  ;
ROTCL   R1    ;
EXTU.W  R1,R1  ;Ｒ１＝商
〔使用例２〕  Ｒ１：Ｒ２(64bit)÷Ｒ０(32bit)＝Ｒ２(32bit)：符号無し
TEST  R0,R0    ;ゼロ除算チェック
BT  ZERO_DIV  ;
CMP/HS   R0,R1  ;オーバーフローチェック
BT  OVER_DIV  ;
DIV0U          ;フラグの初期化
.arepeat 32      ;
ROTCL  R2      ;３２回繰り返し
DIV1     R0,R1  ;
.aendr            ;
ROTCL   R2      ;Ｒ２＝商
〔使用例３〕  Ｒ１(16bit)÷Ｒ０(16bit)＝Ｒ１(16bit)：符号付き
SL16  R0        ;除数を上位16bit、下位16bitを０に設定
EXTS.W  R1,R1  ;被除数は符号拡張して３２ｂｉｔ
EOR  R2,R2      ;Ｒ２＝０
MOV  R1,R3      ;
ROTCL  R3      ;
SUBC  R2,R1    ;被除数が負のとき、−１する
DIV0S  R0,R1    ;フラグの初期化
.arepeat 16      ;
DIV1  R0,R1    ;１６回繰り返し
.aendr            ;
EXTS.W  R1,R1  ;Ｒ１＝商（１の補数表現）
ROTCL  R1      ;
ADDC  R2,R1    ;商のMSBが１のとき、＋１して２の補数表現に変換
EXTS.W  R1,R1  ;Ｒ１＝商（２の補数表現）
〔使用例４〕
Ｒ２(32bit)÷Ｒ０(32bit)＝Ｒ２(32bit)：符号付き
EOR  R3,R3    ;
MOV  R2,R4    ;
ROTCL  R4    ;
SUBC  R1,R1  ;被除数は符号拡張して６４ｂｉｔ（Ｒ１：Ｒ２）
SUBC  R3,R2  ;被除数が負のとき、−１する
DIV0S  R0,R1  ;フラグの初期化
.arepeat 32      ;
ROTCL  R2    ;３２回繰り返し
DIV1  R0,R1    ;
.aendr  ;
ROTCL  R2     ;Ｒ２＝商（１の補数表現)
ADDC  R3,R2  ;商のMSBが１のとき、＋１して２の補数表現に変換、
;Ｒ２＝商（２の補数表現）
〔コード〕
DIV1  r,R;(MSB)０００１ＲＲＲＲｒｒｒｒ１１００(LSB)
DIV0S r,R;(MSB)０００１ＲＲＲＲｒｒｒｒ１１０１(LSB)
DIV0U  ;(MSB)００００００００００１０１０１０(LSB)
【００８４】
《ＥＯＲ（排他的論理和）命令》
〔書式〕
ＥＯＲ     Ｒｍ，Ｒｎ
ＥＯＲ     ＃ｉｍｍ，Ｒ０
ＥＯＲ.Ｂ  ＃ｉｍｍ，＠Ｒ１
〔説明〕
汎用レジスタＲｎの内容とＲｍの排他的論理和をとり、結果をＲｎに格納する。特殊形として汎用レジスタＲ０とゼロ拡張した８ビット・イミディエート・データとの排他的論理和、もしくはＲ１相対で８ビット・メモリと８ビット・イミディエート・データとの排他的論理和が可能である。
0003539914.tif 000019
〔コード〕
EOR   r,R  ;(MSB)０００１ＲＲＲＲｒｒｒｒ１０１０(LSB)
EOR   #imm,R0  ;(MSB)１０００１０１０ｉｉｉｉｉｉｉｉ(LSB)EOR.B #imm,@R1  ;(MSB)１０００００１０ｉｉｉｉｉｉｉｉ(LSB)
【００８５】
《ＥＸＴＳ（符号拡張）命令》
〔書式〕
ＥＸＴＳ.Ｂ    Ｒｍ，Ｒｎ
ＥＸＴＳ.Ｗ    Ｒｍ，Ｒｎ
〔説明〕
汎用レジスタＲｍの内容を符号拡張して、結果をＲｎに格納する。バイト指定のとき、Ｒｍのビット７の内容をビット８からビット３１にコピーする。ワード指定のとき、Ｒｍのビット１５の内容をビット１６からビット３１にコピーする。
0003539914.tif 000020
〔使用例〕
EXTS.B  R0,R1  ;実行前  R0=H'00000080、;実行後  R1=H'FFFFFF80
EXTS.W  R0,R1  ;実行前  R0=H'00008000、;実行後  R1=H'FFFF8000
〔コード〕
EXTS.B  r,R  ;(MSB)０１１０ＲＲＲＲｒｒｒｒ００１０(LSB)
EXTS.W  r,R  ;(MSB)０１１０ＲＲＲＲｒｒｒｒ００１１(LSB)
【００８６】
《ＥＸＴＵ（ゼロ拡張）命令》
〔書式〕
ＥＸＴＵ.Ｂ    Ｒｍ，Ｒｎ
ＥＸＴＵ.Ｗ    Ｒｍ，Ｒｎ
〔説明〕
汎用レジスタＲｍの内容をゼロ拡張して、結果をＲｎに格納する。バイト指定のとき、Ｒｎのビット８からビット３１に０が入る。ワード指定とき、Ｒｎのビット１６からビット３１に０が入る。
0003539914.tif 000021
〔コード〕
EXTU.B  r,R;(MB)０１１０ＲＲＲＲｒｒｒｒ００００(LSB)
EXTU.W  r,R;(MSB)０１１０ＲＲＲＲｒｒｒｒ０００１(LSB)
【００８７】
《ＪＭＰ（無条件ジャンプ）命令》
〔書式〕
ＪＭＰ  ＠Ｒｎ
〔説明〕
指定されたアドレスに無条件に遅延分岐する。分岐先は汎用レジスタＲｎの内容の３２ビットデータで表わされるアドレスである。
〔注意〕
遅延分岐命令であるので、本命令の直後の命令が分岐に先立ち実行される。本命令と直後の命令との間に割り込みは受け付けられない。直後の命令が分岐命令のとき、不当命令として認識される。
0003539914.tif 000022
〔コード〕
JMP  @R;(MSB)０１００ＲＲＲＲ００００１０１０(LSB)
【００８８】
《ＪＳＲ（プロシージャコール）命令》
〔書式〕
ＪＳＲ  ＠Ｒｎ
〔説明〕
指定されたアドレスのプロシージャに分岐する。ＰＣの内容をＰＲに退避し、汎用レジスタＲｎの内容の３２ビットデータで表わされるアドレスへ分岐する。ＰＣは、本命令の２命令後の先頭アドレスである。ＲＴＳと組み合わせて、プロシージャ・コールに使用する。
〔注意〕
遅延分岐命令であるので、本命令の直後の命令が分岐に先立ち実行される。本命令と直後の命令との間に割り込みは受け付けられない。直後の命令が分岐命令のとき、不当命令として認識される。
0003539914.tif 000023
〔コード〕
JSR  @R;(MSB)０１００ＲＲＲＲ００００１０１１(LSB)
【００８９】
《ＬＤＣ（ＣＲ転送）命令》
〔書式〕
ＬＤＣ     Ｒｍ，ＣＲｎ
ＬＤＣ.Ｌ  ＠Ｒｍ＋，ＣＲｎ
〔説明〕
ソース・オペランドをコントロールレジスタＣＲｎに格納する。
〔注意〕
本命令は割り込みを受け付けない。
0003539914.tif 000024
〔コード〕
LDC  R,cr;(MSB)０１００ＲＲＲＲｒｒｒｒ００１０(LSB)
LDC.L  @R+,cr;(MSB)０１００ＲＲＲＲｒｒｒｒ０００１(LSB)
【００９０】
《ＬＤＢＲ（ＢＲ転送）命令》
〔書式〕
ＬＤＢＲ
〔説明〕
汎用レジスタＲ０の内容をコントロールレジスタＢＲに格納する。
〔注意〕
本命令は割り込みを受け付けない。
0003539914.tif 000025
〔コード〕
LDBR;(MSB)００００００００００１００００１(LSB)
【００９１】
《ＬＤＶＲ（ＶＢＲ転送）命令》
〔書式〕
ＬＤＶＲ
〔説明〕
汎用レジスタＲ０の内容をコントロールレジスタＶＢＲに格納する。
〔注意〕
本命令は割り込みを受け付けない。
0003539914.tif 000026
〔コード〕
LDVR;(MSB)００００００００００００１０１１(LSB)
【００９２】
《ＭＯＶ（イミディエート・データ転送）命令》
〔書式〕
ＭＯＶ     ＃ｉｍｍ，Ｒｎ
ＭＯＶ.Ｗ  ＠（ｄｉｓｐ,ＰＣ），Ｒｎ
ＭＯＶ.Ｌ  ＠（ｄｉｓｐ,ＰＣ），Ｒｎ
〔説明〕
汎用レジスタＲｎにイミディエート・データを格納する。データは３２ビットに符号拡張される。データがワード／ロングワードのときは、ＰＣにディスプレースメントを加えたアドレスに格納されたテーブル内のデータを参照する。データがワードのとき、ディスプレースメントは１ビット左シフトされ９ビットであるので、テーブルとの相対距離は−２５６から＋２５４バイトになる。ＰＣは本命令の２命令後の先頭アドレスである。従って、ワード・データは２バイト境界に配置する必要がある。データがロングワードのとき、ディスプレースメントは２ビット左シフトされ１０ビットであるので、オペランドとの相対距離は−５１２から＋５０８バイトになる。ＰＣは本命令の２命令後の先頭アドレスであるが、ＰＣの下位２ビットはＢ，００に補正される。従って、ロングワード・データは４バイト境界に配置する必要がある。
〔注意〕
テーブルは自動的にスキップされないので、何も対策しないと命令と解釈される。これを避けるためモジュール先頭、あるいは無条件分岐命令の後などに配置することが必要である。ただし不注意にＢＳＲ／ＪＳＲ／ＴＲＡＰの直後に配置すると、単純にリターンしたときテーブルに衝突することになる。本命令が遅延分岐命令の直後に配置されているとき、ＰＣは分岐先の先頭アドレス＋２になる。本命令のテーブル・アクセスはインストラクション・キャッシュの対象となる。
0003539914.tif 000027
0003539914.tif 000028
〔コード〕
MOV  #imm,R;(MSB)１１０１ＲＲＲＲｉｉｉｉｉｉｉｉ(LSB)
MOV.W  @(disp,PC),R;(MSB)１００１ＲＲＲＲｄｄｄｄｄｄｄｄ(LSB)
MOV.L  @(disp,PC),R;(MSB)１０１１ＲＲＲＲｄｄｄｄｄｄｄｄ(LSB)
【００９３】
《ＭＯＶ（スタックデータ転送）命令》
〔書式〕
ＭＯＶ.Ｌ  ＠（ｄｉｓｐ,Ｒｍ），Ｒｎ
ＭＯＶ.Ｌ  Ｒｍ，＠（ｄｉｓｐ,Ｒｎ）
〔説明〕
ソース・オペランドをデスティネーションへ転送する。メモリオペランドはスタック・フレームに存在するのでデータ・サイズはロングワードに限定される。従ってディスプレースメントは２ビット左シフトされ６ビットであるので、−３２から＋２８バイトが指定できる。メモリオペランドに届かないときは一般のＭＯＶ命令を使う。ただし使用するレジスタが固定されているなどの制限がある。
0003539914.tif 000029
〔コード〕
MOV.L  @(disp,r),R;(MSB)０１１１ＲＲＲＲｒｒｒｒｄｄｄｄ(LSB)
MOV.L  r,@(disp,R);(MSB)００１１ＲＲＲＲｒｒｒｒｄｄｄｄ(LSB)
【００９４】
《ＭＯＶ（Ｉ／Ｏデータ転送）命令》
〔書式〕
ＭＯＶ    ＠（ｄｉｓｐ,ＧＢＲ），Ｒ０
ＭＯＶ    Ｒ０，＠（ｄｉｓｐ,ＧＢＲ）
〔説明〕
ソース・オペランドをデスティネーションへ転送する。メモリオペランドのデータ・サイズをバイト／ワード／ロングワードの範囲で指定できる。Ｉ／ＯのベースアドレスをＧＢＲに設定する。Ｉ／Ｏのデータがバイト・サイズのときディスプレースメントは８ビットであるので、−１２８から＋１２７バイトが指定できる。ワード・サイズのときディスプレースメントは１ビット左シフトされ９ビットであるので、−２５６から＋２５４バイトが指定できる。ロングワード・サイズのときディスプレースメントは２ビット左シフトされ１０ビットであるので、−５１２から＋５０８バイトが指定できる。メモリオペランドに届かないときは一般のＭＯＶ命令を使う。ソース・オペランドがメモリのとき、ロードされたデータは３２ビットに符号拡張されてレジスタに格納される。
〔注意〕
ロードするときデスティネーション・レジスタがＲ０固定である。従って、直後の命令でＲ０を参照しようとしてもロード命令の実行完了まで待たされる。下記の→▲１▼と▲１▼→、→▲２▼と▲２▼→で対応されるように命令の順序変えによる最適化が必要である。
MOV.B  @(12,GBR),R0            MOV.B  @(12,GBR),R0
AND    #80,R0    →▲２▼    ▲１▼→  ADD    #20,R1
ADD    #20,R1    →▲１▼    ▲２▼→  AND    #80,R0
0003539914.tif 000030
0003539914.tif 000031
〔コード〕
MOV  @(disp,GBR),R0;(MSB)１１００１１ＳＳｄｄｄｄｄｄｄｄ(LSB)
MOV  R0,@(disp,GBR);(MSB)１０００１１ＳＳｄｄｄｄｄｄｄｄ(LSB)
但し、ＳＳはサイズであり、０１＝バイト、１０＝ワード、１１＝ロングワードである。
【００９５】
《ＭＯＶ（転送）命令》
〔書式〕
ＭＯＶ    Ｒｍ，Ｒｎ
ＭＯＶ    ＠Ｒｍ，Ｒｎ
ＭＯＶ    Ｒｍ，＠Ｒｎ
ＭＯＶ    ＠Ｒｍ＋，Ｒｎ
ＭＯＶ    Ｒｍ，＠−Ｒｎ
ＭＯＶ    ＠（ｄｉｓｐ,Ｒ１），Ｒ０
ＭＯＶ    Ｒ０，＠（ｄｉｓｐ,Ｒ１）
ＭＯＶ    ＠（Ｒｍ,Ｒ１），Ｒｎ
ＭＯＶ    Ｒｍ，＠（Ｒｎ,Ｒ１）
〔説明〕
ソース・オペランドをデスティネーションへ転送する。オペランドがメモリのときは転送するデータ・サイズをバイト／ワード／ロングワードの範囲で指定できる。ソース・オペランドがメモリのとき、ロードされたデータは３２ビットに符号拡張されてレジスタに格納される。＠（ｄｉｓｐ，Ｒ１）モードのときメモリのデータがバイト・サイズのときディスプレースメントは８ビットであるので、−１２８から＋１２７バイトが指定できる。ワード・サイズのときディスプレースメントは１ビット左シフトされ９ビットであるので、−２５６から＋２５４バイトが指定できる。ロングワード・サイズのときディスプレースメントは２ビット左シフトされ１０ビットであるので、−５１２から＋５０８バイトが指定できる。
〔注意〕
＠（ｄｉｓｐ，Ｒ１）モードのとき、他方のオペランドがＲ０固定である。従って、ロード命令のときは前項のＩ／Ｏデータ転送命令と同様に下記の→▲１▼と▲１▼→、→▲２▼と▲２▼→で対応されるように命令の順序変えによって最適化が可能である。
MOV.B  @(12,R1),R0              MOV.B  @(12,R1),R0
AND    #80,R0    →▲２▼    ▲１▼→    ADD    #20,R1
ADD    #20,R1    →▲１▼    ▲２▼→    AND    #80,R0
0003539914.tif 000032
0003539914.tif 000033
0003539914.tif 000034
0003539914.tif 000035
0003539914.tif 000036
0003539914.tif 000037
0003539914.tif 000038
〔コード〕
MOV  r,R;(MSB)０１１０ＲＲＲＲｒｒｒｒ１０００(LSB)
MOV  @r,R;(MSB)０１１０ＲＲＲＲｒｒｒｒ１０ＳＳ(LSB)
MOV  r,@R;(MSB)００１０ＲＲＲＲｒｒｒｒ１０ＳＳ(LSB)
MOV  @r+,R;(MSB)０１１０ＲＲＲＲｒｒｒｒ１１ＳＳ(LSB)
MOV  r,@-R;(MSB)００１０ＲＲＲＲｒｒｒｒ１１ＳＳ(LSB)
MOV  @(r,R1),R;(MSB)００００ＲＲＲＲｒｒｒｒ０１ＳＳ(LSB)
MOV  r,@(R,R1);(MSB)００００ＲＲＲＲｒｒｒｒ１１ＳＳ(LSB)
MOV  @(disp,R1),R0;(MSB)１１０００１ＳＳｄｄｄｄｄｄｄｄ(LSB)
MOV  R0,@(disp,R1);(MSB)１００００１ＳＳｄｄｄｄｄｄｄｄ(LSB)
但し、ＳＳはサイズであり、０１＝バイト、１０＝ワード、１１＝ロングワードである。
【００９６】
《ＭＯＶＡ（実効アドレス・データ転送）命令》
〔書式〕
ＭＯＶＡ  ＠（ｄｉｓｐ,ＰＣ），Ｒ１
〔説明〕
汎用レジスタＲ１にソース・オペランドの実効アドレスを格納する。ディスプレースメントは２ビット左シフトされ１０ビットであるので、オペランドとの相対距離は−５１２から＋５０８バイトになる。ＰＣは本命令の２命令後の先頭アドレスであるが、ＰＣの下位２ビットはＢ’００に補正される。従って、ソース・オペランドは４バイト境界に配置する必要がある。
〔注意〕
本命令が遅延分岐命令の直後に配置されているとき、ＰＣは分岐先の先頭アドレス＋２になる。
0003539914.tif 000039
〔コード〕
MOVA  @(disp,PC),R1;(MSB)１１００１０１１ｄｄｄｄｄｄｄｄ（LSB）
【００９７】
《ＭＵＬＳ（符号付き乗算）命令》
〔書式〕
ＭＵＬＳ    Ｒｍ，Ｒｎ
〔説明〕
汎用レジスタＲｎの内容とＲｍを１６ビットで乗算し、結果の３２ビットをＲｎに格納する。演算は符号付き算術演算で行なう。
0003539914.tif 000040
〔コード〕
MULS  r,R;(MSB)０００１ＲＲＲＲｒｒｒｒ１１１１(LSB)
【００９８】
《ＭＵＬＵ（符号なし乗算）命令》
〔書式〕
ＭＵＬＵ    Ｒｍ，Ｒｎ
〔説明〕
汎用レジスタＲｎの内容とＲｍを１６ビットで乗算し、結果の３２ビットをＲｎに格納する。演算は符号なし算術演算で行なう。
0003539914.tif 000041
〔コード〕
MULU  r,R;(MSB)０００１ＲＲＲＲｒｒｒｒ１１１０(LSB)
【００９９】
《ＮＥＧ（符号反転）命令》
〔書式〕
ＮＥＧ  Ｒｍ，Ｒｎ
〔説明〕
汎用レジスタＲｍの内容の２の補数をとり、結果をＲｎに格納する。０からＲｍを減算し、結果をＲｎに格納する。
0003539914.tif 000042
〔コード〕
NEG  r,R;(MSB)０１１０ＲＲＲＲｒｒｒｒ０１１０(LSB)
【０１００】
《ＮＥＧＣ（キャリ付き符号反転）命令》
〔書式〕
ＮＥＧＣ    Ｒｍ，Ｒｎ
〔説明〕
０から汎用レジスタＲｍの内容とＣビットを減算し、結果をＲｎに格納する。演算の結果によりボローがＣビットに反映される。
0003539914.tif 000043
〔コード〕
NEGC  r,R;(MSB)０１１０ＲＲＲＲｒｒｒｒ０１１１(LSB)
【０１０１】
《ＮＯＰ（無操作）命令》
〔書式〕
ＮＯＰ
〔説明〕
ＰＣのインクリメントのみを行ない、次の命令に実行が移る。
0003539914.tif 000044
〔使用例〕
NOP  ;１サイクルの時間が過ぎる
〔コード〕
NOP;(MSB)００００００００００００００１０(LSB)
【０１０２】
《ＮＯＴ（論理否定）命令》
〔書式〕
ＮＯＴ    Ｒｍ，Ｒｎ
〔説明〕
汎用レジスタＲｍの内容の１の補数をとり、結果をＲｎに格納する。
0003539914.tif 000045
〔コード〕
NOT  r,R;(MSB)０１１０ＲＲＲＲｒｒｒｒ１１００(LSB)
【０１０３】
《ＯＲ（論理和）命令》
〔書式〕
ＯＲ     Ｒｍ，Ｒｎ
ＯＲ     ＃ｉｍｍ，Ｒ０
ＯＲ.Ｂ  ＃ｉｍｍ，＠Ｒ１
〔説明〕
汎用レジスタＲｎの内容とＲｍの論理和をとり、結果をＲｎに格納する。特殊形として汎用レジスタＲ０とゼロ拡張した８ビット・イミディエイト・データとの論理和、もしくはＲ１相対で８ビット・メモリと８ビット・イミディエート・データとの論理和も可能である。
0003539914.tif 000046
〔コード〕
OR   r,R;(MSB)０００１ＲＲＲＲｒｒｒｒ１０１１(LSB)
OR   #imm,R0;(MSB)１０００１０１１ｉｉｉｉｉｉｉｉ(LSB)
OR.B #imm,@R1;(MSB)１０００００１１ｉｉｉｉｉｉｉｉ(LSB)
【０１０４】
《ＰＡＳＳ（通過確認）命令》
〔書式〕
ＰＡＳＳ    ＃ｉｍｍ
〔説明〕
Ｄビットを参照する条件付きのソフトウェア割り込み命令である。Ｄ＝１のときデバッグ割り込みを発生する。逆にＤ＝０のとき、ＰＣのインクリメントだけを行なう。デバッグ割り込みが発生すると、ＰＣとＳＲをスタックに退避し所定のベクタアドレスの内容で表わされるアドレスへ分岐する。ＰＣは本命令の次命令の先頭アドレスである。プログラム作成時にルーチンの先頭に本命令を埋め込んでおき、必要な時にＤ＝１にすることによってデバッグ割り込みで通過確認を行なうことが可能である。また予め定義するデバッグ割り込みルーチンでｉｍｍコードを参照することによって、デバッグ対象ルーチンの判別が可能である。ｉｍｍコードはスタック上のＰＣを（−１）したアドレスのバイトデータである。
〔注意〕
本命令を分岐命令の直後に配置すると、Ｄビットの値に関係無く不当命令として認識される。
0003539914.tif 000047
〔コード〕
PASS  #imm;(MSB)１１００１００１ｉｉｉｉｉｉｉｉ(LSB)
【０１０５】
《ＲＯＴＬ／ＲＯＴＲ（ローテート）》
〔書式〕
ＲＯＴＬ    Ｒｎ
ＲＯＴＲ    Ｒｎ
〔説明〕
図９２に示されるように汎用レジスタＲｎの内容を左／右方向に１ビット・ローテート（回転）し、結果をＲｎに格納する。ローテートしてオペランドの外に出てしまったビットは、Ｃビットに転送される。
0003539914.tif 000048
〔コード〕
ROTL  R;(MSB)０１００ＲＲＲＲ００１０１００１(LSB)
ROTR  R;(MSB)０１００ＲＲＲＲ００１０１０００(LSB)
【０１０６】
《ＲＯＴＣＬ／ＲＯＴＣＲ（キャリ・ビット付きローテート）命令》
〔書式〕
ＲＯＴＣＬ    Ｒｎ
ＲＯＴＣＲ    Ｒｎ
〔説明〕
図９３に示されるように汎用レジスタＲｎの内容を左／右方向にＣビットを含めて１ビット・ローテート（回転）し、結果をＲｎに格納する。ローテートしてオペランドの外に出てしまったビットは、Ｃビットに転送される。
0003539914.tif 000049
〔コード〕
ROTCL  R;(MSB)０１００ＲＲＲＲ００１０１０１１(LSB)
ROTCR  R;(MSB)０１００ＲＲＲＲ００１０１０１０(LSB)
【０１０７】
ＲＴＢ（ブレークからのリターン）命令
〔書式〕
ＲＴＢ
〔説明〕
ブレーク例外処理ルーチンから復帰する。すなわち、ＰＣをＢＲから復帰した後、外部デバイスにアクノリッジ信号を返し、復帰したＰＣの示すアドレスから処理が続行される。
〔注意〕
本命令と分岐先命令との間の割り込みは受け付けは、ＲＴＢＭＳＫ信号で制御できる。ＲＴＢＭＳＫ信号が入力されていると、ＮＭＩ／ＩＲＱ等の外部割り込みは受け付けられない。（アドレスエラー等は受け付けられる。）
0003539914.tif 000050
〔使用例〕
MOV   R0,R9  ;
ADD   #-1,R1  ;←ＲＴＢの分岐先（ＢＲに退避されたＰＣ）
TEST  R1,R1;
・・・・・・・
NOP  ;
RTB  ;ＲＴＢＭＳＫが入力されていると、必ず上記ＡＤＤを実行する。入力されていないと割り込みを受け付け、このとき上記ＡＤＤは実行されない
〔コード〕
RTB;(MSB)０００００００００００００００１（LSB）
【０１０８】
《ＲＴＥ（例外処理からのリターン）命令》
〔書式〕
ＲＴＥ
〔説明〕
割り込みルーチンから復帰する。すなわち、ＰＣとＳＲをスタックから復帰する。復帰したＰＣの示すアドレスから処理が続行される。
〔注意〕
遅延分岐命令であるので、本命令の直後の命令が分岐に先立ち実行される。本命令と直後の命令との間に割り込みは受け付けられない。直後の命令が分岐命令のとき、不当命令として認識される。メモリからＲ１５へのロード命令の直後に連続して配置しないことが必要である。ロード前の古いＲ１５を誤って参照することになる。下記の→▲１▼と▲１▼→、→▲２▼と▲２▼→で対応されるように命令の順序変えが必要である。
MOV   #0,R0      →▲１▼    ▲２▼→    MOV.L @R15+,R15
MOV.L @R15+,R15  →▲２▼    ▲１▼→    MOV   #0,R0
RTE                              RTE
ADD   #8,R15                     ADD   #8,R15
0003539914.tif 000051
〔使用例〕
RTE  ;基のルーチンへ復帰する
ADD    #8,R15  ;分岐に先立ち実行される。
〔コード〕
RTE;(MSB)０００００００００００１００００(LSB)
【０１０９】
ＲＴＳ（プロシージャからのリターン）命令
〔書式〕
ＲＴＳ
〔説明〕
プロシージャから復帰する。すなわち、ＰＣをＰＲから復帰する。復帰したＰＣの示すアドレスから処理が続行される。本命令によって、ＢＳＲおよびＪＳＲ命令でコールされたプロシージャからコール元へ戻ることができる。
〔注意〕
遅延分岐命令であるので、本命令の直後の命令が分岐に先立ち実行される。本命令と直後の命令との間に割り込みは受け付けられない。直後の命令が分岐命令のとき、不当命令として認識される。
0003539914.tif 000052
〔使用例〕
TABEL: .data.l  TRGET    ;ジャンプテーブル
MOV.L    TABLE,R3    ;R3=TRGETのアドレス
JSR      @R3    ;TRGETへ分岐する
NOP              ;分岐に先立ち実行される
ADD      R0,R1  ;ＰＲの保持しているアドレス
・・・・・・      プロシージャからの戻り先である
・・・・・・
TRGET: MOV    R1,R0  ;プロシージャの入り口
RTS               ;ＰＲの内容−＞ＰＣ
MOV  #12,R0    ;分岐に先立ち実行される
〔コード〕
RTS;(MSB)０００００００００００１０００１(LSB)
【０１１０】
《ＳＥＴＣ（Ｃビットセット）命令》
〔書式〕
ＳＥＴＣ
〔説明〕
ＳＲのＣビットをセットする。
0003539914.tif 000053
〔コード〕
SETC;(MSB)０００００００００００１１００１(LSB)
【０１１１】
《ＳＥＴＴ（Ｔビットセット）命令》
〔書式〕
ＳＥＴＴ
〔説明〕
ＳＲのＴビットをセットする。
0003539914.tif 000054
〔コード〕
SETT;(MSB)０００００００００００１１０００(LSB)
【０１１２】
《ＳＨＡＬ／ＳＨＡＲ（算術シフト）命令》
〔書式〕
ＳＨＡＬ    Ｒｎ
ＳＨＡＲ    Ｒｎ
〔説明〕
図９４に示されるように、汎用レジスタＲｎの内容を左／右方向に算術的に１ビット・シフトし、結果をＲｎに格納する。シフトしてオペランドの外に出てしまったビットは、Ｃビットに転送される。
0003539914.tif 000055
〔コード〕
SHAL  R;(MSB)０１００ＲＲＲＲ０００１１０１１（LSB）
SHAR  R;(MSB)０１００ＲＲＲＲ０００１１０００(LSB)
【０１１３】
《ＳＨＬＬ／ＳＨＬＲ（論理シフト）命令》
〔書式〕
ＳＨＬＬ    Ｒｎ
ＳＨＬＲ    Ｒｎ
〔説明〕
図９５に示されるように、汎用レジスタＲｎの内容を左／右方向に論理的に１ビット・シフトし、結果をＲｎに格納する。シフトしてオペランドの外に出てしまったビットは、Ｃビットに転送される。
0003539914.tif 000056
〔コード〕
SHLL  R;(MSB)０１００ＲＲＲＲ０００１１０１１(LSB)
SHLR  R;(MSB)０１００ＲＲＲＲ０００１１０１０(LSB)
【０１１４】
《ＳＬｎ／ＳＲｎ（マルチビットシフト）命令》
〔書式〕
ＳＬ２    Ｒｎ
ＳＲ２    Ｒｎ
ＳＬ８    Ｒｎ
ＳＲ８    Ｒｎ
ＳＬ１６  Ｒｎ
ＳＲ１６  Ｒｎ
〔説明〕
図９６に示されるように、汎用レジスタＲｎの内容を左／右方向に論理的に２／８／１６ビット・シフトし、結果をＲｎに格納する。シフトしてオペランドの外に出てしまったビットは、捨てられる。
0003539914.tif 000057
0003539914.tif 000058
〔コード〕
SL2  R;(MSB)０１００ＲＲＲＲ００００１１１１(LSB)
SR2  R;(MSB)０１００ＲＲＲＲ００００１１１０(LSB)
SL8  R;(MSB)０１００ＲＲＲＲ０００１１１１１(LSB)
SR8  R;(MSB)０１００ＲＲＲＲ０００１１１１０(LSB)
SL16  R;(MSB)０１００ＲＲＲＲ００１０１１１１(LSB)
SR16  R;(MSB)０１００ＲＲＲＲ００１０１１１０(LSB)
【０１１５】
《ＳＬＰ（スリープ）命令》
〔書式〕
ＳＬＰ
〔説明〕
ＣＰＵを低消費電力モードにする。低消費電力モードでは、ＣＰＵの内部状態は保持され、直後の命令の実行を停止し、割り込み要求の発生を待つ。要求が発生すると、低消費電力モードから抜けて例外処理を開始する。すなわち、ＳＲとＰＣをスタックに退避し、所定のベクタに従い割り込みルーチンへ分岐する。ＰＣは本命令の直後の命令の先頭アドレスである。
0003539914.tif 000059
〔使用例〕
SLP    ;低消費電力モードへの遷移
〔コード〕
SLP;(MSB)００００００００００００１０００(LSB)
【０１１６】
《ＳＴＣ（ＣＲ転送）命令》
〔書式〕
ＳＴＣ     ＣＲｍ，Ｒｎ
ＳＴＣ.Ｌ  ＣＲｍ，＠−Ｒｎ
〔説明〕
コントロールレジスタＣＲｍをデスティネーションに格納する。
〔注意〕
本命令は割り込みを受け付けない。
0003539914.tif 000060
〔コード〕
STC    cr,R;(MSB)００００ＲＲＲＲｒｒｒｒ００１１(LSB)
STC.L  cr,@-R;(MSB)０１００ＲＲＲＲｒｒｒｒ００００(LSB)
【０１１７】
《ＳＴＢＲ（ＢＲ転送）命令》
〔書式〕
ＳＴＢＲ
〔説明〕
コントロールレジスタＢＲの内容を汎用レジスタＲ０に格納する。
〔注意〕
本命令は割り込みを受け付けない。
0003539914.tif 000061
〔コード〕
STBR;(MSB)００００００００００１０００００(LSB)
【０１１８】
《ＳＴＶＲ（ＶＢＲ転送）命令》
〔書式〕
ＳＴＶＲ
〔説明〕
コントロールレジスタＶＢＲの内容を汎用レジスタＲ０に格納する。
〔注意〕
本命令は割り込みを受け付けない。
0003539914.tif 000062
〔コード〕
STVR;(MSB)００００００００００００１０１０(LSB)
【０１１９】
《ＳＵＢ（減算）命令》
〔書式〕
ＳＵＢ    Ｒｍ，Ｒｎ
〔説明〕
汎用レジスタＲｎの内容からＲｍを減算し、結果をＲｎに格納する。イミディエート・データとの減算はＡＤＤ  ＃ｉｍｍ，Ｒｎで代用する。
0003539914.tif 000063
〔コード〕
SUB  r,R;(MSB)００１０ＲＲＲＲｒｒｒｒ０１００(LSB)
【０１２０】
《ＳＵＢＣ（キャリ付き減算）命令》
〔書式〕
ＳＵＢＣ  Ｒｍ，Ｒｎ
〔説明〕
汎用レジスタＲｎの内容からＲｍとＣビットを減算し、結果をＲｎに格納する。演算の結果によりボローがＣビットに反映される。
0003539914.tif 000064
〔コード〕
SUBC  r,R;(MSB)００１０ＲＲＲＲｒｒｒｒ０１１０(LSB)
【０１２１】
《ＳＵＢＳ（飽和機能付き減算）命令》
〔書式〕
ＳＵＢＳ  Ｒｍ，Ｒｎ
〔説明〕
汎用レジスタＲｎの内容からＲｍを減算し、結果をＲｎに格納する。アンダーフローが発生しても、結果はＨ'７ＦＦＦＦＦＦＦ〜Ｈ'８０００００００の範囲に制限される。このとき、Ｃビットがセットされる。
0003539914.tif 000065
〔コード〕
SUBS  r,R;(MSB)００１０ＲＲＲＲｒｒｒｒ０１１１(LSB)
【０１２２】
《ＳＵＢＶ（アンダーフロー付き減算）命令》
〔書式〕
ＳＵＢＶ  Ｒｍ，Ｒｎ
〔説明〕
汎用レジスタＲｎの内容からＲｍを減算し、結果をＲｎに格納する。アンダーフローが発生した場合、Ｃビットがセットされる。
0003539914.tif 000066
〔コード〕
SUBV  r,R;(MSB)００１０ＲＲＲＲｒｒｒｒ０１０１(LSB)
【０１２３】
《ＳＷＡＰ（交換）命令》
〔書式〕
ＳＷＡＰ.Ｂ    Ｒｍ，Ｒｎ
ＳＷＡＰ.Ｗ    Ｒｍ，Ｒｎ
〔説明〕
汎用レジスタＲｍの内容の上位と下位を交換して、結果をＲｎに格納する。バイト指定のとき、Ｒｍのビット０からビット７の８ビットと、ビット８からビット１５の８ビットが交換される。Ｒｎに格納されるときはＲｍの上位１６ビットはそのままＲｎの上位１６ビットに転送される。ワード指定のとき、Ｒｍのビット０からビット１５の１６ビットと、ビット１６からビット３１の１６ビットが交換される。
0003539914.tif 000067
〔コード〕
SWAP.B  r,R;(MSB)０１１０ＲＲＲＲｒｒｒｒ０１００(LSB)
SWAP.W  r,R;(MSB)０１１０ＲＲＲＲｒｒｒｒ０１０１(LSB)
【０１２４】
《ＴＡＳ（リード・モディファイ・ライト）命令》
〔書式〕
ＴＡＳ.Ｂ    ＠Ｒｎ
〔説明〕
汎用レジスタＲｎの内容をアドレスとし、そのアドレスの示すバイト・データがゼロのときＴ＝１、ゼロでないときＴ＝０とする。その後、ビット７を１にセットして書き込む。この間、バス権は解放されない。
0003539914.tif 000068
〔使用例〕
_LOOP  TAS.B  @R7  ;R7=1000
BF  _LOOP    ;1000番地がゼロになるまでループする。
〔コード〕
TAS.B  @R;(MSB)０１００ＲＲＲＲ００００１０００（LSB）
【０１２５】
《ＴＥＳＴ（テスト）命令》
〔書式〕
ＴＥＳＴ     Ｒｍ，Ｒｎ
ＴＥＳＴ     ＃ｉｍｍ，Ｒ０
ＴＥＳＴ.Ｂ  ＃ｉｍｍ，＠Ｒ１
〔説明〕
汎用レジスタＲｎの内容とＲｍの論理積をとり、結果がゼロのときＴビットをセットする。結果が否ゼロのときＴビットはクリアされる。Ｒｎの内容は変更されない。特殊形として汎用レジスタＲ０とゼロ拡張した８ビット・イミディエート・データとの論理積、もしくはＲ１相対で８ビット・メモリと８ビット・イミディエート・データとの論理積も可能である。メモリの内容は変更されない。
0003539914.tif 000069
〔コード〕
TEST  r,R;(MSB)０００１ＲＲＲＲｒｒｒｒ１０００(LSB)
TEST  #imm,R0;(MSB)１０００１０００ｉｉｉｉｉｉｉｉ(LSB)
TEST.B  #imm,@R1;(MSB)１０００００００ｉｉｉｉｉｉｉｉ(LSB)
【０１２６】
《ＴＲＡＰ（ソフトウエアトラップ）》
〔書式〕
ＴＲＡＰ    ＃ｉｍｍ
〔説明〕
トラップ例外処理を開始する。すなわちＰＣとＳＲをスタックに退避し、指定ベクタの内容で表わされるアドレスへ分岐する。ベクタはイミディエートデータを２ビット左シフトし符号拡張したメモリアドレスそのものである。ＰＣは本命令の２命令後の先頭アドレスである。ＲＴＥと組み合わせて、システム・コールに使用する。
〔注意〕
遅延分岐であるので、本命令の直後の命令が分岐に先立ち実行される。本命令と直後の命令との間に割り込みは受け付けられない。直後の命令が分岐命令のとき、不当命令として認識される。メモリからＲ１５へのロード命令の直後に連続して配置しないことが必要である。ロード前の古いＲ１５を誤って参照することになる。下記の→▲１▼と▲１▼→、→▲２▼と▲２▼→で対応されるように命令の順序変えが必要である。
MOV   #0,R0      →▲１▼  ▲２▼→   MOV.L @R15+,R15
MOV.L @R15+,R15  →▲２▼  ▲１▼→   MOV   #0,R0
TRAP  #15                     TRAP  #15
0003539914.tif 000070
〔使用例〕
アト゛レス
0010  .data.l  10000000 ;
・・・・・・・
TRAP   #H'10  ;H'10番地の内容のアドレスに分岐する
ADD    R1,R7  ;分岐に先立ち実行される
TEST   #0,R0  ;トラップルーチンの戻り先
・・・・・・・
10000000   MOV  R0,R0  ;トラップルーチンの入り口
10000002   RTE          ;上記ＴＥＳＴ命令に戻る。
10000004   NOP          ;ＲＴＥに先立ち実行される
〔コード〕
TRAP  #imm;(MSB)１１００００１１ｉｉｉｉｉｉｉｉ(LSB)
【０１２７】
《ＸＴＲＣＴ（切り出し）命令》
〔書式〕
ＸＴＲＣＴ    Ｒｍ，Ｒｎ
〔説明〕
図９７に示されるように、汎用レジスタＲｍとＲｎとを連結した６４ビットの内容から中央の３２ビットを切り出し、結果をＲｎに格納する。
0003539914.tif 000071
〔コード〕
XTRCT  r,R;(MSB)００１０ＲＲＲＲｒｒｒｒ１０００(LSB)
【０１２８】
次に上記実施例で説明したマイクロコンピュータなどを用いて行うことができる符号付き除算の実施例について説明していく。
【０１２９】
〔１８〕符号付除算における被除数に対する前処理の原理
【０１３０】
図２９には本実施例に係る符号付き除算における被除数に対する前処理の原理が概念的に示してある。例えばＹ（商）＝Ｘ（被除数）÷３（除数）で表される符号付き除算において、被除数Ｘが負のときは被除数Ｘから１を引いた値（Ｘ−１）を被除数とする。概念的には同図に示されるように商Ｙの座標軸を左側に１ずらした状態で除算の処理を行う。これによって、商を求める演算処理の途上で従来のように部分剰余が０であるか否かをその都度判定しなくても済み、且つ、その判定のためのハードウェアも不要とされる。正確な余りを求めるときは、最後に求まった余りを補正する。
【０１３１】
〔１９〕符号付き除算の原理的な一例処理手順
【０１３２】
図３０には被除数が負の場合における符号付き除算処理の原理的な一例処理手順が示される。同図においては、−９÷−３を一例とする。−９は２の補数表現で”１１０１１１”とされ、−３は”１０１とされる。先ず被除数は負であるから−９から１を引いた値”１１０１１０”が被除数とされる。商の符号は被除数の符号”１”と除数の符号”１”の排他的論理和から求められる（＊１）。最初の部分剰余の算出は、被除数”１１０１１０”と、除数の符号ビットを上位側（左側）に拡張した”１１０１”とを符号ビットの桁を合せて加算又は減算することによって行われる。双方の符号ビットの排他的論理和が０ならば減算とされ、１ならば加算とされる（＊２）。この例の場合には減算とされる。これによって最初の部分剰余”００００１０”が得られる。第１の部分剰余に対応される商は部分剰余の最上位ビットと除数の符号ビットとの排他的論理和の反転論理値によって与えられる（＊３）。以下同様にして順次商ビットが求められる。正確な余りが必要な場合には、この例に従えば最後の剰余に１を足す。同図のした側に示されるように被除数をそのままの値”１１０１１１”にして除算を行った場合には剰余の全ビットが”０”にされることに起因して正し商ビットをそのまままでは求められない。そのためには、部分剰余の全ビットが”０”であるか否かを部分剰余を算出する度に判定し、そうである場合には当該商ビットの論理値を反転しなければならない。尚図３１には負÷正の場合における符号付き除算処理の一例が示され、図３２には正÷正の場合および正÷負の場合における符号付き除算処理のそれぞれ一例が示される。
【０１３３】
〔２０〕符号付き除算処理の全体的な処理手順
【０１３４】
図３３には上記説明から概略が理解されたと考えられる本実施例に係る符号付き除算の基本的な約束ごと若しくは基本的な処理手順の全体が一般的形式で示される。
【０１３５】
《１》被除数に対する補正を行う。すなわち、図３４の（Ａ）に示されるように被除数が負の場合には被除数から１を引く。この処理は、被除数の符号を調べて個別的に行うこともできるが、本実施例では、被除数の符号ビットを抽出し、被除数からその符号ビットを引く手法を採用する。すなわち、被除数のＭＳＢである符号ビットを引く操作を除算の前処理として採用する。被除数が負のとき被除数のＭＳＢは１であるから被除数から１が差引かれる。被除数が正のときそのＭＳＢは０であるから被除数はそのままにされる。このように被除数からそのＭＳＢを差引く処理を採用することにより、被除数が正であるか負であるかを考慮することなく除算プログラムを作成することができ、しかもその様な判定動作を要しないため除算処理が高速化し、その上、被除数が正であるか負であるかにかかわらず同一の回路を利用して除算を行うことができる。
【０１３６】
ここで、被除数から差引くべき１とは、被除数のＬＳＢの重みを持った１として理解する。前記１を差引くべき被除数のビット位置若しくは桁は被除数の最下位ビット（ＬＳＢ）である。あえてこのような説明をするのは、前述のように、被除数が固定小数点数である場合を考慮したものである。また、被除数が負のときの符号ビットは１で、正のときの符号ビットは０であることに着目すると、被除数からその符号ビット（被除数のＭＳＢ）を差引けば、負の被除数から１を引いたことになる。これは、２の補数表現の負の整数から１の補数表現への変換とみなすことができる。このようにすれば、被除数が正か負かを考慮しなくても被除数に対する前処理を行うことができる。図３５には例えば、４ビットの負の整数から１を引いた変換状態が示される。有限ビット数の２の補数の最小値を１の補数に変換するには１ビット余分に必要であるので、必要な場合は１ビット拡張する。また、部分剰余は正になることもあるので、負の整数に対して行った上記の変換を整数全体に拡張し、新しい整数の表現を導入する。例えば、４ビット符号付き整数の範囲では図３６に示されるような表現が採用される。尚、任意の整数をその数から１を引いた数で表現したものをＺＺとすると、２の補数を用いた整数に対し１を引く変換を行ったＺＺの表現は０以下の整数では１の補数と同一視でき、０以上の整数では本来の値より１だけ小さい数で表現される。このとき、０の符号ビットは負の数と同じ１となる。
【０１３７】
《２》図３４の（Ｂ）に示されるように被除数と除数から商の符号を求める。すなわち被除数の符号と除数の符号との排他的論理和から商の符号を予測する。
【０１３８】
《３》順次部分剰余を求めながら商ビットを立てていく。部分剰余を求めるための加算並びに減算指令は図３７の（Ａ）に従って決定される。すなわち部分剰余（又は被除数）の符号Ｑと除数の符号Ｍの排他的論理和が０なら減算が指令され、概略的には部分剰余（又は被除数）から除数が差し引かれる。部分剰余（又は被除数）の符号Ｑと除数の符号Ｍの排他的論理和が１なら加算が指令され、概略的には部分剰余（又は被除数）に除数が加算される。商ビットは図３７の（Ｂ）に示されるように前記減算または加算後の部分剰余の符号ビットと除数の符号ビットの排他的論理和の結果を反転して得られる。
【０１３９】
ここで商ビットの算出方法を更に詳細に説明する。商ビットの算出手法をまとめた内容は、図３７の（Ｂ）に示され、その算出手法は以下のａ），ｂ），ｃ），ｄ）に分類される。
ａ）Ａ÷Ｂ  （Ａ≧０、Ｂ＞０、ＡとＢは２の補数）の場合
公知のように、部分剰余の符号ビットが０のとき商ビットを１、部分剰余の符号ビットが１のとき商ビットを０とする。
ｂ）Ａ÷Ｂ  （Ａ≧０、Ｂ＜０、ＡとＢは２の補数）の場合
商が負となるので、（ａ）の場合と商ビットの立て方を逆にする。つまり、部分剰余の符号ビットが０のとき商ビットを０、部分剰余の符号ビットが１のとき商ビットを１とする。商は１の補数となる。前記の《４》で述べられるが、商ビットが全て求まったら最後に２の補数に変換する。
ｃ）Ａ÷Ｂ  （Ａ＜０、Ｂ＜０、ＡとＢは２の補数）の場合
あらかじめ被除数から被除数のＬＳＢの重みをもつ１を引いておく。被除数と部分剰余の負の表現は１の補数となり、正の表現は本来の値よりＬＳＢの重みをもつ１だけ小さくなる。０以下の場合符号ビットＭＳＢが１となり、０より大きい場合符号ビットＭＳＢが０となる。商は正となるので、部分剰余の符号ビットＭＳＢが１のとき商ビットを１とし、部分剰余の符号ビットＭＳＢが０のとき商ビットを０とする。
ｄ）Ａ÷Ｂ  （Ａ＜０、Ｂ＞０、ＡとＢは２の補数）の場合
あらかじめ被除数から被除数のＬＳＢの重みをもつ１を引いておく。被除数と部分剰余の負の表現は１の補数となり、正の表現は本来の値よりＬＳＢの重みをもつ１だけ小さくなる。０以下の場合符号ビットＭＳＢが１となり、０より大きい場合符号ビットＭＳＢが０となる。商は負となるので、（ｃ）の場合と商ビットの立て方を逆にする。部分剰余の符号ビットＭＳＢが１のとき商ビットを１とし、部分剰余の符号ビットＭＳＢが０のとき商ビットを０とする。商は１の補数となる。後述の《４》で述べられるが、商ビットが全て求まったら最後に２の補数に変換する。
【０１４０】
《４》前記《３》で得られた商は、商の符号により必ずしも正確な値になっていないことがある。前記《２》で求めた商の符号が１のときには商は１の補数になっているからである。したがって、最終的な商は、前記商の符号と商ビットにしたがって決定される。図３８に示されるように、商が負（商の符号ビットが１）の場合には商は１の補数で表現されているので、《３》で得られた商に１を足して２の補数に変換する補正を行う。これによって正しい商が求まる。更に図３８に示されるように最終部分剰余に対する剰余補正を行う。
【０１４１】
〔２１〕符号付き除算の具体例
【０１４２】
図３９及び図４０には符号付き除算の上記基本的な手順を採用した処理の具体的な一例が示される。同図に示される例は−８÷−３の符号付き除算であり、理解を容易にするために６ビットの汎用レジスタを使用した説明とする。図４０は、図３９に示される最後の処理に引き続いて実行される処理が示され、列方向の記述の意味は図３９に一致されている。各図においてＲ０〜Ｒ４は夫々６ビットの汎用レジスタを意味し、Ｑ，Ｍ，Ｔはコントロールレジスタ若しくはステータスレジスタ中のビットフラグを意味し、Ｑは被除数又は部分剰余の符号を格納するビット、Ｍは除数の符号を格納するビット、Ｔは商ビットやキャリーを格納するビットである。図中の左端には命令コードとオペランドが記載され、それに対応する列には汎用レジスタ及びビットフラグの内容が示される。この汎用レジスタ及びビットフラグの内容を示す記述においてアンダーラインが付された内容は対応命令の実行によってその内容が更新されたことを意味する。×が書かれたビットは値が確定していないビットを意味する。以下この項において符号付き除算処理を順次説明するが、先ずその説明で使用する記号についての凡例を以下に示す。
←;格納することを表す。
ＭＳＢ（Ｒｎ）;レジスタＲｎのＭＳＢ（最上位ビット）を表す。
ＬＳＢ（Ｒｎ）;レジスタＲｎのＬＳＢ（最下位ビット）を表す。
＾;排他的論理和を表す演算子である。
Ｒｎ＜＜＝１;レジスタＲｎの値を１ビット左シフトすることを表す。
Ｒｎ＞＞＝１;レジスタＲｎの値を１ビット右シフトすることを表す。
（Ｑ：Ｒｎ）;レジスタＲｎの最上位にＱビットを付加した７ビットの２進数を意味する。
（Ｍ：Ｒｎ）;レジスタＲｎの最上位にＭビットを付加した７ビットの２進数を意味する。
〜;否定（ビット反転）を意味する演算子である。
（Ｒｎ：Ｔ）を右回転;ＴビットをレジスタＲｎのＭＳＢにシフトインしながらレジスタＲｎの値を右シフトし、シフトアウトされた値のＬＳＢをＴビットに格納することを表す。
（Ｒｎ：Ｔ）を左回転;ＴビットをレジスタＲｎのＬＳＢにシフトインしながらレジスタＲｎの値を左シフトし、シフトアウトされた値のＭＳＢをＴビットに格納することを表す。
【０１４３】
（１）ＥＯＲ  Ｒ０，Ｒ０
Ｒ０←０。すなわちレジスタＲ０の値を全ビット０にする。
（２）ＳＬ３  Ｒ１
レジスタＲ１の下位３ビット（除数）を上位３ビットに左シフトする。
（３）ＤＩＶ０Ｓ  Ｒ０，Ｒ２
Ｑ←ＭＳＢ（Ｒ２）、Ｍ←ＭＳＢ（Ｒ０）＝０、Ｔ←Ｑ＾Ｍ＝Ｑ＾０＝Ｑ。  したがって、Ｔビットには被除数の符号が格納される。
（４）ＭＯＶＴ  Ｒ３
Ｒ３←Ｔ。すなわち、被除数の符号をＬＳＢ（Ｒ３）に格納する。この被除数の符号は余りを求めるときに必要とされる。
（５）ＳＵＢＣ  Ｒ０，Ｒ２
Ｒ２←（Ｒ２−Ｔ）。すなわち、２の補数を１の補数に変換している。換言すれば、被除数が負の場合にＲ２が保持する被除数から１を引いているのと等価である。この処理において実際には、被除数から被除数の符号ビットＭＳＢの値を差引いていることになるので、被除数が正であるのか負であるを一切検出する必要はなく、何れの場合にも同じ命令を実行して対応できる。すなわち、被除数が負の場合にだけ分岐して１を引く演算を行うような処理フローは不要とされる。
（６）ＤＩＶ０Ｓ  Ｒ１，Ｒ２
Ｑ←ＭＳＢ（Ｒ２）により、被除数の符号をＱビットに取得し、
Ｍ←ＭＳＢ（Ｒ１）により、除数の符号をＭビットに取得し、
Ｔ←Ｑ＾Ｍにより、商の符号を取得する。
（７）ＤＩＶ１  Ｒ１，Ｒ２
”．ａｒｅｐｅａｔ  ３”と”．ａｅｎｄｒ”との間にある命令ＤＩＶ１  Ｒ１，Ｒ２が３回繰り返される。
命令ＤＩＶ１の各実行サイクルにおいて、
Ｑ＾Ｍ＝０のときに減算指令を発行し、Ｑ＾Ｍ＝１のときに加算指令を発行し、
Ｑ←ＭＳＢ（Ｒ２）によりＱビットを取得し、Ｒ２＜＜＝１によりＲ２の被除数を１ビット左シフトし、ＬＳＢ（Ｒ２）←ＴによりＲ２のＬＳＢにＴビット（この時は商の符号になっている）を格納し、
（Ｑ：Ｒ２）←（Ｑ：Ｒ２）±（Ｍ：Ｒ１）によって、加減算指令にしたがった演算を行い、
Ｔ←〜（Ｑ＾Ｍ）によって商ビットをＴビットに格納する。
命令ＤＩＶ１を３回実行することにより、Ｑビットには最後の部分剰余の符号が入っており、Ｔビットには商の最下位ビットが入っており、Ｒ２の上位３ビットには最後の部分剰余が入っており、その下位３ビットには商が入っている。下位から３ビット目には（６）ＤＩＶＯＳ  Ｒ１，Ｒ２でＴビットに取得した商の符号が入っている。
（８）ＭＯＶ  Ｒ２，Ｒ４
Ｒ２をＲ４にコピーする。Ｒ４を利用して余りを求めるためである。
（９）ＥＸＴＳ．Ｗ  Ｒ２，Ｒ２
Ｒ２の下位から３ビット目を上位３ビット側に符号拡張する。この符号は商の符号を表している。
（１０）ＲＯＴＣＬ  Ｒ２
（Ｒ２：Ｔ）を左回転、すなわちＴビットをレジスタＲ２のＬＳＢにシフトインしながらレジスタＲ２の値を左シフトし、シフトアウトされた値のＭＳＢをＴビットに格納する。これにより、Ｒ２の下位３ビットには商が格納されており、Ｔビットには商の符号が格納される。
（１１）ＡＤＤＣ  Ｒ０，Ｒ２
Ｒ２←Ｒ２＋Ｔにより、１の補数を２の補数に変換する。すなわち、この命令を実行する直前に商はＲ２が保持し、Ｔビットには商の符号が格納されている。したがって、Ｔビットの値をＲ２の値に加算することにより、Ｒ２が１の補数を保持しているときにはそれが２の補数に変換される。商が正のとき、Ｔ＝０なので、Ｔを加算してもＲ２の値は変化されない。商が負のときはＴ＝１なので、Ｔを加算することによって、Ｒ２の値は１の補数から２の補数に変換される。これによって、正しい商が求められる。
（１２）ＤＩＶ０Ｓ  Ｒ０，Ｒ４
Ｑ←ＭＳＢ（Ｒ４）により、Ｒ４のＭＳＢ（余りの符号）をＱビットに格納し、
Ｍ←ＭＳＢ（Ｒ０）により、Ｒ０（＝０）のＭＳＢをＭビットに格納し、
Ｔ←Ｑ＾Ｍ＝Ｑ＾０＝Ｑにより、ＱビットとＭビットの排他的論理和すなわちＱビット（余りの符号）を、Ｔビットに格納して、余りの符号をＴビットに得る。
（１３）ＭＯＶＴ  Ｒ０
Ｒ０←Ｔにより、Ｔビットに保持されている補正前の余りの符号がＲ０のＬＳＢに格納される。これは余りの補正に用いられる。
（１４）ＥＯＲ  Ｒ３，Ｒ０
Ｒ０←Ｒ３＾Ｒ０により、被除数の符号と補正前の余りの符号との排他的論理和の結果がＲ０のＬＳＢに格納される。
（１５）ＲＯＴＣＲ  Ｒ０
（Ｒ０：Ｔ）の右回転により、ＴビットをＲ０のＭＳＢにシフトインしながらＲ０の値を右シフトし、シフトアウトされた値のＬＳＢをＴビットに格納する。これにより、被除数の符号と補正前の余りの符号との排他的論理和の結果がＴビットに入る。
（１６）ＢＦ  Ｌ１
Ｔビットの値が０ならばラベルＬ１に分岐する。Ｔ＝０のときは被除数と余りの符号が同じなので余りを補正する必要はないからである。
（１７）ＤＩＶ０Ｓ  Ｒ１，Ｒ４
Ｑ←ＭＳＢ（Ｒ４）により、Ｑビットに補正前の余りの符号を格納し、
Ｍ←ＭＳＢ（Ｒ１）により、Ｍビットに除数の符号を格納し、
Ｔ←Ｑ＾Ｍにより、ＱビットとＭビットの排他的論理和の結果をＴビットに格納する。
（１８）ＲＯＴＣＲ  Ｒ４
（Ｒ４：Ｔ）の右回転により、次のＤＩＶ１命令の左シフトを打ち消すための処理を行う。
（１９）ＤＩＶ１  Ｒ１，Ｒ４
Ｑ＾Ｍ＝０のときに減算指令を発行し、Ｑ＾Ｍ＝１のときに加算指令を発行し、
Ｑ←ＭＳＢ（Ｒ４）によりＱビットを取得し、Ｒ４＜＜＝１によりＲ４の値を１ビット左シフトし、ＬＳＢ（Ｒ４）←ＴによりＲ４のＬＳＢにＴビット（この時は除数の符号と補正前の余りの符号との排他的論理和の結果が入っている）を格納し、
（Ｑ：Ｒ４）←（Ｑ：Ｒ４）±（Ｍ：Ｒ１）により、ＱビットとＲ４の値を合せた７ビットからＭビットとＲ１の値を合せた７ビットを、前記加減算のための判定結果に従って、加算又減算を行い、その結果をＱビットとＲ４に格納し、
Ｔ←〜（Ｑ＾Ｍ）によってその排他的論理和の結果を反転した値をＴビットに格納する。
（２０）ＳＲ３  Ｒ４
Ｒ４の上位３ビット（余りに相当）をＲ４の下位３ビットに右シフトする。
（２１）ＡＤＤ  Ｒ３，Ｒ４
Ｒ３は被除数の符号を保持している。Ｒ４は補正前の余りを保持している。上記（５）の命令ＳＵＢＣ  Ｒ０，Ｒ２によって被除数からその符号が引かれているので、Ｒ４にＲ３を加算することによって、換言すれば、余りが１の補数であってもこれを２の補数に変換することにより、Ｒ４の下位３ビットに正しい余りが得られる。
（２２）ＥＸＴＳ．Ｗ  Ｒ４，Ｒ４
補正された余りを下位３ビットに保持するＲ４の上位側を符号拡張して全６ビットで最終的な余りを求める。
【０１４４】
ここで前記図３９及び図４０の説明では、３回のＤＩＶ１命令の繰返しにおいて、商と余りは共にＲ２に保持し、ＤＩＶ１命令の実行毎にＲ２の値を１ビットづつ左シフトしている（Ｒ２＜＜＝１）。この点に関し、従来技術の演算手法のように被除数が負の場合に部分剰余の全ビットが０であるかを判定しなければならないとするなら、Ｒ２において判定対象とされる部分剰余の桁位置を毎回変化させてその判定を行わなければならず、その処理は比較的繁雑になる。したがって、従来技術のように被除数が負の場合に部分剰余の全ビットが０であるかを判定しなければならないような演算手法においては、商と余りを別々のレジスタに保持すれば、その様に部分剰余の桁位置を毎回変化させて判定を行わなくてもよくなる。但し、この場合には、商と余りを別々のレジスタに保持させるために実行しなければならない転送命令が逆に増えることになる。本実施例の場合には、部分剰余の全ビットが０であるか否かをその都度判定しなくてもよいから、商と余りを共にＲ２に保持することによって、実行すべき命令数も減らすことができて、符号付き除算処理の高速化が更に容易になる。
【０１４５】
尚、図４１及び図４２には同様に−８÷３、図４３及び図４４には同様に−９÷−３、図４５及び図４６には同様に−９÷３、図４７及び図４８には同様に８÷３、図４９及び図５０には同様に８÷−３の符号付き除算処理の具体例がそれぞれ示される。これらの内容は前記図３９及び図４０に対して被除数と除数の値が相違するだけであるから詳細な説明を省略する。
【０１４６】
〔２２〕符号付き除算のための演算ユニット
【０１４７】
図５１には前記符号付き除算を行うことができる演算ユニットの一実施例が示される。この演算ユニットは、図６及び図７に示される汎用レジスタ部ＧＲＢ及び演算部ＯＰＢを、符号付き除算処理を説明し易いように見方を変えて表現したものとして把握することができる。図５１において演算ユニットには代表的に５個の汎用レジスタＲ０〜Ｒ４が示される。レジスタＲ２は被除数または部分剰余を格納するのに利用され、レジスタＲ１は除数を格納するのに利用される。３は商の符号ビットや商ビットを一時的に格納するための制御ビットレジスタ（第３の制御ビット格納手段）である。この制御ビットレジスタ３を以下単にＴビットとも記す。４はシフト制御信号の指令により、前記Ｔビットを選択回路１４を介して最下位ビット或は最上位ビットにシフトインし、最上位ビット或は最下位ビットを選択回路１５にシフトアウトするシフタである。また、このシフタはシフト制御信号の指令により３２ビット入力の上位１６ビットを下位１６ビットに論理シフト又は下位１６ビットを上位１６ビットに論理シフトし、出力する。５は被除数または部分剰余の最上位ビットの上位に付加したビットの役割をするための制御ビットレジスタ（第１の制御ビット格納手段）である。この制御ビットレジスタ５を以下単にＱビットとも記す。６は除数の最上位ビットの上位に付加したビットの役割をするための制御ビットレジスタ（第２の制御ビット格納手段）である。この制御ビットレジスタ６を以下単にＭビットとも記す。７は算術論理演算回路８に加減算の指示をする演算制御回路である。８は３２ビットの算術論理演算回路でる。この算術論理演算回路８は、Ａポートの入力に対しＢポートの入力を演算制御回路７の指令に従って加減算し、その結果を被除数レジスタＲ２などにつながるバスに出力することができ、キャリーまたはボローフラグ付き算術論理演算を行う。更にこの算術論理演算回路８は、Ｂポートの入力のＭＳＢ（最上位ビット）をＭビットに出力でき、その他に、加算、キャリー付き減算、キャリー付き加算、排他的論理和（ＥＯＲ）、論理積などの演算を行うことができる。９は制御ビットレジスタ５の値に制御ビットレジスタ６の値を算術論理演算回路８のキャリーまたはボローを含めて加減算する演算回路である。１０は演算回路９の結果と制御ビットレジスタとの排他的論理和の否定を計算して、その結果を選択回路１２に出力することと、制御ビットレジスタ５の値と制御ビットレジスタ６の値との排他的論理和を計算し、その結果を選択回路１２に出力することができる演算回路である。１１は制御ビットレジスタ５の入力を選択するものであり、選択回路１５を介するシフタ４からの出力と演算回路９からの出力とのどちらかを選ぶための選択回路である。１２は算術論理演算回路８のキャリーまたはボロー、演算回路１０の演算結果、或は選択回路１５の出力の何れかを選択して、制御ビットレジスタ３または演算回路９に出力する選択回路である。１３は制御ビットレジスタ５への入力を選択する選択回路１１と演算回路９への入力を選択する選択回路１３とのどちらかを選択して出力する選択回路である。１６は制御レジスタ３の出力を算術論理演算回路８又は選択回路１４に供給する選択回路である。１７は算術論理演算回路８のＢポートに入力が接続された符号拡張回路である。この回路は零拡張も行うことができる。
【０１４８】
図５２には図５１に示される算術論理演算回路８、演算回路９、演算回路１０、及び演算制御回路７の一例が示される。前記演算制御回路７は、同図の（ｂ）に示されるように２入力型の排他的論理和回路と、その出力と制御信号とを２入力とする排他的論理和回路によって構成される。制御信号が０の時、演算回路１０は前者の排他的論理和回路の出力をそのまま出力し、制御信号が１の時演算回路１０は前者の排他的論理和回路の出力を否定（反転）して出力する。演算回路１０は、図５２の（ｄ）に示されるように２入力型の排他的論理和回路と、その出力と制御信号とを２入力とする排他的論理和回路とによって構成される。制御信号が０のとき演算回路１０は前者の排他的論理和回路の出力をそのまま出力し、制御信号が１のとき演算回路１０は前者の排他的論理和回路の出力を否定（反転）して出力する。図５２の（ａ）において算術論理演算回路８は、加減算のための論理が代表的に示され、３２ビットのフルアダーを備える。Ｂ００〜Ｂ３１はＢポート入力、Ａ００〜Ａ３１はＡポート入力、Ｃ／Ｂはキャリ／ボロウであり、ＳＵＢは演算制御回路７の出力である。
【０１４９】
〔２３〕符号付き除算に際しての演算ユニットの動作例
【０１５０】
図５３には符号付き除算のための命令列の一例が示される。同図に示される記述は図５１に示される回路を用いて３２ビット÷１６ビットの符号付き除算を行って商と剰余（余り）を求めるためのものである。この除算は、
Ｒ２÷Ｒ１＝Ｒ２…Ｒ４
によって示されるように、符号付き３２ビットの被除数はレジスタＲ２が保持し、除数は符号付き１６ビットとされレジスタＲ１が保持する。商はレジスタＲ２が保持し、剰余はレジスタＲ４が保持する。
【０１５１】
図５４〜図７４には図５３の命令を順次実行したとき図５１の回路の動作が順を追って示され、図７５〜図８１にはやはり同様にそのときの動作がレジスタの状態を中心に順を追って示される。これらの図面に基づいて、符号付き除算に際して演算ユニットの動作を順次命令単位で説明していく。なお、以下の説明では、前述の通り３２ビットデータを１６ビットデータで除算するのものとする。被除数および除数は最上位ビットを符号ビットとした２の補数で与えられており、商も２の補数で得るものとする。この説明では、商のオーバーフローの検出は行っていない。被除数が２の補数の負の最小値の場合、処理手順が意図したアルゴリズムと異なるが、この場合は必ずオーバーフローとなるので、商を保証しない。オーバーフローの検出が必要な場合はあらかじめ行っておく。図５３の命令列を実行する前提条件として、レジスタＲ１には１６ビット符号付き除数が格納されており、レジスタＲ２には被除数が格納されている。レジスタＲ０，Ｒ３は作業用レジスタである。商はレジスタＲ２に格納する。
【０１５２】
（１）ＥＯＲ  Ｒ０，Ｒ０
図５４及び図７５に示されるように、この命令の実行によって作業用レジスタＲ０の値が０にされる。Ｒ０の値が既に０となっている場合はこの命令は必要ない。図５４においてシフタ４及び符号拡張回路１７は動作されず、入力をスルーで出力する。算術論理演算回路８はＡポート入力とＢポート入力に対してビット対応で排他的論理和を採る。これによってレジスタＲ０の値が全ビット０にされる。
【０１５３】
（２）ＳＬ１６  Ｒ１
図５５及び図７５に示されるように、この命令の実行によって、除数レジスタＲ１に格納された除数を１６ビット上位にシフト（左シフト）し、下位１６ビットに０をシフトインする。１６ビット左シフトはシフタ４で行う。算術論理演算回路８はＡポート入力をスルーで出力する。
【０１５４】
（３）ＤＩＶ０Ｓ  Ｒ０，Ｒ２
図５６及び図７５に示されるように、この命令により、レジスタＲ２のＭＳＢをＱビットに、レジスタＲ０のＭＳＢをＭビットに格納し、ＱビットとＭビットの排他的論理和をＴビットに格納する。このとき、レジスタＲ０の値は０にされているので、ＴビットにはレジスタＲ２が保持している被除数のＭＳＢが格納されることになる。この処理において、シフタ４は入力のＭＳＢを選択回路１５に与える。符号拡張回路１７は入力をスルーで出力する。算術論理演算回路８はＢポート入力のＭＳＢを出力する。ＱビットとＭビットの排他的論理和演算は演算回路１０が行う。
【０１５５】
（４）ＭＯＶＴ  Ｒ３
図５７及び図７６に示されるように、この命令により、Ｔビットの値すなわち被除数の符号をレジスタＲ３に格納する。これは、余りを求めるときのために被除数の符号ビットを保存するためである。この処理において、算術論理演算回路８は、各ビット０の３２ビットのビット列にＴビットの値を加えて出力する。
【０１５６】
（５）ＳＵＢＣ  Ｒ０，Ｒ２
図５８及び図７６に示されるように、この命令により、レジスタＲ２からレジスタＲ０をキャリー付で減算する。Ｔビットがキャリービットである。ここでは、レジスタＲ０は０なので、レジスタＲ２からＴビット（被除数の符号ビット）を引くことにより２の補数を１の補数に変換している。この処理においてシフタ４及び符号拡張回路１７は入力をスルーで出力する。算術論理演算回路８は、Ａポート入力からＢポート入力とＣ／Ｂ入力とを減算し、その減算結果とＣ／Ｂとを出力する。すなわち、ＳＵＢＣ命令で、被除数レジスタであるＲ２からＲ０をキャリー付きで減算している。キャリーは制御ビットレジスタ３と同一視している。Ｒ０の値は０なので、被除数レジスタであるＲ２から制御ビットレジスタ３の値を引いたことになる。これで、被除数から被除数の符号ビットの値を引く処理が終了する。この処理により被除数が０以上であった場合は被除数がそのままであるが、被除数が負であった場合には、被除数が１の補数で表現されたことになる。図３５には、被除数が負で４ビットの場合に被除数が補正によりどのように表現がかわるかを表わす例を示す。４ビットの符号付き２の補数の最小値”１０００”に上記補正を加えると”１０１１１”のように５ビット必要になる。本実施例では被除数は３２ビット符号付き２の補数で表現されているので、３２ビット符号付き２の補数の最小値に上記補正を加えると３３ビット必要になる。制御ビットレジスタ３を最上位ビットとする３３ビットで表現することもできるが、本実施例ではそこまで実施していない。なぜならば、被除数が３２ビット符号付き２の補数の最小値の場合、必ずオーバーフローが発生し、正しい商が得られないが、オーバーフローが発生する場合をあらかじめ検出して除外すればよいからである。
【０１５７】
（６）ＤＩＶ０Ｓ  Ｒ１，Ｒ２
図５９及び図７６に示されるように、この命令により、レジスタＲ２に格納されている被除数のＭＳＢ（符号ビット）をＱビットに、レジスタＲ１に格納されている除数のＭＳＢ（符号ビット）をＭビットに格納し、ＱビットとＭビットの排他的論理和を採り、これを商の符号としてＴビットに格納する。この動作は１つ手前のＳＵＢＣ  Ｒ０，Ｒ２の実行でオーバーフローしないときに保証される。このとき、シフタ４は３２ビット入力のＭＳＢを出力する。符号拡張回路１７は入力をスルーで出力する。算術論理演算回路８は、Ｂポート入力のＭＳＢを出力する。排他的論理和演算は演算回路１０が行う。このＤＩＶ０Ｓ命令により、３つの制御ビットレジスタの初期化が行われる。ＤＩＶ０Ｓ命令の第１オペランドに除数レジスタＲ１を設定し、第２オペランドに被除数レジスタＲ２であるＲ２を設定している。ＤＩＶ０Ｓ命令は第１オペランドを算術論理演算回路８に入力し、第１オペランドのＭＳＢを制御ビットレジスタ６に格納する。その処理と並行してＤＩＶ０Ｓ命令は第２オペランドのＭＳＢをシフタ４によりシフトアウトし、選択回路１５および選択回路１１を経由して、制御ビットレジスタ５に格納する。制御ビットレジスタ５と制御ビットレジスタ６の値はＤＩＶ０Ｓ命令終了後も保持しておく。制御ビットレジスタ５の値は選択回路１３を経由して、演算回路１０の入力値となる。制御ビットレジスタ６の値は演算回路１０の入力値となる。演算回路１０は上記２つの入力の排他的論理和を計算し結果を、選択回路１２を経由して、制御ビットレジスタ３に格納する。制御ビットレジスタ３の値はＤＩＶ０Ｓ命令終了後も保持しておく。第１オペランドのＲ１と第２オペランドのＲ２は書き替えない。
【０１５８】
このＤＩＶ０Ｓ命令は被除数の符号ビットを制御ビットレジスタ５に格納し、除数の符号ビットを制御ビットレジスタ６に格納し、制御ビットレジスタ５と制御ビットレジスタ６の排他的論理和を制御ビットレジスタ３に格納している。制御ビットレジスタ５と制御ビットレジスタ６の値は、次の除算の最初のステップで加算を行うか減算を行うかの判断に用いる。制御ビットレジスタ６は次の除算で除数の符号拡張部として利用する。制御ビットレジスタ３の値は商の符号を表わしている。商が負の場合、商は一度１の補数で求めてから２の補数に変換される。１６ビット符号付き２の補数の最小値が商となる場合、１の補数表現では１７ビット必要になる。その１７ビットの１の補数の符号ビットとなるのが本ＤＩＶ０Ｓ命令終了直後の制御ビットレジスタ３の値である。
【０１５９】
被除数が３２ビット符号付き２の補数の最小値をとる場合、１を引く上記補正により被除数レジスタＲ２は正の最大値になっているため、ＤＩＶ０Ｓ命令終了直後の制御ビットレジスタ５の値は０となる。本来ならば制御ビットレジスタ５には被除数の符号ビットが入るので、制御ビットレジスタ５の値は１となる筈である。このために、被除数が３２ビット符号付き２の補数の最小値をとる場合、制御手順が本来の意図と異なる。しかし、先ほども注意したように、被除数が３２ビット符号付き２の補数の最小値をとる場合は商が必ずオーバーフローするが、オーバーフローが発生する場合をあらかじめ検出して除外しておけばよい。以下、被除数が３２ビット符号付き２の補数の最小値をとる場合について特別な注意は行わない。
【０１６０】
（７）ＤＩＶ１  Ｒ１，Ｒ２
図５３の記述において”．ａｒｅｐｅａｔ  １６”はアセンブラのマクロ命令で、”．ａｒｅｐｅａｔ  １６”と”．ａｅｎｄｒ”との間にある命令を１６回展開すると言う意味である。したがって、ＤＩＶ１命令は１６回繰り返され、これによって実質的な除算が行われる。ＤＩＶ１命令の第１オペランドのＲ１が除数レジスタ、ＤＩＶ１命令の第２オペランドのＲ２が被除数レジスタである。図６０及び図７７において、１回のＤＩＶ１命令の実行は、（ｉ），（ｉｉ），（ｉｉｉ），（ｉｖ）の処理に大別される。
【０１６１】
（ｉ）初めに制御ビットレジスタ５と制御ビットレジスタ６の値を演算制御回路７に取り込み、２つの入力の排他的論理和の否定を計算する。この結果は算術論理演算回路８に送られ、算術論理演算回路８はその値を演算指令として保持しておく。上記排他的論理和の結果が１の場合減算指令となり、０の場合加算指令となる。
（ｉｉ）次に被除数レジスタＲ２の値がシフタ４に入力される。シフタ４は入力された３２ビットを上位に１ビットシフトする。同時に制御ビットレジスタ３の値をＬＳＢにシフトインし、シフトアウトされたＭＳＢビットを選択回路１５を経て選択回路１１に送り、制御ビットレジスタ５に格納する。
（ｉｉｉ）次にシフタ４の３２ビットの出力の最上位に制御ビットレジスタ５の値を付加した３３ビットに対し、除数レジスタＲ１の最上位に制御ビットレジスタを付加した３３ビットを加算または減算する。（ｉ）で加算指令があった場合は加算、（ｉ）で減算指令があった場合は減算を行う。シフタ４の３２ビットの出力と除数レジスタＲ１の値との加減算は算術論理演算回路８で行う。その結果、算術論理演算回路８で生じたキャリーまたはボローを選択回路１２を経て演算回路９に送る。算術論理演算回路８で生じた３２ビットの演算結果は被除数レジスタＲ２に格納する。制御ビットレジスタ５と制御ビットレジスタ６との加減算は算術論理演算回路８で先ほど生じたキャリーまたはボロー付きで演算回路９で行う。演算回路９の結果は部分剰余の符号ビットとなる。この部分剰余の符号は一方で選択回路１１に送られ制御ビットレジスタ５に格納され、もう一方で、演算回路１０の入力値となる。
（ｉｖ）演算回路１０は、この部分剰余の符号と制御ビットレジスタ６の値との排他的論理和の否定を計算する。その結果は選択回路１２に送られ、制御ビットレジスタ３に格納される。この時の制御ビットレジスタ３の値が商ビットとなる。
【０１６２】
ＤＩＶ１命令を１６回繰り返した直後には、制御ビットレジスタ５には最後の部分剰余の符号が入っており、制御ビットレジスタ３には商の最下位ビットが入っており、被除数レジスタＲ２の上位１６ビットには最後の部分剰余が入っており、下位１６ビットには１７ビットの商の上位１６ビットが入っている。
【０１６３】
（８）ＭＯＶ  Ｒ２，Ｒ４
図６１に示されるように、この命令により、レジスタＲ２の上位１６ビットに保持されている最後の部分剰余を商を求める手段で破壊しないように、当該レジスタＲ２の値をレジスタＲ４に退避する。
【０１６４】
（９）ＥＸＴＳ．Ｗ  Ｒ２，Ｒ２
前記ＤＩＶ０Ｓ命令でＴビットに出力した商の符号が、前記ＤＩＶ１命令を１６回繰返すことにより、レジスタＲ２の下位１６ビットの符号ビットの位置にきている。ＥＸＴＳ．Ｗ  Ｒ２，Ｒ２は、図６２及び図７７に示されるように、その下位１６ビットの符号ビットを上位１６ビットに符号拡張する。この処理において、図６２の符号拡張回路１７は下位１６ビットを３２ビットに符号拡張する。算術論理演算回路８は入力をスルーで出力する。すなわち、ＥＸＴＸ．Ｗ命令で被除数レジスタＲ２の下位１６ビットの符号を上位１６ビットに拡張している。被除数レジスタＲ２の下位１６ビットの符号ビットには前記処理（６）ＤＩＶＯＳ  Ｒ１，Ｒ２で求めた商の符号ビットが格納されているので、この商の符号を上位１６ビットに拡張している。
【０１６５】
（１０）ＲＯＴＣＬ  Ｒ２
Ｔビットには前記ＤＩＶ１命令の１６回目で求めた最後の商ビットが入っている。図６３及び図７８に示されるように、このＲＯＴＣＬ命令では、シフタ４を用いて、ＴビットをレジスタＲ２のＬＳＢにシフトインすると同時に、レジスタＲ２の値を左シフトして、シフトアウトされたＭＳＢ（符号ビット）をＴビットに出力する。すなわち、制御ビットレジスタ３に格納されていた商の最下位ビットを被除数レジスタＲ２にシフトインする。シフトアウトされた符号ビットは制御ビットレジスタ３に格納される。このとき、被除数レジスタＲ２には商が格納されている。制御ビットレジスタ３の値が０のとき、つまり、商が正の場合は補正が不要だが、制御ビットレジスタ３の値が１のとき、つまり、商が負の場合は商が１の補数で表現されているので２の補数に変換する必要がある。
【０１６６】
（１１）ＡＤＤＣ  Ｒ０，Ｒ２
この命令を実行する直前にレジスタＲ２は商を保持し、Ｔビットには商の符号が格納されている。このＡＤＤＣ命令は、図６４及び図７８に示されるように、Ｔビットの値をレジスタＲ２の値に加算することにより、レジスタＲ２が保持する１の補数を２の補数に変換する。商が正のとき、Ｔ＝０なので、Ｔを加算してもレジスタＲ２の値は変化しない。商が負のときはＴ＝１なので、Ｔを加算することによって、レジスタＲ２の値は１の補数から２の補数に変換される。これによって、正しい商が求められる。この処理において、算術論理演算回路８は、Ａポート入力からＢポート入力を引き、更に、Ｔビット（キャリー／ボロー）を引き、ボローをＴビットに格納する。すなわち、ＡＤＤＣ命令はキャリー付き加算命令である。制御ビットレジスタ３はキャリーと同一視しており、ＡＤＤＣ命令は被除数レジスタＲ２に値が０のレジスタＲ０と制御ビットレジスタ３を加算している。制御ビットレジスタ３の値が０の場合は被除数レジスタＲ２の値はＡＤＤＣ命令実行前と変わらず、制御ビットレジスタ３の値が１の場合は被除数レジスタＲ２に格納された商を１の補数から２の補数に変換したことになる。この結果、正しい商を得ることができる。
【０１６７】
図５３において前記命令ＡＤＤＣの以下に記述された命令ＤＩＶ０Ｓ〜命令ＥＸＴＳ．Ｗは余りを求めるときに必要な処理とされる。
【０１６８】
（１２）ＤＩＶ０Ｓ  Ｒ０，Ｒ４
この命令は、レジスタＲ４のＭＳＢ（余りの符号）をＴビットに格納することを目的とする。すなわち、図６５及び図７８に示されるように、レジスタＲ４のＭＳＢがＱビットに入り、レジスタＲ０のＭＳＢがＭビットに入り、ＱビットとＭビットの排他的論理和がＴビットに入れられる。このとき、前述のように、レジスタＲ０の値は０であるから、Ｍビットは０で、ＴビットにはＱビットの値（余りの符号）がそのまま入ることになる。斯る処理において、シフタ４は入力のＭＳＢをＱビットに出力する。符号拡張回路１７は、入力をスルーで出力する。算術論理演算回路８はＢポート入力のＭＳＢ（符号ビット）をＭビットとして出力する。演算回路１０は２入力の排他的論理和を採って出力する。
【０１６９】
（１３）ＭＯＶＴ  Ｒ０
この命令は、図６６及び図７９に示されるように、Ｔビットの値（補正前の余りの符号）をレジスタＲ０に格納する。斯る処理において、算術論理演算器８は、全ビット０の３２ビットのデータにＴビットの値を加算してレジスタＲ０に向けて出力する。
【０１７０】
（１４）ＥＯＲ  Ｒ３，Ｒ０
この命令は、図６７及び図７９に示されるようにレジスタＲ３の内容とレジスタＲ０の内容に対して排他的論理和を採る。この処理において、シフタ４及び符号拡張回路１７は入力をスルーで出力する。算術論理演算回路８は、Ａポート入力とＢポート入力とに対してビット毎に排他的論理和を採ってレジスタＲ０に向けて出力する。
【０１７１】
（１５）ＲＯＴＣＲ  Ｒ０
前記命令ＥＯＲによりレジスタＲ０のＬＳＢは、被除数の符号と余り（補正前）の符号が異なっているときには１にされ、その符号が一致しているときには０にされている。命令ＲＯＴＣＲ  Ｒ０は、図６８及び図７９に示されるように、そのようなレジスタＲ０のＬＳＢをＴビットに格納する処理を行う。この処理において、シフタ４はＭＳＢにＴビットをシフトインしながらレジスタＲ０の値を右シフトし、シフトアウトされたＬＳＢをＴビットに格納する。算術論理演算器８はＡポート入力をスルーで出力する。
【０１７２】
（１６）ＢＦ  Ｌ１
この命令は、Ｔビットの値が０のときにラベルＬ１が付いた命令に分岐することを指示し、Ｔビットの値が１のときにはこのＢＦ命令の次の命令ＤＩＶ０Ｓを実行することを指示する。
【０１７３】
（１７）ＤＩＶ０Ｓ  Ｒ１，Ｒ４
この命令は、これに続けて実行される命令ＲＯＴＣＲ及び命令ＤＩＶ１と共に余りの補正を行う。このとき、レジスタＲ４の上位１６ビットには補正前の余りが格納されており、レジスタＲ１の上位１６ビットには除数が格納されている。両者の符号が異なるときは加算、一致するときには減算を行うことになる。このため当該ＤＩＶ０Ｓ命令では、図６９及び図８０に示されるように、Ｑビットに余り（補正前）の符号、Ｍビットに除数の符号を格納し、後記命令ＤＩＶ１における加減算の判定に供される。ＴビットにはＱビットとＭビットの排他的論理和の結果が格納される。この処理において、シフタ４は入力のＭＳＢをＱビットに出力する。符号拡張回路１７は入力をスルーで出力する。算術論理演算回路８はＢポート入力のＭＳＢ（符号ビット）を出力する。演算回路１０は２入力の排他的論理和を採って出力する。
【０１７４】
（１８）ＲＯＴＣＲ  Ｒ４
後記命令ＤＩＶ１では左シフトしてから加算又は減算を行うため、この左シフトを打ち消すためにレジスタＲ４の値を右ローテートしている。この状態は図７０及び図８０に示される。この処理において、シフタ４はＭＳＢにＴビットをシフトインしながらレジスタＲ４の値を右シフトし、シフトアウトされたＬＳＢをＴビットとして格納する。算術論理演算回路８はＡポート入力をスルーで出力する。
【０１７５】
（１９）ＤＩＶ１  Ｒ１，Ｒ４
この命令ＤＩＶ１は、図７１及び図８０に示されるように、（ｉ），（ｉｉ），（ｉｉｉ），（ｉｖ）の処理に大別される。
【０１７６】
（ｉ）初めに制御ビットレジスタ５のＱビットと制御ビットレジスタ６のＭビットを演算制御回路７に取り込み、２つの入力の排他的論理和の否定を計算する。この結果は算術論理演算回路８に送られ、算術論理演算回路８はその値を演算指令として保持しておく。上記排他的論理和の結果が１の場合（補正前の余りの符号と除数の符号が同じ場合）には減算指令とされ、０の場合（補正前の余りの符号と除数の符号が異なる場合）加算指令とされる。
（ｉｉ）次にレジスタＲ４の値がシフタ４に入力される。シフタ４は、レジスタＲ４の値のＬＳＢにＴビットをシフトインしながらレジスタＲ４の値を１ビット左シフトし、シフトアウトしたＭＳＢをＱビットに格納する。
（ｉｉｉ）次に、ＱビットとレジスタＲ４の値を合せた３３ビットからＭビットとレジスタＲ１の値を合せた３３ビットを、前記（ｉ）で取得した判定結果に従って、加算又減算を行い、その結果をＱビットとレジスタＲ４に格納する。シフタ４の出力とレジスタＲ１の値との加減算は算術論理演算回路８で行う。その結果算術論理演算回路８で生じたキャリーまたはボローを選択回路１２を経て演算回路９に送る。演算回路９はそのキャリー／ボローを入力し、これにしたがってＱビットとＭビットの加減算を行う。
（ｉｖ）演算回路１０は、前記演算回路９で演算された値すなわちＱビットとＭビットとの排他的論理和の否定を計算する。この結果は選択回路１２を介してＴビットに格納される。
【０１７７】
（２０）ＳＲ１６  Ｒ４
この命令は、図７２及び図８１に示されるように、レジスタＲ４の上位１６ビット（余りに相当）をレジスタＲ４の下位１６ビットに右シフトする。シフト処理はシフタ４が行う。
【０１７８】
（２１）ＡＤＤ  Ｒ３，Ｒ４
レジスタＲ３には、前記命令ＭＯＶＴ  Ｒ３によって被除数の符号が格納されている。前記命令（５）ＳＵＢＣ  Ｒ０，Ｒ２によって被除数からその符号（ＭＳＢ）が引かれているので、正しい余りを求めるには、レジスタＲ４に保持されている余りを補正しなければならない場合がある。命令ＡＤＤ  Ｒ３，Ｒ４では、補正前の余りに被除数の符号（Ｒ３）を加えている。この処理は図７３及び図８１に示されており、シフタ４と符号拡張回路１７は夫々入力をスルーで出力する。算術論理演算回路８はＡポート入力にＢポート入力を加算して、その加算結果とキャリーを出力する。加算結果はレジスタＲ４に格納され、当該レジスタＲ４の下位１６ビットに正しい余りが保持される。
【０１７９】
（２２）ＥＸＴＳ．Ｗ  Ｒ４，Ｒ４
この命令は、図７４及び図８１に示されるように、下位１６ビットに正しい余りが格納されているレジスタＲ４の上位側を符号拡張して全３２ビットの最終的な余りを求める。この処理において、符号拡張回路１７は、入力の下位側から第１６ビット目の符号を上位１６ビットに符号拡張する。算術論理演算回路８はＢポート入力をスルーでレジスタＲ４に向けて出力する。
【０１８０】
図５４〜図７４に亘って説明した符号付き除算処理をフローチャートにまとめると、図８２の（Ａ）に示される前処理、除算１、及び後処理に大別され、前記除算１の処理は図８３の（Ａ）に示されるように除算ステップを１６回繰返し実行する。前処理の内容は図８２の（Ｂ）に示され、除算ステップの処理内容は図８３の（Ｂ）に示され、後処理の内容は図８５に示される。後処理の中では商補正，第１の剰余補正手段，第２の剰余補正手段を行う。商補正の処理は図８４の（Ｂ）に示され、第１の剰余補正手段は図８５の（Ａ）に示され、第２の剰余補正手段は図８５の（Ｂ）に示される。各フローチャートの内容については更に説明を要さずともその内容は前記説明から容易に理解されよう。
【０１８１】
図５３の命令記述に従った例では、商と余りは同一のレジスタＲ２に保持したが、双方を別のレジスタに入れるようにしてもよい。例えば商を図示しないレジスタＲ５に入れるなら、図５３の記述において、命令ＥＯＲ  Ｒ０，Ｒ０の次に命令ＭＯＶ  Ｒ０，Ｒ５を挿入し、更に、命令ＤＩＶ１  Ｒ１，Ｒ２の前に命令ＲＯＴＣＬ  Ｒ５を挿入して当該命令ＤＩＶ１  Ｒ１，Ｒ２及び命令ＲＯＴＣＬを１６回繰返すようにする。そして、命令ＥＸＴＳ．Ｗ  Ｒ２，Ｒ２を命令ＥＸＴＳ．Ｗ  Ｒ５，Ｒ５に変更し、次の命令ＲＯＴＣＬ  Ｒ２を命令ＲＯＴＣＬ  Ｒ５に変更し、その次の命令ＡＤＤＣ  Ｒ０，Ｒ２を命令ＡＤＤＣ  Ｒ０，Ｒ５に変更すればよい。
【０１８２】
なお、図８６〜図９１には符号付き除算のための命令記述の他の態様例が示される。これらの態様は共に余りに関する補正処理の記述が省略されている。ＳＬ８  Ｒｎ命令はレジスタＲｎを８ビット左シフトする命令である。この命令実行後のＲｎ下位８ビットの各ビットは０である。ＥＸＴＳ．Ｂ  Ｒｎ，Ｒｍ命令はＲｎの下位８ビットを３２ビットに符号拡張し、Ｒｍに格納する命令である。これらの内容については更に詳細に説明するまでもなくその内容は前記実施例の説明から容易に理解されよう。
【０１８３】
〔２４〕ＤＩＶＳ０／ＤＩＶ０Ｕ／ＤＩＶ１（ステップ除算）命令
【０１８４】
ここで、上記説明で使用したＤＩＶ０Ｓ命令、及びＤＩＶ１命令の動作例と使用例について説明する。以下に示す内容は前記項目〔１７〕の命令一覧における前提条件を共通にする。その項目に含まれるＤＩＶ１命令などとはＣ言語で表記された動作例においてその細部で相違する。
〔書式〕
ＤＩＶ１    Ｒｍ，Ｒｎ
ＤＩＶＯＳ  Ｒｍ，Ｒｎ
ＤＩＶＯＵ
〔説明〕
汎用レジスタＲｎの内容３２ビットをＲｍの内容で１ステップ除算し、結果の１ビットをＴビットに格納する。ＤＩＶＯＳは符号付き除算用の初期化命令で被除数（Ｒｎ）のＭＳＢをＱビットに、除数（Ｒｍ）のＭＳＢをＭビットに、ＭビットとＱビットのＥＯＲをＴビットに格納する。ＤＩＶＯＵは符号無し除算用の初期化命令で、Ｍ／Ｑ／Ｔビットを０にクリアする。ＤＩＶ１を（必要であればＲＯＴＣＬと組み合わせて）除数のビット数分繰り返すことによって、商を得る。この繰り返し中は、指定したレジスタとＭ／Ｑ／Ｔビットに中間結果を格納している。これらを不必要にソフトウエアで書き替えると、演算結果が保証できなくなる。ゼロ除算とオーバーフローの検出、および剰余の演算は用意していない。除算のシーケンスは下記使用例を参考にできる。
0003539914.tif 000072
0003539914.tif 000073
0003539914.tif 000074
0003539914.tif 000075
〔使用例１〕Ｒ１(32bit)÷Ｒ０(16bit)＝Ｒ１(16bit)：符号無し
SL16     R0    ;除数を上位１６ｂｉｔ、下位１６ｂｉｔを０に設定
TEST   R0,R0    ;ゼロ除算チェックを行う。ＴＥＳＴ  Ｒ０，Ｒ０は、Ｒ０とＲ０の論理積が０のときＴビットを１とし、１のときＴビットを０とする命令である。
BT  ZERO_DIV    ;Ｔ＝０のときＺＥＲＯ＿ＤＩＶに分岐する。
CMP/HS  R0,R1    ;オーバーフローチェックを行う。即ち符号無しでＲ０≦Ｒ１のときＴビットを１とする。
BT  OVER_DIV    ;
DIVOU    ;フラグの初期化
.arepeat 16    ;
DIV1      R0,R1  ;１６回繰り返し
.aendr    ;
ROTCL    R1  ;
EXTU.W  R1,R1  ;Ｒ１＝商
〔使用例２〕Ｒ１：Ｒ２(64bit)÷Ｒ０(32bit)＝Ｒ２(32bit)：符号無し
TEST      R0,R0  ;ゼロ除算チェック
BT  ZERO_DIV    ;
CMP/HS  R0,R1  ;オーバーフローチェック
BT  OVER_DIV    ;
DIVOU            ;フラグの初期化
.arepeat 32        ;
ROTCL    R2    ;３２回繰り返し
DIV1      R0,R1  ;
.aendr            ;
ROTCL  R2      ;Ｒ２＝商
〔使用例３〕Ｒ１(16bit)÷Ｒ０(16bit)＝Ｒ１(16bit)：符号付き
SL16     R0     ;除数を上位１６ｂｉｔ、下位１６ｂｉｔを０に設定
EXTS.W   R1,R1  ;被除数は符号拡張して３２ｂｉｔ
EOR      R2,R2  ;Ｒ２＝０
DIVOS    R2,R1  ;
SUBC     R2,R1  ;被除数が負のとき、−１する。
DIVOS    R0,R1  ;フラグの初期化
.arepeat 16     ;
DIV1     R0,R1  ;１６回繰り返し
.aendr          ;
EXTS.W   R1,R1  ;Ｒ１＝商（１の補数表現）
ROTCL    R1     ;
ADDC     R2,R1  ;商の符号ビットＭＳＢが１のとき、＋１して２の補数表現に変換
EXTS.W   R1,R1  ;Ｒ１＝商（２の補数表現）
〔使用例４〕
Ｒ２(32bit)÷Ｒ０(32bit)＝Ｒ２(32bit)：符号付き
EOR      R3,R3  ;
DIVOS    R3,R2  ;
SUBC     R1,R1  ;被除数は符号拡張して６４ｂｉｔ（Ｒ１：Ｒ２）SUBC     R3,R2  ;被除数が負のとき、−１する。
DIVOS    R0,R1  ;フラグの初期化
.arepeat 32     ;
ROTCL    R2     ;３２回繰り返し
DIV1     R0,R1  ;
.aendr          ;
ROTCL    R2     ;Ｒ２＝商（１の補数表現）
ADDC     R3,R2  ;商の符号ビットＭＳＢが１のとき、＋１して２の補数表現に変換
;Ｒ２＝商（２の補数表現）
【０１８５】
以上本発明者によってなされた発明を実施例に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１８６】
例えば、データ語長と固定長命令フォーマットのビット数とは、３２ビットのデータ語長と１６ビット固定長命令フォーマットとに限定されず、夫々２のべき乗のビット数を以て変更することができる。符号付き除算は、３２ビット３オペランドＲＩＳＣ用命令などにも適用できる。符号付き除算のための制御はマイクロプログラム方式のほかに、専用の演算回路を構成してワイヤードロジックで制御してもよい。また、符号付き除算において、上記ＤＩＶ１命令などの専用命令が無い場合には、同様の処理を他の命令によってサブルーチン化して対処することも可能である。
【０１８７】
以上の説明では主として本発明者によってなされた発明をその背景となった利用分野であるプログラムＲＯＭを内蔵するマイクロコンピュータに適用した場合について説明したが本発明はそれに限定されるものではなく、プログラムＲＯＭやその多周辺回路を含まないマイクロコンピュータにも広く適用することができる。また、上記実施例では符号付き除算を非回復法に適用した場合について説明したが、回復法にも適用できることはいうまでもない。
【０１８８】
【発明の効果】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【０１８９】
（１）被除数が負の場合、被除数のＬＳＢの重みを持つ１を該被除数から差引く前処理を行うことにより、従来のように部分剰余が０か否かをその都度判定しなくても符号付のままで除算を行うことができるようになる。これにより、除算を高速に実行することができる。換言すれば、従来において部分剰余が０か否かを短いステップ数で判定するための専用的なハードウェアを設けて除算を高速化したのと同様若しくはそれ以上の効果を、ハードウェア量を増大させることなく実現することができる。
（２）部分剰余が０か否かをその都度判定する従来技術で多倍長（任意長）符号付き除算を行う場合には部分剰余のビット数（８ビット、１６ビット、３２ビット、６４ビットなど）に応じて部分剰余＝０の判定を行う必要があり、そのビット数に比例してソフトウェア量並びにハードウェア量が増大する。この点において、本発明では部分剰余＝０の判定を要しないから、多倍長（任意長）符号付き除算若しくは任意長任意精度符号付き除算においても、ソフトウェア量並びにハードウェア量を増大させることなく容易に対応することができる。
（３）被除数のＭＳＢである符号ビットを引く操作を除算の前処理として採用することにより、被除数が正であるか負であるかを考慮することなく除算プログラムを作成することができ、しかもその様な判定動作を要しないため除算処理が高速化し、その上、被除数が正であるか負であるかにかかわらず同一の回路を利用して除算を行うことができるようになる。
（４）部分剰余に対する除数の引きすぎあるいは足しすぎの判断や商ビット算出を被除数あるいは部分剰余のＭＳＢと除数のＭＳＢのみから行うことができるので、除算のハードウェアが更に簡単になる。また、部分剰余に対する除数の引き過ぎ或は足しすぎの判断や、加減算の判断や、商ビット算出を、被除数あるいは部分剰余のＭＳＢと除数のＭＳＢのみから行うことができるので、この点においても任意長の除算に簡単に応用できる。また、除算ステップにおける加減算の判断、をＭＳＢだけできるので、除算の初期化により同一の除算ステップを符号付きおよび符号無し除算に利用できる。
（５）商と余りをシフトさせながら両者を単一の被除数レジスタに保持していくとき、従来のように部分剰余＝０の判定をするときに判定対象とされる部分剰余の桁位置を毎回変化させてその判定を行わなければならないということに基づいてその処理が繁雑になってしかも処理に時間がかかるといった制約を受けず、且つ、商と余りを別々のレジスタに保持させるならばそのために実行しなければならない転送命令が増えるというような制約も受けず、これによって、符号付き除算処理を更に高速化することが容易になる。
【０１９０】
（６）汎用レジスタ方式を採用するマイクロコンピュータにおいて、命令実行手段に供給される最大のデータ語長よりもビット数の少ない固定長命令フォーマットを採用することにより、従来の３２ビットのような固定長命令フォーマットを持つＲＩＳＣマシンにみられる命令デコード処理の単純化などの利益を享受しつつ、プログラム容量が小さく若しくはプログラムメモリの利用効率が高くしかもシステムコストの小さいマイクロプロセッサを得ることができるという効果がある。
（７）前記固定長命令フォーマット及び前記最大データ語長にそれぞれ２のべき乗のビット数を設定することにより、例えば、最大データ語長が３２ビットのとき命令フォーマットを１６ビットに固定することにより、メモリ上におけるプログラムのミスアライメントの防止、並びに市販されている一般的なメモリなどとの整合性を保ち、且つ、同一ビット構成のＲＯＭ／ＲＡＭ上に命令及びデータどちらでも展開することができるという効果を得る。
（８）前記固定長命令フォーマット及び前記最大データ語長にそれぞれ２のべき乗のビット数を設定するとき、バス幅全体を使って複数命令を同一サイクルでプリフェッチすることにより、最大データ語長に等しいビット数の内部バスを利用して能率的に命令をフェッチすることができると共に命令フェッチのためのバスアクセス回数を減らすことができる。
（９）内部バスがデータ転送と命令フェッチに共用される場合、メモリに対するデータフェッチと命令フェッチが競合したとき、データフェッチを優先し、このデータフェッチに競合する命令フェッチを含む命令実行スケジュールを全体的に遅延させるパイプ制御を行うようにすることにより、データフェッチと命令フェッチが競合したときの処理若しくはそれに起因する後処理を簡単化することができるという効果がある。
（１０）特定のレジスタの値に対してディスプレースメントの値をオフセットとするレジスタ相対でイミディエートデータを指定させる記述を含む命令をサポートすることにより、固定長命令フォーマットのビット数の制限がイミディエートデータの利用に制限を与えないようにすることができるという効果がある。
（１１）命令中にレジスタ指定フィールドがないのにも拘らずオペランドとして固定された特定の汎用レジスタを暗黙的に指定させる命令をサポートすることにより、ビット数が制限された固定長命令フォーマットであっても処理上必要なディスプレースメント若しくはイミディエートデータのビット数を極力多くすることができるという効果がある。
（１２）指定条件に対する演算結果の真偽を所定の状態フラグに反映させる記述を含む命令をサポートすることにより、ビット数が制限された固定長命令フォーマットであっても、処理上必要なディスプレースメント若しくはイミディエートデータのビット数を極力多くすることができるという効果がある。
（１３）これらの効果により、固定長命令フォーマットのビット数がデータ語長より少なくてもイミディエートデータの利用や絶対アドレス指定に制限を及ぼさないこと、限られたビット数の固定長命令フォーマットの中で必要なディスプレースメントなどの記述が可能であること、メモリ上におけるプログラム配置のミスアライメントの防止に寄与すること、並びにサポートする命令の内容という点からコード効率もしくはメモリ利用効率を一層向上させることなど、データ語長よりも少ないビット数の固定長命令フォーマットを採用することに付随する種々の問題点の解決を実現することができる。
（１４）汎用レジスタに含まれるレジスタ競合状態を命令フォーマット中に含まれるレジスタ指定領域の情報に基づいて検出し、この検出結果と命令実行サイクル数に基づいて相対的に後の命令の実行を遅延させるパイプ制御手段とを採用することにより、汎用レジスタ方式を利用してパイプライン的に実行される前後の命令による前記汎用レジスタの利用が競合する状態に簡単に対処することができる。
（１５）１６ビット固定長命令フォーマットのとき、条件分岐命令のディスプレースメントを８ビットに固定し、サブルーチン分岐命令及び無条件分岐命令のディスプレースメントを１２ビットに固定することにより、命令フォーマット長が制限された中で実際の動作に実質的な悪影響を与えることなく分岐命令の種類に応じた適切な分岐先を指定することができる。
【図面の簡単な説明】
【図１】実施例に係るマイクロコンピュータＭＣＵを利用したシステムの一例ブロック図である。
【図２】実施例に係るマイクロコンピュータのブロック図である。
【図３】実施例に係るマイクロコンピュータのパッケージに対するピン配置の概念的な説明図である。
【図４】実施例に係るマイクロコンピュータにおけるバス幅に対するデータ語長と命令語長との一例関係説明図である。
【図５】実施例に係るマイクロコンピュータに含まれる中央処理装置の内部ブロック、特にその命令制御系の一例を示すブロック図である。
【図６】中央処理装置の実行ユニットの半部の構成を示すブロック図である。
【図７】中央処理装置の実行ユニットの残り半分の構成を示すブロック図である。
【図８】中央処理装置によるパイプライン処理のステージの一例説明図である。
【図９】レジスタ競合状態におけるパイプラインシーケンスの一例説明図である。
【図１０】レジスタ競合状態におけるパイプラインシーケンスの別の例を示す説明図である。
【図１１】データフェッチと命令フェッチが競合した場合のパイプ制御シーケンスの一例説明図である。
【図１２】複数サイクル命令を実行するときの一例動作タイミングチャートである。
【図１３】実施例に係るマイクロコンピュータで実行されるデータ転送命令の半分を示す一覧説明図である。
【図１４】実施例に係るマイクロコンピュータで実行されるデータ転送命令の残りの半分を示す一覧説明図である。
【図１５】実施例に係るマイクロコンピュータが実行する論理演算命令の一覧説明図である。
【図１６】実施例に係るマイクロコンピュータが実行する算術演算命令の半分の一覧説明図である。
【図１７】実施例に係るマイクロコンピュータが実行する算術演算命令の残り半分の一覧説明図である。
【図１８】実施例に係るマイクロコンピュータが実行する命令の一覧説明図である。
【図１９】実施例に係るマイクロコンピュータが実行する分岐命令の一覧説明図である。
【図２０】実施例に係るマイクロコンピュータが実行するシステム制御命令の半分の一覧説明図である。
【図２１】実施例に係るマイクロコンピュータが実行するシステム制御命令の残り半分の一覧説明図である。
【図２２】図１３乃至図２１の記載形式の説明図である。
【図２３】図１３乃至図２１に記載のニモニック表示中におけるアドレシングモードの一覧説明図である。
【図２４】ブランチ命令のディスプレースメント長とそのディスプレースメント長を有する命令の出現頻度との関係を示す一例説明図である。
【図２５】ブランチオールウエイズ命令のディスプレースメント長とそのディスプレースメント長を有する命令の出現頻度との関係を示す一例説明図である。
【図２６】サブルーチン呼び出し命令のディスプレースメント長とそのディスプレースメント長を有する命令の出現頻度との関係を示す一例説明図である。
【図２７】ジャンプ命令若しくはジャンプサブルーチン命令のディスプレースメント長とそのディスプレースメント長を有する命令の出現頻度との関係を示す一例説明図である。
【図２８】プログラマーズモデルとしての一例レジスタ構成説明図である。
【図２９】本発明に係る符号付き除算における被除数に対する前処理の原理を示す概念図である。
【図３０】負÷負の場合における符号付き除算処理の原理的な一例説明図である。
【図３１】負÷正の場合における符号付き除算処理の原理的な一例説明図である。
【図３２】正÷正の場合における符号付き除算処理の原理的な一例説明図である。
【図３３】本発明に係る符号付き除算の基本的な約束ごと若しくは基本的な処理手順の全体を一般的形式で示す説明図である。
【図３４】被除数の前補正のやり方について（Ａ）に示し、商の符号予測について（Ｂ）に示した説明図である。
【図３５】負の被除数に対する前補正の一例説明図である。
【図３６】負の被除数に対する１を差し引く前補正後の部分剰余の表現例を示す説明図である。
【図３７】符号付き除算過程における加減算指令の出しかたについての一例を（Ａ）に示し、商ビットの出しかたについての一例を（Ｂ）に示した説明図である。
【図３８】商と剰余に対する補正のしかたについての一例説明図である。
【図３９】−８÷−３の符号付き除算における前補正と除算処理の具体的な処理手順説明図である。
【図４０】図３９の処理に継続される後処理の具体的な処理手順説明図である。
【図４１】−８÷３の符号付き除算における前補正と除算処理の具体的な処理手順説明図である。
【図４２】図４１の処理に継続される後処理の具体的な処理手順説明図である。
【図４３】−９÷−３の符号付き除算における前補正と除算処理の具体的な処理手順説明図である。
【図４４】図４３の処理に継続される後処理の具体的な処理手順説明図である。
【図４５】−９÷３の符号付き除算における前補正と除算処理の具体的な処理手順説明図である。
【図４６】図４５の処理に継続される後処理の具体的な処理手順説明図である。
【図４７】８÷３の符号付き除算における前補正と除算処理の具体的な処理手順説明図である。
【図４８】図４７の処理に継続される後処理の具体的な処理手順説明図である。
【図４９】８÷−３の符号付き除算における前補正と除算処理の具体的な処理手順説明図である。
【図５０】図４９の処理に継続される後処理の具体的な処理手順説明図である。
【図５１】符号付き除算を行うための演算ユニットの一実施例ブロック図である。
【図５２】図５１に示される算術論理演算回路、演算回路、及び演算制御回路の一例論理回路図である。
【図５３】符号付き除算のための命令記述の詳細な一例説明図である。
【図５４】図５３の命令ＥＯＲ  Ｒ０，Ｒ０を実行するときにおける図５１の回路の動作説明図である。
【図５５】図５３の命令ＳＬ１６  Ｒ１を実行するときにおける図５１の回路の動作説明図である。
【図５６】図５３の命令ＤＩＶ０Ｓ  Ｒ０，Ｒ２を実行するときにおける図５１の回路の動作説明図である。
【図５７】図５３の命令ＭＯＶＴ  Ｒ３を実行するときにおける図５１の回路の動作説明図である。
【図５８】図５３の命令ＳＵＢＣ  Ｒ０，Ｒ２を実行するときにおける図５１の回路の動作説明図である。
【図５９】図５３の命令ＤＩＶ０Ｓ  Ｒ１，Ｒ２を実行するときにおける図５１の回路の動作説明図である。
【図６０】図５３の命令ＤＩＶ１  Ｒ１，Ｒ２を実行するときにおける図５１の回路の動作説明図である。
【図６１】図５３の命令ＭＯＶ  Ｒ２，Ｒ４を実行するときにおける図５１の回路の動作説明図である。
【図６２】図５３の命令ＥＸＴＳ．Ｗ  Ｒ２，Ｒ２を実行するときにおける図５１の回路の動作説明図である。
【図６３】図５３の命令ＲＯＴＣＬ  Ｒ２を実行するときにおける図５１の回路の動作説明図である。
【図６４】図５３の命令ＡＤＤＣ  Ｒ０，Ｒ２を実行するときにおける図５１の回路の動作説明図である。
【図６５】図５３の命令ＤＩＶ０Ｓ  Ｒ０，Ｒ４を実行するときにおける図５１の回路の動作説明図である。
【図６６】図５３の命令ＭＯＶＴ  Ｒ０を実行するときにおける図５１の回路の動作説明図である。
【図６７】図５３の命令ＥＯＲ  Ｒ３，Ｒ０を実行するときにおける図５１の回路の動作説明図である。
【図６８】図５３の命令ＲＯＴＣＲ  Ｒ０を実行するときにおける図５１の回路の動作説明図である。
【図６９】図５３の命令ＤＩＶ０Ｓ  Ｒ１，Ｒ４を実行するときにおける図５１の回路の動作説明図である。
【図７０】図５３の命令ＲＯＴＣＲ  Ｒ４を実行するときにおける図５１の回路の動作説明図である。
【図７１】図５３の命令ＤＩＶ１  Ｒ１，Ｒ４を実行するときにおける図５１の回路の動作説明図である。
【図７２】図５３の命令ＳＲ１６  Ｒ４を実行するときにおける図５１の回路の動作説明図である。
【図７３】図５３の命令ＡＤＤ  Ｒ３，Ｒ４を実行するときにおける図５１の回路の動作説明図である。
【図７４】図５３の命令ＥＸＴＳ．Ｗ  Ｒ４，Ｒ４を実行するときにおける図５１の回路の動作説明図である。
【図７５】図５４の動作に対応するレジスタの状態を（Ａ）に示し、図５５の動作に対応するレジスタの状態を（Ｂ）に示し、図５６の動作に対応するレジスタの状態を（Ｃ）に示した説明図である。
【図７６】図５７の動作に対応するレジスタの状態を（Ｄ）に示し、図５８の動作に対応するレジスタの状態を（Ｅ）に示し、図５９の動作に対応するレジスタの状態を（Ｆ）に示した説明図である。
【図７７】図６０の動作に対応するレジスタの状態を（Ｇ）に示し、図６２の動作に対応するレジスタの状態を（Ｈ）に示した説明図である。
【図７８】図６３の動作に対応するレジスタの状態を（Ｉ）に示し、図６４の動作に対応するレジスタの状態を（Ｊ）に示し、図６５の動作に対応するレジスタの状態を（Ｋ）に示した説明図である。
【図７９】図６６の動作に対応するレジスタの状態を（Ｌ）に示し、図６７の動作に対応するレジスタの状態を（Ｍ）に示し、図６８の動作に対応するレジスタの状態を（Ｎ）に示した説明図である。
【図８０】図６９の動作に対応するレジスタの状態を（Ｏ）に示し、図７０の動作に対応するレジスタの状態を（Ｐ）に示し、図７１の動作に対応するレジスタの状態を（Ｑ）に示した説明図である。
【図８１】図７２の動作に対応するレジスタの状態を（Ｒ）に示し、図７３の動作に対応するレジスタの状態を（Ｓ）に示し、図７４の動作に対応するレジスタの状態を（Ｔ）に示した説明図である。
【図８２】図５４〜図７４に亘って説明した符号付き除算処理の全体を（Ａ）に示し、前処理を（Ｂ）に示したフローチャートである。
【図８３】図８２の除算１の処理を（Ａ）に示し、除算ステップの処理を（Ｂ）に示したフローチャートである。
【図８４】図８２の後処理を纏めて（Ａ）に示し、商補正の処理を（Ｂ）に示したフローチャートである。
【図８５】図８４の後処理の詳細である第１の剰余補正手段の処理を（Ａ）に示し、第２の剰余補正手段の処理を（Ｂ）に示したフローチャートである。
【図８６】８ビット÷８ビットの符号付き除算のための命令記述の一例説明図である。
【図８７】６４ビット÷３２ビットの符号付き除算のための命令記述の一例説明図である。
【図８８】３２ビット÷３２ビットの符号付き除算のための命令記述の一例説明図である。
【図８９】１６ビット÷１６ビットの符号付き除算のための命令記述の一例説明図である。
【図９０】１６ビット÷８ビットの符号付き除算のための命令記述一例説明図である。
【図９１】３２ビット÷１６ビットの符号付き除算のための命令記述の一例説明図である。
【図９２】ローテート命令（ＲＯＴＬ／ＲＯＴＲ）による処理の説明図である。
【図９３】キャリービット付きローテート命令（ＲＯＴＣＬ／ＲＯＴＣＲ）による処理の説明図である。
【図９４】算術シフト命令（ＳＨＡＬ／ＳＨＡＲ）による処理の説明図である。
【図９５】論理シフト命令（ＳＨＬＬ／ＳＨＬＲ）による処理の説明図である。
【図９６】マルチビットシフト命令（ＳＬｎ／ＳＲｎ）による処理の説明図である。
【図９７】切り出し命令（ＸＴＲＣＴ）による処理の説明図である。
【符号の説明】
ＭＣＵ  マイクロコンピュータ
ＣＰＵ  中央処理装置
ＩＡＢ２３−０  内部アドレスバス
ＩＤＢ３１−０  内部データバス
ＩＲＨ，ＩＲＬ  命令バッファ
ＭＰＸ  マルチプレクサ
ＩＲ１  インストラクションレジスタ
ＩＲ２  インストラクションレジスタ
ＩＦ＆ＩＲＣ  命令フェッチ／命令レジスタ制御ブロック
ＨＳＣ−ＲＯＭ  高速制御リードオンリメモリ
ＦＯ＆ＰＣＤ  フラグ操作及びパイプ制御デコーダ
ＳＲ  ステータスレジスタ
Ｔ  トゥルービット
ＨＩＲ  ハードウェア・シーケンス・コントロール・インストラクション・レジスタ
ＩＤ  インストラクションデコーダ
ＳＲＤ  ソースレジスタデコーダ
ＤＲＤ  ディスティネーションレジスタデコーダ
ＷＢＲＤ  ライトバックレジスタデコーダ
ＷＢＲ０，ＷＢＲ１  一時ラッチ
ＲＣＣＢ  レジスタコンテントチェックブロック
ＥＸＥＣ  命令実行ユニット
Ｒ０Ｈ，Ｒ０Ｌ〜Ｒ１５Ｈ，Ｒ１５Ｌ  汎用レジスタ
Ｒ０  ワークレジスタ
Ｒ１  除数レジスタ
Ｒ２  被除数レジスタ
Ｒ４  剰余レジスタ
Ｒ３  汎用レジスタ（第４の制御ビット格納手段）
３  Ｔビット（第３の制御ビット格納手段）
４  シフタ
５  Ｑビット（第１の制御ビット格納手段）
６  Ｍビット（第２の制御ビット格納手段）
７  演算制御回路
８  算術論理演算回路
９  演算回路
１０  演算回路
１１  選択回路
１２  選択回路
１３  選択回路
１４  選択回路
１５  選択回路
１６  選択回路
１７  符号拡張回路
【図１】
0003539914.tif 000076
【図２】
0003539914.tif 000077
【図３】
0003539914.tif 000078
【図４】
0003539914.tif 000079
【図５】
0003539914.tif 000080
【図６】
0003539914.tif 000081
【図７】
0003539914.tif 000082
【図８】
0003539914.tif 000083
【図９】
0003539914.tif 000084
【図１０】
0003539914.tif 000085
【図１１】
0003539914.tif 000086
【図１２】
0003539914.tif 000087
【図１３】
0003539914.tif 000088
【図１４】
0003539914.tif 000089
【図１５】
0003539914.tif 000090
【図１６】
0003539914.tif 000091
【図１７】
0003539914.tif 000092
【図１８】
0003539914.tif 000093
【図１９】
0003539914.tif 000094
【図２０】
0003539914.tif 000095
【図２１】
0003539914.tif 000096
【図２２】
0003539914.tif 000097
【図２３】
0003539914.tif 000098
【図２４】
0003539914.tif 000099
【図２５】
0003539914.tif 000100
【図２６】
0003539914.tif 000101
【図２７】
0003539914.tif 000102
【図２８】
0003539914.tif 000103
【図２９】
0003539914.tif 000104
【図３０】
0003539914.tif 000105
【図３１】
0003539914.tif 000106
【図３２】
0003539914.tif 000107
【図３３】
0003539914.tif 000108
【図３４】
0003539914.tif 000109
【図３５】
0003539914.tif 000110
【図３６】
0003539914.tif 000111
【図３７】
0003539914.tif 000112
【図３８】
0003539914.tif 000113
【図３９】
0003539914.tif 000114
【図４０】
0003539914.tif 000115
【図４１】
0003539914.tif 000116
【図４２】
0003539914.tif 000117
【図４３】
0003539914.tif 000118
【図４４】
0003539914.tif 000119
【図４５】
0003539914.tif 000120
【図４６】
0003539914.tif 000121
【図４７】
0003539914.tif 000122
【図４８】
0003539914.tif 000123
【図４９】
0003539914.tif 000124
【図５０】
0003539914.tif 000125
【図５１】
0003539914.tif 000126
【図５２】
0003539914.tif 000127
【図５３】
0003539914.tif 000128
【図５４】
0003539914.tif 000129
【図５５】
0003539914.tif 000130
【図５６】
0003539914.tif 000131
【図５７】
0003539914.tif 000132
【図５８】
0003539914.tif 000133
【図５９】
0003539914.tif 000134
【図６０】
0003539914.tif 000135
【図６１】
0003539914.tif 000136
【図６２】
0003539914.tif 000137
【図６３】
0003539914.tif 000138
【図６４】
0003539914.tif 000139
【図６５】
0003539914.tif 000140
【図６６】
0003539914.tif 000141
【図６７】
0003539914.tif 000142
【図６８】
0003539914.tif 000143
【図６９】
0003539914.tif 000144
【図７０】
0003539914.tif 000145
【図７１】
0003539914.tif 000146
【図７２】
0003539914.tif 000147
【図７３】
0003539914.tif 000148
【図７４】
0003539914.tif 000149
【図７５】
0003539914.tif 000150
【図７６】
0003539914.tif 000151
【図７７】
0003539914.tif 000152
【図７８】
0003539914.tif 000153
【図７９】
0003539914.tif 000154
【図８０】
0003539914.tif 000155
【図８１】
0003539914.tif 000156
【図８２】
0003539914.tif 000157
【図８３】
0003539914.tif 000158
【図８４】
0003539914.tif 000159
【図８５】
0003539914.tif 000160
【図８６】
0003539914.tif 000161
【図８７】
0003539914.tif 000162
【図８８】
0003539914.tif 000163
【図８９】
0003539914.tif 000164
【図９０】
0003539914.tif 000165
【図９１】
0003539914.tif 000166
【図９２】
0003539914.tif 000167
【図９３】
0003539914.tif 000168
【図９４】
0003539914.tif 000169
【図９５】
0003539914.tif 000170
【図９６】
0003539914.tif 000171
【図９７】
0003539914.tif 000172