Which Assembly Language to Learn [closed]-Collection of common programming errors
It depends on what you want to learn. CIL is the assembly language for a theoretical machine called the CLR, which is implemented in software. The CIL code is then compiled by a just-in-time compiler into x86 assembly or 64bit intel assembly.
If you are primarily programming in Visual Studio i would recommend learning CIL first, for these reasons:
1) CIL is much simpler. x86 assembly has evolved since the 1970s and it really shows. The number of instructions is huge and you will have to learn irrelevant technical details just to get started.
2) It will be easier to write well-structured programs. If you later decide to learn x86 assembly, hopefully you will take those habits with you.
3) CIL will be more useful if you ever want to performance tune your .NET-programs on a low level, since this is what they are compiled to. This is the last place you should be optimizing though.
Reasons for learning x86/x64:
1) It is an assembly language for real hardware. This means that what you learn will be “the real thing”. You will also learn a lot about how the actual hardware works. This doesn’t mean that it might not be easier to learn a simpler language first though.
2) The platform has registers, which is a feature you won’t learn about with CIL.
3) The platform doesn’t have object oriented features built in, which means that you will have to learn how to implement these yourself. This is something that you can also learn about through C++.
All in all, I would recommend learning a simple language like CIL, JVM assembly or LC-3 assembly, as suggested by Daniel Wolfe. If you also want to learn x86 assembly you can do always do that afterwards. Learning both in the correct order is probably easier than just learning x86 assembly on its own.