What is x86 vs x64

Status
Not open for further replies.
x64 means 64-bit architecture
x86 means 32-bit architecture

The reason the 32-bit architecture isn't called "x32" is because it harks back from the old days of the Intel "xxx86" processors (8086 / 80286 / 80386), and the "x86" moniker distinguished earlier versions of Windows that could run on the "xxx86" Intel CPUs from those that could run on RISC-based MIPS and Alpha processors.
 


x86 and x64 are shorthand for two architectural interfaces used by Intel and AMD.

x86 , also called IA-32, refers to two things.

First, it refers to an entire family of microprocessors originally produced by Intel. x86 microprocessors have incredible amounts of built-in backwards compatibility. On powerup, a brand new i7-5960X from 2014 behaves as nothing more than a really fast 8086 from 1979.

Second, and somewhat inaccurately, it refers to programs that are compiled to run in the 32-bit protected mode of operation using the 32-bit version of the x86 instruction set. These programs should be referred to as IA-32 to differentiate them from programs written for the 16-bit real mode (8086 mode) or 16-bit protected mode (80286 mode). Within protected mode there are several instruction set extensions which can be used to add functionality or improve performance on microprocessors that support those extensions. Ergo, not all x86 programs will run on all x86 microprocessors but many compilers can generate multiple code paths for various levels of instruction set extension support and determine this at runtime. In the FOSS world it's common to see i386/i686/sse2/sse3 to determine the minimum set of instruction set extensions required to run the binary. For example, an i386 program will run on an 80386 microprocessor or newer, an i686 program requires a Pentium Pro or newer, and an SSE2 program requires a Pentium 4 or newer.

x64, also called Intel 64 / AMD64 (but not IA-64, that is something entirely different) refers to programs that are compiled to run in the 64-bit long mode of operation using the 64-bit version of the x86 instruction set. Certain instructions that were part of instruction set extensions in the x86 world are adopted as core instructions in the x64 world. However, the x64 standard was introduced nearly a decade ago and since then many new instruction set extensions have been added that were not mandated by Intel 64 / AMD64 (SSE4.x, AVX, FMA, RDRAND, AES-NI, just to name a few) so the problem of a program having to either be compiled with particular instruction set extensions in mind or determine code paths at runtime has returned.

As far as utility is concerned, x64 provides programs with a lot more resources to work with (there are twice as many general purpose registers and twice as many SIMD registers).

It's a lot more secure. No-Execute bit and data execution prevention support is mandatory.

It's much more flexible. Periodic routines that were previously performed or supported in hardware such as task switching are shifted entirely to software.

The size of the virtual address space is increased from 32-bits to 48-bits. Contrary to popular belief, the size of the physical address space remains more or less unchanged, and is a function of the microprocessor itself. The physical address space has supported more than 32-bits since 1995 (with a practical maximum of 36 bits). Most Intel x86 microprocessors use 39-41 bit physical address spaces with the architectural maximum being 52 bits.

It allows for native 64-bit arithmetic. In a 32-bit environment a 64-bit operation would have to be decomposed into a sequence of 32-bit operations.

Okay that's probably more than you wanted to know.

TL'DR: x64 = good
 
Status
Not open for further replies.