The x86 instruction set is kludges built upon kludges, and you're never going to understand it fully if you try to jump in at the end without seeing how it developed.
The x86 instruction set is kludges built upon kludges, and you're never going to understand it fully if you try to jump in at the end without seeing how it developed.
I have only good things to say about MIPS as a great place to learn ASM. The thing is, the better you understand how processors and pipelines work, the better you'll understand why instruction sets are the way they are.
If you want to learn a very bad assembler (for programmers) but one that's very to understand (for microcontroller designers), there's always 68HC11. How do two 8-bit registers and two 16-bit registers make you feel? (Probably like going to/from memory quite a bit :)
486 and Pentium didn't really do much instruction set wise (sure there were changes), then the next big change is the 64 bit systems.
edit: What do you mean kludges ? It's the most orthogonal instruction set known to man!
You used to need them (badly), especially on the smaller CPUs because otherwise you were severely limited in memory.
Check out the 'mixed models' that were pretty common usage in the 80's.
There were lots of them:
code data model name
under 64KB under 64KB Small (-ms) or Tiny (-mt)
over 64KB under 64KB Medium (-mm)
under 64KB over 64KB Compact (-mc)
over 64KB over 64KB Large (-ml)
I was so happy when I finally got out of 'model hell' and could use 'flat' mode using DJGPP. Finally C programming without the headaches.In other words, if you really really insisted you could mess around with giving the segment registers different base values and / or lengths but you'd probably end up regretting it.
Thanks for your help cperciva.