80x86 FPU:浮点数运算的深入解析
1. 浮点数运算的发展历程
在20世纪70年代末8086 CPU刚出现时,半导体技术还不足以让英特尔将浮点指令直接集成到8086 CPU中。因此,英特尔设计了一种方案,使用第二个芯片——浮点运算单元(FPU)来执行浮点计算。到英特尔奔腾芯片发布时,半导体技术取得了进步,FPU已完全集成到80x86 CPU中。如今,几乎所有现代80x86 CPU设备都能直接在CPU上完全支持浮点运算。
2. FPU寄存器
80x86 FPU为80x86增加了13个寄存器,包括8个浮点数据寄存器、1个控制寄存器、1个状态寄存器、1个标记寄存器、1个指令指针和1个数据指针。
2.1 FPU数据寄存器
FPU提供8个80位的数据寄存器,它们被组织成一个栈。HLA将这些寄存器称为ST0、ST1、…、ST7。与80x86 CPU的通用寄存器组织方式不同,FPU寄存器集采用栈结构。在80x86 CPU中,AX寄存器始终是AX寄存器;而在FPU中,寄存器集是一个包含8个80位浮点值的栈。ST0指栈顶元素,ST1指栈中的下一个元素,依此类推。许多浮点指令会对栈进行压入和弹出操作,因此当你向栈中压入数据后,ST1将指向原来ST0的内容。虽然需要一些思考和练习才能习惯寄存器编号的变化,但这并不是一个难以克服的问题。
2.2 FPU控制寄存器
在英特尔设计80x87(本质上也是IEEE浮点标准)时,浮点硬件还没有统一的标准。不同的计算机制造商(大型机和小型机)都有不同且不兼容的浮点格式。为了让尽可能多的应用程序在其80x87 FPU上运行,英特尔添加了一个特殊的寄存器——FPU控制寄存器
超级会员免费看
订阅专栏 解锁全文
11

被折叠的 条评论
为什么被折叠?



