运算器(Arithmetic Unit)是计算机的数据处理中心,也是机器中各部件交换数据的枢纽。现代计算机的奠基人冯.诺依曼在世界上第一台电子计算机ENIAC研制过程中,于1945年发表了《电子计算机逻辑结构初探》的报告,提出了建造现代计算的结构模型,要点是:计算机由五大部件即运算器、控制器、存储器、输入装置和输出装置组成。运算器为中心,采用二进制编码表示数据,提出了指令的二进制表示方法和存储程序的概念等。奠定了现代计算机的理论基础,提出的模型被称为冯.诺依曼计算机结构模型。[1]

中文名

运算器

外文名

arithmetic unit

属性

计算机

用途

计算

地位

冯.诺依曼强调五大部件运算器为中心有两层意义:其一,计算机主要用途是计算。运算器是专门用于计算的部件,是计算机的核心,其他部件都是为运算器服务的。其二,运算器是机器中各部件交换数据的枢纽,输入数据、输出数据的指令都是通过运算器实现的。处理数据时是从存储器中读出数据,又将运算结果写回到存储器中,辅助存储器磁盘和主存储器交换数据可以利用直接存储器存取(DMA)控制器实现直接存储器访问,这是为了不破坏运算器现场提高运算速度而增加的替代部件,当磁盘向中央处理器(CPU)发出DMA请求,CPU响应后放弃系统总线控制权转入DMA周期,在DMA控制下占用一个机器周期交换一个数据后,又把总线交给CPU,继续执行CPU原来的工作。[1]

主要组成

运算器的核心是算术逻辑部件(ALU),其本质上是一个二进制并行加法器,减法也可在加法器中实现,乘除法可通过加减法和移位完成,为了提高运算速度,在加法器输出端增加一级移位器,使加法和移位在一个时钟周期内完成。为了完成逻辑运算,在加法器的数据输入端增加与门、或门等实现与、或门等逻辑操作。在程序中有时需要使用前条指令的运算结果,如结果为0结果溢出、结果有进位等,作为分支程序条件转移的依据。因此ALU还设置了一个程序状态字存储器(PSW)专门存放运算结果的特征,运算器中还设置若干数据寄存器,存放被运算数和运算结果,完成加减法操作最少需要二个寄存器,完成乘除法运算最少需要3个寄存器。这些寄存器都具有专门的职能,显然增加寄存器的数目,对方便编程和提高运算速度是有利的。现代计算机中往往设置多个不固定功能的通用寄存器,每个时钟周期同时读出二个操作数,可提高速度,运算器内各部件的数据传送通过总线方式连接,构成完整的数据传送通路,这组总线称为处理器内总线,也叫处理器总线。运算器基本逻辑框图如图所示,为了提高运算速度,运算器中还可增加乘法部件,除法部件、浮点部件等。[1]

运算器基本逻辑框图

相关分类

运算器有多种分类方式。按处理一个字内各位数据的顺序,运算器可分为串行运算器和并行运算器,按数据寄存器的功能可分为基于累加器的运算器和基于通用寄存器方案的运算器。累加器用来存放运算结果(也可放一个被运算数据),指令中不再指明,常常用于地址指令中,按被处理数据类型可分为定点运算器和浮点运算器。按处理器内总线的组数,可分为单总线、双总线、三总线方案,以进一步提高运算速度,三总线方案可使ALU两个数据输入端及输出端放置不同数据,在一个节拍中完成双操作数的运算。[1]

重要指标

数据

运算器

运算器的处理对象是数据,所以数据长度和计算机数据表示方法,对运算器的性能影响极大。70年代微处理器常以1个、4个、8个、16个二进制位作为处理数据的基本单位。大多数通用计算机则以16、32、64位作为运算器处理数据的长度。能对一个数据的所有位同时进行处理的运算器称为并行运算器。如果一次只处理一位,则称为串行运算器。有的运算器一次可处理几位(通常为6或8位),一个完整的数据分成若干段进行计算,称为串/并行运算器。运算器往往只处理一种长度的数据。有的也能处理几种不同长度的数据,如半字长运算、双倍字长运算、四倍字长运算等。有的数据长度可以在运算过程中指定,称为变字长运算。

按照数据的不同表示方法,可以有二进制运算器、十进制运算器、十六进制运算器、定点整数运算器、定点小数运算器、浮点数运算器等。按照数据的性质,有地址运算器和字符运算器等。

操作

运算器能执行多少种操作和操作速度,标志着运算器能力的强弱,甚至标志着计算机本身的能力。运算器最基本的操作是加法。一个数与零相加,等于简单地传送这个数。将一个数的代码求补,与另一个数相加,相当于从后一个数中减去前一个数。将两个数相减可以比较它们的大小。

运算器

左右移位是运算器的基本操作。在有符号的数中,符号不动而只移数

据位,称为算术移位。若数据连同符号的所有位一齐移动,称为逻辑移位。若将数据的最高位与最低位链接进行逻辑移位,称为循环移位。

运算器的逻辑操作可将两个数据按位进行与、或、异或,以及将一个数据的各位求非。有的运算器还能进行二值代码的16种逻辑操作。

乘、除法操作较为复杂。很多计算机的运算器能直接完成这些操作。乘法操作是以加法操作为基础的,由乘数的一位或几位译码控制逐次产生部分积,部分积相加得乘积。除法则又常以乘法为基础,即选定若干因子乘以除数,使它近似为1,这些因子乘被除数则得商。没有执行乘法、除法硬件的计算机可用程序实现乘、除,但速度慢得多。有的运算器还能执行在一批数中寻求最大数,对一批数据连续执行同一种操作,求平方根等复杂操作。

机器字长

指参与运算的数据的基本位数。它决定了寄存器、运算器和数据总线的位数,因而直接影响到硬件的价格。字长标志着计算精度。为协调精度与造价,并满足多方面的要求,许多计算机允许变字长计算,例如半字长、全字长和双倍字长等。由于数和指令代码都放在主存中,因而字长与指令码长度往往有一个对应关系,字长也就影响到指令系统功能的强弱。计算机字长从 4 位、8 位、16 位、32 位到 64 位不等。机器字长可包含一个或多个字节。用于科学计算的机器,为了确保精度,需要较长的字长;用于数据处理、工业控制的机器,字长为16位或32位就能满足要求。

运算方法

实现运算器的操作,特别是四则运算,必须选择合理的运算方法。它直接影响运算器的性能,也关系到运算器的结构和成本。另外,在进行数值计算时,结果的有效数位可能较长,必须截取一定的有效数位,由此而产生最低有效数位的舍入问题。选用的舍入规则也影响到计算结果的精确度。在选择计算机的数的表示方式时,应当全面考虑以下几个因素:要表示的数的类型(小数、整数、实数和复数):决定表示方式,可能遇到的数值范围:确定存储、处理能力。数值精确度:处理能力相关;数据存储和处理所需要的硬件代价:造价高低。

运算器

两种常用格式:定点格式:定点格式容许的数值范围有限,但要求的处理硬

件比较简单;浮点格式:容许的数值范围很大,但要求的处理硬件比较复杂。

1、定点数表示法:定点指小数点的位置固定,为了处理方便,一般分为定点纯整数和纯小数。

2、浮点数表示法:由于所需表示的数值取值范围相差十分悬殊,给存储和计算带来诸多不便,因此出现了浮点运算法。

浮点表示法,即小数点的位置是浮动的。其思想来源于科学计数法。IEEE754的浮点数(比较特殊)浮点数的规格化:主要解决同一浮点数表示形式的不唯一性问题。规定,否则尾数要进行左移或右移。

机器零的概念:尾数为0或是阶码值小于所能表示的最小数。

3、十进制数串的表示方法:由于人们对十进制比较熟悉,因此在计算机中要增加对十进制运算的支持。两种方式:将十进制数变为二进制数运算,输出时再由二进制变为十进制。直接的十进制运算。直接运算的表示方法:字符串形式:用于非数值计算领域、压缩的十进制数串:分为定长和不定长两种。需要相应的十进制运算器和指令支持。

4、自定义数据表示:标志符数据表示、描述符数据表示。区别:标志符与每个数据相连,二者合起来存放在一个存储单元,而描述符要和数据分开存放;描述符表示中,先访问描述符,后访问数据,至少增加一次访存;描述符是程序的一部分,而不是数据的一部分。原码:比较自然的表示法,最高位表示符号,0为正,1为负。优点:简单易懂。缺点:加减法运算复杂。补码:加减法运算方便,减法可以转换为加法。定点小数的补码。定点整数的补码,反码:为计算补码方便而引入。由反码求补码:符号位置1,个位取反,末位加1。移码:用于阶码的表示,两个移码容易比较大小,便于对阶。

运算器

ASCII码 输入码:用于汉字输入;汉字的存储;字模码:用于汉字的显示。余数处理的两种方法:恢复余数法:运算步骤不确定,控制复杂,不适合计算机运算。加减交替法:不恢复余数,运算步骤确定,适合计算机操作。逻辑数概念:不带符号的二进制数。四种逻辑运算:逻辑非、逻辑加、逻辑乘、逻辑异。多功能算术/逻辑运算单元(ALU)并行进位,行波进位加/减法器存在

的两个问题:运算时间长,行波进位加/减法器只能完成加法和减法,而不能完成逻辑操作,控制端M用来控制作算术运算还是逻辑运算,两种运算的区别在于是否对进位进行处理。M=0时,对进位无影响,为算术运算;M=1时,进位被封锁,为逻辑运算。正逻辑中,“1”用高电平表示,“0”用低电平表示,而负逻辑刚好相反。逻辑与负逻辑的关系为,正逻辑的“与”到负逻辑中变为“或”,即+·互换。

内部总线,总线分类:内部总线、外部总线(系统总线)、通信总线。总线又可分为单向总线和双向总线。带锁存器的总线可实现总线的复用。运算器包括ALU、阵列乘除器件、寄存器、多路开关、三态缓冲器、数据总线等逻辑部件。运算器的设计,主要是围绕着ALU和寄存器同数据总线之间如何传送操作数和运算结果而进行的。运算器的三种结构形式:单总线结构的运算器:这种结构的主要缺点是操作进度较慢,但控制电路比较简单。双总线结构的运算器。三总线结构的运算器:三总线结构的运算器的特点是操作时间快。

结构

运算器包括寄存器、执行部件和控制电路3个部分。在典型的运算器中有3个寄存器:接收并保存一个操作数的接收寄存器;保存另一个操作数和运算结果的累加寄存器;在进行乘、除运算时保存乘数或商数的乘商寄存器。执行部件包括一个加法器和各种类型的输入输出门电路。控制电路按照一定的时间顺序发出不同的控制信号,使数据经过相应的门电路进入寄存器或加法器,完成规定的操作。为了减少对存储器的访问,很多计算机的运算器设有较多的寄存器,存放中间计算结果,以便在后面的运算中直接用作操作数。为了提高运算速度,某些大型计算机有多个运算器。它们可以是不同类型的运算器,如定点加法器、浮点加法器、乘法器等,也可以是相同类型的运算器。运算器的组成决定于整机的设计思想和设计要求,采用不同的运算方法将导致不同的运算器组成。但由于运算器的基本功能是一样的,其算法也大致相同,因而不同机器的运算器是大同小异的。运算器主要由算术逻辑部件、通用寄存器组和状态寄存器组成。

1、算术逻辑部件ALU。ALU主要完成对二进制信息的定点算术运算、逻辑运算和各种移位操作。算术运算主要包括定点加、减、乘和除运算。逻辑运算主要有逻辑与、逻辑或、逻辑异或和逻辑非操作。移位操作主要完成逻辑左移和右移、算术左移和右移及其他一些移位操作。某些机器中,ALU还要完成数值比较、变更数值符号、计算操作数在存储器中的地址等。可见,ALU是一种功能较强的组合逻辑电路,有时被称为多功能发生器,它是运算器组成中的核心部件。ALU能处理的数据位数(即字长)与机器有关。如单板机中,ALU是8位;IBM PC/XT和AT机中,ALU为16位;386和486微机中,ALU是32位。ALU有两个数据输入端和一个数据输出端,输入输出的数据宽度(即位数)与ALU处理的数据宽度相同。

2、通用寄存器组设计的机器的运算器都有一组通用寄存器。它主要用来保存参加运算的操作数和运算的结果。早期的机器只设计一个寄存器,用来存放操作数、操作结果和执行移位操作,由于可用于存放重复累加的数据,所以常称为累加器。通用寄存器均可以作为累加器使用。通用寄存器的数据存取速度是非常快的,一般是十几个毫微秒(μs)。如果ALU的两个操作数都来自寄存器,则可以极大地提高运算速度。通用寄存器同时可以兼作专用寄存器,包括用于计算操作数的地址(用来提供操作数的形式地址,据此形成有效地址再去访问主存单元)。例如,可作为变址寄存器、程序计数器(PC)、堆栈指示器(SP)等。必须注意的是,不同的机器对这组寄存器使用的情况和设置的个数是不相同的。

3、状态寄存器状态寄存器用来记录算术、逻辑运算或测试操作的结果状态。程序设计中,这些状态通常用作条件转移指令的判断条件,所以又称为条件码寄存器。一般均设置如下几种状态位:

1)零标志位(Z):当运算结果为 0 时,Z 位置“1”;非 0 时,置“0”;

2)负标志位(N):当运算结果为负时,N 位置“1”;为正时,置“0”;

3)溢出标志位(V):当运算结果发生溢出时,V 位置“1”;无溢出时,置“0”;

4)进位或借位标志(C):在做加法时,如果运算结果最高有效位(对于有符号数来说,即符号位;对无符号数来说,即数值最高位)向前产生进位时,C 位置“1”;无进位时,置“0”。在做减法时,如果不够减,最高有效位向前有借位(这时向前无进位产生)时,C 位置“1”;无借位(即有进位产生)时,C 位置“0”。除上述状态外,状态寄存器还常设有保存有关中断和机器工作状态(用户态或核心态)等信息的一些标志位(应当说明,不同的机器规定的内容和标志符号不完全相同),以便及时反映机器运行程序的工作状态,所以有的机器称它为“程序状态字”或“处理机状态字”(Processor Status Word,PSW )。