(57)【特許請求の範囲】
【請求項１】
２の補数表現による第１の値と２の補数表現による第２の値とを受け取り、前記第１の値の絶対値と前記第２の値の絶対値とのどちらが大きいかを表す情報を出力する演算器であって、
前記第１の値の符号が負である場合には前記第１の値を１の補数表現に変換して出力し、符号が正である場合には前記第１の値をそのまま出力する第１の１の補数絶対値演算手段と、
前記第２の値の符号が負である場合には前記第２の値を１の補数表現に変換して出力し、符号が正である場合には前記第２の値をそのまま出力する第２の１の補数絶対値演算手段と、
前記第１の１の補数絶対値演算手段および前記第２の１の補数絶対値演算手段から出力された前記第１の値と前記第２の値とに基づいて、前記第１の値の絶対値と前記第２の値の絶対値とのどちらが大きいかを表す指示情報を出力する指示情報出力手段と、
を備える演算器。
【請求項２】
前記指示情報に基づいて前記第１の値の絶対値と前記第２の値の絶対値とのうちの絶対値が大きい方の値を出力する選択手段を備える請求項１に記載の演算器。
【請求項３】
前記選択手段は、前記第１の値の絶対値と前記第２の値の絶対値とが等しく、前記第１の値の符号と前記第２の値の符号とが異なる場合には、前記第１の値と前記第２の値のうちの符号が正である方の値を選択して出力する請求項２に記載の演算器。
【請求項４】
前記指示情報出力手段は、前記第１の１の補数絶対値演算手段より出力された前記第１の値から前記第２の１の補数絶対値演算手段より出力された前記第２の値を減じて出力する請求項１に記載の演算器。
【請求項５】
前記第２の１の補数絶対値演算手段が、前記第２の値の符号が負である場合には前記第２の値が１の補数表現に変換された値の各ビットを反転させ、符号が正である場合には前記第２の値そのままの値の各ビットを反転させて出力する反転手段を備え、
前記指示情報出力手段は、前記第１の１の補数絶対値演算手段から出力された前記第１の値と前記第２の１の補数絶対値演算手段から出力された前記第２の値との和を求め、この和に更に１を加えて出力する請求項１に記載の演算器。
【請求項６】
前記指示情報出力手段からの出力が０であるか否かを判断するゼロ値判断手段を備え、
前記選択手段は、前記指示情報出力手段からの出力が負であるか、または、前記指示情報出力手段からの出力が０でありかつ前記第２の値の符号が負である場合に前記第２の値を選択して出力し、それ以外の場合に前記第１の値を選択して出力する請求項２または請求項３に記載の演算器。
【請求項７】
２の補数表現による第１の値の絶対値と２の補数表現による第２の値の絶対値とのどちらが大きいかを表す情報を求める演算方法であって、前記第１の値の符号が負である場合には前記第１の値を１の補数表現に変換し、符号が正である場合には前記第１の値をそのままにしておく第１の１の補数絶対値演算処理工程と、
前記第２の値の符号が負である場合には前記第２の値を１の補数表現に変換し、符号が正である場合には前記第２の値をそのままにしておく第２の１の補数絶対値演算処理工程と、
前記第１の１の補数絶対値演算処理工程および前記第２の１の補数絶対値演算処理工程において処理された前記第１の値と前記第２の値とに基づいて、前記第１の値の絶対値と前記第２の値の絶対値とのどちらが大きいかを表す指示情報を求める指示情報処理工程と、
を包含する演算方法。
【請求項８】
前記指示情報に基づいて、前記第１の値と前記第２の値のうちの絶対値が大きい方の値を選択する選択処理工程を包含する請求項７に記載の演算方法。
【請求項９】
前記選択処理工程において、前記第１の値の絶対値と前記第２の値の絶対値とが等しく、前記第１の値の符号と前記第２の値の符号とが異なる場合には、前記第１の値と前記第２の値のうちの符号が正である方の値を絶対値が大きい値として選択する請求項８に記載の演算方法。
【請求項１０】
前記指示情報処理工程において、前記第１の１の補数絶対値演算処理工程で処理された前記第１の値から前記第２の１の補数絶対値演算処理工程で処理された前記第２の値を減じる請求項７に記載の演算方法。
【請求項１１】
前記の２の補数絶対値演算処理工程において、前記第２の値の符号が負である場合には前記第２の値が１の補数表現に変換された値の各ビットを反転させ、符号が正である場合には前記第２の値そのままの値の各ビットを反転させ、
前記指示情報処理工程において、前記第１の１の補数絶対値演算処理工程で処理された前記第１の値と前記第２の１の補数絶対値演算処理工程で処理された前記第２の値との和を求め、この和に更に１を加える請求項７に記載の演算方法。
【請求項１２】
前記指示情報処理工程による処理結果が０であるか否かを判断するゼロ値判断処理工程を含み、
前記選択処理工程において、前記指示情報処理工程の処理結果が負であるか、または、前記指示情報処理工程の処理結果が０でありかつ前記第２の値の符号が負である場合に前記第２の値を絶対値が大きい値として選択し、それ以外の場合に前記第１の値を絶対値が大きい値として選択する請求項８または請求項９に記載の演算方法。
【請求項１３】
実行命令を記憶する実行命令記憶手段と、
実行命令記憶手段から読み出した前記実行命令をデコードした制御信号を出力するデコード手段と、
前記制御信号に基づいて演算を行う演算器と、
を備えたプロセッサであって、
前記演算器は、入力された２の補数表現による第１の値と、入力された２の補数表現による第２の値と、を前記制御信号に基づいて、
前記第１の値の符号もしくは前記第２の値の符号が負である場合には符号が負である値を１の補数表現に変換し、前記第２の値の符号もしくは前記第２の値の符号が正である場合には符号が正である値をそのままにする変換処理を行い、
前記変換処理後の第１の値と前記変換処理後の第２の値との大小を比較して、大小の違いがある場合には大きい方の前記変換処理を行う前の前記第１の値もしくは前記第２の値を出力し、大小の違いがなく前記変換処理を行う前の前記第１の値の符号と前記第２の値の符号とが異なる場合には、前記変換処理を行う前の前記第１の値もしくは前記第２の値のうち符号が正の方の値を出力するプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数のデータ（値）のなかから最大の絶対値をもつデータを求めるために、２つのデータのうち絶対値が大きいものを求める処理を実行する演算器および演算方法およびプロセッサに関する。特に、絶対値の比較演算が大きな負担となるデジタル化された音楽データなどのＡＶデータの圧縮に使用する演算器および演算方法およびプロセッサに関する。
【０００２】
【従来の技術】
現在のＡＶシステムでは信号をデジタル信号として取り扱うことが多い。デジタル信号は、アナログ信号に比べ周囲の雑音に強く、記憶媒体に記憶させたり、信号を伝送させた場合でも、コンパクトディスク（ＣＤ：Ｃｏｍｐａｃｔ  Ｄｉｓｃ）のように極めて良好に信号を再生することができる。この様に優れた特質を持つデジタルデータを記憶媒体に記憶させる場合や信号伝送する場合には、より多くのデータを記憶したり伝送するためにデジタルデータの圧縮がなくてはならない技術となっている。この圧縮技術を標準化するために設立された団体としてＭＰＥＧ（Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）がある。ＭＰＥＧにより規格化された圧縮方式には、動画像の圧縮方式としてＭＰＥＧ−１、ＭＰＥＧ−２などがあり、音声の圧縮方式としてＭＰＥＧ−Ａｕｄｉｏがある。
【０００３】
ＭＰＥＧ−Ａｕｄｉｏでは次のような技術を用いて音声の圧縮を行っている。まず、時間領域にあるオーディオデータを周波数領域の３２個の均等な帯域に変換する。つぎに、各帯域内のデータを、波形と倍率とに分離する。波形は、最大振幅を１．０に近づくように正規化し、サンプルとして符号化される。つまり、波形の正規化とは、波形の相似性を損なうことなく波形信号を表現する個々の値Ａが、−１≦Ａ＜１の範囲に収まるようにする処理である。また、正規化時の倍率もスケール・ファクタとして符号化される。その後、ヒトの聴覚特性を考慮して、ヒトが聴き取ることができる限界の量子化精度で好適なビットを割り当てることにより圧縮が行われる。
【０００４】
また、周波数帯域毎に波形信号の大きさを一定のビット幅を用いて表現する必要があるが、最小のビット幅で無駄なく波形信号の大きさをすべて表現するためにも、波形信号の個々の値の中から絶対値が最大の値を求める必要がある。
【０００５】
今日では、これらの処理はプログラマブルなプロセッサで行われることが多い。絶対値が最大の値を求めるために用いられる従来の一般的なプロセッサの構成を図７のブロック図に示す。このプロセッサは、プロセッサの制御を行う制御部１と、ＡＬＵ６などを有し演算を行うデータバス部２とを備えるものである。
【０００６】
制御部１は、プログラムカウンタ３、実行命令メモリ４、デコーダ５から構成される。実行命令メモリ４には、実行命令がプログラムとして格納されている。プログラムカウンタ３は、次に実行するべき実行命令が記憶されている実行命令メモリ４上のアドレスを示しており、通常はデコードからの制御信号１２によってインクリメントされ、分岐命令等が実行される場合は分岐先のアドレスをセットする。デコーダ５は、実行命令メモリから出力された実行命令とフラグ設定部９の値に基づいて、データバス部２に制御信号１０を出力し、プログラムカウンタ３に制御信号１２を出力する。
【０００７】
データバス部２は、ＡＬＵ６、レジスタファイル７、データメモリ８、フラグ設定部９から構成される。ＡＬＵ６は、制御信号１０に基づいた演算をレジスタファイル７から出力された値に対して行い、その結果をレジスタファイル７に格納する。レジスタファイル７は、複数のレジスタが集まったものであり、制御信号１０によりＡＬＵ６やデータメモリ８に内容を出力するレジスタが指定される。同じく制御信号１０により、ＡＬＵ６、データメモリ８からの出力を書き込むレジスタが指定される。また、レジスタファイル７からアドレス信号１１がデータメモリ８に出力されるが、制御信号１０により指定されたレジスタファイル７内のレジスタの内容がアドレス信号１１として出力する。
【０００８】
レジスタファイル７には、Ａ，Ｂ，Ｃ，Ｄ，Ｐの５つのレジスタがある。データメモリ８は、演算に使用されるデータを保持するためのメモリである。データメモリ８内のアドレスがアドレス信号１１により指定されて、レジスタファイル７からの出力が書き込まれる。また、アドレス信号１１により指定されたデータメモリ８内のアドレスの内容が読み出されてレジスタファイル７に書き込まれる。フラグ設定部９には、ＮフラグレジスタとＺフラグレジスタからそれぞれ構成されるＮフラグとＺフラグがある。Ｎフラグには，ＡＬＵ６から出力された演算結果が負の場合に１がセットされ、それ以外の場合には０をセットする。ＺフラグにはＡＬＵ６から出力された演算結果がゼロの場合に１がセットされ、それ以外の場合には０をセットする。
【０００９】
なお、Ａ，Ｂ，Ｃ，Ｄ，Ｐの５つのレジスタのビット幅、データメモリ８のビット幅、ＡＬＵ６の入出力、演算精度のビット幅はすべて４ビットとする。
【００１０】
このプロセッサは、次のような実行命令を備えている。
【００１１】
「ｍｏｖｅ  ａ，ｂ  ：レジスタｂからレジスタａへのデータ転送」、「ｍｏｖｅｉ  ａ，ｉｍｍ  ：即値ｉｍｍをレジスタａにセット」、「ｃｍｐ  ａ，ｂ：  レジスタａとレジスタｂとのデータ比較。ＡＬＵ６において減算が実行されるが、結果はレジスタに書き込まれない（ａ−ｂ）」、「ｃｍｐｉ  ａ，ｉｍｍ：  レジスタｉと即値ｉｍｍの比較。ＡＬＵ６において減算が実行されるが、結果はレジスタに書き込まれない（ａ−ｉｍｍ）」、「ａｄｄｉ  ａ，ｉｍｍ：  レジスタａの値に即値ｉｍｍを足してレジスタａにセット」、「ａｂｓ  ａ，ｂ：レジスタｂの２の補数の絶対値の値をレジスタａにセット」、「ｊｍｐ  ｌａｂｅｌ  ：無条件にｌａｂｅｌにジャンプ」、「ｊｍｐ（ｂ）  ｌａｂｅｌ  ：ＮフラグとＺフラグが共に０の場合にｌａｂｅｌにジャンプ」、「ｊｍｐ（ｅ）  ｌａｂｅｌ  ：Ｚフラグが１の場合にｌａｂｅｌにジャンプ」。
【００１２】
絶対値が最も大きい値を求める処理を、従来の一般的なプロセッサで行う場合のプログラムを図１３に示す。
【００１３】
この例において、絶対値が最も大きい値を求める対象となるデータは、データメモリ８内の０番地から３番地までのメモリ領域上のアドレスに保持されている。
【００１４】
ステップ（１）において、レジスタＰに０（０番地）をセットする。ステップ（２）において、レジスタＣに絶対値が最小である０をダミーデータとしてセットする。ステップ（３）では、レジスタＰが示すメモリのアドレスの値をレジスタＡにセットする。ステップ（４）では、レジスタＡの値の絶対値演算の結果をレジスタＢにセットする。ステップ（５）では、レジスタＣの値の絶対値演算の結果をレジスタＤにセットする。ステップ（６）では、レジスタＤ，Ｂの値を比較する。ステップ（７）では、ステップ（６）での比較結果が正の場合（フラグＮ＝０，フラグＺ＝０）は、ステップ（９）に進む。それ以外の場合はステップ（８）に進む。ステップ（８）では、レジスタＡの値をレジスタＣにデータ転送する。ステップ（９）ではレジスタＰの値が示すアドレスがデータ群の最終データのアドレスであるか、つまり３番地に等しいか比較する。ステップ（１０）では、ステップ（９）での比較結果が等しい場合（フラグＺ＝１）に、ステップ（１３）に進む。ステップ（１１）はレジスタＰの値を１増加させて次のデータをポイントする。ステップ（１２）では、ステップ（３）に戻る。ステップ（１３）では、処理を終了する。これらの処理によりデータメモリ８内の０番地から３番地に格納されているデータの内で、絶対値が最大であるデータをレジスタＣに求めることができる。
【００１５】
この中で、ステップ（４）〜ステップ（６）が、２つの値の絶対値の差を求める絶対値比較演算であり、ステップ（７）〜ステップ（８）で２つの値のうちでより大きい絶対値を持つ方を求めている。
【００１６】
ここで図１６に示す４つの具体的データから図１３に示すプログラムによって絶対値が最大のデータが求まる様子を示す。
【００１７】
ステップ（１）では、レジスタＰに０をセットする。ステップ（２）では、レジスタＣに０をセットする。
【００１８】
繰返し１回目のステップ（３）では、レジスタＡにアドレス｛０｝内に保持されているデータの値「３」をセットする。ステップ（４）では、レジスタＡの値「３」の絶対値演算の結果「３」がレジスタＢにセットされる。ステップ（５）では、レジスタＣの値「０」の絶対値演算の結果「０」がレジスタＤにセットされる。ステップ（６）では、レジスタＤの値「０」とレジスタＢの値「３」を比較する。比較（減算）結果が「０−３＝−３」で、負なのでフラグＮ＝１、フラグＺ＝０をセットする。ステップ（７）では、フラグＮ＝１，フラグＺ＝０なので、ステップ（８）に進む。ステップ（８）では、レジスタＡの値「３」をレジスタＣにセットする。ステップ（９）ではレジスタＰの値「０」と最終データのアドレス｛３｝を比較する。比較（減算）結果が「０−３＝−３」で、負なので、フラグＮ＝１、フラグＺ＝０をセットする。ステップ（１０）では、フラグＺ＝０なのでステップ（１１）に進む。ステップ（１１）では、レジスタＰの値を１増加した値「１」とする。ステップ（１２）ではステップ（３）に戻る。
【００１９】
繰返し２回目のステップ（３）では、レジスタＡにアドレス｛１｝内に保持されているデータの値「−５」をセットする。ステップ（４）では、レジスタＡの値「−５」の絶対値演算の結果「５」がレジスタＢにセットされる。ステップ（５）では、レジスタＣの値「３」の絶対値演算の結果「３」がレジスタＤにセットされる。ステップ（６）では、レジスタＤの値「３」とレジスタＢの値「５」を比較する。比較（減算）結果が「３−５＝−２」で、負なのでフラグＮ＝１、フラグＺ＝０をセットする。ステップ（７）では、フラグＮ＝１，フラグＺ＝０なので、ステップ（８）に進む。ステップ（８）では、レジスタＡの値「−５」をレジスタＣにセットする。ステップ（９）ではレジスタＰの値「１」と最終データのアドレス｛３｝を比較する。比較（減算）結果が「１−３＝−２」で、負なので、フラグＮ＝１、フラグＺ＝０をセットする。ステップ（１０）では、フラグＺ＝０なのでステップ（１１）に進む。ステップ（１１）では、レジスタＰの値を１増加した値「２」とする。ステップ（１２）ではステップ（３）に戻る。
【００２０】
繰返し３回目のステップ（３）では、レジスタＡにアドレス｛２｝内に保持されているデータの値、「−２」をセットする。ステップ（４）では、レジスタＡの値「−２」の絶対値演算の結果「２」がレジスタＢにセットされる。ステップ（５）では、レジスタＣの値「−５」の絶対値演算の結果「５」がレジスタＤにセットされる。ステップ（６）では、レジスタＤの値「５」とレジスタＢの値「２」を比較する。比較（減算）結果が「５−２＝３」で、正なのでフラグＮ＝０、フラグＺ＝０をセットする。ステップ（７）では、フラグＮ＝０，フラグＺ＝０なので、ステップ（９）に進む。ステップ（９）ではレジスタＰの値「２」と最終データのアドレス｛３｝を比較する。比較（減算）結果が「２−３＝−１」で、負なので、フラグＮ＝１、フラグＺ＝０をセットする。ステップ（１０）では、フラグＺ＝０なのでステップ（１１）に進む。ステップ（１１）では、レジスタＰの値を１増加した値「３」とする。ステップ（１２）ではステップ（３）に戻る。
【００２１】
繰返し４回目のステップ（３）では、レジスタＡにアドレス｛３｝内に保持されているデータの値「６」をセットする。ステップ（４）では、レジスタＡの値「６」の絶対値演算の結果「６」がレジスタＢにセットされる。ステップ（５）では、レジスタＣの値「−５」の絶対値演算の結果「５」がレジスタＤにセットされる。ステップ６では、レジスタＤの値「５」とレジスタＢの値「６」を比較する。比較（減算）結果が「５−６＝−１」で、負なのでフラグＮ＝１、フラグＺ＝０をセットする。ステップ（７）では、フラグＮ＝１，フラグＺ＝０なので、ステップ（８）に進む。ステップ（８）では、レジスタＡの値「６」をレジスタＣにセットする。ステップ（９）ではレジスタＰの値「４」と最終データのアドレス｛３｝を比較する。比較（減算）結果が「３−３＝０」なので、フラグＮ＝０、フラグＺ＝１をセットする。ステップ（１０）では、フラグＺ＝１なのでステップ（１３）に進む。ステップ（１３）で処理を終了する。
【００２２】
以上の処理を行うことにより、レジスタＣに絶対値が最大である値「６」を求めることができる。
【００２３】
しかし、このように多くの計算を必要とする処理のために、従来のプロセッサにおいても専用の演算器を用いて高速化を図ってきた。
【００２４】
図８は、専用の演算器を備えた従来のプロセッサである。図８の従来のプロセッサも図７のプロセッサと同じく制御部１とデータバス部２とを備えている。制御部１は図７のプロセッサのものと同じ働きをする。データバス部２では、図７のプロセッサのデータバス部２に加えて専用の演算器である２の補数絶対値減算器１４を備えている。２の補数絶対値減算器１４は、制御信号１０により２の補数絶対値減算処理を、レジスタファイル７から出力された値に対して行う。
【００２５】
ＡＬＵ６，レジスタファイル７、データメモリ８も図７のプロセッサと同じ働きをする。フラグ設定部９は図７のプロセッサと同じ働きに加え、２の補数絶対値減算器１４の出力の結果をも反映させたフラグ設定を行う。
【００２６】
２の補数絶対値減算器１４を図９に示す。２の補数絶対値減算器１４は、第１の２の補数絶対値演算器５０と第２の２の補数絶対値演算器５１と減算器２２を備える。第１の２補数絶対値演算器５０は、反転器５２と＋１加算器５３とセレクタ５４とを備える。反転器５２は入力されたデータ（入力Ａ（６９））のビットを全て反転する。＋１加算器５３は反転器５２から出力された値に１を加算し、入力Ａ（６９）に２の補数化を行う手順操作を施し、つまり、ビットを反転して１を加算することにより符号を反転させた符号反転後の値６０を出力する。セレクタ５４は、入力Ａ（６９）の符号が負の場合は符号反転後の値６０を選択し、それ以外の場合は入力Ａ（６９）を選択して出力する。これにより、入力Ａ（６９）が負の値の場合は、絶対値の等しい正の値が、入力Ａ（６９）が正の場合は入力Ａ（６９）がそのまま第１の２補数絶対値演算器５０（セレクタ５４）から出力（６２）される。以上の処理を絶対値演算処理と呼ぶ。
【００２７】
第２の２の補数絶対値演算器５１も、第１の２の補数絶対値演算器５０と同じく反転器５５と＋１加算器５６とセレクタ５７を備える。反転器５５は入力されたデータ（入力Ｂ（７０））のビットを全て反転する。＋１加算器５６は反転器５５から出力された値に１を加算し、入力Ｂ（７０）に２の補数化を行う操作を施した符号反転後の値６１を出力する。セレクタ５７では、入力Ｂ（７０）の符号が負の場合は符号反転後の値６１を選択し、それ以外の場合は入力Ｂ（７０）を選択して出力される。これにより、入力Ｂ（７０）の符号が負の値の場合は、絶対値の等しい正の値が、入力Ｂ（７０）の符号が正の場合は入力Ｂ（７０）がそのまま第２の２補数絶対値演算器５１（セレクタ５７）から出力（６３）される。
【００２８】
減算器２２では、絶対値演算処理後の値６２から、絶対値演算処理後の値６３を減じて絶対値比較演算の結果６５が出力される。
【００２９】
図８のプロセッサも図７のプロセッサと同じく、Ａ，Ｂ，Ｃ，Ｄ，Ｐの５つのレジスタのビット幅、データメモリ８のビット幅、ＡＬＵ６の入出力のビット幅はすべて４ビットである。また、２の補数絶対値減算器１４の入出力、演算精度のビット幅も４ビットである。
【００３０】
図８のプロセッサは、図７のプロセッサと同じ実行命令に加え、２の補数絶対値減算器１４で実行される以下の実行命令を備える。
【００３１】
「ａｂｃｍｐ  ａ，ｂ  ：レジスタａとレジスタｂとの絶対値の比較。結果はレジスタに書き込まれない。（｜ａ｜−｜ｂ｜）」
従来の一般的なプロセッサでの例と同じく、２の補数絶対値減算器１４を備えたプロセッサで、図１６に示す４つのデータから絶対値が最大のデータを求める手順を、２の補数絶対値減算器１４を用いる「ａｂｃｍｐ」命令を中心に説明する。
【００３２】
２の補数絶対値減算器１４を備えた従来のプロセッサでの絶対値が最大の値を求める処理のプログラムを図１４に示す。ステップ（１）からステップ（３）、ステップ（７）からステップ（１３）までは従来の一般的なプロセッサの場合と同じである。ステップ（１４）は、「ａｂｃｍｐ」命令を使ってレジスタＣの値とレジスタＡの値の絶対値を比較するステップである。ステップ（１４）では、従来の一般的なプロセッサで行う場合のステップ（４）からステップ（７）までの処理と同じ処理を行う。２の補数絶対値減算器１４の入力Ａ（６９）にはレジスタＣの値、入力Ｂ（７０）にはレジスタＡの値が入力される。
【００３３】
なお、データメモリ８に格納されているデータはＭＳＢ（４ビットのうちの最上位のビット位置）に符号ビットがある２の補数表現によるものとする。数値の符号はＭＳＢの値が１の場合は負、０の場合は正である。また、数表記として２進数で表す場合はビット列の前に「０ｂ」を付けるものとする。
【００３４】
入力Ａ，Ｂは４ビットなので表現が可能な値の範囲は−８〜７（０ｂ１０００〜０ｂ０１１１）である。
【００３５】
ステップ（１）、（２）での動作は、従来の一般的なプロセッサの場合と同じである。
【００３６】
繰返し１回目のステップ（３）での動作は、従来の一般的なプロセッサの場合と同じである。
【００３７】
ステップ（１４）では、２の補数絶対値減算器１４を使った演算が行われる。この時の各数値の状態を図１７を用いて説明する。
【００３８】
レジスタＣの値「０（０ｂ００００）」は入力Ａ（６９）に、レジスタＡの値「３（０ｂ００１１）」は入力Ｂ（７０）にそれぞれ入力される。
【００３９】
第１の２の補数絶対値演算器５０には、入力Ａ（６９）の値「０（０ｂ００００）」が入力される。反転器５２でビット反転されて、＋１加算器５３で１加算されるので、符号反転後の値６０は「０（０ｂ００００）」となる。セレクタ５４では、入力Ａ（６９）の値「０（０ｂ００００）」の符号を判断して、入力Ａ（６９）を選択して絶対値演算処理後の値６２として「０（０ｂ００００）」を出力する。
【００４０】
第２の２の補数絶対値演算器５１には、入力Ｂ（７０）の値「３（０ｂ００１１）」が入力される。反転器５５でビット反転されて、＋１加算器５６で１加算されるので、符号反転後の値６１は「−３（０ｂ１１０１）」となる。セレクタ５７では、入力Ｂ（７０）の値「３（０ｂ００１１）」の符号を判断して、入力Ｂ（７０）を選択して絶対値演算処理後の値６３として「３（０ｂ００１１）」を出力する。
【００４１】
減算器２２では、絶対値演算処理後の値６２から絶対値演算処理後の値６３を減算するので、絶対値比較演算の結果６５として「−３（０ｂ１１０１）」を出力する。
【００４２】
フラグ設定部９では入力された値「−３（０ｂ１１０１）」を判断して、Ｎフラグレジスタ＝１、Ｚフラグレジスタ＝０をセットする。
【００４３】
ステップ（９）〜（１１）での動作は、従来の一般的なプロセッサの場合と同じである。
【００４４】
繰返し２回目のステップ（３）は、従来の一般的なプロセッサの場合と同じである。
【００４５】
ステップ（１４）では、２の補数絶対値減算器１４を使った演算が行われる。この時の各数値の状態を図１８を用いて説明する。
【００４６】
レジスタＣの値「３（０ｂ００１１）」は入力Ａ（６９）に、レジスタＡの値「−５（０ｂ１０１１）」は入力Ｂ（７０）にそれぞれ入力される。
【００４７】
第１の２の補数絶対値演算器５０には、入力Ａ（６９）の値「３（０ｂ００１１）」が入力される。反転器５２でビット反転されて、＋１加算器５３で１加算されるので、符号反転後の値６０は「−３（０ｂ１１０１）」となる。セレクタ５４では、入力Ａ（６９）の値「３（０ｂ００１１）」の符号を判断して、入力Ａ（６９）を選択して絶対値演算処理後の値６２として「３（０ｂ００１１）」を出力する。
【００４８】
第２の２の補数絶対値演算器５１には、入力Ｂ（７０）の値「−５（０ｂ１０１１）」が入力される。反転器５５でビット反転されて、＋１加算器５６で１加算されるので、符号反転後の値６１は「５（０ｂ０１０１）」となる。セレクタ５７では、入力Ｂ（７０）の値「−５（０ｂ１０１１）」の符号を判断して、符号反転後の値６１を選択されて絶対値演算処理後の値６３として「５（０ｂ０１０１）」を出力する。
【００４９】
減算器２２では、絶対値演算処理後の値６２から絶対値演算処理後の値６３を減算するので、絶対値比較演算の結果６５として「−２（０ｂ１１１０）」を出力する。
【００５０】
フラグ設定部９では入力された値「−２（０ｂ１１１０）」を判断して、Ｎフラグレジスタ＝１、Ｚフラグレジスタ＝０をセットする。
【００５１】
ステップ（７）〜（１２）での動作は、従来の一般的なプロセッサの場合と同じである。
【００５２】
繰返し３回目のステップ（３）は、従来の一般的なプロセッサの場合と同じである。
【００５３】
ステップ（１４）では、２の補数絶対値減算器１４を使った演算が行われる。この時の各数値の状態を図１９を用いて説明する。
【００５４】
レジスタＣの値「−５（０ｂ１０１１）」は入力Ａ（６９）に、レジスタＡの値「−２（０ｂ１１１０）」は入力Ｂ（７０）にそれぞれ入力される。
【００５５】
第１の２の補数絶対値演算器５０には、入力Ａ（６９）の値「−５（０ｂ１０１１）」が入力される。反転器５２でビット反転されて、＋１加算器５３で１加算されるので、符号反転後の値６０は「５（０ｂ０１０１）」となる。セレクタ５４では、入力Ａ（６９）の値「−５（０ｂ１０１１）」の符号を判断して、符号反転後の値６０を選択して絶対値演算処理後の値６２として「５（０ｂ０１０１）」を出力する。
【００５６】
第２の２の補数絶対値演算器５１には、入力Ｂ（７０）の値「−２（０ｂ１１１０）」が入力される。反転器５５でビット反転されて、＋１加算器５６で１加算されるので、符号反転後の値６１は「２（０ｂ００１０）」となる。セレクタ５７では、入力Ｂ（７０）の値「−２（０ｂ１１１０）」の符号を判断して、符号反転後の値６１を選択して絶対値演算処理後の値６３として「２（０ｂ００１０）」を出力する。
【００５７】
減算器２２では、絶対値演算処理後の値６２から絶対値演算処理後の値６３を減算するので、絶対値比較演算の結果６５として「３（０ｂ００１１）」を出力する。
【００５８】
フラグ設定部９では入力された値「３（０ｂ００１１）」を判断して、Ｎフラグレジスタ＝０、Ｚフラグレジスタ＝０をセットする。
【００５９】
ステップ（７）〜（１２）での動作は、従来の一般的なプロセッサの場合と同じである。
【００６０】
繰返し４回目のステップ（３）は、従来の一般的なプロセッサの場合と同じである。
【００６１】
ステップ（１４）では、２の補数絶対値減算器１４を使った演算が行われる。この時の各数値の状態を図２０を用いて説明する。
【００６２】
レジスタＣの値「−５（０ｂ１０１１）」は入力Ａ（６９）に、レジスタＡの値「６（０ｂ０１１０）」は入力Ｂ（７０）にそれぞれ入力される。
【００６３】
第１の２の補数絶対値演算器５０には、入力Ａ（６９）の値「−５（０ｂ１０１１）」が入力される。反転器５２でビット反転されて、＋１加算器５３で１加算されるので、符号反転後の値６０は「５（０ｂ０１０１）」となる。セレクタ５４では、入力Ａ（６９）の値「−５（０ｂ１０１１）」の符号を判断して、符号反転後の値６０を選択して絶対値演算処理後の値６２として「５（０ｂ０１０１）」を出力する。
【００６４】
第２の２の補数絶対値演算器５１には、入力Ｂ（７０）の値「６（０ｂ０１１０）」が入力される。反転器５５でビット反転されて、＋１加算器５６で１加算されるので、符号反転後の値６１は「−６（０ｂ１０１０）」となる。セレクタ５７では、入力Ｂ（７０）の値「６（０ｂ０１１０）」の符号を判断して、入力Ｂ（７０）を選択して絶対値演算処理後の値６３として「６（０ｂ０１１０）」を出力する。
【００６５】
減算器２２では、絶対値演算処理後の値６２から絶対値演算処理後の値６３を減算するので、絶対値比較演算の結果６５として「−１（０ｂ１１１１）」を出力する。
【００６６】
フラグ設定部９では入力された値「−１（０ｂ１１１１）」を判断して、Ｎフラグレジスタ＝１、Ｚフラグレジスタ＝０をセットする。
【００６７】
ステップ（７）〜（１２）での動作は、従来の一般的なプロセッサの場合と同じである。
【００６８】
以上の処理を行うことにより、レジスタＣに絶対値が最大である値「６」を求めることができる。
【００６９】
従来のプロセッサでは、このように、２の補数絶対値減算器を用いて、演算処理の高速化を行っている。
【００７０】
【発明が解決しようとする課題】
しかし、従来のプロセッサで使用されている２の補数絶対値減算器では、所定のビット幅で表現が可能な最も絶対値が大きい負の値（−８から７までの値が表現が可能な４ビットでは「−８」）が入力されると、不具合を生じる場合がある。この例として、レジスタＡに「０（０ｂ００００）」、レジスタＣに「−８（０ｂ１０００）」がそれぞれセットされている場合に、「ａｂｃｍｐ  Ｃ，Ａ」ステップ（１４）が実行される動作を図２１を用いて説明する。
【００７１】
レジスタＣの値「−８（０ｂ１０００）」は入力Ａ（６９）に、レジスタＡの値「０（０ｂ００００）」は入力Ｂ（７０）にそれぞれ入力される。
【００７２】
入力Ａ（６９）に「−８（０ｂ１０００）」が入力されると、反転器５２により全てのビットが反転され「（０ｂ０１１１）」が反転器５２から出力される。この値に＋１加算器５３で１が加算されると、オーバーフローを起こす。このために、＋１加算器５３からは、符号反転後の値６０として「−８（０ｂ１０００）」を出力する。つまり、「−８（０ｂ１０００）」の符号を反転させて正の値（絶対値）が求まるべきであるが、オーバーフローのために負の符号のままとなっている。セレクタ５４では、入力Ａ（６９）の値「−８（０ｂ１０００）」の符号を判断して、符号反転後の（符号が正であるべき）値６０を選択するが、「−８（０ｂ１０００）」が絶対値演算の結果６２として出力する。
【００７３】
入力Ｂ（７０）に「０（０ｂ００００）」が入力される。反転器５５でビット反転されて、＋１加算器５６で１加算されるので、符号反転後の値６１は「０（０ｂ００００）」となる。セレクタ５７では、入力Ｂ（７０）の値「０（０ｂ００００）」の符号を判断して、入力Ｂ（７０）を選択して絶対値演算処理後の値６３として「０（０ｂ００００）」を出力する。
【００７４】
２の補数絶対値減算器１４では、絶対値演算処理後の値６２から絶対値演算処理後の値６３を減算するので、絶対値比較演算の結果６５として「−８（０ｂ１０００）」を出力する。つまり、｜−８｜−｜０｜の結果が負となる。
【００７５】
フラグ設定部９では入力された値「−８（０ｂ１０００）」を判断して、Ｎフラグレジスタ＝１、Ｚフラグレジスタ＝０をセットする。
【００７６】
ステップ（７）では、Ｎフラグレジスタ＝１，Ｚフラグレジスタ＝０なので、ステップ（８）に進み、ステップ（８）では、レジスタＡの値「０（０ｂ００００）」がレジスタＣにセットされる。
【００７７】
「−８（０ｂ１０００）」と「０（０ｂ００００）」では、「−８（０ｂ１０００）」の方が絶対値がはるかに大きく、本来ならばレジスタＣに「−８（０ｂ１０００）」がセットされなければならないが、従来のプロセッサではオーバーフローの発生のために間違った値が求まってしまう。
【００７８】
このため、２の補数絶対値減算器１４の入力に、ビット表現が可能な範囲で絶対値が最大である負の値が入力されないようにする必要がある。この制限をハードウェアで行う場合は、新たな回路を追加しなければならないので回路の増加、引いては回路基板の面積の拡大を招く。また、上記の制限をソフトウェアで行う場合は、ステップ数が増加するため演算処理が遅くなる。
【００７９】
さらに、２の補数絶対値減算器１４を備えた従来のプロセッサでは、絶対値が同じ値があった場合、符号の正負に関わらず先に出現した値が、絶対値が最大の値としてレジスタＣに残る。このため、データ群から絶対値が最大の数値を求める処理を行った結果、符号が負の値（例えば−４）が求まった場合に、求まった値と絶対値が同じで符号が正の値（例えば４）がデータ群のなかに存在したか否かは不明である。
【００８０】
ここで、２の補数で表現された複数のデータ（数値）を、一定のビット幅で表現される値に対応させる場合を考える。このとき、複数のデータを最小のビット幅で無駄なく表現したい。そのためには、絶対値が最大となるデータＡをデータ群から求め、−Ａ〜Ａの範囲にある０を含む２Ａ＋１個の値を表現するために最低限必要なビット幅を用意すればよい。
【００８１】
従来のプロセッサで、絶対値が最大であるデータを求める処理を行った結果、レジスタＣに「−４（０ｂ１１００）」が絶対値が最大のデータとして求まったとする。しかし、従来のプロセッサでは、調べたデータ群の中に「４（０ｂ０１００）」が存在したか否かは不明である。このため、表現する必要があるデータ範囲を、「−４」から「４」の範囲と考えなければならない。この場合「−４」から「４」を表現するためには０を含む９個の値が必要であり、必要なビット幅は４ビット（００００〜１０００）となる。しかし、ここで仮に、絶対値が最大の値は「−４」であるが、データ群のなかに絶対値が同じ「４」は存在しないことが明確であれば、表現する必要があるデータ範囲を、「−４」から「３」とすることができる。この場合には、「−４」から「３」を表現するためには８個の値が必要であり、必要なビット幅は３ビット（０００〜１１１）となる。このように、従来のプロセッサでは上記の処理を行った場合は、必要以上に無駄なビットを割り当ててしまう場合があった。
【００８２】
また、従来の２の補数絶対値減算器１４では、＋１加算器が２つあるので＋１加算に要する演算時間のために２の補数絶対値減算器１４全体としての演算時間が長くなっている。さらに、＋１加算器の２つ分のスペースのために、２の補数絶対値減算器１４の大きさも大きくなっている。
【００８３】
本発明は、このような実情に鑑みてなされたものであり、従来の技術では正しく扱うことができなかった所定のビット幅で表現が可能な範囲において絶対値が最大の負の値を正しく扱うことができ、複数のデータを一定のビット幅で表す値に対応させる場合に、より無駄のないビット幅を決定することができる演算方法および演算器およびプロセッサを提供することを目的とする。
【００８４】
【課題を解決するための手段】
本発明の演算器は、２の補数表現による第１の値と２の補数表現による第２の値とを受け取り、前記第１の値の絶対値と前記第２の値の絶対値とのどちらが大きいかを表す情報を出力する演算器であって、前記第１の値の符号が負である場合には前記第１の値を１の補数表現に変換して出力し、符号が正である場合には前記第１の値をそのまま出力する第１の１の補数絶対値演算手段と、前記第２の値の符号が負である場合には前記第２の値を１の補数表現に変換して出力し、符号が正である場合には前記第２の値をそのまま出力する第２の１の補数絶対値演算手段と、前記第１の１の補数絶対値演算手段および前記第２の１の補数絶対値演算手段から出力された前記第１の値と前記第２の値とに基づいて、前記第１の値の絶対値と前記第２の値の絶対値とのどちらが大きいかを表す指示情報を出力する指示情報出力手段とを備ており、このことにより上述の目的が達成される。
【００８５】
前記指示情報に基づいて前記第１の値の絶対値と前記第２の値の絶対値とのうちの絶対値が大きい方の値を出力する選択手段を備えてもよい。
【００８６】
前記選択手段は、前記第１の値の絶対値と前記第２の値の絶対値とが等しく、前記第１の値の符号と前記第２の値の符号とが異なる場合には、前記第１の値と前記第２の値のうちの符号が正である方の値を選択して出力してもよい。
【００８７】
前記指示情報出力手段は、前記第１の１の補数絶対値演算手段より出力された前記第１の値から前記第２の１の補数絶対値演算手段より出力された前記第２の値を減じて出力してもよい。
【００８８】
前記第２の１の補数絶対値演算手段が、前記第２の値の符号が負である場合には前記第２の値が１の補数表現に変換された値の各ビットを反転させ、符号が正である場合には前記第２の値そのままの値の各ビットを反転させて出力する反転手段を備え、前記指示情報出力手段は、前記第１の１の補数絶対値演算手段から出力された前記第１の値と前記第２の１の補数絶対値演算手段から出力された前記第２の値との和を求め、この和に更に１を加えて出力してもよい。
【００８９】
前記指示情報出力手段からの出力が０であるか否かを判断するゼロ値判断手段を備え、前記選択手段は、前記指示情報出力手段からの出力が負であるか、または、前記指示情報出力手段からの出力が０でありかつ前記第２の値の符号が負である場合に前記第２の値を選択して出力し、それ以外の場合に前記第１の値を選択して出力してもよい。
【００９０】
本発明の演算方法は、２の補数表現による第１の値の絶対値と２の補数表現による第２の値の絶対値とのどちらが大きいかを表す情報を求める演算方法であって、前記第１の値の符号が負である場合には前記第１の値を１の補数表現に変換し、符号が正である場合には前記第１の値をそのままにしておく第１の１の補数絶対値演算処理工程と、前記第２の値の符号が負である場合には前記第２の値を１の補数表現に変換し、符号が正である場合には前記第２の値をそのままにしておく第２の１の補数絶対値演算処理工程と、前記第１の１の補数絶対値演算処理工程および前記第２の１の補数絶対値演算処理工程において処理された前記第１の値と前記第２の値とに基づいて、前記第１の値の絶対値と前記第２の値の絶対値とのどちらが大きいかを表す指示情報を求める指示情報処理工程とを包含しており、これにより上述の目的が達成される。
【００９１】
前記指示情報に基づいて、前記第１の値と前記第２の値のうちの絶対値が大きい方の値を選択する選択処理工程を包含してもよい。
【００９２】
前記選択処理工程において、前記第１の値の絶対値と前記第２の値の絶対値とが等しく、前記第１の値の符号と前記第２の値の符号とが異なる場合には、前記第１の値と前記第２の値のうちの符号が正である方の値を絶対値が大きい値として選択してもよい。
【００９３】
前記指示情報処理工程において、前記第１の１の補数絶対値演算処理工程で処理された前記第１の値から前記第２の１の補数絶対値演算処理工程で処理された前記第２の値を減じてもよい。
【００９４】
前記の２の補数絶対値演算処理工程において、前記第２の値の符号が負である場合には前記第２の値が１の補数表現に変換された値の各ビットを反転させ、符号が正である場合には前記第２の値そのままの値の各ビットを反転させ、前記指示情報処理工程において、前記第１の１の補数絶対値演算処理工程で処理された前記第１の値と前記第２の１の補数絶対値演算処理工程で処理された前記第２の値との和を求め、この和に更に１を加えてもよい。
【００９５】
前記指示情報処理工程による処理結果が０であるか否かを判断するゼロ値判断処理工程を含み、前記選択処理工程において、前記指示情報処理工程の処理結果が負であるか、または、前記指示情報処理工程の処理結果が０でありかつ前記第２の値の符号が負である場合に前記第２の値を絶対値が大きい値として選択し、それ以外の場合に前記第１の値を絶対値が大きい値として選択してもよい。
【００９６】
本発明のプロセッサは、実行命令を記憶する実行命令記憶手段と、実行命令記憶手段から読み出した前記実行命令をデコードした制御信号を出力するデコード手段と、前記制御信号に基づいて演算を行う演算器と、を備えるプロセッサであって、前記演算装器は、入力された２の補数表現による第１の値と、入力された２の補数表現による第２の値と、を前記制御信号に基づいて、前記第１の値の符号もしくは前記第２の値の符号が負である場合には符号が負である値を１の補数表現に変換し、前記第２の値の符号もしくは前記第２の値の符号が正である場合には符号が正である値をそのままにする変換処理を行い、前記変換処理後の第１の値と前記変換処理後の第２の値との大小を比較して、大小の違いがある場合には大きい方の前記変換処理を行う前の前記第１の値もしくは前記第２の値を出力し、大小の違いがなく前記変換処理を行う前の前記第１の値と前記第２の値の符号が異なる場合には、前記変換処理を行う前の前記第１の値もしくは前記第２の値のうち符号が正の方の値を出力し、これにより上述の目的が達成される。
【００９７】
【発明の実施の形態】
以下、本発明の好ましい実施形態を図面を用いて説明する。なお、実施の形態の説明における数表記として、２進数で表す場合はビット列の前に「０ｂ」を付けるものとし、そのビット列が値を示す場合には、「０ｂ］の前にその値を示すものとする。また、値の符号はＭＳＢの値（最上位のビット）が１の場合は負であり、０の場合は正である。例えば、１０進数での「５」を４ビットの２の補数の２進数表記で表すと「５（０ｂ０１０１）」であり、１の補数の２進数表記で表しても「５（０ｂ０１０１）」である。また、１０進数での「−５」を４ビットの２の補数の２進数表記で表すと「−５（０ｂ１０１１）」であり、１の補数の２進数表記で表すと「−５（０ｂ１０１０）」である。
【００９８】
（第１の実施の形態）
第１の実施の形態は、本発明に関わる演算器および演算方法およびプロセッサにおける技術をプロセッサに適用したものである。図１に示すように、プロセッサは、プロセッサの制御を行う制御部１と演算を行うデータバス部２とを備えるものである。
【００９９】
制御部１は、プログラムカウンタ３、実行命令メモリ４、デコーダ５により構成される。プログラムカウンタ３、実行命令メモリ４、デコーダ５は、図８に示す従来のプロセッサと同じ構成なので説明を省略する。
【０１００】
データバス部２は、ＡＬＵ６、演算器としての１の補数絶対値減算器１３、レジスタファイル７、データメモリ８、フラグ設定部９により、構成される。ＡＬＵ６、レジスタファイル７、データメモリ８は、図８に示した従来のプロセッサと同じ構成なので、説明を省略する。フラグ設定部９は、図８に示した従来のプロセッサと同じくＮフラグレジスタとＺフラグレジスタを備え、フラグ設定の条件にはＡＬＵ６の演算結果と共に１の補数絶対値減算器１３からの出力の結果も反映される。
【０１０１】
１の補数絶対値減算器１３は、制御信号１０により指定されるレジスタファイル７内の２つのレジスタのそれぞれが保持する２つの値について１の補数表現を用いた絶対値の比較演算を行い、その比較結果を２つの値の絶対値のうちのどちらが大きいかを表す指示情報として出力する。
【０１０２】
図２に示す１の補数絶対値減算器１３は、本発明に係る演算器である。図２に示すように、１の補数絶対値減算器１３は、第１の１の補数絶対値演算手段としての第１の１の補数絶対値演算器２０と、第２の１の補数絶対値演算手段としての第２の１の補数絶対値演算器２１と、指示情報出力手段としての減算器２２を備える。
【０１０３】
第１の１の補数絶対値演算器２０は、入力Ａ（６９）に対して１の補数表現化の手順操作を用いた絶対値演算処理を行い絶対値演算処理後の値６２を出力する。第２の１の補数絶対値演算器２１は、入力Ｂ（７０）に対して１の補数表現化の手順操作を用いた絶対値演算処理を行い絶対値演算処理後の値６３を出力する。つまり、第１の１の補数絶対値演算器２０および第２の１の補数絶対値演算器２１は、入力された値の符号が負の場合に、従来の２の補数表現化の手順操作に換えて１の補数表現化の手順操作により、入力された値の符号を反転させて出力する。減算器２２は、絶対値演算処理後の値６２から絶対値演算処理後の値６３を減算し、絶対値比較演算の結果（指示情報）６５を出力する。
【０１０４】
第１の１の補数絶対値演算器２０は、反転器２３とセレクタ２４を備える。反転器２３は、入力されたビットを全て反転（１の補数表現化手順操作）して符号反転後の値６０を出力する。セレクタ２４は、入力Ａ（６９）の符号が負の場合は符号反転後の値６０を選択し、それ以外の場合は入力Ａ（６９）を選択して、絶対値演算処理後の値６２として出力する。
【０１０５】
第２の１の補数絶対値演算器２１は、反転器２５とセレクタ２６を備える。反転器２５は、入力されたビットを全て反転（１の補数表現化手順操作）して符号反転後の値６０を出力する。セレクタ２６では、入力Ｂ（７０）の符号が負の場合は符号反転後の値６１を選択し、それ以外の場合は入力Ｂ（７０）を選択して、絶対値演算処理後の値６３として出力する。
【０１０６】
図１のプロセッサも図８のプロセッサと同じく、Ａ，Ｂ，Ｃ，Ｄ，Ｐの５つのレジスタのビット幅、データメモリ８のビット幅、ＡＬＵ６の入出力のビット幅はすべて４ビットとする。また、１の補数絶対値減算器１３の入出力、演算精度のビット幅も４ビットとする。
【０１０７】
第１の実施の形態のプロセッサは、図８の従来のプロセッサと同じ実行命令を備える。ただし、「ａｂｃｍｐ」命令による処理を実行する演算器は図２に示す１の補数絶対値減算器１３である。よって、「ａｂｃｍｐ」命令では、１の補数表現化された数値による絶対値の比較が行われる。図１４に示す、第１の実施の形態のプロセッサで行われる演算処理を「ａｂｃｍｐ」命令を使用せず、「ａｂｃｍｐ」命令を複数のステップを用いて詳細に表現すると、図５１に示すプログラムのようになる。このプログラムにおいて、「ａｂｓ１  ａ，ｂ」命令は、レジスタｂの値を１の補数表現化による絶対値にしてレジスタａにセットする命令であり、「ｊｍｐ（ｂｅ）  ｌａｂｅｌ」命令は、Ｎフラグが０の場合にｌａｂｅｌにジャンプする命令である。また、ステップ（１６）、ステップ（１７）、ステップ（６）の３ステップが「ａｂｃｍｐ」命令に相当する。
【０１０８】
次に、第１の実施の形態によるプロセッサの動作を説明する。
【０１０９】
（動作例１）
第１の実施の形態のプロセッサで、図１６に示す４つのデータの中から絶対値が最大であるデータを求める動作を、１の補数絶対値減算器１３を使用する「ａｂｃｍｐ」命令を中心に説明する。
【０１１０】
第１の実施の形態のプロセッサで絶対値が最大であるデータを求める処理のプログラムは、図８に示した従来のプロセッサと同じ図１４のプログラムである。
【０１１１】
ステップ（１）、（２）での動作は、従来の一般的なプロセッサの場合と同じである。
【０１１２】
繰返し１回目のステップ（３）での動作は、従来の一般的なプロセッサの場合と同じである。
【０１１３】
ステップ（１４）では、１の補数絶対値減算器１３を使った演算が行われる。この時の動作を図２２を用いて説明する。
【０１１４】
レジスタＣの値「０（０ｂ００００）」は入力Ａ（６９）に、レジスタＡの値「３（０ｂ００１１）」は入力Ｂ（７０）にそれぞれ入力される。
【０１１５】
第１の１の補数絶対値演算器２０には、入力Ａ（６９）の値「０（０ｂ００００）」が入力される。反転器２３で全てのビットが反転されるので、符号反転後の値６０は「（０ｂ１１１１）」となる。セレクタ２４では、入力Ａ（６９）の値「０（０ｂ００００）」の符号を判断して、入力Ａ（６９）を選択して絶対値演算処理後の値６２として「（０ｂ００００）」を出力する。
【０１１６】
第２の１の補数絶対値演算器２１には、入力Ｂ（７０）の値「３（０ｂ００１１）」が入力される。反転器２５で全てのビットが反転されるので、符号反転後の値６１は「（０ｂ１１００）」となる。セレクタ２６では、入力Ｂ（７０）の値「３（０ｂ００１１）」の符号を判断して、入力Ｂ（７０）を選択して絶対値演算処理後の値６３として「（０ｂ００１１）」を出力する。
【０１１７】
減算器２２では、絶対値演算処理後の値６２から絶対値演算処理後の値６３を減算するので、絶対値比較演算の結果（指示情報）６５として「（０ｂ１１０１）」を出力する。
【０１１８】
フラグ設定部９では入力された値「（０ｂ１１０１）」を判断して、Ｎフラグレジスタ＝１、Ｚフラグレジスタ＝０をセットする。
【０１１９】
ステップ（７）〜（１２）での動作は、従来の一般的なプロセッサの場合と同じである。
【０１２０】
繰返し２回目のステップ（３）は、従来の一般的なプロセッサの場合と同じである。
【０１２１】
ステップ（１４）では、１の補数絶対値減算器１３を使った演算が行われる。この時の動作を図２３を用いて説明する。
【０１２２】
レジスタＣの値「３（０ｂ００１１）」は入力Ａ（６９）に、レジスタＡの値「−５（０ｂ１０１１）」は入力Ｂ（７０）にそれぞれ入力される。
【０１２３】
第１の１の補数絶対値演算器２０には、入力Ａ（６９）の値「３（０ｂ００１１）」が入力される。反転器２３で全てのビットが反転されるので、符号反転後の値６０は「（０ｂ１１００）」となる。セレクタ２４では、入力Ａ（６９）の値「３（０ｂ００１１）」の符号を判断して、入力Ａ（６９）を選択して絶対値演算処理後の値６２として「（０ｂ００１１）」を出力する。
【０１２４】
第２の１の補数絶対値演算器２１には、入力Ｂ（７０）の値「−５（０ｂ１０１１）」が入力される。反転器２５で全てのビットが反転されるので、符号反転後の値６１は「（０ｂ０１００）」となる。セレクタ２６では、入力Ｂ（７０）の値「−５（０ｂ１０１１）」の符号を判断して、符号反転後の値６１を選択して絶対値演算処理後の値６３として「（０ｂ０１００）」を出力する。
【０１２５】
減算器２２では、絶対値演算処理後の値６２から絶対値演算処理後の値６３を減算するので、絶対値比較演算の結果６５として「（０ｂ１１１１）」を出力する。
【０１２６】
フラグ設定部９では入力された値「（０ｂ１１１１）」を判断して、Ｎフラグレジスタ＝１、Ｚフラグレジスタ＝０をセットする。
【０１２７】
ステップ（７）〜（１２）での動作は、従来の一般的なプロセッサの場合と同じである。
繰返し３回目のステップ（３）は、従来の一般的なプロセッサの場合と同じである。
【０１２８】
ステップ（１４）では、１の補数絶対値減算器１３を使った演算が行われる。この時の動作を図２４を用いて説明する。
【０１２９】
レジスタＣの値「−５（０ｂ１０１１）」は入力Ａ（６９）に、レジスタＡの値「−２（０ｂ１１１０）」は入力Ｂ（７０）にそれぞれ入力される。
【０１３０】
第１の１の補数絶対値演算器２０には、入力Ａ（６９）の値「−５（０ｂ１０１１）」が入力される。反転器２３で全てのビットが反転されるので、符号反転後の値６０は「（０ｂ０１００）」となる。セレクタ２４では、入力Ａ（６９）の値「−５（０ｂ１０１１）」の符号を判断して、符号反転後の値６０を選択して絶対値演算処理後の値６２として「（０ｂ０１００）」を出力する。
【０１３１】
第２の１の補数絶対値演算器２１には、入力Ｂ（７０）の値「−２（０ｂ１１１０）」が入力される。反転器２５で全てのビットが反転されるので、符号反転後の値６１は「（０ｂ０００１）」となる。セレクタ２６では、入力Ｂ（７０）の値「−２（０ｂ１１１０）」の符号を判断して、符号反転後の値６１を選択して絶対値演算処理後の値６３として「（０ｂ０００１）」を出力する。
【０１３２】
減算器２２では、絶対値演算処理後の値６２から絶対値演算処理後の値６３を減算するので、絶対値比較演算の結果６５として「（０ｂ００１１）」を出力する。
【０１３３】
フラグ設定部９では入力された値「（０ｂ００１１）」を判断して、Ｎフラグレジスタ＝０、Ｚフラグレジスタ＝０をセットする。
【０１３４】
ステップ（７）〜（１２）での動作は、従来の一般的なプロセッサの場合と同じである。
繰返し４回目のステップ（３）は、従来の一般的なプロセッサの場合と同じである。
【０１３５】
ステップ（１４）では、１の補数絶対値減算器１３を使った演算が行われる。この時の動作を図２５を用いて説明する。
【０１３６】
レジスタＣの値「−５（０ｂ１０１１）」は入力Ａ（６９）に、レジスタＡの値「６（０ｂ０１１０）」は入力Ｂ（７０）にそれぞれ入力される。
【０１３７】
第１の１の補数絶対値演算器２０には、入力Ａ（６９）の値「−５（０ｂ１０１１）」が入力される。反転器２３で全てのビットが反転されるので、符号反転後の値６０は「（０ｂ０１００）」となる。セレクタ２４では、入力Ａ（６９）の値「−５（０ｂ１０１１）」の符号を判断して、符号反転後の値６０を選択して絶対値演算処理後の値６２として「（０ｂ０１００）」を出力する。
【０１３８】
第２の１の補数絶対値演算器２１には、入力Ｂ（７０）の値「６（０ｂ０１１０）」が入力される。反転器２５で全てのビットが反転されるので、符号反転後の値６１は「（０ｂ１００１）」となる。セレクタ２６では、入力Ｂ（７０）の値「６（０ｂ０１１０）」の符号を判断して、入力Ｂ（７０）を選択して絶対値演算処理後の値６３として「（０ｂ０１１０）」を出力する。
【０１３９】
減算器２２では、絶対値演算処理後の値６２から絶対値演算処理後の値６３を減算するので、絶対値比較演算の結果６５として「（０ｂ１１１０）」を出力する。
【０１４０】
フラグ設定部９では入力された値「（０ｂ１１１０）」を判断して、Ｎフラグレジスタ＝１、Ｚフラグレジスタ＝０をセットする。
【０１４１】
ステップ（７）〜（１２）での動作は、従来の一般的なプロセッサの場合と同じである。
【０１４２】
以上の処理を行うことにより、レジスタＣに絶対値が最大である値「６」を求めることができる。このように、従来技術において符号の反転処理に用いていた２の補数表現化手順操作に換えて１の補数表現化手順操作を用いることによっても絶対値が最大の値を求めることができる。
【０１４３】
（動作例２）
第１の施例の形態のプロセッサで、レジスタＡに「０（０ｂ００００）」、レジスタＣに４ビットの２の補数表現で表現が可能な負の値で絶対値が最大である「−８（０ｂ１０００）」がセットされている場合に、「ａｂｃｍｐ  Ｃ，Ａ」ステップ（１４）が実行される場合を図２６を用いて説明する。レジスタＡに「０（０ｂ００００）」、レジスタＣに「−８（０ｂ１０００）」というデータの設定は、前述の従来のプロセッサではオーバーフローが発生して正しい演算を行うことが不可能なデータケースである。
【０１４４】
レジスタＣの値「−８（０ｂ１０００）」は入力Ａ（６９）に、レジスタＡの値「０（０ｂ００００）」は入力Ｂ（７０）にそれぞれ入力される。
【０１４５】
第１の１の補数絶対値演算器２０には、入力Ａ（６９）の値「−８（０ｂ１０００）」が入力される。反転器２３で全てのビットが反転されるので、符号反転後の値６０は「（０ｂ０１１１）」となる。セレクタ２４では、入力Ａ（６９）の値「−８（０ｂ１０００）」の符号を判断して、符号反転後の値６０を選択して絶対値演算処理後の値６２して「（０ｂ０１１１）」を出力する。このように、従来のプロセッサと異なりオーバーフローが発生せず、正常に符号が反転される。
【０１４６】
第２の１の補数絶対値演算器２１には、入力Ｂ（７０）の値「０（０ｂ００００）」が入力される。反転器２５で全てのビットが反転されるので、符号反転後の値６１は「（０ｂ１１１１）」となる。セレクタ２６では、入力Ｂ（７０）の値「０（０ｂ００００）」の符号を判断して、入力Ｂ（７０）を選択して絶対値演算処理後の値６３として「（０ｂ００００）」を出力する。
【０１４７】
減算器２２では、絶対値演算処理後の値６２から絶対値演算処理後の値６３を減算するので、絶対値比較演算の結果６５として「（０ｂ０１１１）」を出力する。すなわち、｜−８｜−｜０｜の減算結果が正となり、｜−８｜と｜０｜との大小比較が正しく行われる。
【０１４８】
フラグ設定部９では入力された値「（０ｂ０１１１）」を判断して、Ｎフラグレジスタ＝０、Ｚフラグレジスタ＝０をセットする。
【０１４９】
ステップ（７）では、Ｎフラグレジスタ＝０，Ｚフラグレジスタ＝０なので、ステップ（９）に進み、レジスタＡの値はレジスタＣにセットされない。
【０１５０】
このように第１の実施の形態のプロセッサにおいては「−８（０ｂ１０００）」と「０（０ｂ００００）」との絶対値の大小比較において、絶対値が大きい「−８（０ｂ１０００）」を正しく出力することができる。
【０１５１】
（動作例３）
第１の実施の形態のプロセッサで、レジスタＡに「−４（０ｂ１１００）」、レジスタＣに「３（０ｂ００１１）」がセットされている場合に、ステップ（１４）「ａｂｃｍｐ  Ｃ，Ａ」が実行される場合を説明する。
【０１５２】
レジスタＣの値「３（０ｂ００１１）」は入力Ａ（６９）に、レジスタＡの値「−４（０ｂ１１００）」は入力Ｂ（７０）にそれぞれ入力される。
【０１５３】
第１の１の補数絶対値演算器２０には、入力Ａ（６９）の値「３（０ｂ００１１）」が入力される。反転器２３で全てのビットが反転されるので、符号反転後の値６０は「（０ｂ１１００）」となる。セレクタ２４では、入力Ａ（６９）の値「３（０ｂ００１１）」の符号を判断して、入力Ａ（６９）を選択して絶対値演算処理後の値６２として「（０ｂ００１１）」を出力する。
【０１５４】
第２の１の補数絶対値演算器２１には、入力Ｂ（７０）の値「−４（０ｂ１１００）」が入力される。反転器２５で全てのビットが反転されるので、符号反転後の値６１は「（０ｂ００１１）」となる。セレクタ２６では、入力Ｂ（７０）の値「−４（０ｂ１１００）」の符号を判断して、符号反転後の値６１を選択して絶対値演算処理後の値６３として「（０ｂ００１１）」を出力する。
【０１５５】
減算器２２では、絶対値演算処理後の値６２から絶対値演算処理後の値６３を減算するので、絶対値比較演算の結果６５として「（０ｂ００００）」を出力する。
【０１５６】
フラグ設定部９では入力された値「（０ｂ００００）」を判断して、Ｎフラグレジスタ＝０、Ｚフラグレジスタ＝１をセットする。
【０１５７】
ステップ（７）では、Ｎフラグレジスタ＝０，Ｚフラグレジスタ＝１なので、ステップ（９）に進み、レジスタＡの値「−４（０ｂ１１００）」はレジスタＣにセットされず、レジスタＣの値は絶対値が小さい「３（０ｂ００１１）」のままとなる。
【０１５８】
このように第１の実施の形態のプロセッサでは、ステップ（１４）「ａｂｃｍｐ  Ｃ，Ａ」が実行される場合に、レジスタＡの値が負の値（例えば−４）で、レジスタＢの値がレジスタＡの値の絶対値の１小さい数の正の値（例えば３）の場合、減算結果が０となり正しく絶対値の大小判定が行われない。そのため、本来求めるべき絶対値が最大の値と比べ１小さい値が、最大値として求められる場合があり得る。しかし、音声データは通常１６ビット幅で扱われ、１６ビットで表現しうる値の範囲は−３２７６８〜３２７６７である。そのため、たとえ求まる絶対値が最大の値が１違う場合にも、１６ビットのフルレンジから見ると誤差は０．００３％程度であり、無視することができる誤差である。
【０１５９】
以上の動作例に示したように第１の実施の形態のプロセッサでは、無視できるほどの誤差で絶対値が最大の値を求めることができ、２の補数表現で表現が可能な負の値で絶対値が最大である値が入力されても正しく演算することができる。また、１の補数絶対値減算器１３には、＋１加算器が使用されていないので、１の補数絶対値減算器１３の小型化、引いてはプロセッサの小型化を図ることができる。さらに、従来は１度の絶対値比較演算処理において２度行われていた＋１加算の処理を行わないので、複数のデータから絶対値が最大となる値を求めるための時間を短縮することができる。
【０１６０】
（第２の実施の形態）
第２の実施の形態のプロセッサは、第１の実施の形態のプロセッサに用いた１の補数絶対値減算器１３の構成を、図２に示すものに変えて、図３に示すような構成としたものである。プロセッサの他の部分の構成については図１に示す第１の実施の形態の構成と同じである。
【０１６１】
図３に示す１の補数絶対値減算器１３は、本発明に係る演算器である。図３に示す１の補数絶対値減算器１３は、１の補数絶対値演算手段としての第１の１の補数絶対値演算器２０と、第２の１の補数絶対値演算手段および反転手段としての１の補数絶対値反転演算器２７と、指示情報出力手段としての加算器２８を備える。
【０１６２】
１の補数絶対値減算器１３は、制御信号１０により指定されるレジスタファイル７内の２つのレジスタのそれぞれが保持する２つの値について１の補数表現を用いた絶対値の比較演算を行い、その比較結果を２つの値の絶対値のうちのどちらが大きいかを表す指示情報として出力する。
【０１６３】
第１の１の補数絶対値演算器２０は、第１の実施の形態の第１の１の補数絶対値演算器２０と同じ構成である。１の補数絶対値反転演算器２７は、入力Ｂ（７０）の符号が負の場合には入力Ｂ（７０）に対して１の補数表現化の手順操作を施す。さらに、入力Ｂ（７０）もしくは入力Ｂ（７０）を１の補数表現化したものの全てのビットを反転して絶対値反転処理後の値６４として出力する。
【０１６４】
１の補数絶対値反転演算器２７は、反転器２９、反転器３１とセレクタ３０を備える。反転器２９は、入力された全てのビットを反転して、符号反転後の値６１を出力する。セレクタ３０は、入力Ｂ（７０）の符号が負の場合は、符号反転後の値６１を選択し、それ以外の場合は入力Ｂ（７０）を選択して、絶対値演算処理後の値６３を出力する。反転器３１は、絶対値演算処理後の値６３の全てのビットを反転して、絶対値反転処理後の値６４を出力する。
【０１６５】
加算器２８は、絶対値演算処理後の値６２から絶対値反転処理後の値６４に「１」を加算して、絶対値比較演算の結果（指示情報）６５を出力する。
【０１６６】
つまり、第２の実施の形態のプロセッサでは、第１の実施の形態のプロセッサのように２つの値の絶対値の減算処理により絶対値の大小比較を行うのではなく、減算値の全てのビットを反転したものを被減算値に加え、これにさらに「１」を加えるという加算処理によって絶対値の大小比較を実現している。
【０１６７】
第２の実施の形態のプロセッサは、図１に示す第１の実施の形態のプロセッサと同じ実行命令を備える。ただし、「ａｂｃｍｐ」命令による処理を実行する演算器は図３に示す１の補数絶対値減算器１３である
次に、第２の実施の形態によるプロセッサの動作を説明する。
【０１６８】
（動作例１）
第２の実施の形態のプロセッサで、図１６に示す４つのデータから絶対値が最大であるデータを求める動作を、図３に示す１の補数絶対値減算器１３で実行される「ａｂｃｍｐ」命令を中心に説明する。
【０１６９】
第２の実施の形態のプロセッサでの絶対値が最大のデータを求める処理のプログラムは、第１の実施の形態に示したプロセッサと同じく図８に示すプログラムである。
【０１７０】
ステップ（１）、（２）での動作は、従来の一般的なプロセッサの場合と同じである。
【０１７１】
繰返し１回目のステップ（３）での動作は、従来の一般的なプロセッサの場合と同じである。
【０１７２】
ステップ（１４）では、１の補数絶対値減算器１３を使った演算が行われる。この時の動作を図２８を用いて説明する。
【０１７３】
レジスタＣの値「０（０ｂ００００）」は入力Ａ（６９）に、レジスタＡの値「３（０ｂ００１１）」は入力Ｂ（７０）にそれぞれ入力される。
【０１７４】
第１の１の補数絶対値演算器２０には、入力Ａ（６９）の値「０（０ｂ００００）」が入力される。反転器２３で全てのビットが反転されるので、符号反転後の値６０は「（０ｂ１１１１）」となる。セレクタ２４では、入力Ａ（６９）の値「０（０ｂ００００）」の符号を判断して、入力Ａ（６９）を選択して絶対値演算処理後の値６２として「（０ｂ００００）」を出力する。
【０１７５】
１の補数絶対値反転演算器２７には、入力Ｂ（７０）の値「３（０ｂ００１１）」が入力される。反転器２９で全てのビットが反転されるので、符号反転後の値６１は「（０ｂ１１００）」となる。セレクタ２６では、入力Ｂ（７０）の値「３（０ｂ００１１）」の符号を判断して、入力Ｂ（７０）を選択して絶対値演算処理後の値６３として「（０ｂ００１１）」を出力する。反転器３１では、絶対値演算処理後の値６３をビット反転し、絶対値反転処理後の値６４として「（０ｂ１１００）」を出力する。
【０１７６】
加算器２８では、絶対値演算処理後の値６２と絶対値反転処理後の値６４と「１」を加算するので、絶対値比較演算の結果６５として「（０ｂ１１０１）」を出力する。
【０１７７】
フラグ設定部９では入力された値「（０ｂ１１０１）」を判断して、Ｎフラグレジスタ＝１、Ｚフラグレジスタ＝０をセットする。
【０１７８】
ステップ（７）〜（１２）での動作は、従来の一般的なプロセッサの場合と同じである。
【０１７９】
繰返し２回目のステップ（３）は、従来の一般的なプロセッサの場合と同じである。
【０１８０】
ステップ（１４）では、１の補数絶対値減算器１３を使った演算が行われる。この時の動作を図２９を用いて説明する。
【０１８１】
レジスタＣの値「３（０ｂ００１１）」は入力Ａ（６９）に、レジスタＡの値「−５（０ｂ１０１１）」は入力Ｂ（７０）にそれぞれ入力される。
【０１８２】
第１の１の補数絶対値演算器２０には、入力Ａ（６９）の値「３（０ｂ００１１）」が入力される。反転器２３で全てのビットが反転されるので、符号反転後の値６０は「（０ｂ１１００）」となる。セレクタ２４では、入力Ａ（６９）の値「３（０ｂ００１１）」の符号を判断して、入力Ａ（６９）を選択して絶対値演算処理後の値６２として「（０ｂ００１１）」を出力する。
【０１８３】
１の補数絶対値反転演算器２７には、入力Ｂ（７０）の値「−５（０ｂ１０１１）」が入力される。反転器２５で全てのビットが反転されるので、符号反転後の値６１は「（０ｂ０１００）」となる。セレクタ２６では、入力Ｂ（７０）の値「−５（０ｂ１０１１）」の符号を判断して、符号反転後の値６１を選択して絶対値演算処理後の値６３として「（０ｂ０１００）」を出力する。反転器３１では、絶対値演算処理後の値６３をビット反転し、絶対値反転処理後の値６４として「（０ｂ１０１１）」を出力する。
【０１８４】
加算器２８では、絶対値演算処理後の値６２と絶対値反転処理後の値６４と「１」を加算するので、絶対値比較演算の結果６５として「（０ｂ１１１１）」を出力する。
【０１８５】
フラグ設定部９では入力された値「（０ｂ１１１０）」を判断して、Ｎフラグレジスタ＝１、Ｚフラグレジスタ＝０をセットする。
【０１８６】
ステップ（７）〜（１２）での動作は、従来の一般的なプロセッサの場合と同じである。
繰返し３回目のステップ（３）は、従来の一般的なプロセッサの場合と同じである。
【０１８７】
ステップ（１４）では、１の補数絶対値減算器１３を使った演算が行われる。この時の動作を図３０を用いて説明する。
【０１８８】
レジスタＣの値「−５（０ｂ１０１１）」は入力Ａ（６９）に、レジスタＡの値「−２（０ｂ１１１０）」は入力Ｂ（７０）にそれぞれ入力される。
【０１８９】
第１の１の補数絶対値演算器２０には、入力Ａ（６９）の値「−５（０ｂ１０１１）」が入力される。反転器２３で全てのビットが反転されるので、符号反転後の値６０は「（０ｂ０１００）」となる。セレクタ２４では、入力Ａ（６９）の値「−５（０ｂ１０１１）」の符号を判断して、符号反転後の値６０を選択して絶対値演算処理後の値６２として「（０ｂ０１００）」を出力する。
【０１９０】
１の補数絶対値反転演算器２７には、入力Ｂ（７０）の値「−２（０ｂ１１１０）」が入力される。反転器２５で全てのビットが反転されるので、符号反転後の値６１は「（０ｂ０００１）」となる。セレクタ２６では、入力Ｂ（７０）の値「−２（０ｂ１１１０）」の符号を判断して、符号反転後の値６１を選択して絶対値演算処理後の値６３として「（０ｂ０００１）」を出力する。反転器３１では、絶対値演算処理後の値６３をビット反転し、絶対値反転処理後の値６４として「（０ｂ１１１０）」を出力する。
【０１９１】
加算器２８では、絶対値演算処理後の値６２と絶対値反転処理後の値６４と「１」を加算するので、絶対値比較演算の結果６５として「（０ｂ００１１）」を出力する。
【０１９２】
フラグ設定部９では入力された値「（０ｂ００１１）」を判断して、Ｎフラグレジスタ＝０、Ｚフラグレジスタ＝０をセットする。
【０１９３】
ステップ（７）〜（１２）での動作は、従来の一般的なプロセッサの場合と同じである。
繰返し４回目のステップ（３）は、従来の一般的なプロセッサの場合と同じである。
【０１９４】
ステップ（１４）では、１の補数絶対値減算器１３を使った演算が行われる。この時の動作を図３１を用いて説明する。
【０１９５】
レジスタＣの値「−５（０ｂ１０１１）」は入力Ａ（６９）に、レジスタＡの値「６（０ｂ０１１０）」は入力Ｂ（７０）にそれぞれ入力される。
【０１９６】
第１の１の補数絶対値演算器２０には、入力Ａ（６９）の値「−５（０ｂ１０１１）」が入力される。反転器２３で全てのビットが反転されるので、符号反転後の値６０は「（０ｂ０１００）」となる。セレクタ２４では、入力Ａ（６９）の値「−５（０ｂ１０１１）」の符号を判断して、符号反転後の値６０を選択して絶対値演算処理後の値６２として「（０ｂ０１００）」を出力する。
【０１９７】
１の補数絶対値反転演算器２７には、入力Ｂ（７０）の値「６（０ｂ０１１０）」が入力される。反転器２５で全てのビットが反転されるので、符号反転後の値６１は「（０ｂ１００１）」となる。セレクタ２６では、入力Ｂ（７０）の値「６（０ｂ０１１０）」の符号を判断して、入力Ｂ（７０）を選択して絶対値演算処理後の値６３として「（０ｂ０１１０）」を出力する。反転器３１では、絶対値演算処理後の値６３をビット反転し、絶対値反転処理後の値６４として「（０ｂ１００１）」を出力する。
【０１９８】
加算器２８では、絶対値演算処理後の値６２と絶対値反転処理後の値６４と「１」を加算するので、絶対値比較演算の結果６５として「（０ｂ１１１０）」を出力する。
【０１９９】
フラグ設定部９では入力された値「（０ｂ１１１０）」を判断して、Ｎフラグレジスタ＝１、Ｚフラグレジスタ＝０をセットする。
【０２００】
ステップ（７）〜（１２）での動作は、従来の一般的なプロセッサの場合と同じである。
【０２０１】
以上の処理を行うことにより、減算処理に換えて加算処理によってレジスタＣに絶対値が最大である値「６」を求めることができる。
【０２０２】
（動作例２）
第２の実施の形態のプロセッサで、レジスタＡに「０（０ｂ００００）」、レジスタＣに４ビットの２の補数表現で表現が可能な範囲で絶対値が最大の負の値「−８（０ｂ１０００）」がセットされている場合に、「ａｂｃｍｐ  Ｃ，Ａ」ステップ（１４）が実行される場合を図３２を用いて説明する。レジスタＡに「０（０ｂ００００）」、レジスタＣに「−８（０ｂ１０００）」というデータの設定は、前述の従来のプロセッサではオーバーフローを起こして正しい演算を行うことが不可能なデータケースである。
【０２０３】
レジスタＣの値「−８（０ｂ１０００）」は入力Ａ（６９）に、レジスタＡの値「０（０ｂ００００）」は入力Ｂ（７０）にそれぞれ入力される。
【０２０４】
第１の１の補数絶対値演算器２０には、入力Ａ（６９）の値「−８（０ｂ１０００）」が入力される。反転器２３で全てのビットが反転されるので、符号反転後の値６０は「（０ｂ０１１１）」となる。セレクタ２４では、入力Ａ（６９）の値「−８（０ｂ１０００）」の符号を判断して、符号反転後の値６０を選択して絶対値演算処理後の値６２して「（０ｂ０１１１）」を出力する。オーバーフロを起こさず正常に符号が反転されている。
【０２０５】
１の補数絶対値反転演算器２７には、入力Ｂ（７０）の値「０（０ｂ００００）」が入力される。反転器２５で全てのビットが反転されるので、符号反転後の値６１は「（０ｂ１１１１）」となる。セレクタ２６では、入力Ｂ（７０）の値「０（０ｂ００００）」の符号を判断して、入力Ｂ（７０）を選択して絶対値演算処理後の値６３として「（０ｂ００００）」を出力する。反転器３１では、絶対値演算処理後の値６３をビット反転し、絶対値反転処理後の値６４として「（０ｂ１１１１）」を出力する。
【０２０６】
加算器２８では、絶対値演算処理後の値６２と絶対値反転処理後の値６４と「１」を加算するので、絶対値比較演算の結果６５として「（０ｂ０１１１）」を出力する。つまり、｜−８｜−｜０｜の演算結果が正となり、絶対値の比較が正常に行われる。
【０２０７】
フラグ設定部９では入力された値「（０ｂ０１１１）」を判断して、Ｎフラグレジスタ＝０、Ｚフラグレジスタ＝０をセットする。
【０２０８】
ステップ（７）では、Ｎフラグレジスタ＝０，Ｚフラグレジスタ＝０なので、ステップ（９）に進み、レジスタＡの値はレジスタＣにセットされない。
【０２０９】
このように第２の実施の形態のプロセッサにおいては「−８（０ｂ１０００）」と「０（０ｂ００００）」では、絶対値が大きい「−８（０ｂ１０００）」を絶対値の最大値として出力することができる。
【０２１０】
（動作例３）
第２の実施の形態のプロセッサで、レジスタＡに「−４（０ｂ１１００）」、レジスタＣに「３（０ｂ００１１）」がセットされている場合に、ステップ（１４）「ａｂｃｍｐ  Ｃ，Ａ」が実行される場合を図３３を用いて説明する。
【０２１１】
レジスタＣの値「３（０ｂ００１１）」は入力Ａ（６９）に、レジスタＡの値「−４（０ｂ１１００）」は入力Ｂ（７０）にそれぞれ入力される。
【０２１２】
第１の１の補数絶対値演算器２０には、入力Ａ（６９）の値「３（０ｂ００１１）」が入力される。反転器２３で全てのビットが反転されるので、符号反転後の値６０は「（０ｂ１１００）」となる。セレクタ２４では、入力Ａ（６９）の値「３（０ｂ００１１）」の符号を判断して、入力Ａ（６９）を選択して絶対値演算処理後の値６２として「（０ｂ００１１）」を出力する。
【０２１３】
１の補数絶対値反転演算器２７には、入力Ｂ（７０）の値「−４（０ｂ１１００）」が入力される。反転器２５で全てのビットが反転されるので、符号反転後の値６１は「（０ｂ００１１）」となる。セレクタ２６では、入力Ｂ（７０）の値「−４（０ｂ１１００）」の符号を判断して、符号反転後の値６１を選択して絶対値演算処理後の値６３として「（０ｂ００１１）」を出力する。反転器３１では、絶対値演算処理後の値６３をビット反転し、絶対値反転処理後の値６４として「（０ｂ１１００）」を出力する。
【０２１４】
加算器２８では、絶対値演算処理後の値６２と絶対値反転処理後の値６４と「１」を加算するので、絶対値比較演算の結果６５として「（０ｂ００００）」を出力する。
【０２１５】
フラグ設定部９では入力された値「（０ｂ００００）」を判断して、Ｎフラグレジスタ＝０、Ｚフラグレジスタ＝１をセットする。
【０２１６】
ステップ（７）では、Ｎフラグレジスタ＝０，Ｚフラグレジスタ＝１なので、ステップ（９）に進み、レジスタＡの値「−４（０ｂ１１００）」はレジスタＣにセットされず、レジスタＣの値は絶対値が小さい「３（０ｂ００１１）」のままとなる。
【０２１７】
このように第２の実施の形態のプロセッサでは、ステップ（１４）「ａｂｃｍｐ  Ｃ，Ａ」が実行される場合に、レジスタＡの値が負（例えば−４）で、レジスタＢの値がレジスタＡの値の絶対値より１小さい数の正の値（例えば３）の場合に、正しく絶対値の大小比較が行われない。そのため、本来選ばれるべき絶対値が最大の値に比べ１小さい値が最大の絶対値をもつ値として求められる場合がある。しかし、音声データは通常１６ビットで扱われ、２の補数表現で表現できる範囲は−３２７６８〜３２７６７である。そのため、たとえ絶対値が１違っていたとしても１６ビットのフルレンジから見ると誤差は０．００３％程度であり、無視することができる誤差である。
【０２１８】
以上の動作例に示したように第２の実施の形態のプロセッサでは、無視できるほどの誤差で絶対値が最大の値を求めることができ、所定のビットの２の補数表現で表現が可能な負の値で絶対値が最大である値も正しく演算することができる。また、１の補数絶対値減算器１３には、使用されている＋１加算機は１つなので、１の補数絶対値減算器１３の小型化、引いてはプロセッサの小型化を図ることができる。さらに、従来は１組の絶対値比較演算処理において２度行われていた＋１加算の処理が１度で済むので、複数のデータから絶対値が最大となる値を求めるための時間を短縮することができる。
【０２１９】
（第３の実施の形態）
第３の実施の形態は、本発明に関わる演算器および演算方法およびプロセッサにおける技術をプロセッサに適用したものであり、絶対値の大小比較および大小比較に基づく入力値の２者択一までの処理をハード化すると共に、これを実行する実行命令を備えている。
【０２２０】
図４は、第３の実施の形態のプロセッサを示す。図４に示すプロセッサは、プロセッサの制御を行う制御部１と演算を行うデータバス部２とを備えるものである。
【０２２１】
制御部１は、プログラムカウンタ３、実行命令メモリ４、デコーダ５により構成される。プログラムカウンタ３、実行命令メモリ４、デコーダ５は、図７に示した従来のプロセッサと同じ構成なので、説明を省略する。
【０２２２】
データバス部２は、ＡＬＵ６、絶対値最大値演算器１５、レジスタファイル７、データメモリ８、フラグ設定部９により構成される。ＡＬＵ６、レジスタファイル７、データメモリ８、フラグ設定部９は、図７に示した従来の一般的なプロセッサと同じ構成なので、説明を省略する。
【０２２３】
本発明に係る演算器である絶対値最大値演算器１５は、制御信号１０により指定されたレジスタファイル７内の２つのレジスタに格納された値を入力とする。この２つの値について１の補数表現を用いて絶対値の比較演算を行うことにより、２つの値の絶対値のうちのどちらが大きいかを表す指示情報を求める。さらに、この指示情報に基づいて、２の値のうちの絶対値が大きい方の値を出力する。出力された値は、制御信号１０により指定されたレジスタファイル７内のレジスタに書き込まれる。
【０２２４】
図５は、上記の絶対値最大値演算器１５の構成を示した図である。図５に示すように、絶対値最大値演算器１５は、第１の入力もしくは第１の入力を１の補数表現化した絶対値から第２の入力もしくは第２の入力を１の補数表現化した絶対値を減算する、第１の１の補数絶対値演算手段、第２の１の補数絶対値演算手段および指示情報出力手段としての１の補数絶対値減算器３２と、選択手段としてのセレクタ３３を備える。１の補数絶対値減算器３２は、入力Ａ（６９）の値もしくは入力Ａ（６９）を１の補数表現化した絶対値から、入力Ｂ（７０）の値もしくは入力Ｂ（７０）を１の補数表現化した絶対値を減算し、その減算結果を絶対値比較演算の結果（指示情報）６５として出力する。１の補数絶対値減算器３２の構成は、第１の実施の形態または第２の実施の形態における１の補数絶対値減算器１３と同じ構成なので説明を省略する。セレクタ３３では、絶対値比較演算の結果６５の符号が負の場合は、入力Ｂ（７０）を選択し、負以外の場合は入力Ａ（６９）を選択して、選択した値を最大絶対値選択演算の結果６８として出力する。
【０２２５】
図４のプロセッサも図７の従来の一般的なプロセッサと同じく、Ａ，Ｂ，Ｃ，Ｄ，Ｐの５つのレジスタのビット幅、データメモリ８のビット幅、ＡＬＵ６の入出力のビット幅はすべて４ビットとする。また、絶対値最大値演算器１５の入出力、演算精度のビット幅も４ビットとする。
【０２２６】
第３の実施の形態のプロセッサは、図７のプロセッサと同じ実行命令に加え、絶対値最大値演算器１５で実行される以下の実行命令を備える。
【０２２７】
「ａｂｍａｘ  ａ，ｂ  ：レジスタａとレジスタｂとのそれぞれに保持されている値の絶対値を比較し、絶対値が大きい方の値をレジスタａにセット」
次に、第３の実施の形態によるプロセッサの動作を説明する。
【０２２８】
（動作例１）
第３の実施の形態のプロセッサで、図１６に示す４つのデータの中から絶対値が最大であるデータを求める動作を、絶対値最大値演算器１５で処理が実行される「ａｂｍａｘ」命令を中心に説明する。
【０２２９】
絶対値最大値演算器１５を備えたプロセッサで絶対値が最大の値を求めるためのプログラムを図１５に示す。ステップ（１）からステップ（３）、ステップ（９）からステップ（１３）までは従来の一般的なプロセッサの場合と同じである。ステップ（１５）は、「ａｂｍａｘ」命令を使ってレジスタＣの値とレジスタＡの値の絶対値を比較し、絶対値が大きい方の値をレジスタＣにセットするステップである。ステップ（１５）では、従来の一般的なプロセッサで行う場合のステップ（４）からステップ（８）までの処理と同等の処理を行う。絶対値最大値演算器１５の入力Ａ（６９）にはレジスタＣの値、入力Ｂ（７０）にはレジスタＡの値が入力される。
【０２３０】
ステップ（１）、（２）での動作は、従来の一般的なプロセッサの場合と同じである。
【０２３１】
繰返し１回目のステップ（３）での動作は、従来の一般的なプロセッサの場合と同じである。
【０２３２】
ステップ（１５）では、絶対値最大値演算器１５を使った演算が行われる。この時の動作を図３４を用いて説明する。
【０２３３】
レジスタＣの値「０（０ｂ００００）」は入力Ａ（６９）に、レジスタＡの値「３（０ｂ００１１）」は入力Ｂ（７０）にそれぞれ入力される。
【０２３４】
第１の実施の形態の動作例１より、１の補数絶対値減算器３２の出力である絶対値比較演算の結果６５は「（０ｂ１１０１）」となる。絶対値比較演算の結果６５の符号は負なので、セレクタ３３では入力Ｂ（７０）を選択し、最大絶対値選択演算の結果６８として「３（０ｂ００１１）」を出力する。そして、レジスタＣには「３（０ｂ０１１）」をセットする。
【０２３５】
ステップ（９）〜（１２）での動作は、従来の一般的なプロセッサの場合と同じである。
【０２３６】
繰返し２回目のステップ（３）は、従来の一般的なプロセッサの場合と同じである。
【０２３７】
ステップ（１５）では、絶対値最大値演算器１５を使った演算が行われる。この時の動作を図３５を用いて説明する。
【０２３８】
レジスタＣの値「３（０ｂ００１１）」は入力Ａ（６９）に、レジスタＡの値「−５（０ｂ１０１１）」は入力Ｂ（７０）にそれぞれ入力される。
【０２３９】
第１の実施の形態の動作例１より、１の補数絶対値減算器３２の出力である絶対値比較演算の結果６５は「（０ｂ１１１１）」となる。絶対値比較演算の結果６５の符号は負なので、セレクタ３３では入力Ｂ（７０）を選択し、最大絶対値選択演算の結果６８として「−５（０ｂ１０１１）」を出力する。そして、レジスタＣには「−５（０ｂ１０１１）」をセットする。
【０２４０】
ステップ（９）〜（１２）での動作は、従来の一般的なプロセッサの場合と同じである。
繰返し３回目のステップ（３）は、従来の一般的なプロセッサの場合と同じである。
【０２４１】
ステップ（１５）では、絶対値最大値演算器１５を使った演算が行われる。この時の動作を図３６を用いて説明する。
【０２４２】
レジスタＣの値「−５（０ｂ１０１１）」は入力Ａ（６９）に、レジスタＡの値「−２（０ｂ１１１０）」は入力Ｂ（７０）にそれぞれ入力される。
【０２４３】
第１の実施の形態の動作例１より、１の補数絶対値減算器３２の出力である絶対値比較演算の結果６５は「（０ｂ００１１）」となる。絶対値比較演算の結果６５の符号は負ではないので、セレクタ３３では入力Ａ（６９）を選択し、最大絶対値選択演算の結果６８として「−５（０ｂ１０１１）」を出力する。そして、レジスタＣには「−５（０ｂ１０１１）」をセットする。
【０２４４】
ステップ（９）〜（１２）での動作は、従来の一般的なプロセッサの場合と同じである。
繰返し４回目のステップ（３）は、従来の一般的なプロセッサの場合と同じである。
【０２４５】
ステップ（１５）では、絶対値最大値演算器１５を使った演算が行われる。この時の動作を図３７を用いて説明する。
【０２４６】
レジスタＣの値「−５（０ｂ１０１１）」は入力Ａ（６９）に、レジスタＡの値「６（０ｂ０１１０）」は入力Ｂ（７０）にそれぞれ入力される。
【０２４７】
第１の実施の形態の動作例１より、１の補数絶対値減算器３２の出力である絶対値比較演算の結果６５は「（０ｂ１１１０）」となる。絶対値比較演算の結果６５の符号は負なので、セレクタ３３では入力Ｂ（７０）を選択し、最大絶対値選択演算の結果６８として「６（０ｂ０１１０）」を出力する。そして、レジスタＣには「６（０ｂ０１１０）」をセットする。
【０２４８】
ステップ（７）〜（１１）での動作は、従来の一般的なプロセッサの場合と同じである。
【０２４９】
以上の処理を行うことにより、レジスタＣに絶対値が最大である値「６」を求めることができる。
【０２５０】
（動作例２）
本実施例の形態３のプロセッサで、レジスタＡに「０（０ｂ００００）」、レジスタＣに４ビットの２の補数表現で表現が可能な負の値で絶対値が最大である「−８（０ｂ１０００）」がセットされている場合に、「ａｂｍａｘ  Ｃ，Ａ」ステップ（１５）が実行される場合を図３８を用いて説明する。これは、従来のプロセッサでは正しく絶対値の比較演算を行うことができない場合である。
【０２５１】
レジスタＣの値「−８（０ｂ１０００）」は入力Ａ（６９）に、レジスタＡの値「０（０ｂ００００）」は入力Ｂ（７０）にそれぞれ入力される。
【０２５２】
第１の実施の形態の動作例２より、１の補数絶対値減算器３２の出力である絶対値比較演算の結果６５は「（０ｂ０１１１）」となる。絶対値比較演算の結果６５の符号は負でないので、セレクタ３３では入力Ａ（６９）を選択し、最大絶対値選択演算の結果６８として「−８（０ｂ１０００）」を出力する。そして、レジスタＣには「−８（０ｂ１０００）」をセットする。
【０２５３】
このように第３の実施の形態のプロセッサにおいては「−８（０ｂ１０００）」と「０（０ｂ００００）」との絶対値比較において、「−８（０ｂ１０００）」を絶対値が大きい値として正しく出力することができる。
【０２５４】
（動作例３）
第３の実施の形態のプロセッサで、レジスタＡに「−４（０ｂ１１００）」、レジスタＣに「３（０ｂ００１１）」がセットされている場合に、「ａｂｍａｘＣ，Ａ」ステップ（１５）が実行される場合を図３９を用いて説明する。
【０２５５】
レジスタＣの値「３（０ｂ００１１）」は入力Ａ（６９）に、レジスタＡの値「−４（０ｂ１１００）」は入力Ｂ（７０）にそれぞれ入力される。
【０２５６】
第１の実施の形態の動作例３より、１の補数絶対値減算器３２の出力である絶対値比較演算の結果６５は「（０ｂ００００）」となる。絶対値比較演算の結果６５の符号は負でないので、セレクタ３３では入力Ａ（６９）を選択し、最大絶対値選択演算の結果６８として「３（０ｂ００１１）」を出力する。そして、レジスタＣには「３（０ｂ００１１）」をセットする。
【０２５７】
このように第３の実施の形態のプロセッサでは、「ａｂｃｍｐ  Ｃ，Ａ」ステップ（１５）が実行される場合に、レジスタＡの値が負（例えば−４）で、レジスタＢの値がレジスタＡの値の絶対値の１小さい数の正の値（例えば３）の場合、正しいく絶対値の大小比較が行われない。そのため、本来求められるべき絶対値が最大の値に比べ１小さい値が絶対値が最大の値として求められる場合がある。しかし、音声データは通常１６ビットで扱われ、１６ビットで表現しうる２の補数表現の値の範囲は−３２７６８〜３２７６７である。そのため、たとえ絶対値が１違っていたとしても１６ビットのフルレンジから見ると誤差は０．００３％程度であり、無視することができる誤差である。
【０２５８】
以上の動作例に示したように第３の実施の形態のプロセッサでは、無視できるほどの誤差で絶対値が最大の値を求めることができ、４ビットの２の補数表現で表現が可能な負の値で絶対値が最大である値も正しく演算することができる。また、図８に示した従来のプロセッサのプログラムにおけるステップ（７）〜ステップ（９）をハードで実現しているので、さらに高速に絶対値が最大の値を求めることができる。
【０２５９】
（第４の実施の形態）
第４の実施の形態のプロセッサは、図５に示した第３の実施の形態での絶対値最大値演算器１５に変えて、図６に示すような構成の絶対値最大値演算器１５を備えたものである。なお、他部分の構成は図４に示す第３の実施の形態の構成と同じである。
【０２６０】
図６に示す絶対値最大値演算器１５は、本発明に係る演算器である。図６に示すように絶対値最大値演算器１５は、第１の入力もしくは第１の入力を１の補数表現化した絶対値から第２の入力もしくは第２の入力を１の補数表現化した絶対値を減算する、第１の１の補数絶対値演算手段、第２の１の補数絶対値演算手段および指示情報出力手段としての１の補数絶対値減算器３２と、ゼロ値判断手段としてのゼロ検出器３４と、第１の入力または第２の入力のどちらかを選択して出力する選択手段３５とを備える。
【０２６１】
絶対値最大値演算器１５は、制御信号１０により指定されたレジスタファイル７内の２つのレジスタに格納された値を入力とする。この２つの値について１の補数表現を用いて絶対値の比較演算を行うことにより、２つの値の絶対値のうちのどちらが大きいかを表す指示情報を求める。さらに、この指示情報に基づいて、２の値のうちの絶対値が大きい方の値を出力する。出力された値は、制御信号１０により指定されたレジスタファイル７内のレジスタに書き込まれる。
【０２６２】
１の補数絶対値減算器３２は、入力Ａ（６９）の値もしくは入力Ａ（６９）を１の補数表現化した絶対値から、入力Ｂ（７０）の値もしくは入力Ｂ（７０）を１の補数表現化した絶対値を減算し、その結果を絶対値比較演算の結果（指示情報）６５として出力するものである。１の補数絶対値減算器３２の構成は、第１の実施の形態および第２の実施の形態における１の補数絶対値減算器１３と同じ構成なので説明を省略する。
【０２６３】
ゼロ検出器３４では、絶対値比較演算の結果６５の値がゼロ（４ビットの全てのビットがゼロ）「０ｂ００００」の場合に、ゼロ値判断結果６６として「１」が出力され、それ以外の場合は「０」を出力する。
【０２６４】
出力値選択手段３５では、選択信号生成手段３６とセレクタ３７を備える。選択信号生成手段３６は、絶対値比較演算の結果６５の符号が負であるか、または、ゼロ値判断結果６６が「１」かつ入力Ｂ（７０）の符号が負である場合に、選択信号６７として「１」が出力され、それ以外の場合は「０」を出力する。セレクタ３７では、選択信号６７が「０」の場合に入力Ａ（６９）を選択し、選択信号６７が「１」の場合に入力Ｂ（７０）を選択し、最大絶対値選択演算の結果６８として出力する。
【０２６５】
第４の実施の形態のプロセッサは、第３の実施の形態のプロセッサと同じ実行命令を備える。ただし、「ａｂｍａｘ」命令による処理を行うのは演算器は図６に示す絶対値最大値演算器１５である。
【０２６６】
次に、第４の実施の形態によるプロセッサの動作を説明する。
【０２６７】
（動作例１）
第４の実施の形態のプロセッサで、図１６に示す４つのデータの中から絶対値が最大の値を求める動作を、絶対値最大値演算器１５を使う「ａｂｍａｘ」命令を中心に説明する。
【０２６８】
第４の実施の形態で使用するプログラムは第３の実施の形態に示した、図１５と同じものである。
【０２６９】
繰返し１回目のステップ（３）での動作は、従来の一般的なプロセッサの場合と同じである。
【０２７０】
ステップ（１５）では、絶対値最大値演算器１５を使った演算が行われる。この時の動作を図４０を用いて説明する。
【０２７１】
レジスタＣの値「０（０ｂ００００）」は入力Ａ（６９）に、レジスタＡの値「３（０ｂ００１１）」は入力Ｂ（７０）にそれぞれ入力される。
【０２７２】
第１の実施の形態の動作例１より、１の補数絶対値減算器３２の出力である絶対値比較演算の結果６５は「（０ｂ１１０１）」となる。絶対値比較演算の結果６５は「（０ｂ００００）」ではないので、ゼロ値判断結果６６は「０」である。選択信号生成手段３６では、絶対値比較演算の結果６５が負なので、選択信号６７として「１」を出力する。セレクタ３７では、選択信号６７が「１」なので、入力Ｂ（７０）を選択し、最大絶対値選択演算の結果６８として、「３（０ｂ００１１）」を出力する。そして、レジスタＣには「３（０ｂ０１１）」をセットする。
【０２７３】
ステップ（９）〜（１２）での動作は、従来の一般的なプロセッサの場合と同じである。
【０２７４】
繰返し２回目のステップ（３）は、従来の一般的なプロセッサの場合と同じである。
【０２７５】
ステップ（１５）では、絶対値最大値演算器１５を使った演算が行われる。この時の動作を図４１を用いて説明する。
【０２７６】
レジスタＣの値「３（０ｂ００１１）」は入力Ａ（６９）に、レジスタＡの値「−５（０ｂ１０１１）」は入力Ｂ（７０）にそれぞれ入力される。
【０２７７】
第１の実施の形態の動作例１より、１の補数絶対値減算器３２の出力である絶対値比較演算の結果６５は「（０ｂ１１１１）」となる。絶対値比較演算の結果６５は「（０ｂ００００）」ではないので、ゼロ値判断結果６６は「０」である。選択信号生成手段３６では、絶対値比較演算の結果６５が負なので、選択信号６７として「１」を出力する。セレクタ３７では、選択信号６７が「１」なので、入力Ｂ（７０）を選択し、最大絶対値選択演算の結果６８として、「−５（０ｂ１０１１）」を出力する。そして、レジスタＣには「−５（０ｂ１０１１）」をセットする。
【０２７８】
ステップ（９）〜（１２）での動作は、従来の一般的なプロセッサの場合と同じである。
【０２７９】
繰返し３回目のステップ（３）は、従来の一般的なプロセッサの場合と同じである。
【０２８０】
ステップ（１５）では、絶対値最大値演算器１５を使った演算が行われる。この時の動作を図４２を用いて説明する。
【０２８１】
レジスタＣの値「−５（０ｂ１０１１）」は入力Ａ（６９）に、レジスタＡの値「−２（０ｂ１１１０）」は入力Ｂ（７０）にそれぞれ入力される。
【０２８２】
第１の実施の形態の動作例１より、１の補数絶対値減算器３２の出力である絶対値比較演算の結果６５は「（０ｂ００１１）」となる。絶対値比較演算の結果６５は「（０ｂ００００）」ではないので、ゼロ値判断結果６６は「０」である。選択信号生成手段３６では、絶対値比較演算の結果６５が負でなく、ゼロ値判断結果６６は「０」なので、選択信号６７として「０」を出力する。セレクタ３７では、選択信号６７が「０」なので、入力Ａ（６９）を選択し、最大絶対値選択演算の結果６８として、「−５（０ｂ１０１１）」を出力する。そして、レジスタＣには「−５（０ｂ１０１１）」をセットする。
【０２８３】
繰返し４回目のステップ（３）は、従来の一般的なプロセッサの場合と同じである。
【０２８４】
ステップ（１５）では、絶対値最大値演算器１５を使った演算が行われる。この時の動作を図４３を用いて説明する。
【０２８５】
レジスタＣの値「−５（０ｂ１０１１）」は入力Ａ（６９）に、レジスタＡの値「６（０ｂ０１１０）」は入力Ｂ（７０）にそれぞれ入力される。
【０２８６】
第１の実施の形態の動作例１より、１の補数絶対値減算器３２の出力である絶対値比較演算の結果６５は「（０ｂ１１１０）」となる。絶対値比較演算の結果６５は「（０ｂ００００）」ではないので、ゼロ値判断結果６６は「０」である。選択信号生成手段３６では、絶対値比較演算の結果６５が負なので、選択信号６７として「１」を出力する。セレクタ３７では、選択信号６７が「１」なので、入力Ｂ（７０）を選択し、最大絶対値選択演算の結果６８として、「６（０ｂ０１１０）」を出力する。そして、レジスタＣには「６（０ｂ０１１０）」をセットする。
【０２８７】
ステップ（９）〜（１２）での動作は、従来の一般的なプロセッサの場合と同じである。
【０２８８】
以上の処理を行うことにより、レジスタＣに絶対値の最大値である「６」を求めることができる。
【０２８９】
（動作例２）
第４の実施の形態のプロセッサで、レジスタＡに「０（０ｂ００００）」、レジスタＣに４ビットの２の補数表現で表現が可能範囲で絶対値が最大の負の値「−８（０ｂ１０００）」がセットされている場合に、「ａｂｍａｘ  Ｃ，Ａ」命令のステップ（１５）が実行される場合を、図４４を用いて説明する。これは、前記に示した従来のプロセッサではオーバーフローのために正しく絶対値の大小比較を行うことができない場合である。
【０２９０】
レジスタＣの値「−８（０ｂ１０００）」は入力Ａ（６９）に、レジスタＡの値「０（０ｂ００００）」は入力Ｂ（７０）にそれぞれ入力される。
【０２９１】
第１の実施の形態の動作例２より、１の補数絶対値減算器３２の出力である絶対値比較演算の結果６５は「（０ｂ０１１１）」となる。絶対値比較演算の結果６５は「（０ｂ００００）」ではないので、ゼロ値判断結果６６は「０」である。選択信号生成手段３６では、絶対値比較演算の結果６５は負でなく、ゼロ値判断結果６６も「０」なので、選択信号６７として「０」を出力する。セレクタ３７では、選択信号６７が「０」なので、入力Ａ（６９）を選択し、最大絶対値選択演算の結果６８として、「−８（０ｂ１０００）」を出力する。そして、レジスタＣには「−８（０ｂ１０００）」をセットする。
【０２９２】
このように第４の実施の形態のプロセッサにおいては「−８（０ｂ１０００）」と「０（０ｂ００００）」では、「−８（０ｂ１０００）」をより絶対値の大きい値として出力することができる。
【０２９３】
（動作例３）
第４の実施の形態のプロセッサで、レジスタＡに「−４（０ｂ１１００）」、レジスタＣに「３（０ｂ００１１）」がセットされている場合に、「ａｂｍａｘＣ，Ａ」ステップ（１５）が実行される場合を図４５を用いて説明する。これは、前述した第１の実施の形態から第３の実施の形態のプロセッサでは正しく絶対値の大小比較を行うことができない場合である。
【０２９４】
レジスタＣの値「３（０ｂ００１１）」は入力Ａ（６９）に、レジスタＡの値「−４（０ｂ１１００）」は入力Ｂ（７０）にそれぞれ入力される。
【０２９５】
第１の実施の形態の動作例３より、１の補数絶対値減算器３２の出力である絶対値比較演算の結果６５は「（０ｂ００００）」となる。絶対値比較演算の結果６５は「（０ｂ００００）」なので、ゼロ値判断結果６６は「１」である。選択信号生成手段３６では、絶対値比較演算の結果６５は負でないが、ゼロ値判断結果６６が「１」で、入力Ｂ（７０）の値も負なので、選択信号６７として「１」を出力する。セレクタ３７では、選択信号６７が「１」なので、入力Ｂ（７０）を選択し、最大絶対値選択演算の結果６８として、「−４（０ｂ１１００）」を出力する。そして、レジスタＣには「−４（０ｂ１１００）」をセットする。
【０２９６】
このように第４の実施の形態のプロセッサによれば、レジスタＡの値が負（例えば−４）で、レジスタＢの値がレジスタＡの値の絶対値の１小さい数の正の値（例えば３）の場合でも、正しく絶対値の大小比較を行うことができる。
【０２９７】
（動作例４）
第４の第４の実施の形態のプロセッサで、絶対値が等しく正負が逆である２つの入力値に対して絶対値の大小比較を行う場合の動作例を示す。
【０２９８】
レジスタＡに「−３（０ｂ００１１）」、レジスタＣに「３（０ｂ１１０１）」がセットされている場合に、「ａｂｍａｘ  Ｃ，Ａ」ステップ（１５）が実行される場合を図４６を用いて説明する。
【０２９９】
レジスタＣの値「３（０ｂ００１１）」は入力Ａ（６９）に、レジスタＡの値「−３（０ｂ１１０１）」は入力Ｂ（７０）にそれぞれ入力される。
【０３００】
入力Ａ（６９）の値「（０ｂ００１１）」から、入力Ｂ（７０）を１の補数表現化した絶対値「（０ｂ００１０）」を減算するので、絶対値比較演算の結果６５は「（０ｂ０００１）」となる。絶対値比較演算の結果６５は「（０ｂ００００）」ではないので、ゼロ値判断結果６６は「０」である。選択信号生成手段３６では、絶対値比較演算の結果６５は負でなく、ゼロ値判断結果６６も「０」あるので、選択信号６７として「０」を出力する。セレクタ３７では、選択信号６７が「０」なので、入力Ａ（６９）を選択し、最大絶対値選択演算の結果６８として、「３（０ｂ００１１）」を出力する。そして、レジスタＣには「３（０ｂ００１１）」をセットする。
【０３０１】
レジスタＡに「３（０ｂ１１０１）」、レジスタＣに「−３（０ｂ００１１）」がセットされている場合に、「ａｂｍａｘ  Ｃ，Ａ」ステップ（１５）が実行される場合を図４７を用いて説明する。
【０３０２】
レジスタＣの値「−３（０ｂ１１０１）」は入力Ａ（６９）に、レジスタＡの値「３（０ｂ００１１）」は入力Ｂ（７０）にそれぞれ入力される。
【０３０３】
入力Ａ（６９）を１の補数表現化した絶対値「（０ｂ００１０）」から、入力Ｂ（７０）の値「（０ｂ００１１）」を減算するので、絶対値比較演算の結果６５は「（０ｂ１１１１）」となる。絶対値比較演算の結果６５は「（０ｂ００００）」ではないので、ゼロ値判断結果６６は「０」である。選択信号生成手段３６では、絶対値比較演算の結果６５は負なので、選択信号６７として「１」を出力する。セレクタ３７では、選択信号６７が「１」なので、入力Ｂ（７０）を選択し、最大絶対値選択演算の結果６８として、「３（０ｂ００１１）」を出力する。そして、レジスタＣには「３（０ｂ００１１）」をセットする。
【０３０４】
動作例４から分かるように、第４の実施の形態のプロセッサにおける絶対値最大値演算器では、絶対値が等しく、正負が逆の２つの値が入力された場合には必ず正の値の方を出力する。
【０３０５】
以上の動作例に示したように第４の実施の形態のプロセッサでは、誤差なしで絶対値が最大の値を求めることができ、４ビットの２の補数表現で表現が可能な負の値で絶対値が最大である値も正しく演算することができる。また、図８に示した従来のプロセッサのプログラムにおけるステップ（７）〜ステップ（９）をハードで実行するので、より高速に絶対値が最大の値を求めることができる。
【０３０６】
さらに、絶対値が等しく正負が逆の２つの値を比較した場合には、正の値の方を必ず出力する。このため、図６に示す絶対値最大値演算器１５を使って複数のデータの中の絶対値が最大の値を求めた結果、負の値（例えば−４）が求まった場合には、その求まった負の値と絶対値が等しい正の値（例えば４）は、絶対値が最大の値を求める対象となったデータ群の中には存在しないことが保証される。このことは次のような場合に有効である。
【０３０７】
例えば、第４の実施の形態のプロセッサで、複数のデータの中から絶対値が最大である値を求めた結果、「−４（０ｂ１１００）」が求まったとする。すると、その複数のデータの中に「４（０ｂ０１００）」は存在しないことが保証される。絶対値が最大である値を求める対象となった複数のデータの個々の値を、最小のビット幅で無駄なく表現する場合には、−４〜３の８つの値を表すことができる３ビットのビット幅を与えれば良いことになる。仮に、データ群の中に「４（０ｂ０１００）」が存在しないことが保証されなければ、−４〜４の９つの値を表すことが可能な４ビットのビット幅が必要となる。このように、第４の実施の形態のプロセッサは従来のプロセッサに比べてデータ群を無駄なく表現できるビット幅を高速に正しく求めることができる。
【０３０８】
第４の実施の形態のプロセッサを用いて絶対値最大値演算器１５を使わずに絶対値が最大の値を求めるプログラムを図５２に示す。ただし、「ａｂｍａｘ」命令は複数のステップに分けて詳細にしている。図５２のプログラムにおいて、「ａｂｓ１  ａ，ｂ」命令は、レジスタｂの値を１の補数表現化による絶対値にしてレジスタａにセットする命令であり、「ｊｍｐ（ｂｅ）  ｌａｂｅｌ」命令は、Ｎフラグが０の場合にｌａｂｅｌにジャンプする命令であり、「ｊｍｐ（ｎｅ）  ｌａｂｅｌ」命令は、Ｚフラグが０の場合にｌａｂｅｌにジャンプする命令である。また、ステップ（２０）において「ｊｍｐ（ｂｅ）」命令が条件判断に用いる演算結果は、ステップ（６）の演算結果が０の場合はステップ（１９）の演算結果であり、ステップ（２０）の演算結果が０でない場合はステップ（６）の演算結果である。ステップ（１６）、ステップ（１７）、ステップ（６）の３ステップが「ａｂｍａｘ」命令に対応している。
【０３０９】
なお、第１の実施の形態および第２の実施の形態では１の補数絶対値演算器の構成として図２および図３の第１の１の補数絶対値演算器２０や第２の１の補数絶対値演算器２１のような構成を示したが、同じ機能が実現できるものであれば他の構成によって本発明の演算器またはプロセッサを実現してもよい。
【０３１０】
図２、図３に示したもの以外の１の補数絶対値演算器の構成例を図１０に示す。図１０に示す１の補数絶対値演算器は、入力の符号ビットと、入力の各ビットの排他論理和演算を行う排他論理和演算手段９４で構成される。排他論理和演算手段９４の制御信号としては入力データの符号ビットが入力される。
排他論理和演算手段９４の構成の例としては図５０に示すものが適用できる。図５０に示す排他論理和演算手段９４の入力は４ビット幅である。図５０に示す排他論理和演算手段９４は、入力の各ビットと制御信号との排他論理和演算を行う複数の排他論理和演算素子３８からなる。
【０３１１】
次に図１０に示す１の補数絶対値演算器の動作例を示す。例えば、「３（０ｂ００１１）」が入力されたとすると、符号ビットの値「０ｂ０」と入力「３（０ｂ００１１）」のそれぞれのビットに対し排他論理和演算が行われて「（０ｂ００１１）」を出力する。この場合、排他論理和演算の前後で入力のビットは変化しない。また、「−５（０ｂ１０１１）」が入力されたとすると、符号ビットの値「０ｂ１」と入力「−５（０ｂ１０１１）」のそれぞれのビットに対し排他論理和演算が行われて「（０ｂ０１００）」を出力する。この場合、排他論理和演算の前後で入力のビットが反転する。この例に示した通り、図１０に示すような構成であっても、１の補数の絶対値演算器を構成することができる。
【０３１２】
なお、第２の実施の形態では１の補数絶対値反転演算器の構成として図３の１の補数絶対値反転演算器２７のような構成を示したが、他の構成により本発明の演算器を実現してもよい。
【０３１３】
図３に示したもの以外の１の補数絶対値反転演算器の構成例を図１１に示す。図１１に示す１の補数の絶対値反転演算器は、入力の符号ビットと、入力の各ビットの排他論理和演算を行い、その結果をビット反転して出力する複数の排他論理和否定演算素子３９で構成される。例えば、「３（０ｂ００１１）」が入力されたとすると、符号ビットの値「０ｂ０」と入力「３（０ｂ００１１）」のそれぞれのビットに対し非排他論理和演算が行われて「（０ｂ１１００）」を出力する。また、「−５（０ｂ１０１１）」が入力されたとすると、符号ビットの値「０ｂ１」と入力「−５（０ｂ１０１１）」のそれぞれのビットに対し非排他論理和演算が行われて「（０ｂ１０１１）」を出力する。例に示した通り、図１１のような構成であっても、１の補数絶対値反転演算器を構成できる。
【０３１４】
もう一つの１の補数絶対値反転演算器の構成例を図１２に示す。図１２に示す１の補数の絶対値反転演算器は、符号ビットを反転させる反転器４０と、入力の符号ビットを反転した値と、入力の各ビットの排他論理和演算を行う排他論理和演算手段９４で構成される。排他論理和演算手段９４の制御信号としては、反転器４０の出力が入力される。排他論理和演算手段９４の構成は図５０に示したものと同じなので説明を省略する。
【０３１５】
次に図１２に示す１の補数絶対値反転演算器の動作の例を説明する。例えば、「３（０ｂ００１１）」が入力されたとすると、符号ビットの値「０ｂ０」をビット反転した値「０ｂ１」と、入力「３（０ｂ００１１）」のそれぞれのビットに対し排他論理和演算が行われて「（０ｂ１１００）」を出力する。また、「−５（０ｂ１０１１）」が入力されたとすると、符号ビットの値「０ｂ１」をビット反転した値「０ｂ０」と、入力「−５（０ｂ１０１１）」のそれぞれのビットに対し排他論理和演算が行われて「（０ｂ１０１１）」を出力する。例に示した通り、図１２のような構成であっても、１の補数絶対値反転演算器を構成できる。
【０３１６】
これまでに説明した第１の実施の形態から第４の実施の形態のプロセッサおよび従来のプロセッサを用いて図５３に示すデータから絶対値が最大のデータを求めた場合に、プロセッサが絶対値が最大のデータを最終的に決定するまでに選択するデータの変遷、および、求まる絶対値が最大のデータを図５４に示す。この図に示すように、従来のプロセッサでは本来求まるべき値が「−８」であるのに対し、求まった値は「２」であり、真の値との差が非常に大きくなっている。これは、データの中に含まれている４ビット幅の２の補数で表現できる範囲で絶対値が最大である負の値「−８」を正しく演算できないためである。また、第１の実施の形態から第３の実施の形態のプロセッサでは、絶対値が最大の値として「７」が求まり、従来のプロセッサと比較して求まるべき値との誤差が遥かに小さくなっている。これらに対し、第４の実施の形態のプロセッサでは、絶対値が最大の値として本来求まるべき「−８」が正しく求まっている。このように、本発明の第１の実施の形態から第４の実施の形態のプロセッサによると、従来のプロセッサに比べ絶対値が最大の値を求める精度が格段に向上していることがわかる。
【０３１７】
（第５の実施の形態）
第５の実施の形態のプロセッサは、図７に示した従来の一般的なプロセッサでの通常のＡＬＵに変えて、図４８に示すようなＡＬＵを備えるものである。なお、他の構成は図７に示す従来の一般的なプロセッサと同じである。これは即ち、従来のプロセッサが備えるＡＬＵに変更を加えて本発明の１の補数絶対値減算器の機能を持たせたプロセッサである。
【０３１８】
図４８に示すようにＡＬＵは、排他論理和演算手段７１と反転器７２とセレクタ７３と、排他論理和演算手段７４と反転器７５とセレクタ７６と、加算器７８と、セレクタ７７を備えている。このＡＬＵは、通常の加算演算、減算演算に加え、制御信号１０により指定されるレジスタファイル７内の２つのレジスタのそれぞれが保持する２つの値について１の補数表現を用いた絶対値の比較演算を行い、その比較結果を２つの値の絶対値のうちのどちらが大きいかを表す指示情報として出力する。
【０３１９】
排他論理和演算手段７１は、図５０に示すように複数の排他論理和演算子３８を組み合わせて構成されている。排他論理和演算手段７１は、入力として受け取った入力Ａ（６９）と、セレクタ７３から受け取った１ビットの制御信号との排他論理和演算を行う。反転器７２は、入力Ａ（６９）の符号のビットを反転したものを符号の反転信号８４として出力する。セレクタ７３は、制御信号Ａ（７９）に基づいて、入力Ａ（６９）の符号信号８３、符号の反転信号８４、固定値０信号８５、固定値１信号８６、からいずれかを選択して１ビットを出力する。  これにより、排他論理和演算手段７１は、セレクタ７３から制御信号として入力Ａ（６９）の符号信号８３を受け取った場合は、入力Ａ（６９）の絶対値を出力することになる。つまり、符号ビットが「１」で、負の場合は入力Ａ（６９）と「１１１１」との排他論理和演算が行われるため入力Ａ（６９）の各ビットが反転されて１の補数表現化による絶対値が排他論理和演算手段１７から出力され、符号ビットが「０」で、正の場合は入力Ａ（６９）と「００００」との排他論理和演算が行われて入力Ａ（６９）はそのままの値で排他論理和演算手段１７から出力される。また、排他論理和演算手段１７が、セレクタ７３から制御信号として入力Ａ（６９）の符号の反転信号８４を受け取った場合は、入力Ａ（６９）の１の補数表現化による絶対値のビット反転を出力する。
【０３２０】
排他論理和演算手段７４は、図５０に示すように複数の排他論理和演算子３８を組み合わせて構成されている。排他論理和演算手段７４は、入力として受け取った入力Ｂ（７０）の各ビットと、セレクタ７６から受け取った１ビットの制御信号との排他論理和演算を行う。反転器７５は、入力Ｂ（７０）の符号のビットを反転したものを符号の反転信号８８として出力する。セレクタ７６は、制御信号Ｂ（８０）に基づいて、入力Ｂ（７０）の符号信号８７、符号の反転信号８８、固定値０信号８９、固定値１信号９０、からいずれかを選択して１ビットを出力する。
【０３２１】
セレクタ７７は、制御信号Ｃ（８１）に基づいて、固定値０信号（９１）か固定値１信号（９２）かを選択して１ビットを出力する。
【０３２２】
加算器７８は、排他論理和演算手段７１からの出力と排他論理和演算手段７４からの出力とセレクタ７７からの出力を加算して、出力８２を出力する。
【０３２３】
なお、制御信号Ａ（７９）、制御信号Ｂ（８０）、制御信号Ｃ（８１）のそれぞれは、制御信号１０として、デコーダ５（図７参照）からまとめて送信される。
【０３２４】
次に、第５の実施の形態におけるプロセッサのＡＬＵの動作を説明する。
【０３２５】
（動作例１）
制御信号Ａ（７９）に基づいてセレクタ７３から「符号信号８３」が出力され、制御信号Ｂ（８０）に基づいてセレクタ７６から「符号の反転信号８８」が出力され、制御信号Ｃ（８１）に基づいて「固定値１（９２）」を出力する場合を説明する。この場合、プロセッサのＡＬＵは、入力Ａ（６９）から入力Ｂ（７０）を減じる減算を行う。
【０３２６】
制御信号Ａ（７９）に基づいてセレクタ７３から「符号の信号８３」が排他論理和演算手段７１に入力されると、排他論理和演算手段７１では入力Ａ（６９）の各ビットと入力Ａ（６９）の符号との排他論理和演算が行われる。そのため、排他論理和演算手段７１の出力は入力Ａ（６９）の１の補数の絶対値となる。
【０３２７】
制御信号Ｂ（８０）に基づいてセレクタ７６から「符号の反転信号８８」が排他論理和演算手段７４に入力されると、排他論理和演算手段７４では入力Ｂ（７０）と入力Ｂ（７０）の符号との排他論理和演算の結果のビット反転が行われる。そのため、排他論理和演算手段７４の出力は入力Ｂ（７０）の１の補数化表現による絶対値のビット反転となる。
【０３２８】
加算器７８では、入力Ａ（６９）の１の補数表現化による絶対値と、入力Ｂ（７０）の１の補数表現化による絶対値のビット反転と、セレクタ７７からの出力「１」を加算することになる。これにより、加算器７８は、入力Ａ（６９）から入力Ｂ（７０）を減算した結果を出力８２として出力する。よって、第５の実施の形態におけるプロセッサのＡＬＵは、第２の実施の形態に示した動作と同じく、入力Ａ（６９）と入力Ｂ（７０）との１の補数絶対値減算を行うことができる。
【０３２９】
（動作例２）
制御信号Ａ（７９）に基づいてセレクタ７３から「固定値０（８５）」が出力され、制御信号Ｂ（８０）に基づいてセレクタ７６から「固定値０（８９）」が出力され、制御信号Ｃ（８１）に基づいて「固定値０（９１）」を出力する場合を説明する。この場合、プロセッサのＡＬＵは、入力Ａ（６９）に入力Ｂ（７０）を加える加算を行う。
【０３３０】
制御信号Ａ（７９）に基づいて「固定値０（８５）」が排他論理和演算手段７１に入力されると、排他論理和演算手段７１では入力Ａ（６９）の各ビットと「０」との排他論理和演算が行われる。そのため、排他論理和演算手段７１は、入力Ａ（６９）をそのまま出力する。
【０３３１】
制御信号Ｂ（８０）に基づいて「固定値０（８９）」が排他論理和演算手段７４に入力されると、排他論理和演算手段７４では入力Ｂ（７０）の各ビットと「０」との排他論理和演算が行われる。そのため、排他論理和演算手段７４は、入力Ｂ（７０）をそのまま出力する。
【０３３２】
加算器７８では、排他論理和演算手段７４からの出力である入力Ａ（６９）の値と、排他論理和演算手段７６からの出力である入力Ｂ（７０）の値と、セレクタ７７からの出力である「０」とを加算する。よって、この場合、プロセッサのＡＬＵは入力Ａ（６９）と入力Ｂ（７０）との加算を行う。
【０３３３】
（動作例３）
制御信号Ａ（７９）に基づいてセレクタ７３から「固定値０（８５）」が出力され、制御信号Ｂ（８０）に基づいてセレクタ７６から「固定値１（９０）」が出力され、制御信号Ｃ（８１）に基づいてセレクタ７７から「固定値１（９２）」を出力する場合を説明する。
【０３３４】
制御信号Ａ（７９）に基づいて「固定値０（８５）」が排他論理和演算手段７１に入力されると、排他論理和演算手段７１では、入力Ａ（６９）の各ビットと「０」との排他論理和演算が行われる。そのため、排他論理和演算手段７１は、入力Ａ（６９）をそのまま出力する。
【０３３５】
制御信号Ｂ（８０）に基づいて「固定値１（９０）」が排他論理和演算手段７６に入力されると、排他論理和演算手段７４では、入力Ｂ（７０）と「１」との排他論理和演算が行われる。そのため、排他論理和演算手段７４は、入力Ｂ（７０）のビット反転を出力する。
【０３３６】
加算器７８では、排他論理和演算手段７１からの出力である入力Ａ（６９）の値と、排他論理和演算手段７６からの出力である入力Ｂ（７０）のビット反転の値と、セレクタ７７からの出力である「１」とを加算する。よって、この場合は、プロセッサのＡＬＵは入力Ａ（６９）から入力Ｂ（７０）を減じる減算を行う。
【０３３７】
以上の動作例に示したように、第５の実施の形態のプロセッサのＡＬＵは、制御信号Ａ（７９）、制御信号Ｂ（８０）、制御信号Ｃ（８１）の組み合わせにより、入力Ａ（６９）と入力Ｂ（７０）とを用いた異なる種類の演算を行うことが可能である。制御信号Ａ（７９）、制御信号Ｂ（８０）、制御信号Ｃ（８１）の組み合わせと、それによって得られる演算結果を動作例１〜３に示した以外のものも含めて図４９に示す。
【０３３８】
このように第５の実施の形態のプロセッサのように構成すれば、本発明に係る演算器を用いてプロセッサが本来備えているＡＬＵの機能をも実現することが可能である。
【０３３９】
なお、第５の実施の形態に示した構成以外の構成により本発明に係る演算器を実現し、プロセッサが本来備えているＡＬＵの機能をも実現してもよい。
【０３４０】
なお、第１の実施の形態〜第４の実施の形態では、演算器のビット幅が４ビットの場合を示したがそれ以外のビット幅を用いて同じ構成を実現してもよい。
【０３４１】
なお、第３の実施の形態および第４の実施の形態では、複数のデータの中から絶対値が最大となる値を求める場合の動作を示したが、セレクタ３３、セレクタ３７の選択条件を逆にすることにより、絶対値が最小となる値も求めることも可能である。
【０３４２】
さらに、本発明の演算方法をコンピュータプログラムで表し、これをコンピュータで読み取り可能な記録媒体に記録し、この記録媒体をコンピュータに読み込ませて本発明の演算方法を実現することも可能である。
【０３４３】
さらに、本発明の演算方法をプロセッサのマイクロコードで表し、これをプロセッサの実行命令として、本発明の演算方法を実現することも可能である。
【０３４４】
【発明の効果】
本発明の請求項１から請求項６のいずれかに記載の演算器は、絶対値の比較に１の補数表現化による絶対値を用いるので、所定のビット幅で２の補数を表現しうる範囲で最大の絶対値をもつ負の値を含む値についても正しく絶対値の大小比較を行うことができる。
【０３４５】
本発明の請求項３または請求項６に記載の演算器によれば、絶対値が同じで符号が異なる２つの値の場合には符号が正の値を絶対値が大きい値として出力する。よって、この演算器を用いて複数のデータの中から絶対値が最大の値を求めた結果として、負の値Ａが求まった場合は、データ群の中には値Ａと絶対値が同じで符号が逆、つまり正の値が含まれないことを保証することができる。正の値が含まれないことが保証されるので、データ群のそれぞれの値を一定のビット幅で表現するために必要なビット幅を無駄なく設定することができる。
【０３４６】
本発明の請求項６の演算器によれば、絶対値を比較する２数のうちの被減算値が負の値で、減算値が被減算値の絶対値より１小さい正の値である場合には、被減算値を絶対値が大きい値として出力する。よって１の補数表現化による絶対値の比較を用いて、誤差なく絶対値が最大の値を求めることができる。
【０３４７】
本発明の請求項７に記載の演算方法によれば、本発明の請求項１に記載の演算器を容易に実現することができるとともに、この発明の思想をもとにコンピュータプログラムなどに適用することもできる。
【０３４８】
本発明の請求項８に記載の演算方法によれば、本発明の請求項２に記載の演算器を容易に実現することができるとともに、この発明の思想をもとにコンピュータプログラムなどに適用することもできる。
【０３４９】
本発明の請求項９に記載の演算方法によれば、本発明の請求項３に記載の演算器を容易に実現することができるとともに、この発明の思想をもとにコンピュータプログラムなどに適用することもできる。
【０３５０】
本発明の請求項１０に記載の演算方法によれば、本発明の請求項４に記載の演算器を容易に実現することができるとともに、この発明の思想をもとにコンピュータプログラムなどに適用することもできる。
【０３５１】
本発明の請求項１１に記載の演算方法によれば、本発明の請求項５に記載の演算器を容易に実現することができるとともに、この発明の思想をもとにコンピュータプログラムなどに適用することもできる。
【０３５２】
本発明の請求項１２に記載の演算方法によれば、本発明の請求項６に記載の演算器を容易に実現することができるとともに、この発明の思想をもとにコンピュータプログラムなどに適用することもできる。
【０３５３】
本発明の請求項１３に記載のプロセッサによれば、プロセッサが備える実行命令により本発明の請求項１から請求項５のいずれかに記載の演算器を用いて２つの値の絶対値の大小比較や、複数のデータのなかから絶対値が最も大きな値を求めることができる。
【図面の簡単な説明】
【図１】  本発明を適用した第１の実施の形態および第２の実施の形態のプロセッサの構成を示す図。
【図２】  図１に示した１の補数絶対値減算器１３の第１の実施の形態での構成を示す図。
【図３】  図１に示した１の補数絶対値減算器１３の第２の実施の形態での構成を示す図。
【図４】  本発明を適用した第３の実施の形態および第４の実施の形態のプロセッサの構成を示す図。
【図５】  図４に示した絶対値最大値演算器１５の第３の実施の形態での構成を示す図。
【図６】  図４に示した絶対値最大値演算器１５の第４の実施の形態での構成を示す図。
【図７】  従来の一般的なプロセッサの構成を示す図。
【図８】  従来の２の補数の絶対値減算器を備えたプロセッサの構成を示す図。
【図９】  図８に示した２の補数絶対値減算器１４の構成を示す図。
【図１０】  １の補数の絶対値演算器の構成の例を示す図。
【図１１】  １の補数の絶対値反転演算器の構成の例を示す図。
【図１２】  １の補数の絶対値反転演算器の構成の例を示す図。
【図１３】  図７に示した従来の一般的なプロセッサで絶対値が最大である値を求めるプログラムを示す図。
【図１４】  図８に示した従来のプロセッサで絶対値が最大である値を求めるプログラムを示す図。
【図１５】  図４に示した第３の実施の形態および第４の実施の形態のプロセッサで絶対値の最大値を求めるプログラムを示す図。
【図１６】  絶対値が最大である値を求める対象となるデータが格納されているメモリを示す図。
【図１７】  従来のプロセッサで処理を行った場合の繰返し１回目の動作における各数値を示す図。
【図１８】  従来のプロセッサで処理を行った場合の繰返し２回目の動作における各数値を示す図。
【図１９】  従来のプロセッサで処理を行った場合の繰返し３回目の動作における各数値を示す図。
【図２０】  従来のプロセッサで処理を行った場合の繰返し４回目の動作における各数値を示す図。
【図２１】  従来のプロセッサで絶対値が最大の負の値を処理した場合における各数値を示す図。
【図２２】  第１の実施の形態の動作例１での繰返し１回目の動作における各数値を図。
【図２３】  第１の実施の形態の動作例１での繰返し２回目の動作における各数値を示す図。
【図２４】  第１の実施の形態の動作例１での繰返し３回目の動作における各数値を示す図。
【図２５】  第１の実施の形態の動作例１での繰返し４回目の動作における各数値を示す図。
【図２６】  第１の実施の形態の動作例２での動作における各数値を示す図。
【図２７】  第１の実施の形態の動作例３での動作における各数値を示す図。
【図２８】  第２の実施の形態の動作例１での繰返し１回目の動作における各数値を示す図。
【図２９】  第２の実施の形態の動作例１での繰返し２回目の動作における各数値を示す図。
【図３０】  第２の実施の形態の動作例１での繰返し３回目の動作における各数値を示す図。
【図３１】  第２の実施の形態の動作例１での繰返し４回目の動作における各数値を示す図。
【図３２】  第２の実施の形態の動作例２での動作における各数値を示す図。
【図３３】  第２の実施の形態の動作例３での動作における各数値を示す図。
【図３４】  第３の実施の形態の動作例１での繰返し１回目の動作における各数値を示す図。
【図３５】  第３の実施の形態の動作例１での繰返し２回目の動作における各数値を示す図。
【図３６】  第３の実施の形態の動作例１での繰返し３回目の動作における各数値を示す図。
【図３７】  第３の実施の形態の動作例１での繰返し４回目の動作における各数値を示す図。
【図３８】  第３の実施の形態の動作例２での動作における各数値を示す図。
【図３９】  第３の実施の形態の動作例３での動作における各数値を示す図。
【図４０】  第４の実施の形態の動作例１での繰返し１回目の動作における各数値を示す図。
【図４１】  第４の実施の形態の動作例１での繰返し２回目の動作における各数値を示す図。
【図４２】  第４の実施の形態の動作例１での繰返し３回目の動作における各数値を示す図。
【図４３】  第４の実施の形態の動作例１での繰返し４回目の動作における各数値を示す図。
【図４４】  第４の実施の形態の動作例２での動作における各数値を示す図。
【図４５】  第４の実施の形態の動作例３での動作における各数値を示す図。
【図４６】  第４の実施の形態の動作例４での動作における各数値を示す図。
【図４７】  第４の実施の形態の動作例４での動作における各数値を示す図。
【図４８】  第５の実施の形態のプロセッサのＡＬＵの構成を示す図。
【図４９】  第５の実施の形態のプロセッサのＡＬＵの制御信号と機能の組み合わせを示す図。
【図５０】  排他論理和演算手段９４の構成を示す図。
【図５１】  第１の実施の形態のプロセッサで絶対値が最大である値を求めるプログラムを示す図。
【図５２】  第４の実施の形態のプロセッサで絶対値が最大である値を求めるプログラムを示す図。
【図５３】  絶対値が最大であるデータを求める対象となるデータを示す図。
【図５４】  第１の実施の形態から第４の実施の形態のプロセッサおよび従来のそれぞれのプロセッサを用いて、図５３に示すデータから絶対値が最大であるデータを求めた場合のデータの選択過程および最終的に求まるデータの違いを示す図。
【符号の説明】
１  制御部
２  データバス部
３  プログラムカウンタ
４  実行命令メモリ
５  デコーダ
６  ＡＬＵ
７  レジスタファイル
８  データメモリ
９  フラグ設定部
１０  制御信号
１１  アドレス信号
１２  制御信号
１３  １の補数絶対値減算器
１４  ２の補数絶対値減算器
１５  絶対値最大値演算器
２０  第１の１の補数絶対値演算器
２１  第２の１の補数絶対値演算器
２２  減算器（指示情報出力手段）
２３  反転器
２４  セレクタ
２５  反転器
２６  セレクタ
２７  １の補数絶対値反転演算器
２８  加算器（指示情報出力手段）
２９  反転器
３０  セレクタ
３１  反転器
３２  １の補数絶対値減算器
３３  セレクタ
３４  ゼロ検出器
３５  選択手段
３６  選択信号生成手段
３７  セレクタ
３８  排他論理和演算素子
３９  排他論理和否定演算素子
４０  反転器
５０  第１の２の補数絶対値演算器
５１  第２の２の補数絶対値演算器
５２  反転器
５３  ＋１加算器
５４  セレクタ
５５  反転器
５６  ＋１加算器
５７  セレクタ
６０  符号反転後の値
６１  符号反転後の値
６２  絶対値演算処理後の値
６３  絶対値演算処理後の値
６４  絶対値反転処理後の値
６５  絶対値比較演算の結果（指示情報）
６６  ゼロ値判断結果
６７  選択信号
６８  絶対値最大値演算の結果
６９  入力Ａ
７０  入力Ｂ
７１  排他論理和演算手段
７２  反転器
７３  セレクタ
７４  排他論理和演算手段
７５  反転器
７６  セレクタ
７７  セレクタ
７８  加算器
７９  制御信号Ａ
８０  制御信号Ｂ
８１  制御信号Ｃ
８３  符号
８４  符号の反転
８５  固定値０
８６  固定値１
８７  符号
８８  符号の反転
８９  固定値０
９０  固定値１
９１  固定値０
９２  固定値１
９４  排他論理和演算手段
【図１】
0003672076.tif 000002
【図２】
0003672076.tif 000003
【図３】
0003672076.tif 000004
【図４】
0003672076.tif 000005
【図５】
0003672076.tif 000006
【図６】
0003672076.tif 000007
【図７】
0003672076.tif 000008
【図８】
0003672076.tif 000009
【図９】
0003672076.tif 000010
【図１０】
0003672076.tif 000011
【図１１】
0003672076.tif 000012
【図１２】
0003672076.tif 000013
【図１３】
0003672076.tif 000014
【図１４】
0003672076.tif 000015
【図１５】
0003672076.tif 000016
【図１６】
0003672076.tif 000017
【図１７】
0003672076.tif 000018
【図１８】
0003672076.tif 000019
【図１９】
0003672076.tif 000020
【図２０】
0003672076.tif 000021
【図２１】
0003672076.tif 000022
【図２２】
0003672076.tif 000023
【図２３】
0003672076.tif 000024
【図２４】
0003672076.tif 000025
【図２５】
0003672076.tif 000026
【図２６】
0003672076.tif 000027
【図２７】
0003672076.tif 000028
【図２８】
0003672076.tif 000029
【図２９】
0003672076.tif 000030
【図３０】
0003672076.tif 000031
【図３１】
0003672076.tif 000032
【図３２】
0003672076.tif 000033
【図３３】
0003672076.tif 000034
【図３４】
0003672076.tif 000035
【図３５】
0003672076.tif 000036
【図３６】
0003672076.tif 000037
【図３７】
0003672076.tif 000038
【図３８】
0003672076.tif 000039
【図３９】
0003672076.tif 000040
【図４０】
0003672076.tif 000041
【図４１】
0003672076.tif 000042
【図４２】
0003672076.tif 000043
【図４３】
0003672076.tif 000044
【図４４】
0003672076.tif 000045
【図４５】
0003672076.tif 000046
【図４６】
0003672076.tif 000047
【図４７】
0003672076.tif 000048
【図４８】
0003672076.tif 000049
【図４９】
0003672076.tif 000050
【図５０】
0003672076.tif 000051
【図５１】
0003672076.tif 000052
【図５２】
0003672076.tif 000053
【図５３】
0003672076.tif 000054
【図５４】
0003672076.tif 000055