浮点数

整数不能描述随意的数字关系,在某些时候需要引入小数的概念,这意味着两个整数之间能够包含无限数量的值,除了
x87处理器
image.png
x86平台包含可以执行浮点算数运算的独立执行单元-x87浮点单元(FPU)。其通过专用的硬件实现基本的浮点运算,包括加,减,乘,除。并内建了平方根,三角函数和对数指令以进行复杂的数学运算,x87支持多种数据结构,包括双精度浮点数,有符号整数和组合BCD码。
FPU是一个支持的单元,他使用与标准的处理器寄存器分离的一组寄存器处理浮点数的运算,FPU寄存器包括8个80位数据寄存器和3个16位寄存器。称为控制(control),状态(status),和标记(tag)寄存器。
FPU数据寄存器称为R0~R7(汇编中不是使用这个名称访问),他们的操作和标准的寄存器不同在于他们是链接在一起形成一个堆栈,和内存的堆栈不同,FPU的堆栈是循环的。堆栈中的最后一个寄存器链接回堆栈中的第一个寄存器。
堆栈顶部的寄存器是在FPU的控制寄存器中定义的,名为ST(0),除了顶部寄存器外的气压寄存器名称为ST(X),x取值为1~7。
image.png
当数据被加载到FPU堆栈时,堆栈顶部沿着8个寄存器向下移到,当8个值被加载到堆栈中,8个FPU寄存器就都能被使用。如果把第9个数据加载到堆栈中,堆栈指针回绕到第一个寄存器,并且使用新的值替换这个寄存器中的值,这会产生FPU异常错误。