Recently I've been reading some SO archives and encountered statements against the x86 architecture.
Why do we need different CPU architecture for server & mini/mainframe & mixed-core? says
"PC architecture is a mess, any OS developer would tell you that."
Is learning Assembly Language worth the effort? (archived) says
"Realize that the x86 architecture is horrible at best"
Any easy way to learn x86 assembler? says
"Most colleges teach assembly on something like MIPS because it's much simpler to understand, x86 assembly is really ugly"
and many more comments like
I tried searching but didn't find any reasons. I don't find x86 bad probably because this is the only architecture I'm familiar with.
Can someone kindly give me reasons for considering x86 ugly/bad/inferior compared to others.
Couple of possible reasons for it:
IN
and OUT
)x86 assembly code is complicated because x86 is a complicated architecture with many features. An instruction listing for a typical MIPS machine fits on a single letter sized piece of paper. The equivalent listing for x86 fills several pages, and the instructions just do more, so you often need a bigger explanation of what they do than a listing can provide. For example, the MOVSB
instruction needs a relatively large block of C code to describe what it does:
if (DF==0)
*(byte*)DI++ = *(byte*)SI++;
else
*(byte*)DI-- = *(byte*)SI--;
That's a single instruction doing a load, a store, and two adds or subtracts (controlled by a flag input), each of which would be separate instructions on a RISC machine.
While MIPS (and similar architectures) simplicity doesn't necessarily make them superior, for teaching an introduction to assembler class it makes sense to start with a simpler ISA. Some assembly classes teach an ultra-simplified subset of x86 called y86, which is simplified beyond the point of not being useful for real use (e.g. no shift instructions), or some teach just the basic x86 instructions.
EDIT: This is not supposed to be a bash the x86! party. I had little choice but to do some amount of bashing given the way the question's worded. But with the exception of (1), all these things were done for good reasons (see comments). Intel designers aren't stupid -- they wanted to achieve some things with their architecture, and these are some of the taxes they had to pay to make those things a reality.