累加器(计算)

Walther WSR-16机械计算器。马车(在前面)中的数字轮是累加器。

计算机中央处理单元(CPU)中,累加器是存储中间算术逻辑单元结果的寄存器

如果没有像累加器这样的寄存器,就必须将每个计算的结果(添加,乘法,移位等)编写为缓存主内存,也许只需要在下一个操作中重新读取以重新读取。

访问内存比访问像累加器之类的寄存器要慢,因为用于大型主内存的技术比寄存器较慢(但便宜)。早期的电子计算机系统通常分为两组,即累加器和没有累加器的人。

现代计算机系统通常具有多个可以作为累加器操作的通用寄存器,并且该术语不再像以前那样普遍。但是,为了简化其设计,许多特殊用途的处理器仍然使用单个蓄能器。

基本概念

数学操作通常以逐步方式进行,使用一个操作的结果作为下一个操作的输入。例如,对工人每周工资单的手动计算可能看起来像:

  1. 查找从员工的时间卡中工作的小时数
  2. 从桌子上查找该员工的工资率
  3. 将小时数乘以薪水,以获取基本的每周薪水
  4. 将其基本工资乘以固定百分比以考虑所得税
  5. 从他们的基本薪水中减去该数字以获取每周纳税的薪水
  6. 将该结果乘以另一个固定百分比来考虑退休计划
  7. 从他们的基本薪水中减去该数字,以在所有扣除后获得每周薪水

执行相同任务的计算机程序将遵循相同的基本操作顺序,尽管要查找的值都存储在计算机内存中。在早期计算机中,可能会在打孔卡上保存小时数,而工资率可能会以其他形式的内存,也许是磁性鼓。一旦乘法完成,就需要将结果放置在某个地方。在“鼓机”上,这很可能会恢复到鼓,这一操作需要大量时间。然后,下一个操作必须重新读取该值,这引入了另一个相当大的延迟。

累加器通过提供一个刮擦区域,可以显著提高此类系统的性能,在该区域中,一个操作的结果几乎没有或根本没有绩效罚款。在上面的示例中,将计算基本的每周工资并将其放置在累加器中,然后可以立即通过所得税计算来使用。这可以从序列中删除一个保存和一个读取操作,而序列通常需要数十次至数百次,而乘法本身则是数百次。

累加器机

累加器机器,也称为1-Operand机器或具有基于累加器的架构的CPU,是一种CPU,尽管它可能具有多个寄存器,但CPU主要将计算结果存储在一个特殊寄存器中,通常称为称为“累加器”。几乎所有早期的计算机都是累加器机器,只有高性能的“超级计算机”具有多个寄存器。然后,随着大型机系统已取代微型计算机,累积架构再次流行, MOS 6502是一个显著的例子。自2014年以来仍然流行的许多8位微控制器,例如PICMICRO8051 ,都是基于累加器的机器。

现代CPU通常是2-Operand或3-Operand机器。其他操作数指定了许多通用寄存器之一(也称为“通用蓄能器”)之一被用作计算的源和目的地。这些CPU不被视为“蓄能器机”。

将一个寄存器区分为计算机架构的累加器的特征是,累加器(如果架构具有一个)将被用作算术指令隐式操作数。例如,CPU可能具有以下指示:ADD memaddress这将从内存位置屏幕截图读取的值添加到累加器中的值,从而将结果放回累加器中。累加器在指令中未通过寄存器编号确定;它在说明中是隐含的,并且指令中没有其他登记册。某些架构在某些说明中使用特定寄存器作为累加器,但其他说明使用寄存器编号进行明确的操作数规范。

计算机蓄能器的历史

任何使用单个“内存”存储多个操作结果的系统都可以视为累加器。 J. Presper Eckert甚至将Gottfried LeibnizBlaise Pascal的最早添加机器作为基于累加器的系统。珀西·卢德盖特(Percy Ludgate )是第一个在他的1909年分析机器中构想乘数 - 积累器(MAC)的人。

历史公约将登记册献给“累加器”,这是一种“算术器官”,实际上在一系列算术操作中积累了数量:

“我们算术器官的第一部分……应该是一个平行的存储器官,可以接收一个数字并将其添加到其中的一个,它也能够清除其内容并可以存储它的内容。我们将将这样的器官称为蓄能器。在过去和现在的计算机上,它是相当传统的,例如,台式乘数,标准IBM计数器,更现代的接力机,ENIAC”(Goldstine和Von Neumann,1946年; P); 。 98在贝尔和纽厄尔1971)。

例如,只有几个说明(例如,有一些现代解释):

  • 清除蓄能器,并从内存位置添加数字x
  • 清除累加器和从内存位置减去数字x
  • 添加从内存位置X复制的数字X到累加器的内容
  • 从内存位置从累加器的内容中减去x复制的数字
  • 清除累加器和寄存器的内容转移到累加器中

关于从寄存器到累加器以及从累加器到寄存器的运营名称的名称,没有惯例。例如,传统(例如,唐纳德·诺斯(Donald Knuth )(1973)假设混音计算机)使用两个指令从寄存器/内存(例如“ lda r”)和存储累加器来寄存器/内存(例如“ sta r ”)。 Knuth的模型还有许多其他说明。

著名的基于累加器的计算机

IBM 701计算机的前面板,带有灯显示累加器和其他寄存器

ENIAC的1945年配置具有20个蓄能器,可以并行运行。每个人都可以存储一个八个十进制数字,并将其添加到它收到的数字(或从中减去)。 IBM的大多数早期二进制“科学”计算机从1952年的真空管IBM 701开始,使用了一个36位蓄能器,以及单独的乘数/商寄存器来处理较长结果的操作。 IBM 650是一台小数机,有一个10位数字分销商和两个十位数累加器; IBM 7070 ,后来的晶体管小数机有三个蓄能器。 IBM System/360Digital Equipment CorporationPDP-6有16个通用登记册,尽管PDP-6及其后继产品PDP-10 ,它们称它们为累加器。

12位PDP-8是最早使用蓄能器的微型计算机之一,并启发了许多后来的机器。 PDP-8只有一个蓄能器。 HP 2100DATA General Nova有2个和4个蓄能器。当对PDP-8的后续后续行动而拒绝将成为PDP-11的后续行动时,创建了NOVA。 NOVA提供了四个蓄能器AC0-AC3,尽管AC2和AC3也可以用于提供偏移地址,从而倾向于对寄存器的使用更普遍。 PDP-11沿系统/360和PDP-10的线,有8个通用登记册;大多数后来的CISC和RISC机器提供了多个通用登记册。

早期的4位和8位微处理器,例如4004、8008,通常有单个蓄能器。 8051微控制器有两个,一个主蓄能器和一个次级蓄能器,其中仅在乘法(mul ab)或分隔时使用指令使用第二个累加器(DIV AB);前者将两个8位蓄能器之间的16位结果分配,而后者则将其存储在初级蓄能器A上,其余部分则在次级蓄能器B中。作为8008,80808086的直接后代。 ,现代无处不在的Intel X86处理器仍然使用主要的蓄能器EAX和二级蓄能器EDX进行大数字的乘法和划分。例如,MUL ECX将乘以32位寄存器ECX和EAX,并在EAX和EDX之间划分64位结果。但是,MUL和DIV是特殊情况;其他算术逻辑指令(add,sub,cmp和of,xor,test)可以指定八个寄存器EAX,ECX,EDX,EBX,ESP,ESP,ESP,EBP,ESI,EDI作为累加器(IE左操作机和EDI)目的地)。如果不需要结果的上半部分,则也支持乘以乘。因此,尽管基于累加器模型,X86还是相当通用的寄存器体系结构。 X86, X86-64的64位扩展已进一步推广到16位,而不是8个通用寄存器。