奎克的藏经阁 · 原书印刷页

编码 隐匿在计算机软硬件背后的语言 · 第 379 页

PDF 物理页索引 395 · 编码隐匿在计算机软硬件背后的语言

书名
编码 隐匿在计算机软硬件背后的语言
作者
未记录
印刷页
379
PDF 物理页
395(从 0 开始)
章节
编码隐匿在计算机软硬件背后的语言
UUID
38270854-596f-4a26-8183-db8c968c6020
来源类型
original_book
页面 SHA-256
ac2a4cac45b1a9c279e50c59ef9f36391dcfb7e21669e25d30fa7f07dcd0289a

8087数字协同处理(Numeric Data Coprocessor)芯片,当时这种集成电路被称做数学协同处理器(math coprocessor)或浮点运算单元(floating-point unit,FPU)。8087 不能独立工作,它只能与8086或8088(Intel的首个16位微处理器)芯片一起工作,因此被称做协处理器。

8087拥有40个管脚,它使用的很多信号与8086或8088完全相同。微处理器和数学协处理器通过这些信号相连。当CPU读取到一条特殊指令ESC(Escape)时—协同处理器开始接管控制权并执行下一条机器指令,该指令可以是三角函数、指数和对数等68条指令中的任一条。它所处理的数据类型遵循IEEE标准。在当时,8087被认为是市面上最高水平的集成电路。

可以把协处理器当做一个小型的自包含计算机。当响应某个特定的浮点运算机器码指令时(例如FSQRT指令,它用来计算平方根),协处理器会以固有的方式执行存放在ROM中属于自己的指令序列。这些内部指令称做微代码(microcode)。通常,这些指令都是循环的,因此不能立即得到最终的结果。虽然如此,但数学协处理器在运算速度方面仍然表现优异,与软件方法相比,其速度至少是后者的10倍。

在最初版本的IBMPC主板上,位于8080芯片的右边有1个40个管脚的插槽供8087芯片接入。但令人失望的是,这个插槽是空的,用户如果需要进行浮点数运算就必须单独购置一块8087芯片,并将其插入主板后才能使用。安装数学协处理器并不能提高所有应用程序的运行速度,因为有些应用程序比如文字处理程序—几乎用不到浮点数运算。其他应用程序,比如电子表格处理程序,对浮点数运算依赖程度很高,在安装了数学协处理器之后,它们的执行速度有很大的提高,但并非所有的程序都是如此。

可以看到,在安装了数学协处理器后,程序员必须使用协处理器机器码指令来编写特殊的代码,因为数学协处理器不是标准硬件,因此它只能执行这些特殊的代码。而这些工作让程序员烦不胜烦。尽管他们不愿意,他们仍不得不编写自己的浮点数运算子程序(因为大多数人并没有安装数学协处理器),因此这就多了一个额外的工作一个并不轻松的工作在程序中支持8087芯片。最后就出现了这样的局面:如果机器上安装了数学协处理器,程序员就要学会编写相应的应用程序以支持它的运行;如果没有安装,程序员就要通过编程来模拟它进行浮点数的运算。

在随后的几年内,英特尔还发布了与286配合工作的287数学协处理器,与386配合工作的387数学协处理器。但是,在1989年发布的486DX芯片中,FPU已经内建在CPU的结构里,它不再作为一个配件供选择安装了。令人失望的是,在1991年发布的一款低端芯片486SX中,英特尔没有为该其内建FPU,而是提供了一块可选的487SX数学协处理芯片。但1993年发布的奔腾芯片中,CPU内置FPU再次成为标准,也许这是永远的标准。在1990年发布的68040芯片中,摩托罗拉首次将FPU集成在CPU中,在此之前,摩托罗拉发布了68881和 68882数学协处理器来支持 68000家族早期的微处理器。PowerPC芯片同样使用了内置浮点数运算硬件的技术。

23 定点数和浮点数

379