Surely you have often met with the term x86 or "Intel compatible processor" (or "IBM PC compatible" — but this is against the computer). Sometimes also found the term "Pentium compatible" (why the Pentium — you'll see for yourself later). What all these names hides really? At the moment the most correct from the point of view of the author is the following simple formulation: the modern x86 processor is a processor that is able to correctly execute the machine code of the architecture of the IA32 architecture (32-bit Intel processors). In the first approximation, is code, executable by the processor i80386 (popularly known as the "386"), finally, a basic set of commands IA32 formed with the output of the processor of Intel of Pentium Pro. What does the "core set" and what else? To begin to answer the first part of the question. "Main" in this case means that using only this set of commands can be written in any program, which in General can be written for the processor architecture x86 (IA32 or, if you prefer).
In addition, the IA32 architecture, there are "official" extension (additional sets of commands) from the developer of the architecture itself, Intel: MMX, SSE, SSE2 and SSE3. There are also "unofficial" (not from Intel) enhanced sets of commands: EMMX, 3DNow! and Extended 3DNow! — they developed AMD. However, "formality" and "informality" in this case is a relative term — de facto, it all comes down to the fact that some extensions of the command set the Intel as the developer of the original set recognize, and some don't, the developers of the software use what they are best suited. In relation to extended instruction sets, there is one simple rule of etiquette: before you can use them, the program should check whether their CPU. Sometimes deviations from this rule occur (and can lead to incorrect operation of programs), but objectively it is a problem of incorrectly written software, not the CPU.
What is additional sets of commands? In the first place — to improve performance when performing certain operations. One team from an additional set, as a rule, performs the action for which you would need a small program consisting of commands of the basic set. Again, as a rule, one team runs the CPU faster than its replacement sequence. However, in 99% of cases, nothing that can't be done using basic commands, using commands from the additional set can be done.
Thus, the above-mentioned test program to support additional sets of commands by the processor has to perform a very simple function: if, for example, the processor supports SSE so we'll count it quickly and using commands from the set of SSE. If not — we assume slower with the commands from the core set. Correctly-written program is obliged to do so. However, almost no one checks the processor supports MMX, since all CPU released in the last 5 years, this set is guaranteed to support. For reference, here is the plaque which summarizes information about support for different extended instruction sets of different desktop (designed for desktop) processors.