2

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

migrated from stackoverflow.com Feb 4 '10 at 20:11

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

  • 9
    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
  • 1
    simple answer: Because it is a PITA. :) – Tony Feb 5 '10 at 4:05
  • 2
    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
19

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.

  • 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
9

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.

  • +1: IMO, the only 'right' answer in this bunch. :) – Ƭᴇcʜιᴇ007 Feb 4 '10 at 22:35
  • 1
    Actually, this answer is at least somehow wrong on several levels. The main way that it's wrong is this -- typical 32-bit CPUs operate on 64-bit words just fine. The original Pentium 4 had plenty of instructions that operate on 64-bit words. It has little to do with the word length and everything to do with the instruction set. – David Schwartz Feb 23 '17 at 20:01
5

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.

  • 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
  • Actually, yes, you can do exactly that. You do that every time you run a 32-bit program on 64-bit Windows. – Jamie Hanrahan Feb 23 '17 at 19:18
2

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.

2

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.

2

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.