信息: 如何 Windows 处理浮点计算

文章翻译 文章翻译
文章编号: 102555 - 查看本文应用于的产品
本文已归档。它按“原样”提供,并且不再更新。
展开全部 | 关闭全部

本文内容

概要

所有 Windows 平台都提供 Win32 应用程序一个常见的浮点环境,但它们的差别在于在他们的支持设备的驱动程序和其支持 Win16、 可移植操作系统界面 (POSIX)、 MS-DOS,和基于 OS/2 的应用程序中。

本文介绍了如何这些平台的每个提供程序和设备驱动程序的浮点支持。

更多信息

本部分首先介绍了在 Windows NT、 Windows 2000 和它的后续任务的浮点功能,然后描述了在 Windows 95、 Windows 98、 Windows 98 第二版,和 Windows Millennium 版 (Me) 基于系统中相同。每个组的成员提供同样的浮点支持相互,但两个组互不由于的基础结构的差异。

Windows NT 和其后续任务

Win32 应用程序

在 Win32 应用程序中的每个线程都有自己的执行状态,包括通用寄存器和浮点寄存器。 因此,浮点执行和异常处理控制每线程基础上。若要调整的浮点处理器可以使用专用的舍入或精确控制和异常处理行为的过程中,这使个别的线程。

浮点异常由 Win32 结构化异常处理 (SEH) Win32 内核中内置的机制来处理。当一个线程会导致浮点异常时,SEH 机制查找注册该线程来处理该异常的异常处理程序。如果该线程不会处理该异常,拥有该进程将关闭。

Windows NT 和其后续任务的 Win32 应用程序的即使在没有内置的浮点支持的 Intel x 86 处理器上提供完全浮点支持。模拟由 Win32 内核提供,对于不具有浮点硬件的计算机。因此,编译器没有提供它们自己的浮点仿真。

运行时库或提供默认浮点异常处理程序的运行库系统,可能需要的语言。例如对于 Microsoft Visual c + + 运行时库提供了默认浮点异常处理,并包含函数,如 _controlfp 对于确定和调整浮点硬件的舍入、 精确控制和异常处理行为。

Win16 应用程序

Win16 应用程序通常都将被编译到已包含浮点指令和对 16 位浮点仿真 WIN87EM 调用的链接地址信息记录在他们的对象代码中。如果计算机的处理器支持浮点的指令,或者存在一个协处理器,则加载程序解析该修正了浮点的说明,并会执行该指令。如果没有检测到浮点硬件,则加载程序解析该修正对 WIN87EM,调用和仿真程序,将会执行。

WIN87EM 不会截获应用程序执行的浮点指令 ; 它只在显式调用时运行。因此,请确保 Win16 应用程序被编译到支持仿真,将通知链接器将放在可执行文件中的链接地址信息的记录。

在基于 RISC 的计算机上的 Windows NT 运行 Win16 的应用程序使用 Windows NT 英特尔 x 86 处理器仿真程序代码。Windows NT 3.5 和 Windows NT 3.51 包括 80286 和 80287 仿真程序,Windows NT 4.0 包括 i486 仿真程序。Win16 的应用程序始终运行像英特尔浮点 coprocessors 都存在。因此,WIN87EM 不提供 RISC 计算机上浮点仿真。

设备驱动程序

IRQL 小于或等于 DISPATCH_LEVEL,但必须明确地保留处理器的浮点状态,以便不会更改调用方的浮点上下文时,Windows 2000 和其后续任务的内核模式驱动程序可以使用浮点指令。驱动程序函数必须调用 KeSaveFloatingPointState 执行所有浮点操作前,并返回给调用方之前必须调用 KeRestoreFloatingPointState。这些函数被记录中,Windows 2000 驱动程序开发工具包 (DDK)。

Windows NT 3.51 和 Windows 4.0 内核模式驱动程序不能使用浮点的指令,因为内核模式堆栈交换机不保留浮点寄存器。如果一个内核模式驱动程序,不会 使用任何浮点指令,可能会导致用户模式应用程序的数字状态的损坏,或者系统故障 (崩溃)。

MS-DOS 应用程序

Windows 2000 及上英特尔 x 86 及其后续任务在英特尔 x 处理器的虚拟 8086 模式下运行 MS-DOS 应用程序。MS-DOS 应用程序可以访问浮点硬件,就像它们在 MS-DOS 对一样。是否存在没有浮点硬件没有仿真为应用程序提供。因此,应用程序必须提供它自己仿真。

在基于 RISC 的计算机上的 Windows NT 使用内置英特尔 x 86 仿真代码。Windows NT 3.5 和 Windows NT 3.51 包括 80286 和 80287 仿真程序,Windows NT 4.0 包括 i486 仿真程序。MS-DOS 应用程序始终运行像英特尔浮点 coprocessors 都存在。

POSIX 应用程序

在与 Win32 的应用程序 POSIX 应用程序可以假设该完整浮点支持始终存在。

标准的 POSIX 不定义一种启用浮点异常的方法。因此,使用浮点异常的 POSIX 应用程序必须依赖于特定于系统的功能。使用 Microsoft Visual c + + 编译一个 POSIX 应用程序可以通过使用 _controlfp 函数打开浮动的异常。浮点异常 SIGFPE,然后可以捕获,或者如果应用程序需要的不只是执行由 fpieee_flt 函数捕获了的异常。

OS/2 应用程序

与此子系统的浮点支持的匹配的 OS/2: 如果未安装浮动点硬件,则 OS/2 应用程序必须提供它自己仿真。仅在英特尔 x 86 版本的 Windows NT 和其后续任务上支持 OS/2 子系统。

windows 95、 Windows 98、 Windows 98 第二版,和 Windows Me

Win32 应用程序

Windows 95,通过 Windows Me 平台作为 Windows NT 和 Windows 2000 平台为 Win32 应用程序提供相同的浮点支持。

Win16 应用程序

Win16 应用程序通常都将被编译到包含他们包含浮点指令和对 16 位浮点仿真 WIN87EM 调用的对象代码中的链接地址信息记录。如果计算机的处理器支持浮点指令,或者存在一个协处理器,则加载程序解析该修正了浮点的说明,并将执行。如果没有检测到浮点硬件,则加载程序解析该修正对 WIN87EM,调用和仿真程序,将会执行。

WIN87EM 不会截获应用程序执行的浮点指令 ; 它只在显式调用时运行。因此,编译 Win16 应用程序支持仿真,将通知链接器将放在可执行文件中的链接地址信息的记录。

设备驱动程序

虚拟设备驱动程序 (vxd) 可以使用浮点指令,但必须使用数学协处理器的虚拟设备接口来保存和还原浮点协处理器的状态。VxD 还必须注册浮点异常的异常处理程序。

MS-DOS 应用程序

Windows 95,通过 Windows Me 平台在英特尔 x 处理器的虚拟 8086 模式下运行 MS-DOS 应用程序。MS-DOS 应用程序可以访问浮点硬件,就像它们在 MS-DOS 对一样。是否存在没有浮点硬件没有仿真为应用程序提供。因此,应用程序必须提供它自己的仿真,MS-DOS 应用程序的运行时库通常执行时。

在本文中讨论的第三方产品是由独立于 Microsoft 的公司生产的。Microsoft 会使没有担保,或暗示或其他方式,性能或可靠性,这些产品。

属性

文章编号: 102555 - 最后修改: 2014年3月1日 - 修订: 2.3
这篇文章中的信息适用于:
  • Microsoft Win32 Application Programming Interface?当用于
    • Microsoft Windows 95
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
关键字:?
kbnosurvey kbarchive kbmt kbfloatpoint kbinfo kbkernbase kbprogramming KB102555 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 102555
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com