点协处理器与浮点处理器
扫描二维码
随时随地手机看文章
点协处理器,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时,因发生某种异常错误而产生中断请求。
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倍多。