
コンピュータの中央処理装置(CPU)において、アキュムレータは、中間演算論理演算ユニットの結果を格納するレジスタである。
アキュムレータのようなレジスタがない場合、各計算(加算、乗算、シフトなど)の結果をキャッシュまたはメインメモリに書き込む必要があり、おそらく次の操作で使用するためにすぐに読み戻されるだけでしょう。[ 1 ]
メモリへのアクセスは、アキュムレータなどのレジスタへのアクセスよりも遅い。これは、大容量のメインメモリに使用される技術が、レジスタに使用される技術よりも低速(ただし安価)であるためである。初期の電子計算機システムは、アキュムレータを備えたものと備えていないものの2つのグループに分けられることが多かった。
現代のコンピュータシステムでは、アキュムレータとして機能できる汎用レジスタが複数搭載されていることが多く、アキュムレータという用語は以前ほど一般的ではなくなっている。しかし、設計を簡素化するために、一部の特殊用途プロセッサでは依然として単一のアキュムレータを使用している。
数学的な演算は、多くの場合、段階的に行われ、ある演算の結果を次の演算の入力として使用します。たとえば、従業員の週給を手動で計算する場合、次のようなものになります。
同じタスクを実行するコンピュータプログラムは、基本的な操作手順は同じですが、検索される値はすべてコンピュータのメモリに格納されます。初期のコンピュータでは、勤務時間はパンチカードに、賃金率は磁気ドラムなどの別の形式のメモリに格納されていたと考えられます。乗算が完了すると、結果をどこかに格納する必要があります。ドラムの場合、これはおそらくドラムに戻す操作であり、かなりの時間がかかります。そして、次の操作ではその値を読み戻す必要があり、これもまたかなりの遅延を引き起こします。
アキュムレータは、このようなシステムにおいて、ある演算の結果を次の演算にほとんど、あるいは全くパフォーマンス低下なく渡すことができるスクラッチパッド領域を提供することで、パフォーマンスを劇的に向上させます。上記の例では、基本週給が計算されてアキュムレータに格納され、それが所得税の計算にすぐに使用されます。これにより、演算シーケンスから保存と読み込みの操作がそれぞれ1つずつ削減されます。これらの操作は通常、乗算自体の数十倍から数百倍もの時間を要していました。
アキュムレータマシン( 1オペランドマシン、またはアキュムレータベースのアーキテクチャを持つCPUとも呼ばれる)は、複数のレジスタを持つ場合もあるが、計算結果を主に1つの特別なレジスタ(通常「アキュムレータ」と呼ばれる)に格納するタイプのCPUである。初期のコンピュータはほぼすべてアキュムレータマシンだった。2つの異なる名前を持つアキュムレータを持つものもあれば[ a ] 、番号で参照される2つ以上のレジスタを持つものもあった[ b ] 。その後、マイクロプロセッサの登場により、アキュムレータアーキテクチャは再び普及し、MOS 6502はその代表的な例である。2014年現在でも人気のある8ビットマイクロコントローラの多くは、PICmicroや8051などは、アキュムレータベースのマシンである。
現代のCPUは通常、2オペランドまたは3オペランドのマシンです。追加のオペランドは、多数の汎用レジスタ(「汎用アキュムレータ」[ 2 ]または「アキュムレータ」[ 3 ] [ 4 ]とも呼ばれる)のうちどれが計算のソースおよびデスティネーションとして使用されるかを指定します。これらのCPUは「アキュムレータマシン」とはみなされません。
あるレジスタがコンピュータアーキテクチャのアキュムレータとして識別される特徴は、そのアキュムレータ(アーキテクチャにアキュムレータが存在する場合)が算術命令の暗黙のオペランドとして使用されることです。例えば、CPUには次のような命令があるかもしれません。この命令は、メモリ位置memaddressから読み取った値をアキュムレータの値に加算し、結果をアキュムレータに戻します。命令内でアキュムレータはレジスタ番号で識別されません。命令内で暗黙的に指定され、他のレジスタを指定することはできません。一部のアーキテクチャでは、特定のレジスタを一部の命令でアキュムレータとして使用しますが、他の命令ではレジスタ番号を使用してオペランドを明示的に指定します。ADD memaddress
複数の演算結果を単一の「メモリ」に保存するシステムはすべてアキュムレータとみなすことができます。J . プレスパー・エッカートは、ゴットフリート・ライプニッツとブレーズ・パスカルの初期の加算機でさえアキュムレータベースのシステムと呼んでいます。[ 5 ]パーシー・ラドゲートは、1909 年の解析マシンで乗算器アキュムレータ (MAC) を最初に考案しました。[ 6 ]
歴史的な慣習では、「アキュムレータ」、つまり一連の算術演算中に文字通り数値を蓄積する「算術器官」に専用のレジスターが割り当てられている。
例えば、指示事項のほんの一部を挙げると、次のようになります(現代的な解釈を加えたものです)。
レジスタからアキュムレータへ、およびアキュムレータからレジスタへの演算の名称に関する慣例は存在しない。例えば、従来の方式(ドナルド・クヌース(1973)の仮想的なMIXコンピュータなど)では、レジスタ/メモリからアキュムレータをロードする命令(例:「LDA r」)と、アキュムレータをレジスタ/メモリに格納する命令(例:「STA r」)という2つの命令が用いられている。クヌースのモデルには、他にも多くの命令が存在する。

1945 年構成のENIACには 20 個のアキュムレータがあり、並列に動作させることができました。[ 7 ] : 46 それぞれが 8 桁の 10 進数を格納し、受け取った数値を加算 (または減算) することができました。[ 7 ] : 33 1952 年の真空管IBM 701から始まる IBM の初期のバイナリ「科学」コンピュータのほとんどは、単一の36 ビットアキュムレータと、より長い結果の演算を処理するための別の乗算器 / 商レジスタを使用していました。10進マシンであるIBM 650には1 つの 10 桁ディストリビュータと 2 つの 10 桁アキュムレータがありました。後のトランジスタ式 10 進マシンであるIBM 7070には 3 つのアキュムレータがありました。 IBM System/360とDigital Equipment CorporationのPDP-6は、16個の汎用レジスタを備えていたが、PDP-6とその後継機であるPDP-10では、それらをアキュムレータと呼んでいた。GE -600シリーズは、1つのアキュムレータを備えたマシンで、 2番目のオペランドにアクセスするための強力なタグ付きアドレスレジスタを8個搭載していたことで知られていた。
12 ビットの PDP -8は、アキュムレータを使用した最初のミニ コンピュータの 1 つです。そして、後の多くのマシンに影響を与えました。[ 8 ] PDP-8 にはアキュムレータが 1 つしかありませんでした。HP 2100とData General Nova には、それぞれ 2 つと 4 つのアキュムレータがありました。Nova は、PDP-8 の後継機として却下され、後にPDP-11となるものが採用されたときに作成されました。Nova には、AC0~AC3 の 4 つのアキュムレータがありましたが、AC2 と AC3 はオフセット アドレスを提供するためにも使用でき、レジスタの使用の汎用性を高める傾向がありました。PDP-11 には、System/360 や PDP-10 と同様に、8 つの汎用レジスタがありました。後のほとんどの CISC および RISC マシンには、複数の汎用レジスタがありました。
4004、8008、その他多数の初期の4ビットおよび8ビットマイクロプロセッサは、通常、単一のアキュムレータを備えていました。8051マイクロコントローラは、プライマリアキュムレータとセカンダリアキュムレータの2つを備えており、セカンダリアキュムレータは、乗算(MUL AB)または除算(DIV AB)の命令でのみ使用されます。前者は16ビットの結果を2つの8ビットアキュムレータに分割し、後者は商をプライマリアキュムレータAに、余りをセカンダリアキュムレータBに格納します。8008、8080、8086の直接の子孫である現代の普及しているIntel x86プロセッサは、大きな数の乗算と除算にプライマリアキュムレータEAXとセカンダリアキュムレータEDXを今でも使用しています。例えば、MUL ECX は32 ビットレジスタ ECX と EAX を乗算し、64 ビットの結果を EAX と EDX に分割します。ただし、MUL と DIV は特殊なケースです。他の算術論理命令 (ADD、SUB、CMP、AND、OR、XOR、TEST) では、8 つのレジスタ EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI のいずれかをアキュムレータ (つまり、左オペランドと宛先) として指定できます。レジスタまたは即値がソースとして使用される場合は、メモリをアキュムレータとして使用できます。これは、結果の上位半分が不要な乗算でもサポートされています。したがって、x86 はアキュムレータ モデルに基づいているにもかかわらず、かなり汎用的なレジスタ アーキテクチャです。[ 9 ] x86 の 64 ビット拡張であるx86-64は、汎用レジスタが 8 個ではなく 16 個にさらに一般化されています。