Can a 64-bit computer (x86) run a 16-bit OS natively, without emulation?

Yes. 64-bit CPUs (the x86 kind) can run in x86 real mode, and this is what 16-bit application run on. You have all the limitations of it (640KB memory, 16-bit wide register, etc), but you have a processor speed hundreds if not thousand times faster than in the 80's, when these 16-bit operating systems were all the rage.

Hardware access is problematic though. Since in 2020 Intel plans on actively dropping support for legacy BIOS and even the Compatibility Support Module, your 16-bit application will not be able to rely on BIOS calls to do disk access, graphics, keyboard/mouse input, etc. You’d have to write 16-bit drivers for all of it, which isn’t really feasible, as most of the devices would not be addressable with 16 bits (the device PCI addresses would usually be around 3GB), and there is no way of telling your driver to "write this buffer data to address 0xEF000000" (because that would be what the driver expected).

If on the other hand you still have traditional BIOS present (or at least the UEFI CSM enabled), you can still run old 16-bit software. Hardware support will be limited, though, as all has to be provided by the BIOS, and BIOS manufacturers might cut down on broad support and only support a limited number of USB devices and also only a certain amount of SATA (or even NVMe) devices.


As CPUs and PCs have evolved, CPU manufacturers have been committed to maintaining backwards compatibility with previous instruction sets and software. You will still find some instructions on modern x86-64 CPUs that were introduced on the Intel 8086 (from the late 1970s).

The answer to your question is yes, modern x86-64 PCs can technically run 16-bit operating systems. As a matter of fact, here's a link to a video by popular YouTuber LGR showing him installing MS-DOS 6.2 on his new gaming PC.

There are some obvious limitations to doing something like this. In DOS, you won't be able to access more than 640K of RAM. Similarly, if you run a 32-bit OS on 64-bit hardware (or 32-bit hardware, for that matter), the programs you run will be limited to using 4GB of RAM.

All of that being said, 64-bit operating systems cannot natively run 16-bit software like they can 32-bit software. A strange quirk, but that's how the computer chip cookie has crumbled.


Yes. Modern x86-64 CPUs are still fully backward-compatible back to even the first generation (8086)

Full backward compatibility is particularly important in computer instruction set architectures, one of the most successful being the x86 family of microprocessors. Their full backward compatibility spans back to the 16-bit Intel 8086/8088 processors introduced in 1978. (The 8086/8088, in turn, were designed with easy machine-translatability of programs written for its predecessor in mind, although they were not instruction-set compatible with the 8-bit Intel 8080 processor as of 1974.

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

It even starts up from real mode which is the mode that DOS runs on. After starting up the boot loader or kernel will switch to 32 or 64-bit mode as it wishes

x86 processors that support protected mode boot into real mode for backward compatibility with the older 8086 class of processors. Upon power-on (a.k.a. booting), the processor initializes in real mode, and then begins executing instructions. Operating system boot code, which might be stored in ROM, may place the processor into the protected mode to enable paging and other features. The instruction set in protected mode is similar to that used in real mode.

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

So it's definitely possible to install all DOS versions in all x86 CPUs and suffer from all DOS limitations such as the addressing mode or the number of address lines. Windows 3.x is in fact just a GUI app running on top of DOS (although in a different 16-bit mode), so you'll also be able to run it on modern machines


However one major difference in the previous modes and 64-bit mode (A.K.A long mode) is that once the CPU switches to long mode, it can't transition back to the virtual-8086 mode so you can't run 16-bit DOS apps inside 64-bit Windows. For those you have to run on the bare-metal machine (so running it in a bare VM would also work)

See Is it possible to run 16-bit code in an operating system that supports Intel IA-32e mode?


That said, although the CPU supports the full 16-bit instruction set, booting up the system may be difficult due to the lack of modern hardware support as others have said