标题：运算器
简介
  运算器运算器由算术逻辑单元（ALU）、累加器、状态寄存器、通用寄存器组等组成。算术逻辑运算单元（ALU）的基本功能为加、减、乘、除四则运算，与、或、非、异或等逻辑操作，以及移位、求补等操作。计算机运行时，运算器的操作和操作种类由控制器决定。运算器处理的数据来自存储器；处理后的结果数据通常送回存储器，或暂时寄存在运算器中。与Control Unit共同组成了CPU的核心部分。
数据
运算器的处理对象是数据，所以数据长度和计算机数据表示方法，对运算器的性能影响极大。70年代微处理器常以1个、4个、8个、16个二进制位作为处理数据的基本单位。大多数通用计算机则以16、32、64位作为运算器处理数据的长度。能对一个数据  运算器的所有位同时进行处理的运算器称为并行运算器。如果一次只处理一位，则称为串行运算器。有的运算器一次可处理几位 （通常为6或8位），一个完整的数据分成若干段进行计算，称为串/并行运算器。运算器往往只处理一种长度的数据。有的也能处理几种不同长度的数据，如半字长运算、双倍字长运算、四倍字长运算等。有的数据长度可以在运算过程中指定，称为变字长运算。
按照数据的不同表示方法，可以有二进制运算器、十进制运算器、十六进制运算器、定点整数运算器、定点小数运算器、浮点数运算器等。按照数据的性质，有地址运算器和字符运算器等。
它的主要功能是进行算术运算和逻辑运算
操作
运算器能执行多少种操作和操作速度，标志着运算器能力的强弱，甚至标志着计算机本身的能力。运算器最基本的操作是加法。一个数与零相加，等于简单地传送这个数。将一个数的代码求补，与另一个数相加，相当于从后一个数中减去前一个数。将两个数相减可以比较它们的大小。
左右移位是运算器的基本操作。在有符号的数中，符号不动而只移数  运算器据位，称为算术移位。若数据连同符号的所有位一齐移动，称为逻辑移位。若将数据的最高位与最低位链接进行逻辑移位，称为循环移位。
运算器的逻辑操作可将两个数据按位进行与、或、异或，以及将一个数据的各位求非。有的运算器还能进行二值代码的16种逻辑操作。
乘、除法操作较为复杂。很多计算机的运算器能直接完成这些操作。乘法操作是以加法操作为基础的，由乘数的一位或几位译码控制逐次产生部分积，部分积相加得乘积。除法则又常以乘法为基础，即选定若干因子乘以除数，使它近似为1，这些因子乘被除数则得商。没有执行乘法、除法硬件的计算机可用程序实现乘、除，但速度慢得多。有的运算器还能执行在一批数中寻求最大数，对一批数据连续执行同一种操作，求平方根等复杂操作。
运算方法
实现运算器的操作，特别是四则运算，必须选择合理的运算方法。它直接影响运算器的性能，也关系到运算器的结构和成本。另外，在进行数值计算时，结果的有效数位可能较长，必须截取一定的有效数位，由此而产生最低有效数位的舍入问题。选用的舍入规则也影响到计算结果的精确度。在选择计算机的数的表示方式时，应当全面考虑以下几个因素：要表示的数的类型（小数、整数、实数和复数）：决定表示方式，可能遇到的数值范围：确定存储、处理能力。数值精确度：处理能力相关；数据存储和处理所需要的硬件代价：造价高低。
两种常用格式：定点格式：定点格式容许的数值范围有限，但要求的处理硬  运算器件比较简单；浮点格式：容许的数值范围很大，但要求的处理硬件比较复杂。
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 能处理的数据位数（即字长）与机器有关。如 Z80单板机中，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 ）。
发展
公元前5世纪，中国人发明了算盘，广泛应用于商业贸易中，算盘被认为是最早的计算机，并一直使用至今。算盘在某些方面的运算能力要超过目前的计算机，算盘的方面体现了中国人民的智慧。
直到17世纪，计算设备才有了第二次重要的进步。1642年，法国人Blaise Pascal（1623-1662）发明了自动进位加法器，称为Pascalene。1694年，德国数学家Gottfried Wilhemvon Leibniz（1646-1716）改进了Pascaline，使之可以计算乘法。后来，法国人Charles Xavier Thomas de Colmar发明了可以进行四则运算的计算器。  运算器现代计算机的真正起源来自英国数学教授Charles Babbage。Charles Babbage发现通常的计算设备中有许多错误，在剑桥学习时，他认为可以利用蒸汽机进行运算。起先他设计差分机用于计算导航表，后来，他发现差分机只是专门用途的机器，于是放弃了原来的研究，开始设计包含现代计算机基本组成部分的分析机。（Analytical Engine）
Babbage的蒸汽动力计算机虽然最终没有完成，以今天的标准看也是非常原始的，然而，它勾画出现代通用计算机的基本功能部分，在概念上是一个突破。
在接下来的若干年中，许多工程师在另一些方面取得了重要的进步，美国人Herman Hollerith（1860-1929），根据提花织布机的原理发明了穿孔片计算机，并带入商业领域建立公司。
现代计算机发展历程
第一代电子管计算机(1946-1957)
1946年2月15日，标志现代计算机诞生的ENIAC(Electronic Numerical Integrator and Computer）在费城公诸于世。ENIAC代表了计算机发展史上的里程碑，它通过不同部分之间的重新接线编程，还拥有并行计算能力。ENIAC由美国政府和宾夕法尼亚大学合作开发，使用了18000个电子管，70000个电阻器，有5百万个焊接点，耗电160千瓦，其运算速度为每秒5000次。第一代计算机的特点是操作指令是为特定任务而编制的，每种机器有各自不同的机器语言，功能受到限制，速度也慢。另一个明显特征是使用真空电子管和磁鼓储存数据 .
第二代晶体管计算机(1957-1964)
1948年，晶体管发明代替了体积庞大电子管，电子设备的体积不断减小。1956年，晶体管在计算机中使用，晶体管和磁芯存储器导致了第二代计算机的产生。第二代计算机体积小、速度快、功耗低、性能更稳定。1960年，出现了一些成功地用在商业领域、大学和政府部门的第二代  运算器计算机。第二代计算机用晶体管代替电子管，还有现代计算机的一些部件：打印机、磁带、磁盘、内存、操作系统等。计算机中存储的程序使得计算机有很好的适应性，可以更有效地用于商业用途。在这一时期出现了更高级的COBOL和FORTRAN等语言，使计算机编程更容易。新的职业（程序员、分析员和计算机系统专家）和整个软件产业由此诞生。
第三代集成电路计算机(1964-1972)
1958年德州仪器的工程师Jack Kilby发明了集成电路（IC），将三种电子元件结合到一片小小的硅片上。更多的元件集成到单一的半导体芯片上，计算机变得更小，功耗更低，速度更快。这一时期的发展还包括使用了操作系统，使得计算机在中心程序的控制协调下可以同时运行许多不同的程序。
第四代大规模集成电路计算机 (1972-现在）
大规模集成电路 (LSI) 可以在一个芯片上容纳几百个元件。到了 80 年代，超大规模集成电路(VLSI) 在芯片上容纳了几十万个元件，后来的 (ULSI) 将数字扩充到百万级。可以在硬币大小的芯片上容纳如此数量的元件使得计算机的体积和价格不断下降，而功能和可靠性不断增强。70 年代中期，计算机制造商开始将计算机带给普通消费者，这时的小型机带有友好界面的软件包，供非专业人员使用的程序和最受欢迎的字处理和电子表格程序。1981 年， IBM 推出个人计算机(PC) 用于家庭、办公室和学校。80 年代个人计算机的竞争使得价格不断下跌，微机的拥有量不断增加，计算机继续缩小体积。与 IBM PC 竞争的 Apple Macintosh 系列于 1984 年推出， Macintosh 提供了友好的图形界面，用户可以用鼠标方便地操作。
纪事年表
1666年，在英国Samuel Morland发明了一部可以计算加数及减数的机械计数机。
1673年，Gottfried Leibniz 制造了一部踏式（stepped）圆柱形转轮的计数机，叫“Stepped Reckoner”，这部计算器可以把重复的数字相乘，并自动地加入加数器里。
1694年，德国数学家，Gottfried Leibniz ，把巴斯卡的Pascalen  运算器e 改良，制造了一部可以计算乘数的机器，它仍然是用齿轮及刻度盘操作。
1773年，Philipp-Matthaus 制造及卖出了少量精确至12位的计算机器。
1775年，The third Earl of Stanhope 发明了一部与Leibniz相似的乘法计算器。
1786年，J.H.Mueller 设计了一部差分机，可惜没有拨款去制造。
1801年，Joseph-Marie Jacquard 的织布机是用连接按序的打孔卡控制编织的样式。
1854年，George Boole 出版 "An Investigation of the Laws of Thought”，是讲述符号及逻辑理由，它后来成为计算机设计的基本概念。
1858年，一条电报线第一次跨越大西洋，并且提供了几日的服务。
1861年，一条跨越大陆的电报线把大西洋和太平洋沿岸连接起来。
1876年，Alexander Graham Bell 发明了电话并取得专利权。
1876至1878年，Baron Kelvin 制造了一部泛音分析机及潮汐预测机。
1882年，William S. Burroughs 辞去在银行文员的工作，并专注于加数器的发明。
1889年，Herman Hollerith 的电动制表机在比赛中有出色的表现，并被用于 1890 中的人口调查。Herman Hollerith 采用了Jacquard 织布机的概念用来计算，他用咭贮存资料，然后注入机器内编译结果。这机器使本来需要十年时间才能得到的人口调查结果，在短短六星期内做到。
1893年，第一部四功能计算器被发明。
1895年，Guglielmo Marconi 传送广播讯号。
1896年，Hollerith 成立制表机器公司（Tabulating Machine Company）。
1901年，打孔键出现，之后的半个世纪只有很少的改变。
1904年，John A.Fleming 取得真空二极管的专利权，为无线电通讯建立基础。
1906年，Lee de Foredt 加了一个第三活门在Felming 的二极管， 创制了三电极真空管。
1907年，唱片音乐在纽约组成第一间正式的电台。
1908年，英国科学家 Campbell Swinton述了电子扫描方法及预示用阴极射线管制造电视。
1911年，Hollerith 的表机公司与其它两间公司合并，组成 Computer Tabulating Recording Company (C-T-R），制表及录制公司。但在1924年，改名为International Business Machine Corporation (IBM）。
1911年，荷兰物理学家 Kamerlingh Onnes 在 Leiden Unversity 发现超导电。
1931年，Vannever Bush 发明了一部可以解决差分程序的计数机，这机器可以解决一些令数学家，科学家头痛的复杂差分程序。
1935年，IBM (International Business Machine Corporation) 引入 "IBM 601”，它是一部有算术部件及可在1秒钟内计算乘数的穿孔咭机器。它对科学及商业的计算起很大的作用。总共制造了1500 部。
1937年，Alan Turing 想出了一个 "通用机器（Universal Machine）” 的概念，可以执行任何的算法，形成了一个"可计算（computability）”的基本概念。Turing 的概念比其它同类型的发明为好，因为他用了符号处理（symbol processing) 的概念。
1939年11月，John Vincent Atannsoff 与 John Berry 制造了一部16位加数器。它是第一部用真空管计算的机器。
1939年，Zuse 与 Schreyer 开鈶制造了"V2”[后来叫Z2]，这机器沿用 Z1的机械贮存器，加上一个用断电器逻辑（Relay Logic）的新算术部件。但当 Zuse完成草稿后，这计划被中断一年。
1939-40年，Schreyer 完成了用真空管的10位加数器，以及  运算器用氖气灯（霓虹灯）的存贮器。
1940年1月,在 Bell Labs,Samuel Williams 及Stibitz 完成了一部可以计算复杂数字的机器，叫“复杂数字计数机（Complex Number Calculator）”，后来改称为“断电器计数机型号I (Model I Relay Calculator）”。它用电话开关部份做逻辑部件：145个断电器，10个横杠开关。数字用“Plus 3BCD”代表。在同年9月，电传打字 etype 安装在一个数学会议里，由New Hampshire 连接去纽约。
1940年，Zuse 终于完成Z2，它比运作得更好，但不是太可靠。
1941年夏季，Atanasoff及Berry完成了一部专为解决联立线性方程系统（system of simultaneous linear equations) 的计算器，后来叫做"ABC (Atanasoff-Berry Computer）”，它有60个50位的存贮器，以电容器（capacitories）的形式安装在2个旋转的鼓上，时钟速度是60Hz。
1941年2月，Zuse 完成"V3”（后来叫Z3），是第一部操作中可编写程序的计数机。它亦是用浮点操作，有7个位的指数，14位的尾数，以及一个正负号。存贮器可以贮存64 个字，所以需要1400个断电器。它有多于1200个的算术及控制部件，而程序编写，输入，输出的与 Z1 相同。1943年1月 Howard H. Aiken完成"ASCC Mark I”（自动按序控制计算器 Mark I ，Automatic Sequence -- Controlled Calculator Mark I），亦称“Haward Mark I”。这部机器有51尺长，重5顿，由750,000部份合并而成。它有72个累加器，每一个有自己的算术部件，及23位数的寄存器。
1943年12月，Tommy Flowers与他的队伍，完成第一部“Colossus”，它有2400个真空管用作逻辑部件，5 个纸带圈读取器（reader），每个可以每秒工作5000字符。
1943年，由 John Brainered领导，ENIAC开始研究。而 John Mauchly 及J. Presper Eckert负责这计划的执行。
1946v第一台电子数字积分计算器（ENIAC）在美国建造完成。
1947年，美国计算器协会（ACM）成立。
1947年，英国完成了第一个存储真空管O 1948贝尔电话公司研制成半导体。
1949年，英国建造完成"延迟存储电子自动计算器"(EDSAC)
1950年，"自动化"一词第一次用于汽车工业。
1951年，美国麻省理工学院制成磁心
1952年，第一台"储存程序计算器"诞生。
1952年，第一台大型计算机系统IBM701宣布建造完成。
1952年，第一台符号语言翻译机发明成功。
1954年，第一台半导体计算机由贝尔电话公司研制成功。
1954年，第一台通用数据处理机IBM650诞生。
1955年，第一台利用磁心的大型计算机IBM705建造完成。
1956年，IBM公司推出科学704计算机。  运算器1957年，程序设计语言FORTRAN问世。
1959年，第一台小型科学计算器IBM620研制成功。
1960年，数据处理系统IBM1401研制成功。
1961年，程序设计语言COBOL问世。
1961年，第一台分系统计算机由麻省理工学院设计完成。
1963年，BASIC语言问世。
1964年，第三代计算机IBM360系列制成。
1965年，美国数字设备公司推出第一台小型机PDP-8。
1969年，IBM公司研制成功90列卡片机和系统--3计算机系统。
1970年，IBM系统1370计算机系列制成。
1971年，伊利诺大学设计完成伊利阿克IV巨型计算机。
1971年，第一台微处理机4004由英特尔公司研制成功。
1972年，微处理机基片开始大量生产销售。
1973年，第一片软磁盘由IBM公司研制成功。  运算器1975年，ATARI--8800微电脑问世。
1977年，柯莫道尔公司宣称全组合微电脑PET--2001研制成功。
1977年，TRS--80微电脑诞生。
1977年,苹果--II型微电脑诞生。
1978年，超大规模集成电路开始应用。
1978年，磁泡存储器第二次用于商用计算机。
1979年，夏普公司宣布制成第一台手提式微电脑。
1982年，微电脑开始普及，大量进入学校和家庭。
1984年，日本计算机产业着手研制"第五代计算机"---具有人工智能的计算机
性能指标
1、机器字长，机器字长是指参与运算的数据的基本位数。它决定了寄存器、运算器和数据总线的位数，因而直接影响到硬件的价格。字长标志着计算精度。为协调精度与造价，并满足多方面的要求，许多计算机允许变字长计算，例如半字长、全字长和双倍字长等。由于数和指令代码都放在主存中，因而字长与指令码长度往往有一个对应关系，字长也就影响到指令系统功能的强弱。计算机字长从 4 位、8 位、16 位、32 位到 64 位不等。机器字长可包含一个或多个字节。用于科学计算的机器，为了确保精度，需要较长的字长；用于数据处理、工业控制的机器，字长为 16 位或 32 位就能满足要求。
2、运算速度 它是计算机的主要指标之一。计算机执行不同的运算  运算器和操作所需的时间可能不同，因而对运算速度存在不同的计算方法。一般常用平均速度，即在单位时间内平均能执行的指令条数来表示，如某计算机运算速度为 100 万次 /秒，就是指该机在一秒钟内能平均执行 100万条指令（即 1MIPS）。有时也采用加权平均法（即根据每种指令的执行时间以及该指令占全部操作的百分比进行计算）求得的等效速度表示。
功能分类
运算器的基本功能是完成对各种数据的加工处理，例如算术四则运算，与、或、求反等逻辑运算，算术和逻辑移位操作，比较数值，变更符号，计算主存地址等。运算器中的寄存器用于临时保存参加运算的数据和运算的中间结果等。运算器中还要设置相应的部件，用来记录一次运算结果的特征情况，如是否溢出，结果的符号位，结果是否为零等。计算机所采用的运算器类型很多，从不同的角度分析，就有不同的分类方法。从小数点的表示形式可分为定点运算器和浮点运算器。定点运算器只能做定点数运算，特点是机器数所表示的范围较小，但结构较简单。浮点运算器功能较强，既能对浮点数，又能对定点数进行运算，其数的表示范围很大，但结构相当复杂。从进位制方面分为二进制运算器和十进制运算器。一般计算机都采用二进制运算器，随着计算机广泛应用于商业和数据处理，越来越多的机器都扩充十进制运算的功能，使运算器既能完成二进制的运算，也能完成十进制运算。计算机中运算器需要具有完成多种运算操作的功能，因而必须将各种算法综合起来，设计一个完整的运算部件。浮点运算器
1、浮点运算器的一般结构
浮点运算可用两个松散连接的定点运算部件来实现：即阶码部件和尾数部件，浮点运算器的一般结构尾数部件实质上就是一个通用的定点运算器，要求该运算器能实现加、减、乘、除四种基本算术运算。其中三个单字长寄存器用来存放操作数：AC为累加器，MQ为乘商寄存器，DR为数据寄存器。AC和MQ连起来还可组成左右移位的双字长寄存器AC－MQ。并行加法器用来完
  运算器成数据的加工处理，其输入来自AC和DR，而结果回送到AC。MQ寄存器在乘法时存放乘数，而除法时存放商数，所以称为乘商寄存器。DR用来存放被乘数或除数，而结果（乘积或商与余数）则存放在AC－MQ。在四则运算中，使用这些寄存器的典型方法如下：
运算类别 寄存器关系加法AC+DR→AC减法AC－DR→AC乘法DR×MQ→AC－MQ除法AC÷DR→AC－MQ
对阶码部件来说，只要能进行阶码相加、相减和比较操作即可。在图2-21中，操作数的阶码部分放在寄存器E1和E2，它们与并行加法器相连以便计算。浮点加法和减法所需要的阶码比较是通过E1－E2来实现的，相减的结果放入计数器E中，然后按照E的符号为决定哪一个阶码较大。在尾数相加或相减之前，需要将一个尾数进行移位，这是由计数器E来控制的，目的是使E的值按顺序减到0。E每减一次1，相应的尾数则向右移1位。一旦尾数高速完毕，它们就可按通常的定点方法进行处理。运算结果的阶码值仍放到计数器E中。
2、点协处理器，80x87是美国Intel公司为处理浮点数等数据的算术运算和多种函数计算而设计生产的专用算术运算处理器。由于它们的算术运算是配合80x86CPU进行的，所以又称为协处理器。现在我们以80x87为例来讨论浮点运算器部件的组成。浮点协处理器的主要功能如下：（1) 可与配套的CPU芯片异步并行工作。80x87相当于386的一个I/O部件，本身有它自己的指令，但不能单独使用，它只能作为386主CPU的协处理器才能运算。因为真正的读写主存的工作不是80x87完成，而是由386执行的。如果386从主存读取的指令是80x87浮点运算指令，则它们以输出方式把该指令送到80x87，80x87接收后进行译码并执行浮点运算。在80x87进行运算期间，386可取下一条其他指令予以执行，因而实现了并行工作。如果在80x87执行浮点运算指令过程中386又取来一条80x87指令，则80x87以给出“忙”的标志信号加以拒绝，使386暂停向80x87发送命令。只有待80x87完成浮点运算而取消“忙”的标志信号以后，386才可以进行一次发送操作。（2) 高性能的80位字长的内部结构，有8个80位字长的以堆栈方式管理的寄存器组。80x87从存储器取数和向存储器写数时，均用80位的临时实数和其他6种数据类型执行自动转换。全部数据在80x87中均以80位临时实数的形式表示。因此80x87具有80位的内部结构，并有八个80位字长以 “先进后出”方式管理的寄存器组，又称寄存器堆栈。这些寄存器可以按堆栈方式工作，此时，栈顶被用作累加器；也可以按寄存器的编号直接访问任一个寄存器。（3) 浮点数的格式，完全符合IEEE制定的国际标准。（4) 能处理包括二进制浮点数、二进制整数和十进制数串三大类共7种数据。此7种数据类型在寄存器中表示如下：短整数（32位整数） S 31位 (二进制补码) 长整数（64位整数） S 63位 （二进制补码） 短实数（32位浮点数） S 指数 尾数（23位） 长实数（64位浮点数） S 指数 尾数（52位） 临时实数（80位浮点数） S 指数 尾数（64位） 十进数串（十进制18位） S －－ d17d16　…　d1d0。此处S为一位符号位，0代表正，1代表负。三种浮点数阶码的基值均为2。阶码值用移码表示，尾数用原码表示。尾数有32位、64位、80位三种。不仅仅是一个浮点运算器，还包括了执行数据运算所需要的全部控制线路，就运算部分讲，有处理浮点数指数部分的部件和处理尾数部分的部件，还有加速移位操作的移位器线路，它们通过指数总线和小数总线与八个80位字长的寄存器堆栈相连接。（5) 内部的出错管理功能为了保证操作的正确执行，80x87内部还设置了三个各为16位字长的寄存器，即特征寄存器、控制字寄存器和状态寄存器。特征寄存器用每两位表示寄存器堆栈中每个寄存器的状态，即特征值为00－11四种组合时表明相应的寄存器有正确数据、数据为0、数据非法、无数据四种情况。控制字寄存器用于控制80x87的内部操作。其中PC为精度控制位域（2位）：00为24位，01为备用，10为53位，11为64位。RC为舍入控制位域（2位）：00为就近舍入，01朝－方向舍入，10朝+方向舍入，11朝0舍入。IC为无穷大控制位：该位为0时+与－作同值处理，该位为1时+与－不作同值处理。控制寄存器的低6位作异常中断屏蔽位：IM为非法处理，DM为非法操作数，ZM为0作除数，OM为上溢，UM为下溢，PM为精度下降。状态字寄存器用于表示80x87的结果处理情况，例如当“忙”标志为1时，表示正在执行一条浮点运算指令，为0则表示80x87空闲。状态寄存器的低6位指出异常错误的6种类型，与控制寄存器低6位相。当的控制寄存器位为0（未屏蔽）而状态寄存器位为1时，因发生某种异常错误而产生中断请求。
3．CPU内的浮点运算器，奔腾CPU将浮点运算器包含在芯片内。浮点运算部件采用流水线设计。指令执行过程分为8段流水线。前4段为指令预取（DF）、指令译码(D1）、地址生成（D2）、取操作数（EX），在U，V流水线中完成；后4段为执行1(X1）、执行2(X2）、结果写回寄存器堆（WF）、错误报告(ER），在浮点运算器中完成。一般情况下，由V流水线完成一条浮点操作指令。浮点部件内有浮点专用的加法器、乘法器和除法器，有8个80位寄存器组成的寄存器堆，内部的数据总线为80位宽。因此浮点部件可支持IEEE754标准的单精度和双精度格式的浮点数。另外还使用一种称为临时实数的80位浮点数。对于浮点的取数、加法、乘法等操作，采用了新的算法并用硬件来实现，其执行速度是80486的10倍多。