累加器

在中央處理器中 ， 累加器 ( accumulator ) 是一種寄存器 ， 用來儲存計算產生的中間結果 。 如果沒有像累加器這樣的寄存器 ， 那麼在每次計算 後就必須要把結果寫回到 記憶體 ， 也許馬上就得讀回來 。 然而存取主存的速度是比從算術邏輯單元到有直接路徑的累加器存取更慢 。 標準的例子就是把一列的數字加起來 。 一開始累加器設定爲零 ， 每個數字依序地被加到累加器中 ， 當所有的數字都被加入後 ， 結果才寫回到主存中 。 現今的 CPU 通常有很多寄存器 ， 所有或多數都可以被用來當作累加器 。 因爲這個原因 ， " 累加器 " 這名詞就顯得有些老舊 。 這個名詞已經幾乎不在 微處理器 寄存器中使用 ， 例如 ， 運算寄存器的名稱中的符號以 " A " 開頭的表示是從 " accumulator " 這個歷史因素得來的 ( 有時候認爲並非 " arithmetic " ) 。 也可能混淆的是寄存器的名字前置 " A " 也表示 " address " ， 比如說像是 Motorola 68000 家族 。 早期的 4 位 、 8 位微處理器 ， 典型具有單個累加器 。 8051 微控制器有兩個累加器 ： 主累加器與從累加器 ， 其中的從累加器只用於乘法 （ MUL AB ） 與除法 （ DIV AB ） 。 乘法的 16 位結果放入兩個 8 位累加器中 。 除法時 ， 商放入主累加器 ， 餘數放入從累加器 。 8008 的直接後繼產品 — — 8080 與 8086 ， 開創了 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 作爲目的操作數 （ 即存儲結果的位置 ） 。