「アキュムレータ (コンピュータ)」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
Addbot (会話 | 投稿記録)
m ボット: 言語間リンク 11 件をウィキデータ上の d:q420105 に転記
編集の要約なし
1行目: 1行目:
'''アキュムレータ'''({{lang-en-short|Accumulator}})は、[[コンピュータ]][[CPU]][[レジスタ (コンピュータ)|レジスタ]]の一種で、[[演算装置]]の演算結果を一時的に保持するレジスタである。アキュムレータのような役割のレジスタがないと、演算(加算、乗算、シフトなど)の結果を一々[[主記憶装置]]に書き込む必要がおそらく次の命令で即座それを読み出す必要が生じる。主記憶装置へのアクセスレジスタに比べて時間がかかる。
'''アキュムレータ'''({{lang-en-short|Accumulator}})は、[[コンピュータ]]において、[[演算装置]]による演算結果を累積する、すなわち総和を得るといったような計算に使う[[レジスタ (コンピュータ)|レジスタ]][[変数 (プログラミング)|変数]]のことである。特に[[プロセッサ]]にあるそのようにして使える唯一のレジスタを指すこがあるがその意味では、[[ジャーゴンファイル]]のaccumulatorの項の冒頭 "Archaic term for a register." とるように<ref>http://catb.org/jargon/html/A/accumulator.html</ref>基本的には古語である。


しかし、現代のプロセッサでも[[x86]]プロセッサにはアキュムレータマシン(後述)風のところがある。AXレジスタ(8ビットプロセッサ時代のAレジスタに由来する。32ビットではEAX)がアキュムレータ的に扱われており、初期の命令セットでは一部の命令(代表的なものはMULとDIV)のソースの一方およびデスティネーションが暗黙でAXとDXに固定されている、AXを対象とする命令には短縮形がある、などのように、AXレジスタにアキュムレータとしての特別扱いがあった。後に拡張されるに従い、[[アセンブリ言語]]レベルでは任意の命令に任意のオペランドが指定できるようになりこの特徴は見えなくなった。しかし、[[機械語]]レベルでは[[後方互換性]]を保っているのでこの特徴は残っている。また、AXレジスタは関数の返り値を格納するレジスタとして使われるなど「よく使われるレジスタ」であり、そういった意味でこの語が使われることもある。
アキュムレータ利用の典型例として、数列の総和の計算がある。アキュムレータの初期値をゼロにしておき、アキュムレータの値と数列上の各数値の加算結果をアキュムレータに保持する。数列の総和が求められた時点でアキュムレータの値を主記憶装置に書き込んだり、アキュムレータ以外のレジスタに書き込んだりする。


== 歴史 ==
== アキュムレータマシン ==
アキュムレータという名称は、accumulate(累算する)に由来する。
近年のCPUは多数のレジスタを持ち、そのほとんどを演算結果の格納用に使用できる。古い[[コンピュータ・アーキテクチャ]]では、[[命令セット]]でアキュムレータをオペランドとして明示的に指定することなく使っている。このようなマシンを'''アキュムレータマシン'''と呼ぶ。例えば、次のような[[命令 (コンピュータ)|命令]]である。

ごく古いコンピュータでは、[[命令セット]]でアキュムレータをオペランドとして明示的に指定することなく使っている。このようなマシンを'''アキュムレータマシン'''と呼ぶ。例えば、次のような[[命令 (コンピュータ)|命令]]である。


ADD ''[[メモリアドレス|memaddress]]''
ADD ''[[メモリアドレス|memaddress]]''


この命令は、''memaddress'' のメモリ位置にある内容を読み出し、それをアキュムレータ上の値と加算し、結果をアキュムレータに格納する。命令上はアキュムレータは全く指定されていないが、この命令は暗黙のうちに必ずアキュムレータを使用する。アーキテクチャによっては、一部の命令で暗黙のアキュムレータを使用し、別の命令では明示的にレジスタを番号指定する。
この命令は、''memaddress'' のメモリ位置にある内容を読み出し、それをアキュムレータ上の値と加算し、結果をアキュムレータに格納する。命令上はアキュムレータは全く指定されていないが、この命令は暗黙のうちに必ずアキュムレータを使用する。


1940年代のコンピュータについての資料である、[[ジョン・フォン・ノイマン|フォン・ノイマン]]とGoldstineによる文献に次のようにある。
現代のプロセッサでも[[x86]]プロセッサにはアキュムレータマシン風のところがある。AXレジスタ(8ビットプロセッサ時代のAレジスタに由来する。32ビットではEAX)がアキュムレータ的に扱われており、初期の命令セットでは一部の命令(代表的なものはMULとDIV)のソースの一方およびデスティネーションが暗黙でAXとDXに固定されている、AXを対象とする命令には短縮形がある、などのように、AXレジスタにアキュムレータとしての特別扱いがあった。後に拡張されるに従い、[[アセンブリ言語]]レベルでは任意の命令に任意のオペランドが指定できるようになりこの特徴は見えなくなった。しかし、[[機械語]]レベルでは[[後方互換性]]を保っているのでこの特徴は残っている。
<!--<ref>{{cite book |last= Irvine |first= Kip R. |title= Assembly Language for Intel-Based Computers |year= 2007 |edition= 5th edition |publisher=Pearson Prentice Hall |id=ISBN 0-13-238310-1 |pages=pp. 633, 622}}</ref>-->

== 歴史 ==
アキュムレータという名称は、accumulate(累算する)に由来する。
<blockquote>「我々の算術器官の第一の部品は…並列記憶器官であり、数を受け取ってそれを既に格納している数に加算する。また、その内容をクリアすることもでき、内容を他に格納することもできる。我々はこのような器官をアキュムレータと呼ぶ。これは計算機械としては昔からある原理であり、机上乗算器やIBMのカウンタやリレー計算機やENIACなどで採用されている」<ref>Goldstine and von Neumann, 1946; p. 98 in Bell and Newell 1971</ref></blockquote>
<blockquote>「我々の算術器官の第一の部品は…並列記憶器官であり、数を受け取ってそれを既に格納している数に加算する。また、その内容をクリアすることもでき、内容を他に格納することもできる。我々はこのような器官をアキュムレータと呼ぶ。これは計算機械としては昔からある原理であり、机上乗算器やIBMのカウンタやリレー計算機やENIACなどで採用されている」<ref>Goldstine and von Neumann, 1946; p. 98 in Bell and Newell 1971</ref></blockquote>
(現代風に解釈すれば)実行可能な命令は次のような操作をおこなう

(現代風に解釈すれば)実行可能な命令は次のようである
* アキュムレータをクリアし、メモリ位置 x にある数を加算する。
* アキュムレータをクリアし、メモリ位置 x にある数を加算する。
* アキュムレータをクリアし、メモリ位置 x にある数を減算する。
* アキュムレータをクリアし、メモリ位置 x にある数を減算する。
23行目: 20行目:
* メモリ位置 x にある数をアキュムレータの内容から減算する。
* メモリ位置 x にある数をアキュムレータの内容から減算する。
* アキュムレータをクリアし、別のレジスタの内容をアキュムレータにシフトさせる。
* アキュムレータをクリアし、別のレジスタの内容をアキュムレータにシフトさせる。
さらに[[EDSAC]]の場合、乗算用レジスタと、あるメモリの内容の積を、アキュムレータ(Aレジスタ)に足し込む、という[[積和演算]]として乗算機能が実装されており、ベクトルの内積などの計算に便利なよう設計されていた。


命令[[ニーモニック]]からは、アキュムレータとどう関わるのか(入力なのか出力なのか)はわからないことが多い。[[ドナルド・クヌース]]の仮想(抽象)コンピュータ [[MIX (プログラミング)|MIX]] では、アキュムレータへのロードを行う命令(LDA)やアキュムレータから他へのストアを行う命令(STA)がある。
複数レジスタも持っているが、アキュムレータとして特別扱いされるレジスタも持っている場合、ニーモニックアキュムレータの存在があらもあるたとえば、[[ドナルド・クヌース]]の[[MIX (プログラミング)|MIX]] では、アキュムレータへのロードを行う命令(LDA)やアキュムレータから他へのストアを行う命令(STA)がある。

アキュムレータのような役割のレジスタがないと、演算(加算、乗算、シフトなど)の結果を一々[[主記憶装置]]に書き込む必要があり、おそらく次の命令で即座にそれを読み出す必要が生じる。初期にはレジスタに使うトランジスタ(ないし真空管)を節約するため等の理由でそういった設計のコンピュータもあって、たとえば[[FUJIC]]はそのような設計で3オペランド型の命令だった。


== 脚注 ==
== 脚注 ==
31行目: 31行目:
== 参考文献 ==
== 参考文献 ==
*Goldstine, Herman H., and von Neumann, John, "Planning and Coding of the Problems for an Electronic Computing Instrument", Rep. 1947, Institute of Advanced Study, Princeton. Reprinted on pp. 92-119 in Bell, C. Gordon and Newell, Allen (1971), ''Computer Structures: Readings and Examples'', McGraw-Hill Book Company, New York. ISBN 0070043574}.
*Goldstine, Herman H., and von Neumann, John, "Planning and Coding of the Problems for an Electronic Computing Instrument", Rep. 1947, Institute of Advanced Study, Princeton. Reprinted on pp. 92-119 in Bell, C. Gordon and Newell, Allen (1971), ''Computer Structures: Readings and Examples'', McGraw-Hill Book Company, New York. ISBN 0070043574}.

{{JargonFile}}


{{FOLDOC}}
{{FOLDOC}}

2013年6月28日 (金) 10:49時点における版

アキュムレータ: Accumulator)は、コンピュータにおいて、演算装置による演算結果を累積する、すなわち総和を得るといったような計算に使うレジスタ変数のことである。特にプロセッサにあるそのようにして使える唯一のレジスタを指すことがあるがその意味では、ジャーゴンファイルのaccumulatorの項の冒頭に "Archaic term for a register." とあるように[1]、基本的には古語である。

しかし、現代のプロセッサでもx86プロセッサにはアキュムレータマシン(後述)風のところがある。AXレジスタ(8ビットプロセッサ時代のAレジスタに由来する。32ビットではEAX)がアキュムレータ的に扱われており、初期の命令セットでは一部の命令(代表的なものはMULとDIV)のソースの一方およびデスティネーションが暗黙でAXとDXに固定されている、AXを対象とする命令には短縮形がある、などのように、AXレジスタにアキュムレータとしての特別扱いがあった。後に拡張されるに従い、アセンブリ言語レベルでは任意の命令に任意のオペランドが指定できるようになりこの特徴は見えなくなった。しかし、機械語レベルでは後方互換性を保っているのでこの特徴は残っている。また、AXレジスタは関数の返り値を格納するレジスタとして使われるなど「よく使われるレジスタ」であり、そういった意味でこの語が使われることもある。

歴史

アキュムレータという名称は、accumulate(累算する)に由来する。

ごく古いコンピュータでは、命令セットでアキュムレータをオペランドとして明示的に指定することなく使っている。このようなマシンをアキュムレータマシンと呼ぶ。例えば、次のような命令である。

     ADD memaddress

この命令は、memaddress のメモリ位置にある内容を読み出し、それをアキュムレータ上の値と加算し、結果をアキュムレータに格納する。命令上はアキュムレータは全く指定されていないが、この命令は暗黙のうちに必ずアキュムレータを使用する。

1940年代のコンピュータについての資料である、フォン・ノイマンとGoldstineによる文献に次のようにある。

「我々の算術器官の第一の部品は…並列記憶器官であり、数を受け取ってそれを既に格納している数に加算する。また、その内容をクリアすることもでき、内容を他に格納することもできる。我々はこのような器官をアキュムレータと呼ぶ。これは計算機械としては昔からある原理であり、机上乗算器やIBMのカウンタやリレー計算機やENIACなどで採用されている」[2]

(現代風に解釈すれば)実行可能な命令は次のような操作をおこなう。

  • アキュムレータをクリアし、メモリ位置 x にある数を加算する。
  • アキュムレータをクリアし、メモリ位置 x にある数を減算する。
  • メモリ位置 x にある数をアキュムレータの内容と加算する。
  • メモリ位置 x にある数をアキュムレータの内容から減算する。
  • アキュムレータをクリアし、別のレジスタの内容をアキュムレータにシフトさせる。

さらにEDSACの場合、乗算用レジスタと、あるメモリの内容の積を、アキュムレータ(Aレジスタ)に足し込む、という積和演算として乗算機能が実装されており、ベクトルの内積などの計算に便利なよう設計されていた。

複数のレジスタも持っているが、アキュムレータとして特別扱いされるレジスタも持っている場合、ニーモニックにアキュムレータの存在があらわれるものもある。たとえば、ドナルド・クヌースMIX では、アキュムレータへのロードを行う命令(LDA)やアキュムレータから他へのストアを行う命令(STA)がある。

アキュムレータのような役割のレジスタがないと、演算(加算、乗算、シフトなど)の結果を一々主記憶装置に書き込む必要があり、おそらく次の命令で即座にそれを読み出す必要が生じる。初期にはレジスタに使うトランジスタ(ないし真空管)を節約するため等の理由でそういった設計のコンピュータもあって、たとえばFUJICはそのような設計で3オペランド型の命令だった。

脚注

  1. ^ http://catb.org/jargon/html/A/accumulator.html
  2. ^ Goldstine and von Neumann, 1946; p. 98 in Bell and Newell 1971

参考文献

  • Goldstine, Herman H., and von Neumann, John, "Planning and Coding of the Problems for an Electronic Computing Instrument", Rep. 1947, Institute of Advanced Study, Princeton. Reprinted on pp. 92-119 in Bell, C. Gordon and Newell, Allen (1971), Computer Structures: Readings and Examples, McGraw-Hill Book Company, New York. ISBN 0070043574}.

この記事はパブリックドメインであるジャーゴンファイルに由来する文章を含んでいます。

この記事は2008年11月1日以前にFree On-line Dictionary of Computingから取得した項目の資料を元に、GFDL バージョン1.3以降の「RELICENSING」(再ライセンス) 条件に基づいて組み込まれている。