アキュムレータとは
コンピュータにおけるアキュムレータ(Accumulator)とは、計算処理、特に総和を求めるような演算に用いられるレジスタや変数のことです。
CPUのアーキテクチャにおいては、
演算装置(ALU)での演算結果を必ず格納する特別なレジスタを指します。現在でも、
マイクロコントローラ(MCU)の一部でアキュムレータが採用されています。
CPUにおけるアキュムレータ
ジャーゴンファイルでは、アキュムレータを「レジスタの古風な呼び方」と説明しています。しかし、アキュムレータは単なるレジスタではなく、
演算装置と密接な関係を持つ特別なレジスタです。演算結果が必ず格納され、次の演算では
被演算子として使用される点が特徴です。
1970年代から1980年代にかけての
CPUでは、トランジスタ数が限られていたため、アキュムレータ方式が採用され、回路の簡素化に貢献しました。特に、数値の総和を求める処理において、アキュムレータは繰り返し加算を行うことで、累積値を保持するために重要な役割を果たしました。例えば、
Intel 8080のAレジスタ、
Z80、MOS 6502などがアキュムレータを採用した
CPUとして知られています。
アキュムレータを使用する
CPUの
アセンブリ言語では、多くの場合、命令の中でアキュムレータが明示的に指定されません。例えば、`ADD memaddress`という命令は、メモリ位置`memaddress`の内容とアキュムレータの内容を加算し、結果をアキュムレータに格納します。このように、アキュムレータを暗黙的に使用するマシンを「アキュムレータマシン」と呼びます。
一部の
CPUでは、アキュムレータが特別なレジスタとして扱われることを示すニーモニックも存在します。例えば、
ドナルド・クヌースが提唱した仮想マシンMIXでは、アキュムレータへのロード命令(LDA)やストア命令(STA)があります。
現代のアキュムレータ
現代の
マイクロコントローラでも、アキュムレータは依然として使用されています。例えば、ルネサスのRL78は累計50億個以上販売されたアキュムレータマシンです。また、STマイクロエレクトロニクスのSTM8ファミリのように、アキュムレータと
ハーバード・アーキテクチャを組み合わせることで、高性能かつ低コストなシステムを実現しています。
x86プロセッサでも、AXレジスタ(32ビットではEAX)がアキュムレータのように扱われることがあります。初期の命令セットでは、一部の命令でソースとデスティネーションがAXとDXに固定されていたり、AXを対象とする命令に短縮形があったりしました。しかし、拡張が進むにつれて、
アセンブリ言語レベルではその特徴が薄れてきました。しかし、
機械語レベルでは後方互換性を保つために、この特徴は残っています。
アキュムレータの歴史
アキュムレータという名前は、「accumulate(累積する)」という言葉に由来します。1940年代のコンピュータに関する文献には、アキュムレータが「数を受け取って、それを既に格納されている数に加算する」役割を持つと記述されています。初期の計算機では、アキュムレータは計算結果を一時的に保持し、次の演算に利用するための重要な要素でした。
フォン・ノイマンとゴールドスタインによる文献では、アキュムレータを「並列記憶器官」として言及し、その内容のクリアや、他の場所への格納が可能であると説明しています。また、
EDSACのような初期のコンピュータでは、アキュムレータが乗算などの
積和演算にも用いられ、ベクトルの内積計算に役立ちました。
真空管コンピュータ時代には、真空管の節約のためアキュムレータ方式が採用されました。日本のFUJICもその一つで、3オペランド型の命令を持っていました。アキュムレータのような演算結果を格納するレジスタがない場合、演算結果を
主記憶装置に書き込む必要が生じ、処理速度が低下するため、アキュムレータの存在は計算機全体の効率化に大きく貢献しました。
まとめ
アキュムレータは、コンピュータの初期から存在し、計算処理において中心的な役割を担ってきた重要な要素です。現代の
CPUや
マイクロコントローラにも、その概念や影響は残っており、コンピュータアーキテクチャを理解する上で欠かせない知識と言えるでしょう。