Assembly = machine code
Some people keep harping on about how assembly language is different from the numeric codes that the CPU understands.
This (whilst true) completely misses the point.
As far as translation goes assembly language and the numeric (binary, hex whatever) are one and the same thing.
Grok it or drop it
If you grok assembly you know how an actual computer works.
grokking assembly involves:
- Learning the instructions and what they mean (duh).
- Understanding what the instruction do, what they don't do and all their side-effects.
- Learning how a CPU processes the instructions
- How the pipeline works.
- What
multiscalar
means - What a CPU core is.
- How the cache works.
- Understanding how to cycle count
- learning the teachings of Agner Fog
- Understanding how compilers generate code and how they fail at times.
- Optimizing well defined and very specific problems.
If you grok assembly you well have a nearly complete picture of how the CPU connected to your keyboard works.
You need to use this knowledge like a brain surgeon uses his scalpel.
Don't need no stinking abstractions
Unless you grok assembly (and thus the CPU on the operating table) you will never be free of the clutches of the abstractions of the RAM machine (or god forbid the Turing machine the horror).
L33t Hax0r 5k1llz
Assembly also helps to you understand how the 133thax0r manages to defeat the protection schemes. (Q: why does ASLR not work? because mov rax,fs:[28h]
breaks it).
The 0.1%
It is not the knowledge of assembly that matters, but knowledge of the machine your working on that matters.
If you want to know the machine, you must understand it and that means speaking the language of the machine.
If you don't then you're stuck with the abstraction.
That's science and that's good, but that's never the complete picture.
It's like learning to speak Xhosa
Unless you aim for guru level, best stick with what you know, those clicks will complicate your life.
Because it's fun.