dsi*_*cha 6 windows 64-bit legacy
我的理解(来自维基百科)是 x64 指令集支持从长模式执行 16 位保护模式代码,但不能在不切换出长模式的情况下执行实模式代码,因为长模式缺少虚拟 8086 模式。因此,实模式 DOS 应用程序不能在没有软件仿真或动态转换的 Win64 中运行是理所当然的。但是,当对 Win16 保护模式应用程序的支持似乎(至少乍一看)可以合理实现并且包含在较新版本的 Win32 中时,为什么要排除对它们的支持?是需求不够高,无法证明实施成本(并且已经实施了 win32 版本),还是有很好的技术原因?
And*_*ehm 11
我认为没有任何实际的 Win16 保护模式应用程序。我了解 Windows/286 及更高版本以保护模式(Microsoft 称为“标准模式”或“增强模式”)运行,但这些应用程序在技术上是实模式应用程序。
我记得读到过,Windows 团队发现如何在受保护模式操作系统下运行实模式代码,这让 Microsoft 感到惊讶。但是在长模式下运行实模式代码的类似解决方案可能不存在。
所以问题真的归结为 a) 为什么不切换到保护模式(或实模式)来运行 Win16 应用程序,以及 b) 为什么不包括一个模拟器(就像在其他非 x86 NT 平台上一样)。
我认为 a) 的答案是显而易见的,因为在长模式和其他模式之间切换并不是 CPU 在不重启的情况下真正支持的。OS/2 1.x 在保护模式和实模式方面有同样的问题,并且只提供了一个非常不雅的解决方案。
b) 的答案更难,但我认为这归结为微软基于这三点的决定(我喜欢列表):
很少有人仍然运行 16 位应用程序。
那些这样做的人可以运行 32 位 Windows 来运行它们。
第三方产品可以覆盖剩余的市场。
事实上,有多种解决方案可以在 64 位 Windows 下运行 32 位 Windows(以及 16 位应用程序),包括 Microsoft 自己的 Virtual PC。
总而言之,这只是决定停止支持与(微软认为的)遗留平台的兼容性,有点像在 Windows XP 中删除 16 位 OS/2 兼容性。(那些是 16 位保护模式应用程序。)
归档时间: |
|
查看次数: |
4674 次 |
最近记录: |