(57)【特許請求の範囲】
【請求項１】
オフセット合計を計算するためのデータ処理システム（１０）であって：
オフセット値を有する命令を受け取るためのインタフェース手段（４０）であって、前記命令は実行する演算を指定するための第１部分、および符号部分と絶対値部分の両方を有するオフセット値を指定するための第２部分を有し、また前記インタフェース手段は第１アドレス値を受け取る、ところのインタフェース手段；
前記命令をデコードして、複数の制御信号を与えるための命令デコード（１８）手段は、前記命令を受け取るために前記インタフェース手段に結合されている、命令デコード手段；
前記命令の実行中に前記第１アドレス値を格納するためのレジスタ（６０）であって、前記第１アドレス値を受け取るために前記インタフェース手段に結合されているレジスタ；および
前記第１アドレス値を受け取るために前記レジスタに結合された論理演算回路（５２）であって、前記論理演算回路は前記オフセット値を受け取るために前記インタフェース手段に結合されており、前記論理演算回路は前記複数の制御信号の一部分を受け取るために前記命令デコード手段に結合されており、前記論理演算回路は前記オフセット値の前記符号部分を反転して反転オフセット符号値を提供し、前記論理演算回路は前記第１アドレス値，前記オフセット値の前記符号部分と前記絶対値部分，および前記反転オフセット符号値のそれぞれを加算してオフセット合計を生成し、前記オフセット合計は前記第１アドレス値の対称的範囲内にあるが、前記第１アドレス値には等しくない、論理演算回路（５２）；
によって構成されることを特徴とするデータ処理システム。
【請求項２】
オフセット合計を計算する方法であって：
オフセット値を有する命令を受け取る段階（１８）であって、前記命令は実行する演算を指定する第１部分、および符号部分と絶対値部分の両方を有する前記オフセット値を指定するための第２部分を有する、ところの段階；
第１アドレス値を受け取る段階（６０）；
前記命令を受け取ることに応答して、複数の制御信号を与えるために前記命令をデコードする段階（１８）；
前記命令の実行中に前記第１アドレス値を格納する段階（６０）；
前記オフセット値の前記符号部分を反転して、反転オフセット符号値を提供する段階（９８）；および
前記第１アドレス値，前記オフセット値の前記符号部分と前記絶対値部分，および前記反転オフセット符号値のそれぞれを加算して、オフセット合計を生成する段階であって、前記オフセット合計は前記第１アドレス値の対称的範囲内にあるが、前記第１アドレス値には等しくない段階；
によって構成されることを特徴とする方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は一般にデータ処理システムに関し、具体的にはデータ処理システムにおけるオフセットの計算に関する。
【０００２】
【従来の技術】
マイクロコントローラおよびマイクロプロセッサの動作中、よりフレキシビリティを与えるために多種多様なアドレス指定方式が開発されている。たとえばインデックス・アドレッシングは、プログラマが一つのテーブルまたはアレイの各要素にもっと簡単にアクセスできるようにするために開発された。一般にインデックス・アドレッシングでは、データ処理装置のＣＰＵは、一つの命令と共に供給されるオフセットにインデックス・レジスタの内容を加算して有効アドレスを形成する。ある種の実施形態では、インデックス・レジスタ以外にポインタ・レジスタを使用してもよい。
【０００３】
モトローラ社ＭＣ６８０９マイクロプロセッサでは、インデックス・アドレッシングは、定オフセット・モードを含めるよう拡張された。ＭＣ６８０９マイクロプロセッサはテキサス州オースティンのモトローラ社が市販している。定オフセット動作モードでは、２の補数形式のオフセットが複数のポインタ・レジスタの中の一つの内容に加算されて有効アドレスを形成する。５ビット（−１６から＋１５），８ビット（−１２８から＋１２７）および１６ビット（−３２７６８から＋３２７６７）のオフセット・サイズが使用できる。またノー・オフセットも指定できる。５ビットのオフセット値は一つのポストバイトの中に入れられている。ポストバイトは、オペランドの後に含まれているバイトで、一般には５ビット・オフセット値の他に、実行する演算の種類とポインタ・レジスタを示す符号化情報を含んでいる。実行する演算の種類およびポインタ・レジスタもこのポストバイトの中で指定しなければならないので、オフセット値は通常、最大値が５ビットに限定されている。８ビットおよび１６ビットのオフセット値は、ポストバイトのすぐ後のバイトの中に入れられている。
【０００４】
アキュムレータ・オフセット動作モードも、マイクロコントローラおよびマイクロプロセッサで実行できる。アキュムレータ・オフセット動作モードでは、ポインタ・レジスタの内容が、アキュムレータの中に入っているオフセット値に加算されて、有効アドレスを形成する。
【０００５】
マイクロプロセッサで一般に使用できるインデックス・アドレッシング動作モードは、特にそのアドレスが一つのテーブルもしくは配列を形成する場合に、アドレスへのアクセスがフレキシブルに行える方法を提供する。しかしながら符号付きオフセットの場合には、オフセット範囲はゼロを中心にして対称になっていない。前述のように、オフセットは−１６から＋１５，−１２８から＋１２７，または−３２７６８から＋３２７６７の範囲をとる。このオフセットには符号が付いているので、オフセット範囲の正の限界と負の限界は符号ビットを反映しなければならない。このため＋１５の値は２進形式０１１１１をとる。２進値１０００００は、最上位ビットがオフセットの符号を反映しなければならないので、１０進値の＋１６ではなく、１０進値の−１６を表している。
【０００６】
したがって、マイクロプロセッサのユーザが符号付きのインデックス・アドレッシングを使用する場合、オフセット範囲の正の限界は２（ｎ−１）  −１であり、ここでｎはオフセット値のビット数を指し、これは一般にはあまり使用されない値である。大抵の用途では、８もしくは１６など２の累乗のバイト数の増分（ｉｎｃｒｅｍｅｎｔ）  が必要である。そのためユーザが一つのテーブルにおいて１６バイト刻みで増分しなければならない場合には、５ビットのオフセットは正の最大範囲が１５バイトとなるので、１６のオフセットを提供するには８ビットのオフセットを使用しなければならない。前述のように、８ビットのオフセットは一般に、符号化命令の中でさらに１バイトを必要とする。そのため１６バイトの正のオフセット値を指定するには、さらに１バイトのプログラミング空間を使用しなければならない。多くのマイクロコントローラおよびマイクロプロセッサの用途では、内部プログラミング・メモリの量が制限されており、プログラミング空間の各バイトは非常に貴重である。
【０００７】
【発明が解決しようとする課題】
定オフセット動作モードまたはアキュムレータ・オフセット動作モードを用いて有効アドレスを計算する他に、２の補数のオフセットは、ポインタ・レジスタの増分もしくは減分（ｄｅｃｒｅｍｅｎｔ）  を自動的に行える。自動的に増分（オートインクリメント）を行う場合には、ポインタ・レジスタの内容が１もしくは２ずつ増分される。自動的に減分（オートデクリメント）を行う場合には、ポインタ・レジスタの内容は通常１もしくは２ずつ減分される。オートインクリメントやオートデクリメントは、情報を格納するテーブルにアクセスするのに有用である。しかしながらポインタ・レジスタ内の値は１もしくは２バイトずつしか変更できない。そのためオートインクリメント動作およびオートデクリメント動作は一般に、次に必要な一片の情報が現在、演算の実行に使用されるポインタ・レジスタ内の１もしくは２バイトのアドレス内にあるような限られた状況でのみ有用である。
【０００８】
【課題を解決するための手段】
本発明は上記の必要性を満足する。したがってオフセット合計を計算するデータ処理システムの一形態が提供される。このデータ処理システムは、オフセット値を有する命令を受け取るインタフェース回路を含んでいる。この命令は、実行する演算を指定するための第１の部分、および符号部分と絶対値部分の両方を有するオフセット値を指定するための第２の部分を有する。インタフェース回路はまた第１アドレス値を受け取る。命令デコード回路もデータ処理システム内に含まれていて、命令をデコードして複数の制御信号を与える。命令デコード回路は、命令を受け取るために入力回路に接続されている。命令の実行中に第１アドレス値を格納するレジスタは、第１アドレス値を受け取るためにインタフェース回路に接続されている。論理演算回路は、第１アドレス値の一部分を受け取るためにレジスタに接続されている。論理演算回路は、オフセット値を受けとるために入力回路に接続されており、複数の制御信号の一部分を受け取るために命令デコード回路に接続されている。論理演算回路は、オフセット符号部分を反転して、反転オフセット符号値を提供する。論理演算回路は、第１アドレス値のそれぞれに、オフセット値の符号部分および絶対値部分、ならびに反転オフセット符号値を加算して、オフセット合計を生成する。このオフセット合計は第１アドレス値の対称的な範囲内にはあるが、第１アドレス値とは等しくない。第２の形態では、オフセット合計を計算する方法が提供される。第１の段階では、オフセット値を有する命令を受け取る。この命令は、実行する演算を指定する第１部分、および符号部分と絶対値部分の両方を有するオフセット値を指定するための第２部分を有する。第１アドレス値も受け取る。命令を受け取ったことに応答して、この命令がデコードされて複数の制御信号を与える。第１アドレス値は、命令の実行中に格納される。オフセット値の符号部分が反転されて、反転オフセット符号値を与える。第１アドレス値のそれぞれ、オフセット値の符号部分と絶対値部分、および反転オフセット符号値が加算されて、オフセット合計を生成する。オフセット合計は第１アドレス値の対称的な範囲内にあるが、第１アドレス値とは等しくない。
【０００９】
上記およびその他の特徴ならびに利点は、添付図面と合わせて以下の詳細な説明からより明確に理解されよう。注意すべき重要なことは、図面は本発明の唯一の形態を表すことを意図していないことである。
【００１０】
【実施例】
本発明は、一般に使用されるバイト境界に基づき、インデックス・アドレッシング，オートインクリメントおよびオートデクリメントを実行する回路とその方法を提供する。一般に使用される境界は、８，１６，１２８など２の累乗である。またオフセット範囲は、可能な限り小さいビット数で符号化されており、正と負の両方の限界を有する。本発明のこの実現のユーザは、一つのテーブルもしくはアレイの中を正と負の両方向に２の累乗サイズの境界に基づき進むことができる。たとえば５ビットのオフセットでは、ユーザは、一つのテーブルもしくはアレイの中を、前方もしくは後方に一度に１６バイトずつ進むことができる。５ビットは、ポストバイト内のオフセットを符号化するのに使用され、プログラミング空間を節約できる。また８ビットのオフセットは、−１２８から＋１２８バイトのオフセット範囲を提供でき、１６ビットのオフセットは、−３２７６８から＋３２７６８バイトの範囲を提供できる。どちらの場合も、メモリ・プログラミング空間が節約される。しかしながらこの節約は小さなオフセット値のときに最も顕著になる。
【００１１】
本発明は、アドレス計算に使用される演算ハードウェアを修正変更することによって、符号付きオフセットを用いて、ゼロを中心に対称なアドレス指定範囲を達成する。その結果、−２（ｎ−１）  から＋２（ｎ−１）  のアドレス指定範囲が得られ、ここでｎはオフセット値のビット数を指す。しかしながら本発明のアドレス計算ハードウェアは、基準アドレス値からゼロのオフセットを提供できない。ほとんどのデータ処理装置は、基準アドレス値からノーオフセット・アドレスを提供できるような代替的なアドレス計算を提供している。そのため本発明は、このようなプロセッサにおいて機能性を損なうことなく使用できる。
【００１２】
本発明の実現に関する以下の説明では、「アサート」「ニゲート」という語は、論理信号「アクティブ・ハイ」「アクティブ・ロー」と混ぜて使用する場合に混乱を割けるために使用する。「アサート」は論理信号もしくはレジスタ・ビットを能動状態または論理真の状態と解釈することを指すのに用いる。「ニゲート」は、論理信号もしくはレジスタ・ビットを非能動状態もしくは論理偽の状態と解釈することを指すのに用いる。
【００１３】
本発明の一つの実現および前述した動作モードは、ＭＣ６８ＨＣ１１マイクロコントローラの修正変更形態で実現される。ＭＣ６８ＨＣ１１は、１６ビット・アドレスおよび記憶レジスタを含む８ビットのマイクロコントローラであり、テキサス州オースティンのモトローラ社が市販している。この実現をより詳細に示したのが図１である。図１はデータ処理システム１０を示しており、このシステムでは前述したインデックス・アドレッシング，オートインクリメント動作，オートデクリメント動作を実現できる。データ処理システム１０は一般に中央処理装置（ＣＰＵ）１２，発振器２４，電源回路２６，タイミング回路２８，外部バス・インタフェース３０，および内部メモリ３２を含む。ＣＰＵ１２は一般に、実行装置１４，バス制御論理回路１６，命令デコード論理回路１８，制御装置２０，およびシーケンサ２２を有する。
【００１４】
演算中、「Ｏｓｃ１」信号が、水晶など外部ソースを介して発振器２４に与えられる。水晶はＯｓｃ１信号とＯｓｃ２信号の間に接続されて水晶を発振可能にする。Ｏｓｃ１は「クロック」信号をデータ処理システム１０の残りの部分に与える。水晶発振器の動作はデータ処理技術では周知のものであり、当業者には自明であろう。
【００１５】
電源回路２６は外部電源から「Ｖｄｄ」信号と「Ｖｓｓ」信号の両方を受け取る。Ｖｄｄ信号は正の電圧を与え、Ｖｓｓ信号は基準電圧もしくは大地電圧を与える。Ｖｄｄ信号およびＶｓｓ信号は、データ処理システム１０の残りの各構成要素に与えられる。これらの信号の経路設定はデータ処理技術では周知のものであり、当業者には自明であろう。
【００１６】
タイミング回路２８はクロック信号を受信し、ついでタイミング制御バス３８を介してＣＰＵ１２，外部バス・インタフェース３０，および内部メモリ３２のそれぞれに然るべきタイミング信号を与える。
【００１７】
外部バス・インタフェース３０から外部アドレス・バス３５へと、複数のアドレス値が与えられる。同様に複数のデータ値は、外部バス・インタフェース３０によって外部データ・バス３３を介して伝達される。外部バス・インタフェース３０は、外部ユーザとデータ処理システム１０との間でのアドレス値とデータ値の受信および伝送を制御する。外部バス・インタフェース３０は複数のアドレス値およびデータ値を、それぞれ内部アドレス・バス３６および内部データ・バス３４を介してデータ処理システム１０の残りの部分に伝達する。
【００１８】
内部メモリ３２は、データ処理システム１０が正しく動作するために必要な情報を格納する働きをする。また、内部アドレス・バス３６および内部データ・バス３４を介して与えられるユーザ・プログラムで指定された場合には、他のデータ値を格納できる。
【００１９】
ＣＰＵ１２はデータ処理システム１０の動作中、複数の命令を実行する。データ処理システム１０では多くの形式の命令を実行できるが、ここでは、インデックス・アドレッシング，オートインクリメント動作およびオートデクリメント動作を中心に考察する。内部アドレス・バス３６および内部データ・バス３４は、実行装置１４と、データ処理システム１０の残りの部分との間で情報を伝達する。バス制御論理回路１６が複数の命令を取り込む。ついで各命令は命令デコード論理回路１８によってデコードされ、制御装置２０およびシーケンサ２２に与えられる。制御装置２０およびシーケンサ２２は複数の命令の実行順序を維持して、データ処理システム１０の計算機能を最大限有効に利用する。また制御装置２０はＭｉｃｒｏ−ＲＯＭメモリ（図示せず）を含んでおり、これはＭｉｃｒｏ−ＲＯＭ制御バス６５を介して、実行装置１４，バス制御論理回路１６，命令デコード論理回路１８のそれぞれに制御情報を与える。制御情報は、命令を正しく実行するために必要である。
【００２０】
実行装置１４をより詳細に示したのが図２である。実行装置１４は一般に、データ・バッファ４０，Ａ入力制御回路４８，Ａ入力マルチプレクサ５０，論理演算装置（ＡＬＵ）５２，Ｂ入力制御回路５４，Ｂ入力マルチプレクサ５６，スタック・ポインタ５８，およびインデックス・レジスタ６０を含む。スタック・ポインタ５８およびインデックス・レジスタ６０のほかに、実行装置１４内で他の記憶レジスタを実現できる。たとえば条件付きコード・レジスタもしくはスタック・ポインタも含んでもよい。上記記憶レジスタの実現および用途は当業者には周知のものであり、当業者には自明であろう。
【００２１】
外部情報バス４１はアドレス情報およびデータ情報をデータ・バッファ４０に与える。外部情報バス４１は内部アドレス・バス３６および内部データ・バス３４のそれぞれから、アドレス情報およびデータ情報を受け取る。データ・バッファ４０は外部情報バス４１を介して転送された値を、情報バスＡ６６および情報バスＢ６４を介して、実行装置１４の残りの部分に与える。ここでは詳細に示さないが、情報バスＡ６６および情報バスＢ６４は共に１６ビット幅である。
【００２２】
スタック・ポインタ５８の第１入力および第２入力はそれぞれ情報バスＡ６６および情報バスＢ６４に双方向に結合されている。同様にインデックス・レジスタ６０の第１入力および第２入力はそれぞれ情報バスＡ６６および情報バスＢ６４に双方向に結合されている。スタック・ポインタおよび条件付きコード・レジスタなどの付加レジスタも同様に、情報バスＡ６６および情報バスＢ６４に結合されている。
【００２３】
複数の制御信号は、Ｍｉｃｒｏ−ＲＯＭ制御バス６５を介してＡ入力制御論理４８およびＢ入力制御論理５４の両方に与えられる。Ｍｉｃｒｏ−ＲＯＭ制御バス６５は、制御装置２０内のＭｉｃｒｏ−ＲＯＭメモリ（図示せず）が与える情報に応答して、複数の制御信号を与える。Ｍｉｃｒｏ−ＲＯＭメモリは一般に、複数の命令の中の一つの実行を制御するために必要な情報を与える。
【００２４】
Ａ入力制御回路４８は、Ａ入力マルチプレクサ５０の制御入力に「制御Ａ」信号を与える。情報バスＡ６６は、Ａ入力マルチプレクサ５０のデータ入力に接続されている。Ａ入力マルチプレクサ５０は、「Ａ入力」と称される出力をＡＬＵ５２の第１入力に与えている。Ｂ入力制御回路５４はＢ入力マルチプレクサ５６の制御入力に「制御Ｂ」信号を与える。情報バスＢ６４は、Ｂ入力マルチプレクサ５６のデータ入力に接続されている。Ｂ入力マルチプレクサ５６は「Ｂ入力」と称される出力を、ＡＬＵ５２の第２入力に与える。
【００２５】
ＡＬＵ５２は各入力を処理して複数の結果を出し、これらの結果は結果バス１２０を介して転送される。結果バス１２０は、情報バスＢ６４を介してデータ・バッファ４０，スタック・ポインタ５８，またはインデックス・レジスタ６０に複数の結果を与える。
【００２６】
ＡＬＵ５２をより詳細に示したのが図３である。図３に示す本発明の実施例では、ＡＬＵ５２は、オフセット値の計算に必要な演算を実行するように構成されている。これらの演算は、定オフセット・モード動作，オートインクリメント，およびオートデクリメントを含む。ＡＬＵ５２が上記の演算の一つを実行していない場合には、ＡＬＵ５２は、他の演算を実行するのにもっと役立つ別の方法で構成してもよい。通常、マルチプレクサ（図示せず）を使用すると、ＡＬＵ５２は、用途に応じて異なる多様な構成を有することができる。当業者には、ＡＬＵ５２が多様な構成を有することができることは自明であろう。
【００２７】
図３で、ＡＬＵ５２は一般に、インバータ９８，および第１の複数の加算器回路（１００，１０２，１０４，１０６，１０８）を含んでいる。Ａ入力信号は、それぞれ「Ａ０」「Ａ１」「Ａ２」「Ａ１４」「Ａ１５」と称される第１の複数ビットを与える。ビットＡ０は加算器１００の第１入力に与えられる。同様にビットＡ１〜Ａ１５はそれぞれ加算器１０２，加算器１０４，加算器１０６，加算器１０８の第１入力に与える。Ｂ入力信号は、それぞれ「Ｂ０」「Ｂ１」「Ｂ２」「Ｂ１４」「Ｂ１５」と称される第２の複数ビットを与える。ビットＢ０は、加算器１００の第２入力に与えられる。同様にビットＢ１〜Ｂ１５はそれぞれ加算器１０２，加算器１０４，加算器１０６，加算器１０８の第２入力に与えられる。Ａ１５信号はインバータ９８の入力に接続されている。図３には詳細に示していないが、Ａ３〜Ａ１３およびＢ３〜Ｂ１３の各ビットは、第２の複数の加算器（図示せず）の内の一つにそれぞれ与えられる。第２の複数の各加算器（図示せず）は加算器１００〜加算器１０８と同じ働きをしており、そのため同様の構成をとる。
【００２８】
「Ｃｉｎ」と称される信号はインバータ９８によって出力され、加算器１００の第３入力に与えられる。加算器１００は「Ｓ０」と称される合計信号を出力する。また加算器１００は「Ｃ１」と称される信号を加算器１０２の第３入力に与える。加算器１０２は「Ｓ１」と称される合計信号を与える。加算器１０２はまた「Ｃ２」と称される信号を生成し、この信号は加算器１０４の第３入力に与えられる。加算器１０４は「Ｓ２」と称される合計出力および「Ｃ３」と称される信号を与える。Ｃ３信号は、次の加算器（図示せず）の第３入力に与えられる。最終的に、複数の加算器（図示せず）によって形成される桁上げチェーン（ｃａｒｒｙｃｈａｉｎ）  が、「Ｃ１４」と称される桁上げ信号を、加算器１０６の第３入力に伝搬する。加算器１０６は「Ｓ１４」と称される合計信号および「Ｃ１５」と称される桁上げ信号を出力する。Ｃ１５信号は加算器１０８の第３入力に与えられる。加算器１０８は「Ｓ１５」と称される合計信号、および「Ｃｏｕｔ  」と称される桁上げ信号を出力する。Ｓ０からＳ１５の各合計信号は、結果バス１２０を介して実行装置１４の残りの部分に与えられる。図３では詳細に示していないが、前記第２の複数の加算器はそれぞれ合計信号Ｓ３〜Ｓ１３を結果バス１２０に与える。また第２の複数の加算器はそれぞれ桁上げ信号を複数の加算器の中の次の加算器に与える。第２の複数の加算器（図示せず）はそれぞれ加算器１００〜１０８と同じ働きをするため、同様の構成をとる。
【００２９】
インデックス・アドレッシング，オートインクリメント動作，またはオートデクリメント動作の実行中、ユーザはデータ処理システム１０に対応する命令を与える。通常、インデックス・アドレッシングを使用する命令はニーモニック形式をとり、この形式は実行する演算の種類を示す演算コード、および当該演算コードによって演算を行う一つもしくは複数のデータ値を示すオペランドの両方を提供する。ここに示す例では、インデックス・アドレッシング・モードの命令は、演算コード，オフセット値，（初期アドレス値を格納する）ポインタ・レジスタを含むフォーマットを有すると想定する。前記フォーマットはデータ処理技術では周知のものであり、ここでは詳細に述べない。
【００３０】
オフセットは通常、定オフセット値、またはアキュムレータ内に格納された値である。ポインタ・レジスタはインデックス・レジスタ，スタック・ポインタ，またはプログラム・カウンタ・レジスタとして実現してもよい。データ処理技術では一般に知られている付加的アキュムレータおよびその他のレジスタも、ポインタ・レジスタとして使用してもよい。ポインタ・レジスタの内容は一般に、インデックス・アドレッシング，オートインクリメント動作，またはオートデクリメント動作を実行する前に、データ処理システム１０のユーザによってデータ処理システム内に格納される。オートインクリメント動作およびオートデクリメント動作はまた所定の命令フォーマットを有し、このフォーマットはシステムの設計者が決定する。加算もしくは減算するオフセット値は通常、オートインクリメント動作およびオートデクリメント動作のための所定の命令フォーマットで与えられる。
【００３１】
前述の通り、オフセット値の計算に必要な演算の実行中、ユーザは外部メモリもしくは内部メモリ３２に格納されたソフトウェア・プログラムを介して然るべき命令を与える。データ処理システム１０の外部ソースから命令が与えられる場合には、その命令は外部データ・バス３３を介して外部バス・インタフェース３０に入力される。ついで外部バス・インタフェース３０は内部データ・バス３４を介してＣＰＵ１２に命令を与える。内部メモリ３２内のソフトウェア・プログラムが命令を与える場合には、命令は内部データ・バス３４を介してＣＰＵ１２に与えられる。ＣＰＵ１２において、実行装置１４は、バス制御論理回路１６，制御装置２０，およびシーケンサ２２のそれぞれから受信した制御信号に応答して、命令デコード論理回路１８に命令を与える。ついで命令デコード論理回路１８は命令をデコードして、命令を正しく実行するために必要な複数の制御信号および情報信号を与える。複数の制御信号および情報信号には、インデックス・アドレッシング，オートインクリメント動作およびオートデクリメント動作に必要な変更された２の補数形式のオフセット値が含まれる。
【００３２】
命令を受け取ってデコードし次第、実行装置１４は、インデックス・アドレッシング，オートインクリメントまたはオートデクリメントに関連する演算を実行するために必要なステップを開始する。前述のように、データ処理システム１０のユーザは初期値を格納する。スタック・ポインタ５８およびインデックス・レジスタ６０の一つまたは両方の中で、この初期値にオフセット値が加算される。第１の例では、データ処理システム１０のユーザは、５ビット幅の符号付き定オフセットを有するインデックス・アドレッシングを用いる命令を与えると想定する。この命令は、初期アドレス値を実行装置１４のインデックス・レジスタ６０内に格納すること、またこの初期値に加算すべきオフセットの符号化値の両方を指定する。オフセット値は外部情報バス４１を介してデータ・バッファ４０に与えられる。データ・バッファ４０は情報バスＡ６６を介してオフセット値をＡ入力マルチプレクサ５０に与える。
【００３３】
ユーザの命令の中で指定される演算の実行中の然るべきポイントにおいて、複数のタイミング信号および制御信号が、Ｍｉｃｒｏ−ＲＯＭ制御バス６５を介してＡ入力制御回路４８とＢ入力制御回路５４の両方に与えられる。また複数の制御信号を、スタック・ポインタ５８およびインデックス・レジスタ６０にそれぞれ与えて、命令実行中の然るべき時間点において、ある値を格納もしくは与えることができる。スタック・ポインタ５８およびインデックス・レジスタ６０などのレジスタに複数の制御信号を経路設定することは、データ処理技術では周知のことであり、ここでは詳しく述べない。
【００３４】
然るべき複数の制御信号を受信次第、インデックス・レジスタ６０は初期アドレス値をＢ入力マルチプレクサ５６に与える。Ｍｉｃｒｏ−ＲＯＭ制御バス６５を介して複数のタイミング信号および制御信号を受信次第、Ａ入力制御回路４８がイネーブルにされて、制御Ａ信号をＡ入力マルチプレクサ５０に与える。同様にＢ入力制御回路５４がイネーブルにされて、制御Ｂ信号をＢ入力マルチプレクサ５６に与える。
【００３５】
Ａ入力マルチプレクサ５０は、制御Ａ信号によってイネーブルにされるとオフセット値をＡ入力値としてＡＬＵ５２の第１入力に与える。同様にＢ入力マルチプレクサ５６は初期アドレス値をＡＬＵ５２の第２入力に与える。
【００３６】
Ａ入力値とＢ入力値の両方を受け取り次第、加算器１００はオフセット値のビット０を初期アドレス値のビット０に加算する。また両方のビット０の合計にＣｉｎ値を加算して、合計値のビット０と桁上げ値の両方を与える。合計値のビット０はＳ０と称され、桁上げ値は「Ｃ１」と称される。Ｃｉｎ値はオフセット値の符号を反転したものである。Ｃｉｎ値の計算については後で詳しく述べる。ついでオフセット値の各ビットを、初期アドレス値のそれぞれ対応するビットに加算する。オフセット値は５ビット幅しかなく、初期アドレス値は１６ビット幅であるので、オフセット値は１６ビットに符号拡張される。ついでオフセット値と有効アドレスの合計が結果バス１２０を介してデータ・バッファ４０に与えられる。データ・バッファ４０はこの合計を、外部情報バス４１を介してＣＰＵ１２の残りの部分に与える。
【００３７】
図３に示すように、正のオフセットがＡ入力信号を介して与えられる場合には、オフセットの符号はゼロになり、これはオフセットの最下位ビットから最上位ビットまで符号拡張される。そのためゼロがインバータ９８に与えられる。ついでインバータ９８は１の値を有するＣｉｎ信号を加算器１００に与え、これはＡ０信号およびＢ０信号の合計に加算される。同様に負のオフセットが与えられる場合には、インバータ９８は加算器１００にゼロの値を与え、これはＡ０信号およびＢ０信号の合計に加算される。オフセットの符号ビットの反転を加算することによって、オフセット範囲が拡張されて、有効アドレス値を計算する場合に大きなフレキシビリティが得られる。
【００３８】
オフセットの符号はＣｉｎ信号として拡張、反転、使用されて、５ビット幅の定オフセットを使用する場合には１６バイトの正のオフセットが可能になる。先行技術の実現では、５ビット値を用いて可能な最大の符号付き正のオフセットは１５バイトだった。オフセット値の符号を反転し、反転符号値をオフセットと初期アドレスの合計に加算することによって、オフセットの正の範囲は効果的に１だけ増加する。すなわち、本発明のこの実現では正のオフセットは（ｎ−１）として格納され、ここでｎは１から１６の正の数を指す。そのため２進値１００００は１０進値の＋１と解釈する。同様に２進値０１１１は１０進値の＋８と解釈し、２進値０１１１１は値＋１６と解釈する。この方法を使用する場合にはゼロのオフセットを不可能である。しかしながらデータ処理システム１０のユーザがゼロのオフセットを所望する場合には、この必要性を反映するために演算を異なる方法で符号化してもよい。通常は、ノー・オフセットを指定する命令のために特殊命令コードが存在する。そのため機能性が損なわれることはない。
【００３９】
オフセットを必要とする演算の実行を示す第２の例では、データ処理システム１０のユーザが、４ビット幅の符号付き定オフセットを有するオートインクリメントを必要とする命令を与えると想定している。この命令は、増分する初期値を実行装置１４のスタック・ポインタ５８内に格納することと、当該初期値に加算すべきオフセットの符号付き値の両方を指定する。インデックス・アドレッシングに関連した第１の例と同様、オフセット値は外部情報バス４１を介してデータ・バッファ４０に与えられる。データ・バッファ４０は情報バスＡ６６を介してオフセット値をＡ入力マルチプレクサ５０に与える。
【００４０】
ユーザの命令の中で指定される、演算実行中の然るべきポイントにおいて、複数のタイミング信号および制御信号がＭｉｃｒｏ−ＲＯＭ制御バス６５を介してＡ入力制御回路４８およびＢ入力制御回路５４の両方に与えられる。またスタック・ポインタ５８が、オートインクリメント命令の実行中の然るべき時間点において初期値を格納もしくは与えられるように、複数の制御信号が与えられる。
【００４１】
然るべき複数の制御信号を受信次第、スタック・ポインタ５８は初期値をＢ入力マルチプレクサ５６に与える。Ａ入力制御回路４８をイネーブルにして、複数のタイミング信号および制御信号に応答して、Ｍｉｃｒｏ−ＲＯＭ制御バス６５を介して制御Ａ信号をＡ入力マルチプレクサ５０に与える。Ａ入力マルチプレクサ５０はＡ入力値としてオフセット値をＡＬＵ５２の第１入力に与える。同様にＢ入力制御回路５４をイネーブルにして、制御Ｂ信号をＢ入力マルチプレクサ５６に与える。ついでＢ入力マルチプレクサ５６は初期アドレス値をＡＬＵ５２の第２入力に与える。
【００４２】
Ａ入力値およびＢ入力値の両方を受け取り次第、加算器１００はオフセット値のビット０を初期アドレス値のビット０に加算する。またオフセット値の符号の反転であるＣｉｎ値も、オフセット値およびアドレス値のそれぞれのビット０の合計に加算される。インデックス・アドレッシングの例でも分かるように、オフセット値の各ビットは初期アドレス値のそれぞれ対応するビットに加算される。オフセット値は４ビット幅しかなく、初期アドレス値は１６ビット幅であるので、オフセット値は１６ビットに符号拡張されている。ついでオフセット値および有効アドレスの合計を、後で使用するためにスタック・ポインタ５８に格納する。
【００４３】
図３に示すように、正のオフセットがＡ入力信号を介して与えられる場合、オフセットの符号はゼロとなり、これはオフセットの最下位ビットから最上位ビットに符号拡張される。したがってゼロがインバータ９８に与えられる。ついでインバータ９８は、値１を有するＣｉｎ信号を加算器１００に与えて、これにＡ０信号およびＢ０信号の合計が加算される。同様に、負のオフセットが与えられる場合には、インバータ９８はゼロの値を加算器１００に与えて、これにＡ０信号およびＢ０信号の合計が加算される。オフセットの符号ビットの反転を加算することによって、オートインクリメント動作またはオートデクリメント動作を実行する場合により大きなフレキシビリティを可能にするように拡張されている。
【００４４】
オフセットの符号に応答してＣｉｎ信号を計算することによって、４ビット幅の定オフセットを使用する場合に８バイトの正のオフセットが可能になる。前述のように、オフセット値の符号を反転し、反転符号値をオフセットと初期アドレスの合計に加算することによって、オフセットの正の範囲を１だけ効果的に増加する。したがって２進値０１１１は１０進値＋８と解釈する。ここでも、この方法を使用する場合はゼロのオフセットは不可能である。
【００４５】
ここに記載した第２の例では、プレインクリメントが説明されおり、このプレインクリメントでは、オフセットを、次のデータ処理動作で使用する前に予め、ポインタ・レジスタ（スタック・ポインタ５８）内に格納された値に加算する。オートインクリメント動作およびオートデクリメント動作では多くのバリエーションが存在する。たとえば演算がある結果を生成し、この結果をポインタ・レジスタ内に格納した後、その結果がオフセットだけ増分される。これをポストインクリメントという。同様にポインタ・レジスタに格納された値からオフセットを差し引いてもよい。ポインタ・レジスタ内の値を使用して演算のオペランドにアクセスする前に減算が発生する場合には、その演算をプレデクリメントという。ポインタ・レジスタ内の値を使用して演算のオペランドにアクセスした後に減算が発生する場合には、この演算をポスト・デクリメントという。同様に第２の例ではスタック・ポインタ５８を使用しているが、前述のポインタ・レジスタのいずれを使用してもよい。たとえばもう一つのインデックス・レジスタまたは汎用レジスタを使用してもよい。
【００４６】
ここに記載する本発明の実施例では、５ビット・オフセット値の正の範囲は、より意味のあるオフセット値を使用して情報にアクセスできるように１だけ効果的に増加する。たとえばオフセットを計算するシステムの先行技術の実現では、−１６から＋１５バイトの範囲が命令に対する最大範囲であり、これは符号化のために１ポストバイトのみを必要とした。前述のように、オフセットをポストバイトの中で提供する場合には、ポストバイトを形成するビットの一部分を使用して、ポインタ・レジスタと実行する演算の種類を指定しなければならない。ビットの残りの部分はオフセット値を指定するのに使用できる。一般的であり、またここに記載する本発明の実施例で示しているように、ポストバイト内でオフセット値を指定するには、５ビットのみが使用できる。
【００４７】
デジタル処理システム内のデータが１５バイト増分で配列されていることは稀である。むしろ、８や１６などの２の累乗のバイトが通常使用される。したがって先行技術の実現では、１６バイトのオフセットを符号化するのにさらに１バイトのプログラミング空間を必要とする。本発明では、ユーザが貴重なプログラミング空間をさらに１バイト使用せずに、最大１６バイトのオフセットまで計算できるようにしている。８ビットのオフセットを使用する場合には、さらに１バイトのプログラミング空間を必要とせずに、＋１２８バイトのオフセットを使用できる。またＡＬＵ５２の構造を改良することによって、本発明の実施例はまた、＋３２７６８などより大きな２進の複数バイトのオフセット範囲を拡張するのに使用できる。
【００４８】
また先行技術の実現では、オートインクリメント動作およびオートデクリメント動作は、ポインタ・レジスタの内容が、１もしくは２バイト増加もしくは減少できるようにしているだけであった。したがってインクリメント動作もしくはデクリメント動作中の移動範囲が厳しく制限されていた。ここに記載する本発明の実施例では、ポインタ・レジスタ内の一つの値は最高８バイト増加もしくは減少できる。また２の累乗である境界を有するインクリメント動作およびデクリメント動作を可能にすることによって、データはより簡単に、また大量のプログラミング空間を消費せずにアクセスできる。オートインクリメント動作およびオートデクリメント動作の有用な正の範囲が増加する。前述したように、デジタル処理システム内のデータは通常、８や１６などの２の累乗のバイトで配列される。そのため先行技術の実現は、データの中をテーブル形式で進行するために便利な実現は可能になっていない。ここに記載する本発明では、一つの命令により８バイトおよび１６バイト増分で、何テーブルものデータを読み取ることができ、この命令は迅速に実行されて、過度のプログラミング空間を必要としない。
【００４９】
ユーザはゼロのオフセットを指定する機能は持たないが、「ノー・オフセット」演算を実行するために、通常は他の演算コードおよび演算方法もシステム内に存在する。たとえば特殊命令コードは一般にほとんどのデータ処理装置内に存在し、ノー・オフセットを有する演算の実行を開始する。そのため先行技術のシステムでノーオフセット演算を実行するために通常使用されるコードは冗長性があり、データ処理装置の機能性を損なわずにこれを排除できる。このことは、インデックス・アドレッシング，オートインクリメント動作およびオートデクリメント動作に等しく適用できる。
【００５０】
ここに記載する本発明の実現は例示目的で提示している。しかしながらここに記載する機能を実行するには、他にも多くの実現が存在し得る。たとえばここではインデックス・アドレッシング，オートインクリメント動作およびオートデクリメント動作のみを詳細に説明しているが、本発明はいくつかの分岐型演算を含むように拡張できる。分岐演算を実行する際に必要なオフセットは、ここに記載する方法および回路、または本発明の別の実施例を用いて計算してもよい。そのため分岐命令のオフセット範囲は、２の累乗である境界を有するように拡張できる。
【００５１】
ここでは本発明の原理を説明してきたが、この説明が例示目的だけのためであって、本発明の範囲を限定するものでないことを当業者は明確に理解しよう。したがって添付請求の範囲は、本発明の真正の意図および範囲に属する本発明のすべての変形をカバーすることを意図している。
【図面の簡単な説明】
【図１】本発明に基づくデータ処理システムのブロック図を示す。
【図２】図１の実行装置のブロック図を示す。
【図３】図２の論理演算装置のブロック図を示す。
【符号の説明】
１０  データ処理システム
１２  ＣＰＵ
１４  実行装置
１６  バス制御論理回路
１８  命令デコード論理回路
２０  制御装置
２２  シーケンサ
２４  発振器
２６  電源回路
２８  タイミング回路
３０  外部バス・インタフェース
３２  内部メモリ
３３  外部データ・バス
３４  内部データ・バス
３６  内部アドレス・バス
３８  タイミング制御バス
４０  データ・バッファ
４１  外部情報バス
４８  Ａ入力制御回路
５０  Ａ入力マルチプレクサ
５２  論理演算装置（ＡＬＵ）
５４  Ｂ入力制御回路
５６  Ｂ入力マルチプレクサ
５８  スタック・ポインタ
６０  インデックス・レジスタ
６５  Ｍｉｃｒｏ−ＲＯＭ制御バス
６６  情報バスＡ
９８  インバータ
１００，１０２，１０４，１０６，１０８  加算器
１２０  結果バス
【図１】
0003556252.tif 000002
【図２】
0003556252.tif 000003
【図３】
0003556252.tif 000004