用FPU工作

FPU是一个主cpu被设计用来处理浮点数的设备。

过去它被称为协处理器,放在CPU旁边,看起来像可编程的计算器,在学习FPU之前学习堆栈机或forth语言是值得的。

有趣的是,在过去(80486cpu之前),协处理器是一个单独的芯片,并不总是安装在母版上,单独购买和安装也是可以的。

但从80486 DX CPU开始,FPU就被安装在里面了。

FWAIT指令可能提醒我们一个事实--它将CPU转换成等待模式,因此它可以一直等待直到FPU完成工作。另外一点是FPU指令操作码从所谓的escape操作码(D8..DF)开始,进入了FPU。

FPU有可以容纳8个80字节的寄存器栈容量,每一个寄存器可以存储一个IEEE 754格式的数字。

C/C++语言提供至少两种浮点数类型,float(单精度,32位),double类型(双精度,64位)。

GCC也支持多精度类型(扩展精度,80位),但是MSVC不支持。

在32位环境中,浮点数要求和int类型的位数相同,但是数值的表示法完全不同。

数值包括符号位,尾数(也叫做分数)和指数。

参数列表中有float和double类型的函数通过栈来获得值,如果函数返回float或者double类型的值,那么返回值将放在ST(0)寄存器中--在FPU的栈顶。