如果您要构建一台具有完全现代部件的现代 x86 计算机,您是否可以在没有任何模拟甚至使用 FreeDOS 的情况下将 MS-DOS 6.11 和 Windows 3.11 加载到该计算机上?我最近看到一个使用 Windows 95(32 位操作系统)完成此操作的视频,但它可以使用 16 位操作系统(如 Windows 3.1 或更低版本)完成吗?
答案1
是的。64 位 CPU(x86 类型)可以在 x86 实模式下运行,16 位应用程序就是在这种模式下运行的。虽然存在所有限制(640KB 内存、16 位宽寄存器等),但处理器速度比 80 年代快了数百倍甚至数千倍,当时这些 16 位操作系统风靡一时。
但是,硬件访问存在问题。由于英特尔计划在 2020 年主动放弃对旧版 BIOS 甚至兼容性支持模块的支持,您的 16 位应用程序将无法依赖 BIOS 调用来执行磁盘访问、图形、键盘/鼠标输入等。您必须为所有这些编写 16 位驱动程序,这实际上并不可行,因为大多数设备无法用 16 位寻址(设备 PCI 地址通常在 3GB 左右),并且无法告诉您的驱动程序“将此缓冲区数据写入地址 0xEF000000”(因为这是驱动程序所期望的)。
另一方面,如果您仍使用传统 BIOS(或至少启用了 UEFI CSM),您仍然可以运行旧的 16 位软件。不过,硬件支持将受到限制,因为所有硬件都必须由 BIOS 提供,而 BIOS 制造商可能会减少广泛支持,仅支持有限数量的 USB 设备以及一定数量的 SATA(甚至 NVMe)设备。
答案2
随着 CPU 和 PC 的发展,CPU 制造商一直致力于保持与以前的指令集和软件的向后兼容性。您仍会在现代 x86-64 CPU 上找到一些在 Intel 8086(自 20 世纪 70 年代末开始)上引入的指令。
您的问题的答案是肯定的,现代 x86-64 PC 在技术上可以运行 16 位操作系统。事实上,这里有一个链接到热门 YouTuber LGR 的视频展示他如何在新的游戏电脑上安装 MS-DOS 6.2。
执行此类操作有一些明显的限制。在 DOS 中,您无法访问超过 640K 的 RAM。同样,如果您在 64 位硬件(或 32 位硬件)上运行 32 位操作系统,则您运行的程序将限制为使用 4GB 的 RAM。
尽管如此,64 位操作系统无法像运行 32 位软件那样在本机运行 16 位软件。这很奇怪,但这就是计算机芯片崩溃的原因。
答案3
是的。现代 x86-64 CPU 仍然完全向后兼容,甚至可以追溯到第一代(8086)
完全向后兼容在计算机指令集架构中尤为重要,其中最成功的是 x86 系列微处理器。它们的完全向后兼容性可以追溯到 1978 年推出的 16 位 Intel 8086/8088 处理器。(8086/8088 的设计考虑到了易于机器翻译为其前身编写的程序,尽管它们在指令集上与 1974 年推出的 8 位 Intel 8080 处理器不兼容。)
https://en.wikipedia.org/wiki/Backward_compatibility#Hardware
它甚至从实模式这是 DOS 运行的模式。启动后,引导加载程序或内核将根据需要切换到 32 位或 64 位模式
支持保护模式启动的 x86 处理器实模式以便与较旧的 8086 类处理器向后兼容。开机时(又称启动),处理器在实模式下初始化,然后开始执行指令。操作系统引导代码可能存储在只读存储器,可能会将处理器放入保护模式启用分页和其他功能。保护模式下的指令集与实模式下的指令集类似。
因此,在所有 x86 CPU 上安装所有 DOS 版本是完全有可能的,并且会受到所有 DOS 限制(例如寻址模式或地址行数)。Windows 3.x 实际上只是一个在 DOS 上运行的 GUI 应用程序(尽管采用不同的 16 位模式),因此您也可以在现代机器上运行它
但是,以前的模式和 64 位模式(又称长模式)之间的一个主要区别是,一旦 CPU 切换到长模式,它就无法转换回虚拟 8086 模式,因此您无法在 64 位 Windows 中运行 16 位 DOS 应用程序。您必须在裸机上运行这些应用程序(因此在裸机 VM 中运行它也行得通)
看是否可以在支持 Intel IA-32e 模式的操作系统中运行 16 位代码?
话虽如此,尽管 CPU 支持完整的 16 位指令集,但由于缺乏现代硬件支持,启动系统可能会很困难,正如其他人所说
答案4
我最近看到一个使用 Windows 95 的视频,
Windows 95 是一个带有 32 位 shell 的 16 位操作系统 (MS-DOS),因此您已经看到它了。