x86 is an architecture that goes way back, all the way back to Intel's 16-bit processors. They named their processors things like 8086, and in later days 80186, 80286, 80386, 80486, 80586, 80686 and so on. Because of this, the 'x' in x86 is just a wildcard.
As far as I am aware, x64 is a lazy way of writing x86-64 (correct me if I'm wrong). x86-64 processors are those which follow the internal architecure of the x86 processors, but are 64 bit. That, or Intel have named their 64-bit processors to end in '64'.
oh i thought that the x-- was the bit processing speed but its the architecture i guess. thanks!
These are names for the instruction set (also called the architecture), they are technically not supposed to be named after the 32 vs. 64 bit thing.
I don't know what you mean by "bit processing speed". The 32bit versus 64bit refers to the native size of the registers on the CPU. The registers are a small number of memory slots that are directly on the CPU chip and from which every operation takes its input values and puts its output value.
So, a 64bit CPU means that the preferred size for numbers that the CPU will operate on is 64bit (8 bytes), which includes integers, pointers, and floating-point numbers. Conversely, a 32bit CPU prefers 32bit numbers.
In earlier times, Intel was just putting out CPU series with an assigned model number and a certain instruction set that it supported. Then, they needed to fix it in time and standardize it as PCs became more of an important market. The main result of that is the 80386 instruction set, usually referred to as either i386 or IA-32. That is an instruction set that requires 32bit registers (and thus, supports operations on 32bit numbers), but also supports 16bit operations for backward compatibility. Except for some isoteric platforms, this instruction set is supported by every CPU model since the mid 90s.
Generally, the term x86 refers to the family of instruction sets from Intel, but in practice, this really refers to architectures that support at least i386 (IA-32).
The term x86-64 refers, of course, to an instruction set that supports all the i386 operations but also supports 64bit operations. Now, the 64bit instruction set does not come from Intel, it comes from AMD (who were earlier adopters of 64bit technology, and set the standard), and it is formerly called AMD64. But AMD people designed the instruction set as an extension to x86 instruction sets to retain compatibility, and Intel quickly gave up on making their own 64bit instruction set and adopted that one. Later, it was renamed to x86-64 to make it clear that this was a x86-family instruction set. This means that programs compiled for the i386 (32bit) instruction set will still run just fine on a 64bit architecture, it just won't be as efficient as it could be if the program would have been compiled to take advantage of the 64bit operations by targeting the full x86-64 instruction set.
In modern parlance today, we generally talk about i386 and x86-64 (or just x64) to distinguish between a 32bit platform and a 64bit platform. But I guess 32bit platforms are becoming an endangered species at this point.
Now, as for why the number 86 ended up at the end of each of Intel's CPU model numbers in the early days, I have no clue. I believe they were just giving model numbers more or less sequentially (like version numbers), and 86 just happened to be the point at which they stopped changing the instruction set and starting to enforce backward compatibility and eventually standardization, which is a big part of why this line of processors (and Intel as a whole) succeeded so well.
Great post, Mike. I have a follow-up question. Do you know why you sometimes see i686 as the 32-bit architecture instead of i386? For example, some linux downloads provide i686 (32-bit) and amd64 (64-bit) downloads.
i686 is the short name for the 80686 processor while i386 is the shorthand name for the 80386 processor. They share the same instruction set and are both part of the IA-32 Family but their architecture varies (as that last link highlights). This means that the i686 software was compiled with i686 processors as its target.
i386 is used to mean 32-bit simply because it was the first of the IA-32 family to impliment protected mode (also referred to as PMode), which (in a nutshell) allows larger amounts of memory to be accessed by kernel code, and also allows easier management of memory. Protected mode allows different pieces of code to operate at different rings which have customised access rights to memory and direct I/O, as well as a cut-down instruction set available to non-kernel code. Thus the i386 was the first 'truely useful' IA-32 processor, some may say, so it became the commonplace way of describing 32-bit processors.