• 内容讲解

1. CPU之外的浮点运算器

8087是美国Intel公司为处理浮点数等数据的算术运算和多种函数计算而设计生产的专用算术运算处理器。由于其算术运算是配合8086 CPU进行的,所以8087又称为协处理器(Co-processor)。

以下说明8087浮点运算器的特点和内部结构。

(1)以异步方式与8086并行工作。8087相当于8086的一个I/O部件,本身有它自己的指令,但不能单独使用,它只能作为8086主CPU的协处理器才能运算。如果8086从主存读取的指令是8087的浮点运算指令,则它们以输出的方式把该指令送到8087,8087接受指令后进行译码并执行浮点运算。8087进行运算期间,8086可取下一条其他指令予以执行,因而实现了并行工作。如果在8087执行浮点运算指令过程中,8086又取来了一条8087指令,则8087给出“忙”标志信号加以拒绝,使8086暂停向8087发送命令。只有待8087完成浮点运算而取消“忙”标志信号以后,8086才可以进行下一次发送操作。

(2)可处理包括二进制浮点数、二进制整数和压缩十进制数串三大类7种类型数据,其中浮点数的格式符合IEEE-754标准,有32位、64位、80位(临时实数)三种。

2. CPU之内的浮点运算器

奔腾(Pentium)CPU将浮点运算器包含在芯片内,浮点运算部件采用流水线设计。

指令执行过程分为8段流水线。前4 段为指令预取(DF)、指令译码(D1)、地址生成(D2)、取操作数(EX),在U、V流水线中完成;后4段为执行1(X1)、执行2(X2)、结果写回寄存器堆(WB)、错误报告(ER),在浮点运算器中完成。奔腾CPU内部的主要流水线是“U-Pipe”,能应付所有的x86指令;另一条流水线称为“V-Pipe”,只能对一些简单的整数指令和一个浮点运算指令“FXCH”解码。一般情况下,由U流水线完成一条浮点数操作指令。

浮点部件内有浮点专用加法器、乘法器和除法器,有8个80位寄存器组成的寄存器堆,内部的数据总线为80位宽,可支持IEEE-754标准的单精度和双精度格式的浮点数,还使用一种称为临时实数的80位浮点数。