在 Intel 64 & IA-32 架构手册第 3A 卷第 9 章处理器管理和初始化中,我发现了以下内容:
兼容模式执行是基于代码段选择的。此模式允许旧应用程序与以 64 位模式运行的 64 位应用程序共存。在 IA-32e 模式下运行的操作系统可以通过将代码段描述符的 CS.L 位清零来执行现有的 16 位和 32 位应用程序。
这是否意味着旧版 16 位和 32 位应用程序可以与以 IA-32e 模式运行的操作系统上的 64 位应用程序共存。
但据我所知,64 位操作系统通常不支持旧版 16 位代码。如果支持,如何启动16位应用程序?
16 位 DOS 应用程序无法在 64 位 Windows 下运行,因为虚拟 8086 模式在长模式下不可用
然而16位保护模式仍然可用,所以技术上可以运行 16 位 Windows 3.x 应用程序。这就是如何Wine https://en.wikipedia.org/wiki/Wine_%28software%29 在 64 位 Linux 中运行 16 位 Windows 应用程序 https://superuser.com/q/631035/241386。不幸的是 64 位 Windows 没有相同的功能,尽管原因是not因为64位模式不能运行16位指令,而是因为显着部分增加了。
主要原因是在 64 位 Windows 上句柄有 32 个有效位。所以,句柄不能被截断并传递到 16 位应用程序而不会丢失数据。
https://learn.microsoft.com/en-us/windows/win32/winprog64/running-32-bit-applications https://learn.microsoft.com/en-us/windows/win32/winprog64/running-32-bit-applications
因此,如果您想在 64 位 Windows 上运行 16 位应用程序,则必须使用虚拟机
欲了解更多详细信息,请阅读彼得·科德斯的回答 https://stackoverflow.com/a/50280105/995714
也可以看看64 位计算机 (x86) 可以在不进行模拟的情况下本机运行 16 位操作系统吗? https://superuser.com/q/1519671/241386
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)