「アキュムレータ (コンピュータ)」の版間の差分
m 2重リダイレクト回避 |
en:Accumulator (computing)(2007年10月24日 2:48:58(UTC))の翻訳 |
||
1行目: | 1行目: | ||
{{Otheruses|コンピュータのレジスタ|蓄圧機|アキュムレーター}} |
|||
'''アキュムレータ'''([[英語|英]]: '''Accumulator''')とは、[[コンピュータ]]の[[CPU]]の[[レジスタ (コンピュータ)|レジスタ]]の一種で、[[演算論理装置]]の演算結果を一時的に保持するレジスタである。アキュムレータのような役割のレジスタがないと、演算(加算、乗算、シフトなど)の結果を一々[[主記憶装置]]に書き込む必要があり、おそらく次の命令で即座にそれを読み出す必要が生じる。主記憶装置へのアクセスはレジスタに比べて時間がかかる。 |
|||
アキュムレータ利用の典型例として、数列の総和の計算がある。アキュムレータの初期値をゼロにしておき、アキュムレータの値と数列上の各数値の加算結果をアキュムレータに保持する。数列の総和が求められた時点でアキュムレータの値を主記憶装置に書き込んだり、アキュムレータ以外のレジスタに書き込んだりする。 |
|||
== アキュムレータマシン == |
|||
近年のCPUは多数のレジスタを持ち、そのほとんどを演算結果の格納用に使用できる。古い[[コンピュータ・アーキテクチャ]]では、[[命令セット]]でアキュムレータをオペランドとして明示的に指定することなく使っている。このようなマシンを'''アキュムレータマシン'''と呼ぶ。例えば、次のような[[命令 (コンピュータ)|命令]]である。 |
|||
ADD ''[[メモリアドレス|memaddress]]'' |
|||
この命令は、''memaddress'' のメモリ位置にある内容を読み出し、それをアキュムレータ上の値と加算し、結果をアキュムレータに格納する。命令上はアキュムレータは全く指定されていないが、この命令は暗黙のうちに必ずアキュムレータを使用する。アーキテクチャによっては、一部の命令で暗黙のアキュムレータを使用し、別の命令では明示的にレジスタを番号指定する。 |
|||
[[80x86|x86]]系[[マイクロプロセッサ]]において、32ビットの EAX レジスタ(あるいはその一部である AX や AL、さらには大きな数の乗算では別のレジスタである EDX も)は一部の演算命令(MUL や DIV)でアキュムレータとして暗黙のうちに使われる。しかし、他の演算命令では EAX は番号指定されるレジスタの1つに過ぎない。例えば、<code>MUL ecx</code> という命令では、ECX レジスタの内容と EAX の内容の乗算を行い、結果を EAX と EDX に分けて格納する(オーバフローを防ぐため)。しかし、<code>ADD</code> 命令は2つのオペランドを指定でき、<code>ADD ecx, edx</code> と書けば ECX と EDX を加算し、結果を ECX に格納する<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(累算する)に由来する。 |
|||
:「我々の算術器官の第一の部品は…並列記憶器官であり、数を受け取ってそれを既に格納している数に加算する。また、その内容をクリアすることもでき、内容を他に格納することもできる。我々はこのような器官をアキュムレータと呼ぶ。これは計算機械としては昔からある原理であり、机上乗算器やIBMのカウンタやリレー計算機やENIACなどで採用されている」<ref>Goldstine and von Neumann, 1946; p. 98 in Bell and Newell 1971</ref> |
|||
(現代風に解釈すれば)実行可能な命令は次のようである。 |
|||
* アキュムレータをクリアし、メモリ位置 x にある数を加算する。 |
|||
* アキュムレータをクリアし、メモリ位置 x にある数を減算する。 |
|||
* メモリ位置 x にある数をアキュムレータの内容と加算する。 |
|||
* メモリ位置 x にある数をアキュムレータの内容から減算する。 |
|||
* アキュムレータをクリアし、別のレジスタの内容をアキュムレータにシフトさせる。 |
|||
命令のニーモニックからは、アキュムレータとどう関わるのか(入力なのか出力なのか)はわからないことが多い。[[ドナルド・クヌース]]の仮想(抽象)コンピュータ [[MIX]] では、アキュムレータへのロードを行う命令(LDA)やアキュムレータから他へのストアを行う命令(STA)がある。 |
|||
== 脚注 == |
|||
{{Reflist}} |
|||
== 参考文献 == |
|||
*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}. |
|||
{{FOLDOC}} |
|||
[[Category:CPU|あきゆむれた]] |
|||
[[da:Akkumulator (processor)]] |
|||
[[de:Akkumulator (Computer)]] |
|||
[[en:Accumulator (computing)]] |
|||
[[es:Acumulador (informática)]] |
|||
[[fr:Accumulateur (informatique)]] |
|||
[[it:Accumulatore (informatica)]] |
|||
[[pl:Akumulator (informatyka)]] |
|||
[[zh:累加器]] |
2008年1月7日 (月) 00:49時点における版
アキュムレータ(英: Accumulator)とは、コンピュータのCPUのレジスタの一種で、演算論理装置の演算結果を一時的に保持するレジスタである。アキュムレータのような役割のレジスタがないと、演算(加算、乗算、シフトなど)の結果を一々主記憶装置に書き込む必要があり、おそらく次の命令で即座にそれを読み出す必要が生じる。主記憶装置へのアクセスはレジスタに比べて時間がかかる。
アキュムレータ利用の典型例として、数列の総和の計算がある。アキュムレータの初期値をゼロにしておき、アキュムレータの値と数列上の各数値の加算結果をアキュムレータに保持する。数列の総和が求められた時点でアキュムレータの値を主記憶装置に書き込んだり、アキュムレータ以外のレジスタに書き込んだりする。
アキュムレータマシン
近年のCPUは多数のレジスタを持ち、そのほとんどを演算結果の格納用に使用できる。古いコンピュータ・アーキテクチャでは、命令セットでアキュムレータをオペランドとして明示的に指定することなく使っている。このようなマシンをアキュムレータマシンと呼ぶ。例えば、次のような命令である。
ADD memaddress
この命令は、memaddress のメモリ位置にある内容を読み出し、それをアキュムレータ上の値と加算し、結果をアキュムレータに格納する。命令上はアキュムレータは全く指定されていないが、この命令は暗黙のうちに必ずアキュムレータを使用する。アーキテクチャによっては、一部の命令で暗黙のアキュムレータを使用し、別の命令では明示的にレジスタを番号指定する。
x86系マイクロプロセッサにおいて、32ビットの EAX レジスタ(あるいはその一部である AX や AL、さらには大きな数の乗算では別のレジスタである EDX も)は一部の演算命令(MUL や DIV)でアキュムレータとして暗黙のうちに使われる。しかし、他の演算命令では EAX は番号指定されるレジスタの1つに過ぎない。例えば、MUL ecx
という命令では、ECX レジスタの内容と EAX の内容の乗算を行い、結果を EAX と EDX に分けて格納する(オーバフローを防ぐため)。しかし、ADD
命令は2つのオペランドを指定でき、ADD ecx, edx
と書けば ECX と EDX を加算し、結果を ECX に格納する[1]。
歴史
アキュムレータという名称は、accumulate(累算する)に由来する。
- 「我々の算術器官の第一の部品は…並列記憶器官であり、数を受け取ってそれを既に格納している数に加算する。また、その内容をクリアすることもでき、内容を他に格納することもできる。我々はこのような器官をアキュムレータと呼ぶ。これは計算機械としては昔からある原理であり、机上乗算器やIBMのカウンタやリレー計算機やENIACなどで採用されている」[2]
(現代風に解釈すれば)実行可能な命令は次のようである。
- アキュムレータをクリアし、メモリ位置 x にある数を加算する。
- アキュムレータをクリアし、メモリ位置 x にある数を減算する。
- メモリ位置 x にある数をアキュムレータの内容と加算する。
- メモリ位置 x にある数をアキュムレータの内容から減算する。
- アキュムレータをクリアし、別のレジスタの内容をアキュムレータにシフトさせる。
命令のニーモニックからは、アキュムレータとどう関わるのか(入力なのか出力なのか)はわからないことが多い。ドナルド・クヌースの仮想(抽象)コンピュータ MIX では、アキュムレータへのロードを行う命令(LDA)やアキュムレータから他へのストアを行う命令(STA)がある。
脚注
- ^ Irvine, Kip R. (2007). Assembly Language for Intel-Based Computers (5th edition ed.). Pearson Prentice Hall. pp. pp. 633, 622. ISBN 0-13-238310-1
- ^ 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」(再ライセンス) 条件に基づいて組み込まれている。