64 位计算机 (x86) 能否在没有仿真的情况下本机运行 16 位操作系统?

ioi*_*-xd 39 64-bit x86 windows-3.1 16-bit

如果您要构建具有完全现代部件的现代 x86 计算机,您是否可以在没有任何仿真甚至使用 FreeDOS 的情况下将 MS-DOS 6.11 和 Windows 3.11 加载到它上面?我最近看到一个视频,它是在 Windows 95 上完成的,一个 32 位操作系统,但它可以用 Windows 3.1 或更低版本的 16 位操作系统完成吗?

Ro-*_*-ee 51

是的。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)设备.

  • “16 位宽寄存器”不是限制:`66h` 前缀仍然可用。甚至可以使用`67h`前缀(因此您可以使用方便的32位寻址模式),尽管默认情况下段限制为64K。另外不要忘记您可以切换到的虚幻模式,仍然继续执行 16 位代码。 (9认同)
  • 严格来说,运行实模式代码的能力只是需要的_部分_。Windows 3.x 在 16 位保护模式下运行,而 emm386.exe 导致 MS/PC-DOS 在 v8086 保护模式下运行。 (3认同)

Sam*_*bis 13

随着 CPU 和 PC 的发展,CPU 制造商一直致力于保持与以前的指令集和软件的向后兼容性。您仍然可以找到一些关于在 Intel 8086(从 1970 年代后期开始)上引入的现代 x86-64 CPU 的说明。

您的问题的答案是肯定的,现代 x86-64 PC 在技术上可以运行 16 位操作系统。事实上,这里有一个由流行 YouTuber LGR 制作的视频链接,该视频显示他在他的新游戏 PC 上安装 MS-DOS 6.2。

做这样的事情有一些明显的限制。在 DOS 中,您将无法访问超过 640K 的 RAM。同样,如果您在 64 位硬件(或 32 位硬件,就此而言)上运行 32 位操作系统,您运行的程序将被限制为使用 4GB 的 RAM。

尽管如此,64 位操作系统不能像 32 位软件那样在本地运行 16 位软件。一个奇怪的怪癖,但这就是计算机芯片饼干崩溃的原因。

  • 一些更正:DOS 可以使用各种扩展程序访问超过 640KiB 的 RAM,著名的“HIMEM.SYS”和“EMU386.EXE”。32 位操作系统肯定可以使用超过 4GiB 的 RAM,例如:32 位 Windows Server 2003 支持 [高达 64GiB 的 RAM](https://docs.microsoft.com/en-us/windows/win32/memory /memory-limits-for-windows-releases#physical-memory-limits-windows-server-2003-r2)。Linux 有 [类似限制](https://superuser.com/questions/367490/can-a-32-bit-os-machine-use-up-all-8gb-ram-20gb-page-file/367525# 367525)。限制是针对单个 32 位进程的*虚拟内存*,而不是操作系统。 (11认同)
  • @TOOGAM CPU 无需重新启动即可切换模式(在某些情况下,唯一需要重置以更改模式的 x86 CPU 是 80286)。64 位内核可以运行 16 位保护模式代码。甚至可以使用管理程序来运行 16 位实模式代码。 (4认同)

phu*_*clv 7

是的。现代 x86-64 CPU 仍然完全向后兼容,甚至可以追溯到第一代 (8086)

完全向后兼容性在计算机指令集架构中尤为重要,最成功的架构之一是 x86 系列微处理器。它们的完全向后兼容性可以追溯到 1978 年推出的 16 位 Intel 8086/8088 处理器。(反过来,8086/8088 的设计考虑到为其前身编写的程序易于机器翻译,尽管它们不是指令-set 与 1974 年的 8 位 Intel 8080 处理器兼容。

https://en.wikipedia.org/wiki/Backward_compatibility#Hardware

它甚至从实模式启动,实模式是 DOS 运行的模式。启动引导加载程序或内核将根据需要切换到 32 或 64 位模式

支持保护模式的 x86 处理器启动到实模式,以便与较旧的 8086 类处理器向后兼容。上电(又名启动)时,处理器以实模式初始化,然后开始执行指令。操作系统引导代码可能存储在ROM 中,可以将处理器置于保护模式以启用分页和其他功能。保护模式下的指令集类似于实模式下使用的指令集。

https://en.wikipedia.org/wiki/X86#Protected_mode

因此,绝对有可能在所有 x86 CPU 中安装所有 DOS 版本并受到所有 DOS 限制,例如寻址模式或地址线数量。Windows 3.x 实际上只是一个运行在 DOS 之上的 GUI 应用程序(尽管以不同的 16 位模式运行),因此您也可以在现代机器上运行它


然而,先前模式和 64 位模式(又名长模式)的一个主要区别是,一旦 CPU 切换到长模式,它就无法转换回虚拟 8086 模式,因此您无法运行 16 位 DOS 64 位 Windows 中的应用程序。对于那些你必须在裸机上运行的人(所以在裸机上运行它也可以)

请参阅是否可以在支持 Intel IA-32e 模式的操作系统中运行 16 位代码?


也就是说,虽然 CPU 支持完整的 16 位指令集,但由于缺乏现代硬件支持,启动系统可能很困难,正如其他人所说

  • 实际上,由于 80386 处理器在_unreal_ 模式下启动,_后来切换到_实模式。https://superuser.com/a/345333/38062 (3认同)
  • _“仍然完全向后兼容”_——实际上并不完全。越来越多的小不兼容性被引入。参见例如`IA32_MISC_ENABLE` bit 2 (`ENABLEFOPCODE` — x87 FPU Fopcode Compatibility Mode Enable),默认为0(此外,较新的CPU 甚至不支持该位)。 (2认同)

归档时间:

查看次数:

8743 次

最近记录:

5 年,11 月 前