(57)【特許請求の範囲】
【請求項１】
メモリへの転送のために最適な長さより短い長さのデータの繰り返しパターンをメモリに格納するための方法であって、
メモリへの転送に最適な長さのデータ列を構成するのに必要な回数繰り返された前記データパターンを、プロセッサの第１のレジスタにロードすることと、
前記レジスタ内のデータ列を、指定されたアドレスから始まるメモリ内の記憶場所に格納すること、
次のデータ列を格納するためにメモリのアドレスをインクリメントすること、および、
前記レジスタ内のデータ列を操作して、メモリに格納されたとき、メモリに既に格納されているデータ列とデータパターンが連続するような次のデータ列に更新することを繰り返すことと、を含み、
前記第１のレジスタが４つの記憶場所を含み、前記データパターンが第１から第３のバイトを持ち、そして前記第１のレジスタへの前記最適な長さの最初のデータ列のロードが、
前記レジスタの第１から第３の記憶場所に前記データパターンの第１から第３のバイトをロードすることと、
前記レジスタの第４のバイト場所に前記データパターンの第１のバイトをロードすることと、を含み、
前記データ列を更新するステップが、
前記第１のレジスタ内のデータ列を第１のバイト場所側に向って１バイトだけシフトすると共に、前記レジスタの第２のバイト場所のバイトを前記レジスタの第４のバイト場所に移すこと、を含む方法。
【請求項２】
請求項１の方法であって、前記第１のレジスタの第２のバイト場所のバイトを第４のバイト場所に移すステップが、
前記第１のレジスタ内のデータ列を第１のバイト場所側に向って１バイトだけシフトする前に、前記第１のレジスタの第２のバイトを第２のレジスタに移動することと、
前記第２のレジスタから前記バイトを前記第１のレジスタの第４のバイト場所に移すことと、
それによって前記第１のレジスタの第２のバイトを第１および第４のバイト場所に入れることと、を含む方法。
【請求項３】
メモリへの転送のために最適な長さより短い長さのデータの繰り返しパターンをメモリに格納するための方法であって、
メモリへの転送に最適な長さのデータ列を構成するのに必要な回数繰り返された前記データパターンを、プロセッサの第１のレジスタにロードすることと、
前記レジスタ内のデータ列を、指定されたアドレスから始まるメモリ内の記憶場所に格納すること、
次のデータ列を格納するためにメモリのアドレスをインクリメントすること、および、
前記レジスタ内のデータ列を操作して、メモリに格納されたとき、メモリに既に格納されているデータ列とデータパターンが連続するような次のデータ列に更新することを繰り返すことと、を含み、
前記第１のレジスタが４つの記憶場所を含み、前記データパターンが第１から第３のバイトを持ち、そして前記第１のレジスタへの前記最適な長さの最初のデータ列のロードが、
前記レジスタの第１から第３の記憶場所に前記データパターンの第１から第３のバイトをロードすることと、
前記レジスタの第４のバイト場所に前記データパターンの第１のバイトをロードすることと、を含み、
前記データ列を更新するステップが、
第１のレジスタの第２のバイトを第１のバイト場所に移動させることと、
前記第１のレジスタ内のデータ列を第１のバイト場所側に向って１バイトだけ回転させ、それによって第２のバイトを第１および第４のバイト場所に入れることと、を含む方法。
【請求項４】
メモリへの転送のために最適な長さより短い長さのデータの繰り返しパターンをメモリに格納するための方法であって、
メモリへの転送に最適な長さのデータ列を構成するのに必要な回数繰り返された前記データパターンを、プロセッサの第１のレジスタにロードすることと、
前記レジスタ内のデータ列を、指定されたアドレスから始まるメモリ内の記憶場所に格納すること、
次のデータ列を格納するためにメモリのアドレスをインクリメントすること、および、
前記レジスタ内のデータ列を操作して、メモリに格納されたとき、メモリに既に格納されているデータ列とデータパターンが連続するような次のデータ列に更新することを繰り返すことと、を含み、
前記第１のレジスタが４つの記憶場所を含み、前記データパターンが第１から第３のバイトを持ち、そして前記最適な長さの最初のデータ列が前記レジスタの第１から第３のバイト場所内の前記データパターンの第１から第３のバイトと前記レジスタの第４のバイト場所内の前記データパターンの第１のバイトから成り、
前記データパターンの第１から第３のバイトがそれぞれ２４ビットのカラー値の赤、緑、青の成分に対応し、それらのメモリへの格納によりビットマップ画像中に連続した線分が描かれる方法。
【請求項５】
請求項１の方法であって、前記メモリがダブルワードごとの境界を持ち、さらに前記データ列が４バイトであり、アドレスのダブルワード分ずつのインクレメントによりダブルワード境界に合わせつつメモリ内の記憶場所に格納される方法。
【請求項６】
請求項１の方法であって、前記メモリがダブルワード境界を持ち、前記方法がさらにメモリの記憶場所の先頭アドレスがダブルワード境界と合っていないとき次のデータ列の格納アドレスをダブルワード境界に合せることを含む方法。
【請求項７】
請求項６の方法であって、前記データ列が前記第１のレジスタ内の４バイトから成り、かつ前記データ列の格納アドレスをダブルワード境界に合せるステップが、
先頭アドレスから次のダブルワード境界までのバイト数に等しい数のバイトを前記第１のレジスタからメモリの記憶場所に格納することと、
先頭アドレスが次のダブルワード境界から１記憶場所だけ離れていたときは、前記第１のレジスタ内のバイトを第１のバイト場所側に向って１バイトだけシフトしかつ第２のバイト場所のバイトを第４のバイト場所に移すことと、
先頭アドレスが次のダブルワード境界から２記憶場所だけ離れていたときは、前記第１のレジスタ内のバイトを第１のバイト場所側に向って２バイトだけシフトしかつ第２および３のバイト場所のバイトを第３および第４のバイト場所に移すことと、を含む方法。
【請求項８】
画像中の連続した画素に３バイトのカラー値を設定する方法であって、
３２ビットのレジスタに、３バイトのカラー値の繰り返し列の先頭部を含む４バイトのデータ列をロードすることと、
画像中の連続した画素に対応するメモリ内の１連の記憶場所に前記レジスタの内容を繰り返し格納することと、
前記格納ステップの繰り返しの間に前記レジスタ内のデータ列を更新することと、を含み、
前記更新ステップが、
現在前記レジスタの第２から第４のバイト場所にあるバイトを第１から第３のバイト場所にシフトすると共に、現在前記レジスタの第２のバイト場所にあるバイトを第４のバイト場所に移すこと、を含む方法。
【請求項９】
請求項８の方法であって、前記３バイトのカラー値が１バイトの赤色成分、１バイトの緑色成分、１バイトの青色成分から成る方法。
【請求項１０】
請求項８の方法であって、前記レジスタにデータ列をロードするステップが、
前記レジスタの第１から第３のバイト場所に３バイトのカラー値をロードすることと、
前記レジスタの第４のバイト場所に３バイトのカラー値の第１のバイトをロードすることと、を含む方法。
【請求項１１】
請求項８の方法であって、前記レジスタ内のデータ列を更新するステップが、
前記レジスタの第２のバイト場所のバイトを第１のバイト場所に移動し、さらに、前記レジスタの内容を回転させて第２から第４のバイト場所のバイトを第１から第３のバイト場所に移し、かつ第１のバイト場所のバイトを第４のバイト場所に移すこと、を含む方法。
【請求項１２】
請求項８の方法であって、前記レジスタ内のデータ列を更新するステップが、
前記レジスタの第２のバイト場所のバイトを第２のレジスタの第１のバイト場所に移動し、さらに、前記第１および第２のレジスタ内のバイトをシフトして、前記第１のレジスタの第２から第４のバイト場所のバイトを第１から第３のバイト場所に移し、かつ前記第２のレジスタの第１のバイト場所のバイトを前記第１のレジスタの第４のバイト場所に移すこと、を含む方法。
【請求項１３】
請求項８の方法であって、さらに
メモリ内の一連の記憶場所の第１の記憶場所がダブルワード境界から１記憶場所だけ離れているとき、
前記レジスタの第１のバイト場所のバイトをメモリの前記第１の記憶場所に格納することと、
前記レジスタの第２から第４のバイト場所のバイトを第１から第３のバイト場所に移し、かつ第２のバイト場所のバイトを第４のバイト場所に移すことと、を含み、
それによってその後は前記レジスタの内容がメモリのダブルワード境界に合せつつ繰り返し格納される方法。
【請求項１４】
請求項８の方法であって、さらに
メモリ内の一連の記憶場所の第１の記憶場所がダブルワード境界から２記憶場所だけ離れているとき、
前記レジスタの第１および第２のバイト場所のバイトを前記メモリの記憶場所に格納することと、
前記レジスタの第３および第４のバイト場所にあったバイトを第１および第２のバイト場所に移し、第２のバイト場所にあったバイトを第３のバイト場所に移し、第３のバイト場所にあったバイトを第４のバイト場所に移すことと、を含み、
それによってその後は前記レジスタのデータ列がメモリのダブルワード境界に合せつつ繰り返し格納される方法。
【請求項１５】
請求項８の方法であって、さらに
メモリ内の１連の記憶場所の第１の記憶場所がダブルワード境界から３記憶場所だけ離れているとき、
前記レジスタの第１から第３のバイト場所のバイトを前記メモリの記憶場所に格納することを含み、
それによってその後は前記レジスタのデータ列がメモリのダブルワード境界に合せつつ繰り返し格納される方法。
【請求項１６】
３バイトのデータパターンの繰り返し列をダブルワード分ずつ増長させながらメモリに格納するための装置であって、
前記データを格納するメモリと、
前記３バイトのデータパターンの繰り返しを含む４バイトのデータ列を格納する、第１から第４のバイトの記憶場所を持つレジスタと、
前記レジスタ内のデータ列を繰り返しメモリに書き込み、さらにメモリへの書込みの間に前記データ列を更新する手段と、を含み、
前記書込み更新手段が、前記レジスタの第２から第４のバイト場所にあったバイトを第１から第３のバイト場所に移し、かつ第２のバイト場所にあったバイトを第４のバイト場所に移すことによって前記データ列を更新することを特徴とする装置。
【請求項１７】
請求項１６の装置であって、前記レジスタ内のデータ列の書込み更新手段が、
前記レジスタの第２のバイト場所のバイトを第１のバイト場所に移動するための手段と、
前記レジスタの第２から第４のバイト場所のバイトを第１から第３のバイト場所に移し、かつ第２のバイト場所のバイトを第４のバイト場所に移すように前記レジスタ内のバイトを回転させる手段と、を含む装置。
【請求項１８】
請求項１６の装置であって、さらに第１のバイト場所を持つ第２のレジスタを含み、そして前記第１のレジスタ内のデータ列の書込み更新手段が、
前記第１のレジスタの第２のバイト場所のバイトを前記第２のレジスタの第１のバイト場所に移動する手段と、
前記第１のレジスタの第２から第４のバイト場所のバイトを第１から第３のバイト場所にシフトし、かつ前記第２のレジスタの第１のバイト場所のバイトを第１のレジスタの第４のバイト場所にシフトさせる手段と、を含む装置。
【請求項１９】
請求項１６の装置であって、さらに前記第１のレジスタの内容の書込みをメモリのダブルワード境界に合せる手段を含み、該手段が
メモリ内の所望の１連の記憶場所の先頭の記憶場所から次の最も近いダブルワード境界の直前の記憶場所まで前記レジスタ内のバイトをメモリに書き込む手段および前記レジスタ内のバイトの順序を入れ替える手段を含み、
さらに前記レジスタ内のバイトの順序を入れ替える手段が、
メモリ内の１連の記憶場所の第１の記憶場所が次の最も近いダブルワード境界から１バイトだけ離れていたとき、現在前記レジスタの第２から第４のバイト場所にあるバイトを第１から第３のバイト場所にシフトし、かつ現在第２のバイト場所にあるバイトを第４のバイト場所に移すための手段と、
メモリ内の一連の記憶場所の第１の記憶場所が次の最も近いダブルワード境界から２バイトだけ離れていたとき、現在前記レジスタの第３および第４のバイト場所にあるバイトを第１および第２のバイト場所にシフトし、かつ現在第２および第３のバイト場所にあるバイトを第３および第４のバイト場所にシフトする手段と、を含む装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
この発明は、メモリへの転送に最適ではない長さのデータのパターンを繰り返しメモリに格納するための方法および装置に関し、さらに詳しくは、メモリへの転送に最適ではない長さのデータのパターンの繰り返し列をメモリへの転送に最適な長さのデータ列によって効率良くメモリに格納することを可能にする新規な方法および装置に関する。
【０００２】
【従来の技術】
ビットマップグラフィックスとして知られている、コンピュータによる図形画像表示の１つの方式においては、画像の各画素の色は、メモリすなわちフレームバッファに格納されている対応する単一のビットの組または複数のビットの組によって制御される。ー般的には、これらのデータビットは、例えば１続きにまたはバイトごとにまとめてバイト列として、メモリ内に順番に格納される。通常は１バイトは８ビットであるが、本明細書では、この語は、何ビットでもよい都合の良い長さのビットの組を含むものという意味で使用している。（ー般的には、メモリの最小のアドレス指定可能な単位はバイトである。）画像の左上角の画像の色を制御するビットの組は、通常はメモリ内の最初の場所に置かれる。この第１の画像の右側の画像を制御するビットの組が、その次に置かれる。メモリ内のデータビットのこの順序づけられた構成は、画面のー番上の画素の線に沿って左から右に進み、次にその下の線に沿って左から右に進む。このように次第に下の線に移りながら、各線に沿って左から右に進む。
【０００３】
メモリ内のデータのこの順序づけられた構成は、コンピュータによる図形画像の操作に好都合である。例えば、メモリ内の連続したデータビットの組は画像の水平な線の連続した画素に対応するので、水平な線分はコンピュータにより速くかつ容易に描くことができる。コンピュータは、所望の線の色に対応する１つのビットパターンを、メモリ内のその線分を構成する画素に対応する連続した記憶場所に格納するだけである。
【０００４】
水平な線分を速く描くことができる能力は、多くの図形操作において重要である。水平な線分の描画を用いる１つの広く行われている図形操作は、画像中の連続した線で囲まれた閉じた図形の”塗りつぶし”である。”塗りつぶし”は、閉じた図形の左端と右端の間に延びる複数の短い水平の線分を描くことによって行われる。このような複数の線は、図形の最上部から最下部まで順に下の線に移りながら描かれると、図形を１つの色で満たす。
【０００５】
しかしながら、連続なカラーの水平な線分を速く描くことができるコンピュータの能力は、画像中の画素の色を制御するデータビットの数により影響される。それは、コンピュータシステムはー般的に、ある特定の数のデータビットだけを最も効率良く１度に転送または格納するように構成されているからである。例えば、３２ビットの中央処理ユニット（プロセッサ）を持つコンピュータは、データを３２ビット（ダブルワード）ずつまとめて扱うとき、そのプロセッサにより最も効率的にメモリに対するデータの読出し書込みを行うことができる。さらに幾つかの３２ビットのプロセッサは、ダブルワードをメモリの４バイトごとの境界（ダブルワード境界）に合せつつ格納するときデータを最も効率良く格納できる。したがってそのような３２のプロセッサは、３２ビット長の１つのパターンを、メモリのダブルワード境界に合せつつ、メモリの連続した記憶場所に繰り返し格納するのに最も適している。この場合３２ビットのプロセッサは、内部レジスタの１つにメモリから３２ビットのパターンをロードして、その連続した３２ビットのダブルワードのパターンを、ダブルワード境界に合せつつ繰り返しメモリに格納するだけでよい。
【０００６】
この簡単な方法は、各画素に３２ビットの組がマップされるとき、さらには１６ビットまたは８ビットの組がマップされるときにも、線分を描くために効果的に使用できる。（１つの画素に１６ビットまたは８ビットの組がマップされるときは、３２ビットのパターンをメモリに連続的に格納することによって、１度に２画素または４画素が描かれる。）１画素あたり８，１６および３２ビット（ｂｐｐ）の画像にたいしてこの方法を実現する、インテル（社）の８０３８６または８０４８６マイクロプロセッサのためのアセンブリ言語のコードの例を、次の表１〜３に示す。
【０００７】
【表１】
0003622033.tif 000002
【表２】
0003622033.tif 000003
【表３】
0003622033.tif 000004
しかしながらこの方法は、１画素あたり２４ビットを用いるビットマップ画像にたいしては効率が良くない。１画素あたり２４ビットの画像のときは、パターンは３２ビットごとに１回繰り返さない。そうではなく、このパターンは３２ビットごとに１−１／３回繰り返す。そのため１つの３２ビットのパターンを連続して格納することによっては生成できない。
【０００８】
したがって、２４ビットのパターンの繰り返しを含むデータ列を３２ビットのダブルワードのアドレスインクレメントで連続してメモリに格納することにより、２４ビットのパターンを繰り返しメモリに効率的に格納するための方法が必要とされる。
【０００９】
【発明が解決しようとする課題】
本発明は、メモリへの転送に最適ではない長さのデータのパターンの繰り返し列を、効率良くメモリに格納することを可能にする新規な方法および装置を提供することを目的とする。
【００１０】
【課題を解決するための手段】
本発明は、プロセッサの内部のレジスタの１つに、メモリへの転送に最適な長さのデータ列を構成するのに必要な回数のデータパターンの繰り返し、すなわちパターン列の先頭部をロードし、このデータ列をメモリ内の指定されたアドレスの記憶場所に格納する。次にこのレジスタ内のデータ列を操作して、メモリに格納されたときメモリに既に格納されているデータに対してパターンが連続する次のデータ列を生成する。そしてこの生成されたデータ列をメモリの次の記憶場所に格納する。このデータ列の格納と更新の繰り返しにより、データパターンが繰り返しメモリに格納される。
【００１１】
より具体的には、本発明は、２４ビットのパターンの繰り返し（１−１／３回）を含むデータ列をアドレスをダブルワード分ずつインクリメントしながらメモリに格納することにより２４ビットのパターンの繰り返し列を効率的にメモリに格納するための方法と装置を提供する。本発明は、他のいろいろなビット長の繰り返しパターンから成る１連のデータを、そのパターンのビット長の４／３のインクレメントで格納するためにも使用できる。本発明によれば、３２ビットのプロセッサは、２４ビットのパターンの繰り返しを含む最初の３２ビットのデータ列を、内部レジスタの１つにロードする。プロセッサは、そのレジスタ内の３２ビットのデータ列をメモリに格納し、現在の３２ビットから次の３２のデータ列を生成する。プロセッサは、現在レジスタの第２から第４のバイト場所にあるバイトを第１から第３のバイトにシフトし、かつ現在第２のバイト場所にあるバイトを第４のバイト場所に移すことによって、次の３２ビットのデータ列を生成する。
【００１２】
本発明の１つの好ましい実施例では、プロセッサは、まずレジスタの第２のバイト場所のバイトを第１のバイト場所に移動し（第２のバイト場所のバイトのコピーを第１のバイト場所に入れる）、次このレジスタの内容を回転させて第２から第４のバイト場所のバイトを第１から第３のバイト場所にシフトさせ、かつ第１のバイト場所のバイトを第４のバイト場所に移すことによって、次の３２ビットのデータ列を生成する。
【００１３】
本発明のさらに別の実施例では、プロセッサは、まずこのレジスタの第２のバイト場所のバイトを別の第２のレジスタの第１のバイト場所に移動し、次にこのレジスタの第２から第４のバイト場所のバイトを第１から第３のバイト場所にシフトすると共に第２のレジスタのバイトをこのレジスタの第４のバイト場所にシフトすることによって、次の３２ビットのデータ列を生成する。
【００１４】
本発明のさらに他の面によれば、プロセッサは、連続的に格納されるダブルワードをメモリのダブルワード境界に合せる。パターン列のメモリへの格納がバイト境界にたいして１バイト場所だけ前から始まるときは、プロセッサは、レジスタ内のデータ列の最初のバイトをそのバイト場所に格納する。そして現在レジスタの第２から第４のバイト場所にあるバイトを第１から第３のバイト場所に移し、さらに現在第２のバイト場所にあるバイトを第４のバイト場所に移す。それによりその後プロセッサは、レジスタに生成するデータ列をメモリのダブルワード境界に合せつつ連続して格納することができる。
【００１５】
パターン列のメモリへの格納がバイト境界にたいして２バイト場所だけ前から始まるときは、プロセッサは、レジスタ内のデータ列の最初の２バイトをメモリに格納する。そしてレジスタの第３および第４のバイト場所のバイトを第１および第２のバイト場所に移し、さらに第２および第３のバイト場所のバイトを第３および第４のバイト場所に移す。それによりその後プロセッサは、ダブルワードをメモリのダブルワード境界に合せつつ連続して格納することができる。
【００１６】
パターン列のメモリへの格納がバイト境界にたいして３バイト場所だけ前から始まるときは、プロセッサは、レジスタ内のデータ列の最初の３バイトをメモリに格納する。それによりその後プロセッサは、レジスタに生成するデータ列をメモリのダブルワード境界に合せつつ連続して格納することができる。
【００１７】
なおパターン列の末尾がメモリのダブルワード境界と合っていないときは、レジスタ内の最後のデータ列のうちの必要なバイトだけをメモリに格納するなどして最後のパターンを格納することができる。
【００１８】
本発明のさらに他の特徴と利点は、この後の添付の図面を参照して行う本発明の好ましい実施例の詳細な説明から明らかになるであろう。
【００１９】
【実施例】
本発明の１つの好ましい実施例が、インテル（社）の８０３８６または８０４８６マイクロプロセッサを使用したパーソナルコンピュータ上で実行可能な機械コードとして実現された。この分野に習熟した人々には明らかであろうように、本発明はまた、３２ビットまたは他の種類のマイクロプロセッサを持つコンピュータシステム上で実行するように実現することもできる。
【００２０】
図１に示すように、本発明のこの好ましい実施例は、３バイトのパターンを含むデータ列をメモリ２０に格納する。メモリ２０は、アドレス順に配列され、それぞれ１バイトのデータを格納できる、個別にアドレス（番地）を指定して読み書きできる複数の記憶場所２２〜２７を含む。メモリ２０は、本発明の幾つかの用途では、ビデオメモリまたはフレーム（画面）バッファと呼ぶこともできる。
【００２１】
この好ましい実施例では、メモリ２０は、１画素あたり２４ビットの、カラーのビットマップ配列（画面の各画素に複数のビットを対応させ画素が走査される順にならべる）された図形画像を格納する。画像中の画素の色は、メモリ内の、各画素に対する３バイトのグループによって制御される。画像中の１つの画素の色は、メモリのその画素に対応する３バイトの場所に３バイトのカラー値を格納することによって変えられる。各３バイトのカラー値は、色を表すための赤−緑−青（ＲＧＢ）カラーモデルにしたがって決められたコード（符号）である。カラー値の３つのバイトは、それぞれ、コード化された色の赤、緑、青の成分を表す。例えば、記憶場所２２〜２４の３バイトのデータは、画像の１つの画素の色を指定する。いま３バイトのカラー値（Ｒ，Ｇ，Ｂと記号が付けられている）を記憶場所２２〜２４に格納すると、その画素がその３バイトのカラー値に対応する色に変わる。したがって３バイトのデータパターンのある繰り返しのデータ列をメモリ２０に格納すると、画像中に連続したカラーの水平の線分が描かれる。
【００２２】
インテルの８０３８６または８０４８６マイクロプロセッサは、ＥＡＸレジスタ３０，ＥＢＸレジスタ３２，ＥＣＸレジスタ３４，ＥＤＩレジスタ３６などの複数の汎用レジスタを持っている。この好ましい実施例では、ＥＡＸレジスタ３０を、メモリに転送すなわち格納されつつあるデータ列の次に転送されるべきダブルワード（倍長語）を格納するために使用している。ＥＢＸレジスタ３２を、ビット操作演算のための１時的な格納のために使用している。ＥＣＸレジスタ３４を、ループカウンタとして使用している。ＥＤＩレジスタ３６を、データ列の次のダブルワードが格納されるメモリ内の場所を指すアドレスポインタとして使用している。しかしながら本発明は、インテルのマイクロプロセッサの内部の異なるレジスタの組を使って実施することもできるし、全く別のプロセッサのレジスタを使って実施することもできる。
【００２３】
インテルの８０３８６または８０４８６マイクロプロセッサは、メモリ２０内のダブルワード境界４２に前後端を合せながらダブルワード単位で転送するとき、データを最も効率良くメモリ２０に格納することができる。したがって、３バイトのデータパターンの長さは、メモリへのパターンの転送にとって最適ではない。ダブルワード境界は、０，４，８，１２，・・・番地（すなわち下位の２ビット４６，４７がゼロである番地）のようにメモリの４バイト目ごとに生じる。そこで本発明のこの好ましい実施例においては、データ列は、ダブルワードの境界４２に位置を合せてダブルワードごとにメモリ２０に格納される。４バイトのデータ列の長さは、ＥＡＸレジスタ３０からメモリにデータを転送するのに最も適している。
【００２４】
本発明の好ましい実施例では、プロセッサのレジスタ３０〜３６を使って、図２に示した方法５０により、３バイトの繰り返しパターンを持つデータ列をメモリ２０に格納する。この方法を実行するアセンブリ言語のコードを次の表４に示す。
【００２５】
【表４】
繰り返される３バイトのパターンを格納するためのコード
１          ｍｏｖ    ｅａｘ  ，〈ｒｇｂｒ〉
２          ｍｏｖ    ｅｃｘ  ，１０００
３  ｌｏｏｐ
４          ｓｔｏｓｄ
５          ｍｏｖ    ｂｌ，ａｈ
６          ｓｈｒｄ    ｅａｘ  ，ｅｂｘ  ，８
７          ｄｅｃ    ｅｃｘ
８          ｊｎｚ    ｌｏｏｐ
本発明の好ましい実施例では、表４のアセンブリ言語のプロシージャ（１つのグループとしてコールまたはアクチベートされる１群の命令）に対応する機械語のコードが、コンピュータのメモリにロードされるプログラムの１部を構成する。
【００２６】
図２を参照すると、方法５０は、第１のステップ５２において、データ列の最初の４バイトをＥＡＸレジスタ３０にロードする（表４の１行目）。図示の実施例では、データ列は、繰り返される３バイトのカラー値を含む。３バイトのカラー値の各バイトは、ここではそれぞれ”Ｒ”，”Ｇ”，”Ｂ”という記号が付けられている。したがって、このデータ列の最初の４バイトは”ＲＧＢＲ”である。インテルの８０３８６または８０４８６マイクロプロセッサでは、この４バイトのデータはＥＡＸレジスタにロードされる。このとき１番目のＲバイトは最も右側のバイト位置５８に、２番目のＧバイトは右から２番目のバイト場所６０に、３番目のＢバイトは右から３番目のバイト場所６２に、そして４番目のＲバイトは最も左側のバイト場所にロードされる。ステップ５２によりデータをロードされた状態のＥＡＸレジスタ３０が、図１に示されている。
【００２７】
方法５０の次のステップ５４は、メモリ内のデータ列を格納する先頭アドレスをＥＤＩレジスタ３６にロードする。この好ましい実施例では、先頭アドレスは、方法５０を実行することによってメモリ内に格納されている画像中に形成されるであろう線分の左端の画素に対応するアドレスに設定される。表４中のコードは、先頭アドレスが既にＥＤＩレジスタ３６にロードされていると仮定している。
【００２８】
データ列を最も効率良く格納するためには、先頭アドレスがメモリ２０のダブルワード境界４２に合されていなければならない。すなわち、ＥＤＩレジスタ３６の下位の２ビット４６，４７が、図２に示すようにゼロでなければならない。先頭アドレスがメモリ２０のダブルワード境界４２に合っていないときにダブルワード境界に合せるための本発明による方法を、図４〜６を参照して以下に説明する。
【００２９】
次のステップ６８（表４の２行目）では、ＥＣＸレジスタ３４にカウント値をロードする。図１，図２および表４に示した実施例では、ＥＣＸレジスタにカウント１，０００がロードされる。このカウントは、方法５０によってメモリに転送されるデータ列のダブルワード数に対応する。
【００３０】
方法５０のステップ７２〜８２は、ＥＣＸレジスタ３４内のカウント値に等しい回数繰り返されるループを構成する。ステップ８０（表４の７行目）でＥＣＸレジスタがデクリメントされ、デクリメントされたカウント値がステップ８２（表４の８行目）でゼロと比較される。デクリメントされたカウント値がゼロに等しくなければ、ステップ７２（表４の３行目）にジャンプして戻ることによってループが繰り返される。
【００３１】
ループ７２〜８２内のステップ７２において、プロセッサは、ＥＡＸレジスタ３０の内容を、ＥＤＩレジスタ３６内のアドレスで指定されるメモリの場所２２〜２５に格納する（表４の４行目）。次にステップ７４において、ＥＤＩレジスタ３６内のアドレスが４だけインクリメントされる。（ＥＤＩレジスタ３６内のアドレスは、表４の４行目の”ｓｔｏｓｄ”命令によって自動的に４だけインクリメントされる。）したがって、ループの各繰返しにおいて、ステップ７２〜７４が、データ列の次のダブルワードをメモリの次の連続した場所に入れる。
【００３２】
ステップ７６〜７８が、ＥＡＸレジスタ３０の内容を、データ列の次のダブルワードに更新する。ステップ７６において、プロセッサは、第２のバイト場所６０内のバイトを、ＥＢＸレジスタ３２の第１のバイト場所８６に移動させる（表４の５行目）。（アセンブリ言語の”ｍｏｖ”命令は、実際上このバイトをこの移動先の場所にコピーする。なぜなら、移動元の場所の内容は変化せずそのままだからである。）ステップ７８において、プロセッサは、ＥＡＸレジスタ３０の第２から第４のバイト場所６０〜６４のバイトを、第１から第３のバイト場所５８〜６２にシフト（桁送り）する。またＥＢＸレジスタ３２のバイト場所８６のバイトを、第４のバイト場所６４にシフトする。ステップ７６，７８の効果は、ＥＡＸレジスタ３０の第２から第４のバイト場所６０〜６４のバイトを第１から第３のバイト場所５８〜６２にシフトすると共に、第２のバイト場所６０のバイトを第４のバイト場所６４にシフトすることである。
【００３３】
ループ７２〜８２の最初の繰返しにおいて、ステップ７６〜７８は、ＥＡＸレジスタ３０内のダブルワードを”ＲＧＢＲ”から”ＧＢＲＧ”に変える。第２の繰返しにおいて、このダブルワードを”ＢＲＧＢ”に変える。第３の繰返しにおいて、このダブルワードを元の”ＲＧＢＲ”に戻す。
【００３４】
方法５０が終了したとき、プロセッサは、データ列”ＲＧＢＲ  ＧＢＲＧ  ＢＲＧＢ  ＲＧＢＲ  ・・・”を、先頭アドレスから始めてダブルワード分ずつアドレスを増やしつつメモリに格納している。このデータ列は、繰り返される３バイトのパターン”ＲＧＢ”を含む。この好ましい実施例においては、データ列の格納により、メモリに格納されている画像中に連続した水平な線分が描かれる。
【００３５】
図３を参照して、本発明の他の実施例による方法９０においては、データ列の次のダブルワードが、ＥＢＸレジスタ３２を使用せずに、ＥＡＸレジスタ３０内の現在のダブルワードから生成される。インテルの８０３８６または８０４８６マイクロプロセッサを使用する場合に、この方法には、命令のバイト数がより少なくてすむという利点がある。幾つかのプロセッサでは、この方法はまたより少ないクロックサイクルで実行される。方法９０を実現するアセンブリ言語のコードを、次の表５に示す。
【００３６】
【表５】
繰り返される３バイトのパターンを格納するためのコード
１          ｍｏｖ    ｅａｘ  ，〈ｒｇｂｒ〉
２          ｍｏｖ    ｅｃｘ  ，１０００
３  ｌｏｏｐ：
４          ｓｔｏｓｄ
５          ｍｏｖ    ａｌ，ａｈ
６          ｒｏｒ    ｅａｘ  ，８
７          ｄｅｃ    ｅｃｘ
８          ｊｎｚ    ｌｏｏｐ
方法９０（図３）は、方法５０（図２）のステップ５２〜７４および８０〜８２と同じステップ９２〜１００およびステップ１０６〜１０８を持つ。この方法は、データ列の次のダブルワードを生成するためのステップ１０２〜１０４（表５の５〜６行目）だけが異なる。ステップ１０２において、ＥＡＸレジスタ３０の第２のバイト場所６０のバイトが、ＥＡＸレジスタの第１のバイト場所５８に移動される。次に、ステップ１０２において、ＥＡＸレジスタ３０の内容が１バイトだけ右に回転される。ＥＡＸレジスタの回転は、第２から第４のバイト場所６０〜６４のバイトを第１から第３のバイト場所５８〜６２にシフトし、かつ第１のバイト場所５８のバイトを第４のバイト場所６４にシフトする。ステップ１０２〜１０４の結果は、第２から第４のバイト場所６０〜６４のバイトが第１から第３のバイト場所５８〜６２にシフトされ、かつ第２のバイト場所６０のバイトが第４のバイト場所６４にシフトされる点において、ステップ７６〜７８（図２）の結果と同じである。しかしながら、ステップ１０２〜１０４では、ＥＢＸレジスタは不要であり、したがってこの方法を用いるプログラムにおいては他の目的に使用できる。
【００３７】
図２および図３の方法５０および方法９０は、ＥＤＩレジスタ内の先頭アドレスがダブルワード境界４２（図１）に合されていると仮定している。しかしながら殆んどの場合には、先頭アドレスはダブルワード境界と合っていないであろう。例えば、１画素あたり２４ビットのビットマップ画像中に水平な線を描くとき、その画像の最左端の画素に対応するメモリ内のバイト場所（データ列の先頭アドレス）は、平均して４回に１回しかダブルワード境界にない。格納されるべきデータ列の先頭アドレスがダブルワード境界に合っていないときは、まずデータ列の先頭の数バイトをダブルワード境界までメモリに格納しておき、それからそのデータ列の残りの部分を１ダブルワードずつ格納することが望ましい。
【００３８】
図４に示した方法１２０は、先頭アドレスが次のダブルワード境界から１バイトずれている場合にステップ７２または９８において格納されるダブルワードをダブルワード境界４２に合せるために、それぞれステップ６８（図２）またはステップ９６（図３）の後に実行される。例えば、先頭アドレスがメモリ２０内の記憶場所２５−ダブルワード境界４２と合っている次の記憶場所２６から１バイトずれている−を指し示すとき、方法１２０が実行される。このように先頭アドレスが次のダブルワード境界から１バイトずれている場合には、ＦＤＩレジスタの下位２ビット４６，４７は１である。次の表６は、方法１２０を実現するアセンブリ言語のコードの１例を示す。
【００３９】
【表６】
ダブルワード境界を合せるためのコード
１          ｓｔｏｓｂ
２          ｍｏｖ    ａｌ，ａｈ
３          ｒｏｒ    ｅａｘ  ，８
方法１２０の第１のステップ１２２において、プロセッサは、ＥＡＸレジスタ３０の第１のバイト場所５８内のバイトのコピーを、ＥＤＩレジスタ３６によってアドレスが指定される記憶場所に格納する。ステップ１２３において、プロセッサは、ＥＤＩレジスタ３６内のアドレスをインクリメントする。（表６の１行目の”ｓｔｏｓｂ”命令は、それ１つでステップ１２２と１２３の両方を実行する。）その結果、ＥＤＩレジスタ内のアドレスは、ダブルワード境界４２と合った記憶場所を指す。
【００４０】
ステップ１２４と１２６では、ＥＡＸレジスタ内のダブルワードが更新されて、データ列の次のダブルワードになる。まずステップ１２４において、ＥＡＸレジスタ３０の第２のバイト場所６０のバイトが、第１のバイト場所５８に移動される。次にステップ１２６において、ＥＡＸレジスタが１バイトだけ右に回転される。その結果、ＥＡＸレジスタ３０は、メモリに格納されるべきデータ列の次のダブルワードを含む。ステップ１２４と１２６は、ステップ１０２〜１０４（図３）と同じである。これでプロセッサは、方法５０のループ部７２〜８２および方法９０のループ部９８〜１０８においてそうするようにデータ列を１ダブルワードずつメモリに格納する用意ができた。
【００４１】
図５に示したさらにもう１つの方法１３０は、先頭アドレスが次のダブルワード境界から２バイトずれている場合に、方法５０および方法９０によって格納されるダブルワードをダブルワード境界４２に合せる働きをする。この場合には、先頭アドレスは、その下位の２ビットが”１０”である。次の表７は、方法１３０を実現するアセンブリ言語のコードの１例を示す。
【００４２】
【表７】
ダブルワード境界を合せるためのコード
１          ｓｔｏｓｗ
２          ｓｈｌｄ    ｅｂｘ  ，ｅａｘ  ，２４
３          ｓｈｒｄ    ｅａｘ  ，ｅｂｘ  ，１６
ステップ１３２，１３４は、ＥＡＸレジスタ３０の第１および第２のバイト場所５８，６０内のバイトをメモリに格納すること、そしてＥＤＩレジスタ３６内のアドレスを２だけ増やすことを含む（表７の１行目）。その結果ＥＤＩレジスタ内のアドレスは、ダブルワード境界と合った記憶場所を指す。
【００４３】
ステップ１３６，１３８は、データ列の次のダブルワードを生成する。まずステップ１３６において、ＥＡＸレジスタ３０の第２から第４のバイト場所６０〜６４内のバイトが、ＥＢＸレジスタ３２の第１から第３のバイト場所８６〜８８に移動される（表７の２行目）。次にステップ１３８において、ＥＡＸレジスタの第３および第４のバイト場所６２，６４内のバイトが第１および第２のバイト場所５８，６０に移動され、さらにＥＢＸレジスタの第１および第２のバイト場所８６，８８のバイトがＥＡＸレジスタの第３および第４のバイト場所６２，６４に移動される。ステップ１３６，１３８の結果、ＥＡＸレジスタ３０の第２および第３のバイト場所６０，６２のバイトが第３および第４のバイト場所６２，６４にシフトされ、かつ第３および第４のバイト場所のバイトが第１および第２のバイト場所５８，６０にシフトされる。例えば、最初のダブルワードが”ＲＧＢＲ”のとき、ステップ１３６，１３８はダブルワード”ＢＲＧＢ”を生成する。このダブルワード”ＢＲＧＢ”は、最初の２バイト”ＲＧ”に続くデータ列の次のダブルワードである。方法１３０が実行された後、方法５０のループ部７２〜８２および方法９０のループ部９８〜１０８が実行されて、データ列が１ダブルワードずつメモリ２０のダブルワード境界４２に合せながら格納される。
【００４４】
図６に示すように、先頭アドレスが次のダブルワード境界から３バイトずれている場合には、格納されるダブルワードをダブルワード境界４２に合せるための方法１５０は、データ列の最初の３バイトをメモリに格納し、アドレスを３バイト増やすだけでよい（ステップ１５２，１５４）。格納すべき次のダブルワードは変更する必要はない。なぜなら、データ列は、最初の３バイトの後、再びその３バイトのパターンを繰り返すからである。例えば、データ列”ＲＢＧＲ・・・”の先頭の３バイトを格納した後、データ列の次のダブルワードはやはり”ＲＢＧＲ・・・”である。次の表８は、方法１５０を実現するアセンブリ言語のコードの１例を示す。
【００４５】
【表８】
ダブルワード境界を合せるためのコード
１          ｓｔｏｓｂ
２          ｓｈｌｄ    ｅｂｘ  ，ｅａｘ  ，２４
３          ｍｏｖ    ｅｓ：［ｅｄｉ］，ｂｘ
４          ａｄｄ    ｅｄｉ  ，２
好ましい実施例について本発明の原理を説明しかつ図示したので、本発明がこの原理を逸脱することなく構成および細部において変更できることが理解されるであろう。例えば、２４ビットの繰り返しパターンを３２ビットのインクリメント（アドレスの増分）でメモリに格納する好ましい実施例について説明したが、本発明は、任意のビット数の繰り返しパターンをパターンのビット数の４／３のインクリメントで格納するように実施できる好ましいとが理解されるであろう。本発明の原理が適用できる多数の可能な実施例を考慮すると、上記の詳細な実施例は説明のためだけのものであり、本発明の範囲を限定するものと考えるべきではないことが理解されるであろう。むしろ出願人は、特許請求項の範囲と思想に含まれるそのようなすべての実施態様およびそれらと同等な方法や装置を特許請求する。
【００４６】
【発明の効果】
以上、説明したように、本発明に係る方法および装置によれば、メモリへの転送に最適ではない長さのデータのパターンの繰り返し列を、メモリへの転送に最適な長さのデータ列によって効率良くメモリに格納することができる。
【図面の簡単な説明】
【図１】図２の方法によって使用されるマイクロプロセッサのレジスタとそれらのレジスタへのデータのロード、および図示のレジスタの内容のときのプロセッサによるメモリへのデータ列の格納を示す説明図である。
【図２】図１に示されるように、ダブルワードの長さ分ずつ連続的に増長される３バイトのパターンの繰り返し列の各ダブルワード増長分のデータ列をメモリに格納するための本発明の１実施例の方法の流れ図である。
【図３】図１に示されるように、３バイトのパターンの繰り返し列の各ダブルワード増長分を含むデータ列を図１に示されるようにを格納するための本発明の別の実施例の方法の流れ図である。
【図４】パターンの繰り返し列のメモリへの格納がメモリのダブルワード境界の１バイト前から始まるとき、図１に示されるように、連続的に格納されるダブルワードをメモリのダブルワード境界に合せるための本発明による方法の流れ図である。
【図５】パターンの繰り返し列のメモリへの格納がメモリのダブルワード境界の２バイト前から始まるとき、図１に示されるように、連続的に格納されるダブルワードをメモリのダブルワード境界に合せるための本発明による方法の流れ図である。
【図６】パターンの繰り返し列のメモリへの格納がメモリのダブルワード境界の３バイト前から始まるとき、図１に示されるように、連続的に格納されるダブルワードをメモリのダブルワード境界に合せるための本発明による方法の流れ図である。
【符号の説明】
２０  メモリ
２２，２３，２４，２５，２６，２７  記憶場所（バイト）
３０  ＥＡＸレジスタ
３２  ＥＢＸレジスタ
３４  ＥＣＸレジスタ
３６  ＥＤＩレジスタ
４２  ダブルワード境界
５８，６０，６２，６４  第１，第２，第３，第４のバイト場所
８６，８７，８８，８９  第１，第２，第３，第４のバイト場所
【図１】
0003622033.tif 000005
【図２】
0003622033.tif 000006
【図３】
0003622033.tif 000007
【図４】
0003622033.tif 000008
【図５】
0003622033.tif 000009
【図６】
0003622033.tif 000010