Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Why can't a 64-bit OS run on a 32-bit CPU, but a 32-bit OS works on a 64 bit CPU?

share|improve this question

migrated from Feb 4 '10 at 20:11

This question came from our site for professional and enthusiast programmers.

Why can't you run software for CPU type "A" on a CPU of type "B"? Because A != B. – John Saunders Feb 4 '10 at 20:08
simple answer: Because it is a PITA. :) – Tony Feb 5 '10 at 4:05
Of course you can, all you have to do is remove the 32-bit CPU and put a 64-bit CPU in. – Hello71 Aug 19 '10 at 23:08
up vote 17 down vote accepted

I'm assuming we're talking about standard PCs here.

Most 64-bit processors - especially the ones from Intel and AMD - have the full 32-bit instruction set as well as the 64-bit extensions, so they can run 32-bit software.

32-bit processers don't have a 64-bit instruction set though. Many were made even before the 64-bit instruction set was defined, so it's not possible they could implement it correctly, even emulated. They just don't understand that language.

share|improve this answer
It all at the base level comes down to registers. 64 bit processors can move stuff 64 bits at a time. 32 bit processors don't have 64 bit registers. – Fiasco Labs Dec 26 '11 at 21:38

64 bit CPUs support any word length up to 64 bits, so in theory, any 8, 16, 32 or 64 bit OS will run on them. 32 bit CPUs don't support 64 bit word length, so only <=32 bit software (including 32 bit OSs) can be run on them.

share|improve this answer
+1: IMO, the only 'right' answer in this bunch. :) – Ƭᴇcʜιᴇ007 Feb 4 '10 at 22:35

Why can't you run Windows on your old Atari? Incompatible hardware and processors.

x86-64 should be considered completely different from x86 because it is vastly different from the kernel and machine code point of view. The only thing they really share in common is the bootstrapping code(from the 16bit startup, to get to 64bit you must [usually] go to 32bit first) and the 32-bit compatability mode and the common CPU extensions like SSE. Other than that, the processors are really completely different as to how applications are made in machine code.

share|improve this answer
You're vastly overstating the case here. At least 99% of the source code in Windows, not excepting the kernel mode components, is the same between the x86, x64, ia64, and ARM. And even in an x64 program, the x64 architecture is largely a superset of x86. e.g. if you want to copy EAX to EBX, that's MOV EBX EAX in both x86 and x64; even the machine coding of that instruction is the same between those two. – Jamie Hanrahan Dec 21 '14 at 23:22
@JamieHanrahan maybe, except for stuff like PIC, anything involving pointers, etc etc... you can't compile a program for x86 and it's binary "just work" for x64, even if the machine code itself is similar, there are semantic differences – Earlz Dec 22 '14 at 15:56
Nevertheless, it still isn't "vastly different". – Jamie Hanrahan Dec 22 '14 at 17:20

Its because the processor in the case of a 32bit machine cant handle 64bit processing, but a 64bit processor is more than capable of handling 32bits as it can deal with 64bits at a time.

share|improve this answer

A 64bit OS is programmed with 64bit registers in mind. A 32bit CPU only has 32bit registers.

There are lots of other reasons for this as well, besides just registers.

share|improve this answer

A 64 bit OS relies on processor features of a 64 bit processor.

You can't tell a 32 bit process to perform an operation on the 64 bit register if it doesn't exist.

Whereas 64 bit processors have everything the 32 bit one has, so it can be done.

share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .