You need assembler to run C. Machine code to run Assembler. Micro code to run machine code. (Micro code does the clever caching bits and pieces and pipelining or whatever... architestures change? Well, that is what they used to do.)You need hardware to interpret the microcode.
To learn anything you need to know some basic concepts.
I got into programming because an intelligence test defined some instructions and asked you do solve problems using them. I did not know what a computer was... many years ago now. When I did read about computers I realised that part of the intelligence test was similar to programming.
So I gave it a go.
I quickly learned that all assemblers were not equal. Some helped and some hindered.
Try doing spherical trig in fixed point math without floating point and you will understand what I mean. Use KDF9 and you will be spoiled for life.
Some instructions are guarded and cannot be used outside of specific hardware modes.
A mainframe OS listing will look very different other assembler because of the way it is built. (Lots of macros, conditional assembly and esoteric instructions for dumping and loading states.)
Knowing the why of what you are doing, and then knowing the how options always helps. You filter out so much noise and nonsense.
Many books out there are almost useless.
No one learning strategy works for all cases. I love really good examples. Reading other people's code always give you a good start when they know what they are doing.
Love programming, hate having to learn frameworks, sigh...









































