(1)80287的性能及内部结构

  80287浮点协处理器的主要性能是:
  .可与80286或80386异步并行工作;
  .高性能的80位字长的内部结构,有8个80位字长的以堆栈方式管理的寄存器组;
  .浮点数的格式,完全符合IEEE制定的国际标准;
  .能处理包括二进制浮点数、二进制整数和十进制数串三大类共7种数据;
  .可在80286或80386微机系统的实模式和保护模式下操作,在保护模式下,其操作与80286或80386微机系统的内存管理与保护完全符合;这里说的实模式和保护模式,是指对80286或80386指令中的地址的两种不同的处理方式。实模式是把80286或80386当作高速的8086来使用,即只使用24位地址中的低20位,全部可用存储空间只是整个主存的最低1MB的空间。而保护模式则支持虚拟存储器的管理与运行,最大可使用16MB的主存空间。这是发挥80286或80386的高效能的重要措施。有关虚拟存储器管理的概念要到存储器一章详细讲解。

  .扩展了80286或80386的硬件指令,直接支持对7种数据的指数、对数、三角函数和其它一些数学函数的计算;
  .内部的出错管理功能。
  80287的内部结构
  80287内部结构的逻辑框图如图2.23所示。


图2.23 80287内部结构的逻辑框图

  80287是被做在单个芯片之内,并用40条引线的外壳封装。它不是一个简单的浮点运算器本身,而且包括执行数据运算所需要的全部控制线路。这个器件的引线分配如图2.24所示。


图2.24 80287的引线分配图

  从图2.23可以看到,80287内部有处理浮点数指数部分的部件和处理尾数部分的部件,有加速移位操作的移位器线路,它们通过指数总线和小数总线与八个80位字长的寄存器堆栈相连接。这些寄存器可以按堆栈方式工作,此时,栈顶被用作累加器;也可以按寄存器的编号直接访问任意一个寄存器。八个寄存器的编号用0到7表示,处在栈顶的那个寄存器的编号由80287的状态字字段TOP给出。在80287的指令中,用ST表示栈顶寄存器,并且可以用ST(i)来访问其它7个寄存器,此时i值可以为1-7中的一个值。i是相对于栈顶的一个偏移量,而不一定是真正八个寄存器的实际编号。仅当栈顶为0号寄存器时,寄存器1到 寄存器7正好用ST(1)-ST(7)表示。而当7号寄存器为栈顶时,则ST(1)-ST(7)分别表示寄存器0到寄存器6。

   80287能处理下述7种数据类型,它们在寄存器中的表示为:


  此处,S为符号位,0代表正,1代表负。三种浮点数,阶码的基数均为2,用移码表示阶值,尾数均用原码表示。浮点数有32位、64位和80位三种长度。80287在从存储器取数和向存储器写数时,均用80位的临时实数和其它数据类型执行自动转换,全部数据,在80287中均以80位临时实数的形式表示。

  为了保证指令的正确执行,80287内还设置了各为16位字长的三个寄存器,即特征字寄存器,控制字寄存器和状态字寄存器。

  特征字寄存器共16位,用每两位表示寄存器栈的每个寄存器的状态,其具体规定为
  

  当特征值 为00时,表明相应寄存器中有正确的数据
       为01时,表明相应寄存器的数据值为0
       为10时,表明相应寄存器的数据非法或无限大
       为11时,表明相应寄存器处于空状态(无数据)
  该特证字寄存器允许用户读写。

  控制字寄存器用于控制80287操作。其各位的安排和所代表的控制功能规定如下:
  

  其中低6位用于执行数值运算时的异常中断屏蔽。若其中一位为1状态,则发生相应错误后,80287不向80286发中断信号。
  IM位屏蔽非法处理中断 DM 位屏蔽非法操作数中断
  ZM 位屏蔽0作除数中断 OM 位屏蔽上溢中断
  UM 位屏蔽下溢中断 PM位屏蔽精度下降中断
  PC的2位用于寄存器栈运算结果的精度指示,即浮点数尾数的有效位数,00表示24位尾数,01不用,10表示53位尾数,11表示65位尾数(均含尾数符号位)。

  RC的2位用于浮化整控制,即将浮点数转换为整数时的舍入控制。00表示化成最接近的值,若可化为奇数亦可化为偶数时,则化成为偶数值;01表示舍掉小数部分;10表示入小数部分为1;11表示朝靠近0值的方向完成舍入。

  IC用于对无限大的数值的处理进行控制。为0时,把+∞与-∞作同值处理,为1时, 把+∞和-∞作不同的值处理。

  状态寄存器用于表示80287的处理情况,是和80286的FLAG(标志寄存器)相当的寄存器。其各位的安排和它们所代表的含义规定如下:


  最低6位,对数值运算进行处理时发生异常,置相应位为1。每一位的异常情况与控制寄存器的低6位相对应。当这某一位为1,控制寄存器的对应位又为零,即未进行屏蔽时,80287将发出中断信号。ES的值由未被屏蔽的低6位上的1值设置,反映总的出错情况。C3、C2、C1 、C0 四位用于保存数据比较等指令的结果。TOP用三位,给出寄存器栈顶的寄存器编号。B为 "忙"标志位,为1时,表示正在执行一条指令,为0则表示80287空闲。